diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b8403f505..000000000 --- a/.gitignore +++ /dev/null @@ -1,34 +0,0 @@ -# Test binary, build with `go test -c` -*.test - -# Output of the go coverage tool, specifically when used with LiteIDE -*.out - -# Coverage artifacts -coverage.zip -coverage.txt -cover.json -cover-summary -index.html - -# Binaries -/cmd/flow/flow* - -.DS_Store - -# Ignore flow json config -flow.json -flow*.json -!tests/flow.json - -# IDE related files -.idea -.vscode -git - -# Ignore built CLI -main -*.pkey - -# Local development file generation folder -imports \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100644 index d66a23e3d..000000000 --- a/.golangci.yml +++ /dev/null @@ -1,14 +0,0 @@ -linters: - disable-all: true - enable: - - govet - - errcheck - - varcheck - - ineffassign - - typecheck - - misspell - - goimports -linters-settings: - goimports: - # put imports beginning with prefix after 3rd-party package - local-prefixes: github.com/onflow/flow-cli diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/flow-cli.iml b/.idea/flow-cli.iml new file mode 100644 index 000000000..5e764c4f0 --- /dev/null +++ b/.idea/flow-cli.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..92cb55c47 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 000000000..683a68c19 --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..70ed6d75c --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "go.formatTool": "goimports", + "go.formatFlags": ["-local", "github.com/onflow/flow-cli"], + "editor.formatOnSave": true +} diff --git a/flowkit/CHANGELOG.md b/CHANGELOG.md similarity index 100% rename from flowkit/CHANGELOG.md rename to CHANGELOG.md diff --git a/CODEOWNERS b/CODEOWNERS deleted file mode 100644 index 1e9736a37..000000000 --- a/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @Kay-Zee @janezpodhostnik @sideninja @chasefleming @nvdtf @bluesign @bjartek @jribbink @ianthpun \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 467d696b6..000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,127 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or - advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email - address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at . -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, available at -https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see the FAQ at -https://www.contributor-covenant.org/faq. Translations are available at -https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index ce3a5da7c..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,428 +0,0 @@ -# Contributing to the Flow CLI - -The following is a set of guidelines for contributing to the Flow CLI. -These are mostly guidelines, not rules. -Use your best judgment, and feel free to propose changes to this document in a pull request. - -## Table Of Contents - -[Getting Started](#getting-started) - -[How Can I Contribute?](#how-can-i-contribute) - -- [Reporting Bugs](#reporting-bugs) -- [Suggesting Enhancements](#suggesting-enhancements) -- [Your First Code Contribution](#your-first-code-contribution) -- [Pull Requests](#pull-requests) - -[Styleguides](#styleguides) - -- [Git Commit Messages](#git-commit-messages) -- [Go Styleguide](#go-styleguide) - -[Additional Notes](#additional-notes) - -## Getting Started - -Install the necessary dependencies: - -``` -go get ./... -``` - -Generate mocks: -``` -go generate -``` - -To run the repo: - -``` -go run cmd/flow/main.go -``` - -## How Can I Contribute? - -### Reporting Bugs - -#### Before Submitting A Bug Report - -- **Search existing issues** to see if the problem has already been reported. - If it has **and the issue is still open**, add a comment to the existing issue instead of opening a new one. - -#### How Do I Submit A (Good) Bug Report? - -Explain the problem and include additional details to help maintainers reproduce the problem: - -- **Use a clear and descriptive title** for the issue to identify the problem. -- **Describe the exact steps which reproduce the problem** in as many details as possible. - When listing steps, **don't just say what you did, but explain how you did it**. -- **Provide specific examples to demonstrate the steps**. - Include links to files or GitHub projects, or copy/pasteable snippets, which you use in those examples. - If you're providing snippets in the issue, - use [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -- **Describe the behavior you observed after following the steps** and point out what exactly is the problem with that behavior. -- **Explain which behavior you expected to see instead and why.** -- **Include error messages and stack traces** which show the output / crash and clearly demonstrate the problem. - -Provide more context by answering these questions: - -- **Can you reliably reproduce the issue?** If not, provide details about how often the problem happens - and under which conditions it normally happens. - -Include details about your configuration and environment: - -- **What is the version of the CLI you're using**? -- **What's the name and version of the Operating System you're using**? - -### Suggesting Enhancements - -#### Before Submitting An Enhancement Suggestion - -- **Perform a cursory search** to see if the enhancement has already been suggested. - If it has, add a comment to the existing issue instead of opening a new one. - -#### How Do I Submit A (Good) Enhancement Suggestion? - -Enhancement suggestions are tracked as [GitHub issues](https://guides.github.com/features/issues/). -Create an issue and provide the following information: - -- **Use a clear and descriptive title** for the issue to identify the suggestion. -- **Provide a step-by-step description of the suggested enhancement** in as many details as possible. -- **Provide specific examples to demonstrate the steps**. - Include copy/pasteable snippets which you use in those examples, - as [Markdown code blocks](https://help.github.com/articles/markdown-basics/#multiple-lines). -- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. -- **Explain why this enhancement would be useful** to CLI users. - -### Your First Code Contribution - -Unsure where to begin contributing to the Flow CLI? -You can start by looking through these `good-first-issue` and `help-wanted` issues: - -- [Good first issues](https://github.com/onflow/flow-cli/labels/good%20first%20issue): - issues which should only require a few lines of code, and a test or two. -- [Help wanted issues](https://github.com/onflow/flow-cli/labels/help%20wanted): - issues which should be a bit more involved than `good-first-issue` issues. - -Both issue lists are sorted by total number of comments. -While not perfect, number of comments is a reasonable proxy for impact a given change will have. - -### Pull Requests - -The process described here has several goals: - -- Maintain code quality -- Fix problems that are important to users -- Engage the community in working toward the best possible UX -- Enable a sustainable system for the CLI's maintainers to review contributions - -Please follow the [styleguides](#styleguides) to have your contribution considered by the maintainers. -Reviewer(s) may ask you to complete additional design work, tests, -or other changes before your pull request can be ultimately accepted. - -## Styleguides - -Before contributing, make sure to examine the project to get familiar with the patterns and style already being used. - -### Git Commit Messages - -- Use the present tense ("Add feature" not "Added feature") -- Use the imperative mood ("Move cursor to..." not "Moves cursor to...") -- Limit the first line to 72 characters or less -- Reference issues and pull requests liberally after the first line - -### Go Styleguide - -The majority of this project is written Go. - -We try to follow the coding guidelines from the Go community. - -- Code should be formatted using `gofmt` -- Code should pass the linter: `make lint` -- Code should follow the guidelines covered in - [Effective Go](http://golang.org/doc/effective_go.html) - and [Go Code Review Comments](https://github.com/golang/go/wiki/CodeReviewComments) -- Code should be commented -- Code should pass all tests: `make test` - -## Releasing - -Releasing is automated by Github actions. Release action is triggered by creating a release on Github and publishing it. - -You can also release manually although this is not recommended: -- Tag a new release and push it -- Build the binaries: `make versioned-binaries` -- Test built binaries locally -- Upload the binaries: `make publish` -- Update the Homebrew formula: e.g. `brew bump-formula-pr flow-cli --version=0.12.3` - -To make the new version the default version that is installed - -- Change `version.txt` and commit it - -## Adding a scaffold -You can add your own scaffold by creating a GitHub repository containing the scaffold content and then making a PR -to update the `scaffolds.json` in the Flow CLI repository. You need to add an entry to the list -with the bellow content. - -```json -{ - "name": "name of the scaffold", - "repo": "HTTP URL to the repository containing the scaffold", - "commit": "Hash of the (latest) commit in your scaffold repository", - "branch": "scaffold repository branch", - "description": "user friendly description of the scaffold (what it contains, why it is used...)" -} -``` - - -# CLI Guidelines -This is a design guideline used for the development of the Flow CLI. The purpose of this guideline is to achieve consistency across new features and allow composability of commands that build the fundamentals of great CLI design. - -> Whatever software you’re building, you can be absolutely certain that people will -> use it in ways you didn’t anticipate. Your software will become a part in a larger system -> — your only choice is over whether it will be a well-behaved part. - [Clig](https://clig.dev/) - - -# Human Interaction - -Our interaction with the CLI is done by executing CLI commands and passing arguments -and flags which need to be consistent. Consistency will allow interactions to -be predictable and will with time feel natural even without resorting to reading instructions. - -## Commands -Be consistent across commands and subcommands. In case we define a subcommand we -should use `noun verb` pattern. **Don’t have ambiguous or similarly-named commands.** -Naming and language should be the same as used in the rest of Flow's documentation. -Use only lowercase letters, and dashes if you really need to. Keep it short. -Users will be typing it all the time. - -``` -flow accounts -``` - -## Flags -Flags are **named parameters**, denoted with either a hyphen, and a -single-letter name (`-r`) or a double hyphen and a multiple-letter -name (`--recursive`). The longer version is preferred for better readability -and simpler learning experience in the beginning but after a while users will -probably start using the shorter version. - -Every flag should have a shorter version and they should be both presented in the help. -Every flag that can have a default value should have a default value -so users don’t have to specify all of them when not needed. - -Support flags following a value delimited by a space or -equal (=) sign (ex: `--username test` or `--username=test`) - -``` -flow accounts get --filter "address" -``` - -Use common naming for default falgs such as: - -`--log`: Logging level. - -`--output`: Output format (JSON, inline etc...). - -`-h, --help`: Help. This should only mean help. See the help section. - -`--version`: Version. - - -## Arguments -Arguments, or args, are positional parameters to a command. -There should be as few arguments as possible, because it is hard for users to remember the sequence of arguments. - -Because they are relying on position, flags should be used where more than one argument would be required. - -Arguments should be one word verbs following general naming guideline. -**Prefer flags to arguments**. - -Use an argument for the value that command requires in order to run. - -``` -flow accounts get
-``` - -## Robustness -CLI should feel robust. Long operation should also provide output as they are processing. -**Responsivness is more important than speed.** - -Warn before you make a non-additive change. Eventually, you’ll find that you can’t -avoid breaking an interface. Before you do, forewarn your users in the program itself: -when they pass the flag you’re looking to deprecate, tell them it’s going to change soon. -Make sure there’s a way they can modify their usage today to make it -future-proof, and tell them how to do it. - -# Computer Interaction - -The CLI will respond to execution of commands by providing some output. -Output should with the same reasons as input be consistent and predictable, -even further it should follow some industry standards and thus allow great strength -of CLI use: composability. Output should be served in the right dosage. We shouldn't -output lines and lines of data because we will shadow the important part the same -way we shouldn't let the CLI command run in background not providing any output for -minutes as it is working because the user will start to doubt if the command is broken. -It's important to get this balance right. - -## Interaction -Commands must be stateless and idempotent, meaning they can be run without relying on external state. -If we have some external state, like the configuration, each command must include an option to -define it on the fly, but it must also work without it by first relying on the externally -saved state in the configuration, and if not found, relying on a default value. -When relying on a default value results in an error, there should be an explanation for the user that a configuration should be created. - -We try to use default values first to get that “works like magic” feeling. - -Never require a prompt for user input. Always offer a flag to provide that input. -However, if a user doesn't provide required input we can offer a prompt as an alternative. - - -## Output - -“Expect the output of every program to become the input to another, as yet unknown, program.” — Doug McIlroy - -Output should use **stdout**. Output of commands should be presented in a clear formatted way for -users to easily scan it, but it must also be compatible with `grep` command often used in -command chaining. Output should also be possible in json by using `--output json` flag. - -Default command response should be to the stdout and not saved to a file. Anytime we want -the output to be saved to a file we should explicitly specify so by using `--save filename.txt` -flag and providing the path. - -Result output should include only information that is commonly used and relevant, -don't use too much of user screen drowning what’s truly important, -instead provide a way to include that data when the user requests by having include, exclude flags. - -``` -Address 179b6b1cb6755e31 -Balance 0 -Keys 2 - -Key 0 Public Key c8a2a318b9099cc6c872a0ec3dcd9f59d17837e4ffd6cd8a1f913ddfa769559605e1ad6ad603ebb511f5a6c8125f863abc2e9c600216edaa07104a0fe320dba7 - Weight 1000 - Signature Algorithm ECDSA_P256 - Hash Algorithm SHA3_256 - -Code - pub contract Foo { - pub var bar: String - - init() { - self.bar = "Hello, World!" - } - } -``` - -``` -{"Address":"179b6b1cb6755e31","Balance":0,"Code":"CnB1YiBjb250cmFjdCBGb28gewoJcHViIHZhciBiYXI6IFN0cmluZwoKCWluaXQoKSB7CgkJc2VsZi5iYXIgPSAiSGVsbG8sIFdvcmxkISIKCX0KfQo=","Keys":[{"Index":0,"PublicKey":{},"SigAlgo":2,"HashAlgo":3,"Weight":1000,"SequenceNumber":0,"Revoked":false}],"Contracts":null} -``` - -## Error -Error should be human-readable, avoid printing out stack trace. It should give some -pointers as to what could have gone wrong and how to fix it. -Maybe try involving an example. However allow `--log debug` flag for complete error info -with stack. Error messages should be sent to `stderr` - -``` -❌ Error while dialing dial tcp 127.0.0.1:3569: connect: connection refused" -🙏 Make sure your emulator is running or connection address is correct. -``` - -## Saving -Saving output to files should be optional and never a default action unless it is -clear from the command name the output will be saved and that is -required for later use (example: `flow init`). Output can be piped in files, and -our CLI should resort to that for default saving. If there is a specific format -that needs to be saved or converted to we should be able to display that format as -well hence again allowing us to pipe it to files. - -## Help -Main help screen must contain a list of all commands with their own description, -it must also include examples for commands. Help screen should include link to the documentation website. - -Commands should have a description that is not too long (less than 100 characters). -Help should be outputed if command is ran without any arguments. Help outline should be: - -```Description: - - -Usage: - - -Examples: - An optional section of example(s) on how to run the command. - -Commands: - - - - - … - -Flags: - -- - - -- - - … -``` - -## Progress -Show progress for longer running commands visually. Visual feedback on longer -running commands is important so users don’t get confused if command is running -or the CLI is hang up resulting in user quitting. - -``` -Loading 0x1fd892083b3e2a4c...⠼ -``` - -## Feedback -Commands should provide feedback if there is no result to be presented. -If a command completes an operation that has no result to be shown it -should write out that command was executed. This is meant to assure the user -of the completion of the command. -If user is executing a destructive command they should be asked for approval -but this command should allow passing confirmation with a flag `--yes`. - -``` -💾 result saved to: account.txt -``` - -## Exit -CLI should return zero status unless it is shut down because of an error. -This will allow chaining of commands and interfacing with other cli. If a -command is long running then provide description how to exit it (e.g. "Press Ctrl+C to stop"). -``` -exit status 1 -``` - -## Colors -Base color should be white with yellow reserved for warnings and red for errors. -Blue color can be used to accent some commands but it shouldn’t be -used too much as it will confuse the user. - - -## Inspiration and Reference -https://clig.dev/ - -https://blog.developer.atlassian.com/10-design-principles-for-delightful-clis/ - -https://devcenter.heroku.com/articles/cli-style-guide - -https://eng.localytics.com/exploring-cli-best-practices/ - - - - - - - - - - -## Additional Notes - -Thank you for your interest in contributing to the Flow CLI! diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 57bc88a15..000000000 --- a/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/Makefile b/Makefile deleted file mode 100644 index 73e549e27..000000000 --- a/Makefile +++ /dev/null @@ -1,116 +0,0 @@ -# The short Git commit hash -SHORT_COMMIT := $(shell git rev-parse --short HEAD) -# The Git commit hash -COMMIT := $(shell git rev-parse HEAD) -# The tag of the current commit, otherwise empty -VERSION := $(shell git describe --tags --abbrev=0 --exact-match 2>/dev/null) -# Name of the cover profile -COVER_PROFILE := coverage.txt -# Disable go sum database lookup for private repos -GOPRIVATE := github.com/dapperlabs/* -# Ensure go bin path is in path (Especially for CI) -GOPATH ?= $(HOME)/go -PATH := $(PATH):$(GOPATH)/bin -# OS -UNAME := $(shell uname) - -MIXPANEL_PROJECT_TOKEN := 3fae49de272be1ceb8cf34119f747073 -ACCOUNT_TOKEN := lilico:sF60s3wughJBmNh2 - -BINARY ?= ./cmd/flow/flow - -.PHONY: binary -binary: $(BINARY) - -.PHONY: install-tools -install-tools: - cd ${GOPATH}; \ - mkdir -p ${GOPATH}; \ - GO111MODULE=on go install github.com/axw/gocov/gocov@latest; \ - GO111MODULE=on go install github.com/matm/gocov-html/cmd/gocov-html@latest; \ - GO111MODULE=on go install github.com/sanderhahn/gozip/cmd/gozip@latest; \ - GO111MODULE=on go install github.com/vektra/mockery/v2@v2.38.0; - -.PHONY: test -test: - GO111MODULE=on go test -coverprofile=$(COVER_PROFILE) $(if $(JSON_OUTPUT),-json,) ./... - cd flowkit; GO111MODULE=on go test -coverprofile=$(COVER_PROFILE) $(if $(JSON_OUTPUT),-json,) ./... - -.PHONY: test-e2e-emulator -test-e2e-emulator: - flow -f tests/flow.json emulator start - -.PHONY: coverage -coverage: -ifeq ($(COVER), true) - # file has to be called index.html - gocov convert $(COVER_PROFILE) > cover.json - ./cover-summary.sh - gocov-html cover.json > index.html - # coverage.zip will automatically be picked up by teamcity - gozip -c coverage.zip index.html -endif - -.PHONY: ci -ci: install-tools generate test coverage - -$(BINARY): - GO111MODULE=on go build \ - -trimpath \ - -ldflags \ - "-X github.com/onflow/flow-cli/build.commit=$(COMMIT) -X github.com/onflow/flow-cli/build.semver=$(VERSION) -X github.com/onflow/flow-cli/flowkit/util.MIXPANEL_PROJECT_TOKEN=${MIXPANEL_PROJECT_TOKEN} -X github.com/onflow/flow-cli/internal/accounts.accountToken=${ACCOUNT_TOKEN}"\ - -o $(BINARY) ./cmd/flow - -.PHONY: versioned-binaries -versioned-binaries: generate - $(MAKE) OS=linux ARCH=amd64 ARCHNAME=x86_64 versioned-binary - $(MAKE) OS=linux ARCH=arm64 versioned-binary - $(MAKE) OS=darwin ARCH=amd64 ARCHNAME=x86_64 versioned-binary - $(MAKE) OS=darwin ARCH=arm64 versioned-binary - $(MAKE) OS=windows ARCH=amd64 ARCHNAME=x86_64 versioned-binary - -.PHONY: versioned-binary -versioned-binary: - GOOS=$(OS) GOARCH=$(ARCH) $(MAKE) BINARY=./cmd/flow/flow-$(or ${ARCHNAME},${ARCHNAME},${ARCH})-$(OS)-$(VERSION) binary - -.PHONY: publish -publish: - gsutil -m cp cmd/flow/flow-*-$(VERSION) gs://flow-cli - -.PHONY: clean -clean: - rm ./cmd/flow/flow* - -.PHONY: install-linter -install-linter: - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b ${GOPATH}/bin v1.47.2 - -.PHONY: lint -lint: generate - golangci-lint run -v ./... - -.PHONY: fix-lint -fix-lint: - golangci-lint run -v --fix ./... - -.PHONY: check-headers -check-headers: - @./check-headers.sh - -.PHONY: check-schema -check-schema: - cd flowkit && go run ./cmd/flow-schema/flow-schema.go --verify=true ./schema.json - -.PHONY: check-tidy -check-tidy: - go mod tidy - cd flowkit; go mod tidy - -.PHONY: generate-schema -generate-schema: - cd flowkit && go run ./cmd/flow-schema/flow-schema.go ./schema.json - -.PHONY: generate -generate: install-tools - cd flowkit; \ - go generate ./... diff --git a/NOTICE b/NOTICE deleted file mode 100644 index 6b0b28ebd..000000000 --- a/NOTICE +++ /dev/null @@ -1,4 +0,0 @@ -Flow CLI -Copyright 2019 Dapper Labs, Inc. - -This product includes software developed at Dapper Labs, Inc. (https://www.dapperlabs.com/). diff --git a/README.md b/README.md index 7ad666453..dc8ed2f0a 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,16 @@ -
-

- - Logo - +## Flowkit Package Design +Flowkit is a core package used by the CLI commands. It features APIs for interacting with the Flow network +in the context of flow.json configuration values. Flowkit is defined by the [interface here](services.go). -

- Flow CLI brings Flow to your terminal. Easily interact with the network and build your dapps. -
- Read the docs» -
-
- Report Bug - · - Contribute - · - Read Guidelines -

-

-
-
+Flowkit contains multiple subpackages, the most important ones are: +- **config**: parsing and storing of flow.json values, as well as validation, +- **gateway**: implementation of Flow AN methods, uses emulator as well as Go SDK to communicate with ANs, +- **project**: stateful operations on top of flow.json, which allows resolving imports in contracts used in deployments -## Installation +It is important we define clear boundaries between flowkit and other CLI packages. If we are in doubt where certain +methods should be implemented we must ask ourselves if the method provides value for any other consumers of the +pacakge or only provides utility for CLI usage, if it's only providing utility for CLI then it should be added inside +the internal package, instead of flowkit. If in doubt better to add things to internal package and then move to flowkit +if such need is identified. -To install the Flow CLI, follow the [installation instructions](https://developers.flow.com/tools/flow-cli/install) on the Flow documentation website. -## Documentation - -You can find the CLI documentation on the [CLI documentation website](https://developers.flow.com/tools/flow-cli). - -## Features -The Flow CLI is a command line tool that allows you to interact with the Flow blockchain. -Read about supported commands in the [CLI documentation website](https://developers.flow.com/tools/flow-cli). - -``` -Usage: - flow [command] - -👋 Welcome Flow developer! - If you are starting a new flow project try running 'flow setup '. - -🔥 Super Commands - dev Build your Flow project - flix Execute FLIX template with a given id, name, or local filename - generate Generate new boilerplate files - setup Start a new Flow project - -📦 Flow Entities - accounts Create and retrieve accounts and deploy contracts - blocks Retrieve blocks - collections Retrieve collections - events Retrieve events - -💬 Flow Interactions - scripts Execute Cadence scripts - transactions Build, sign, send and retrieve transactions - -🔨 Flow Tools - cadence Execute Cadence code - dev-wallet Run a development wallet - emulator Run Flow network for development - flowser Run Flowser project explorer - test Run Cadence tests - -🏄 Flow Project - deploy Deploy all project contracts - init Initialize a new configuration - project Manage your Cadence project - run Start emulator and deploy all project contracts - -🔒 Flow Security - keys Generate and decode Flow keys - signatures Signature verification and creation - -``` - -The Flow CLI includes several commands to interact with Flow networks, such as querying account information, or sending transactions. It also includes the [Flow Emulator](https://developers.flow.com/tools/emulator). - - -![Alt Text](./cli.gif) - -## Contributing - -Read [contributing](./CONTRIBUTING.md) document. diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index fb39955f7..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,12 +0,0 @@ - -# Responsible Disclosure Policy - -Flow was built from the ground up with security in mind. Our code, infrastructure, and development methodology helps us keep our users safe. - -We really appreciate the community's help. Responsible disclosure of vulnerabilities helps to maintain the security and privacy of everyone. - -If you care about making a difference, please follow the guidelines below. - -# **Guidelines For Responsible Disclosure** - -We ask that all researchers adhere to these guidelines [here](https://docs.onflow.org/bounties/responsible-disclosure/) diff --git a/flowkit/accounts/account.go b/accounts/account.go similarity index 100% rename from flowkit/accounts/account.go rename to accounts/account.go diff --git a/flowkit/accounts/account_test.go b/accounts/account_test.go similarity index 100% rename from flowkit/accounts/account_test.go rename to accounts/account_test.go diff --git a/flowkit/accounts/keys.go b/accounts/keys.go similarity index 100% rename from flowkit/accounts/keys.go rename to accounts/keys.go diff --git a/flowkit/accounts/keys_test.go b/accounts/keys_test.go similarity index 100% rename from flowkit/accounts/keys_test.go rename to accounts/keys_test.go diff --git a/flowkit/arguments/arguments.go b/arguments/arguments.go similarity index 100% rename from flowkit/arguments/arguments.go rename to arguments/arguments.go diff --git a/flowkit/arguments/arguments_test.go b/arguments/arguments_test.go similarity index 100% rename from flowkit/arguments/arguments_test.go rename to arguments/arguments_test.go diff --git a/build/build.go b/build/build.go deleted file mode 100644 index a29f20da7..000000000 --- a/build/build.go +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Package build contains information about the build that injected at build-time. -// -// To use this package, simply import it in your program, then add build -// arguments like the following: -// -// go build -ldflags "-X github.com/onflow/flow-go/version.semver=v1.0.0" -package build - -// Default value for build-time-injected version strings. -const undefined = "undefined" - -// The following variables are injected at build-time using ldflags. -var ( - semver string - commit string -) - -// Semver returns the semantic version of this build. -func Semver() string { - return semver -} - -// Commit returns the commit at which this build was created. -func Commit() string { - return commit -} - -// IsDefined determines whether a version string is defined. Inputs should -// have been produced from this package. -func IsDefined(v string) bool { - return v != undefined -} - -// If any of the build-time-injected variables are empty at initialization, -// mark them as undefined. -func init() { - if len(semver) == 0 { - semver = undefined - } - if len(commit) == 0 { - commit = undefined - } -} diff --git a/check-headers.sh b/check-headers.sh deleted file mode 100755 index 1fa733940..000000000 --- a/check-headers.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -files=$(find . -name \*.go -type f -print0 | xargs -0 grep -L -E '(Licensed under the Apache License)|(Code generated (from|by))') -if [ -n "$files" ]; then - echo "Missing license header in:" - echo "$files" - exit 1 -fi \ No newline at end of file diff --git a/cli-banner.svg b/cli-banner.svg deleted file mode 100644 index 0660b8b8c..000000000 --- a/cli-banner.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/cli.gif b/cli.gif deleted file mode 100644 index 75e7673a6..000000000 Binary files a/cli.gif and /dev/null differ diff --git a/flowkit/cmd/flow-schema/flow-schema.go b/cmd/flow-schema/flow-schema.go similarity index 100% rename from flowkit/cmd/flow-schema/flow-schema.go rename to cmd/flow-schema/flow-schema.go diff --git a/cmd/flow/main.go b/cmd/flow/main.go deleted file mode 100644 index 79fd78961..000000000 --- a/cmd/flow/main.go +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Package main implements the entry point for the Flow CLI. -package main - -import ( - "fmt" - "os" - "strings" - - "github.com/onflow/flow-cli/internal/dependencymanager" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/accounts" - "github.com/onflow/flow-cli/internal/blocks" - "github.com/onflow/flow-cli/internal/cadence" - "github.com/onflow/flow-cli/internal/collections" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/config" - "github.com/onflow/flow-cli/internal/emulator" - "github.com/onflow/flow-cli/internal/events" - "github.com/onflow/flow-cli/internal/keys" - "github.com/onflow/flow-cli/internal/project" - "github.com/onflow/flow-cli/internal/quick" - "github.com/onflow/flow-cli/internal/scripts" - "github.com/onflow/flow-cli/internal/settings" - "github.com/onflow/flow-cli/internal/signatures" - "github.com/onflow/flow-cli/internal/snapshot" - "github.com/onflow/flow-cli/internal/status" - "github.com/onflow/flow-cli/internal/super" - "github.com/onflow/flow-cli/internal/test" - "github.com/onflow/flow-cli/internal/tools" - "github.com/onflow/flow-cli/internal/transactions" - "github.com/onflow/flow-cli/internal/util" - "github.com/onflow/flow-cli/internal/version" -) - -func main() { - var cmd = &cobra.Command{ - Use: "flow", - TraverseChildren: true, - // Messaging for Cadence 1.0 upgrade - PersistentPreRun: func(cmd *cobra.Command, args []string) { - outputFlag, _ := cmd.Flags().GetString("output") - // If output is set to json, do not append any message - if outputFlag != "json" { - - width := 80 - url := "https://developers.flow.com/build/cadence-migration-guide" - - // Function to center text within a given width - centerText := func(text string, width int) string { - space := (width - len(text)) / 2 - if space < 0 { - space = 0 - } - return fmt.Sprintf("%s%s%s", strings.Repeat(" ", space), text, strings.Repeat(" ", space)) - } - - fmt.Fprintln(os.Stderr, strings.Repeat("+", width)) - fmt.Fprintln(os.Stderr, centerText("⚠ Upgrade to Cadence 1.0", width)) - fmt.Fprintln(os.Stderr, centerText("The Crescendo network upgrade, including Cadence 1.0, is coming soon.", width)) - fmt.Fprintln(os.Stderr, centerText("You may need to update your existing contracts to support this change.", width)) - fmt.Fprintln(os.Stderr, centerText("Please visit our migration guide here:", width)) - fmt.Fprintln(os.Stderr, centerText(url, width)) - fmt.Fprintln(os.Stderr, strings.Repeat("+", width)) - - } - }, - } - - // quick commands - quick.InitCommand.AddToParent(cmd) - quick.DeployCommand.AddToParent(cmd) - quick.RunCommand.AddToParent(cmd) - - // single commands - status.Command.AddToParent(cmd) - tools.DevWallet.AddToParent(cmd) - tools.Flowser.AddToParent(cmd) - test.TestCommand.AddToParent(cmd) - - // super commands - super.SetupCommand.AddToParent(cmd) - super.DevCommand.AddToParent(cmd) - - // structured commands - cmd.AddCommand(settings.Cmd) - cmd.AddCommand(cadence.Cmd) - cmd.AddCommand(version.Cmd) - cmd.AddCommand(emulator.Cmd) - cmd.AddCommand(accounts.Cmd) - cmd.AddCommand(scripts.Cmd) - cmd.AddCommand(transactions.Cmd) - cmd.AddCommand(keys.Cmd) - cmd.AddCommand(events.Cmd) - cmd.AddCommand(blocks.Cmd) - cmd.AddCommand(collections.Cmd) - cmd.AddCommand(project.Cmd) - cmd.AddCommand(config.Cmd) - cmd.AddCommand(signatures.Cmd) - cmd.AddCommand(snapshot.Cmd) - cmd.AddCommand(super.FlixCmd) - cmd.AddCommand(super.GenerateCommand) - cmd.AddCommand(dependencymanager.Cmd) - - command.InitFlags(cmd) - cmd.AddGroup(&cobra.Group{ - ID: "super", - Title: "🔥 Super Commands", - }) - cmd.AddGroup(&cobra.Group{ - ID: "resources", - Title: "📦 Flow Entities", - }) - cmd.AddGroup(&cobra.Group{ - ID: "interactions", - Title: "💬 Flow Interactions", - }) - cmd.AddGroup(&cobra.Group{ - ID: "tools", - Title: "🔨 Flow Tools", - }) - cmd.AddGroup(&cobra.Group{ - ID: "project", - Title: "🏄 Flow Project", - }) - cmd.AddGroup(&cobra.Group{ - ID: "security", - Title: "🔒 Flow Security", - }) - cmd.AddGroup(&cobra.Group{ - ID: "manager", - Title: "🔗 Dependency Manager", - }) - - cmd.SetUsageTemplate(command.UsageTemplate) - - if err := cmd.Execute(); err != nil { - util.Exit(1, err.Error()) - } - - if status := *test.TestCommand.Status; status > 0 { - os.Exit(int(status)) - } -} diff --git a/flowkit/config/account.go b/config/account.go similarity index 100% rename from flowkit/config/account.go rename to config/account.go diff --git a/flowkit/config/account_test.go b/config/account_test.go similarity index 100% rename from flowkit/config/account_test.go rename to config/account_test.go diff --git a/flowkit/config/config.go b/config/config.go similarity index 100% rename from flowkit/config/config.go rename to config/config.go diff --git a/flowkit/config/config_test.go b/config/config_test.go similarity index 100% rename from flowkit/config/config_test.go rename to config/config_test.go diff --git a/flowkit/config/contract.go b/config/contract.go similarity index 100% rename from flowkit/config/contract.go rename to config/contract.go diff --git a/flowkit/config/contract_test.go b/config/contract_test.go similarity index 100% rename from flowkit/config/contract_test.go rename to config/contract_test.go diff --git a/flowkit/config/dependency.go b/config/dependency.go similarity index 100% rename from flowkit/config/dependency.go rename to config/dependency.go diff --git a/flowkit/config/dependency_test.go b/config/dependency_test.go similarity index 100% rename from flowkit/config/dependency_test.go rename to config/dependency_test.go diff --git a/flowkit/config/deployment.go b/config/deployment.go similarity index 100% rename from flowkit/config/deployment.go rename to config/deployment.go diff --git a/flowkit/config/deployment_test.go b/config/deployment_test.go similarity index 100% rename from flowkit/config/deployment_test.go rename to config/deployment_test.go diff --git a/flowkit/config/emulator.go b/config/emulator.go similarity index 100% rename from flowkit/config/emulator.go rename to config/emulator.go diff --git a/flowkit/config/emulator_test.go b/config/emulator_test.go similarity index 100% rename from flowkit/config/emulator_test.go rename to config/emulator_test.go diff --git a/flowkit/config/json/account.go b/config/json/account.go similarity index 100% rename from flowkit/config/json/account.go rename to config/json/account.go diff --git a/flowkit/config/json/account_test.go b/config/json/account_test.go similarity index 100% rename from flowkit/config/json/account_test.go rename to config/json/account_test.go diff --git a/flowkit/config/json/config.go b/config/json/config.go similarity index 100% rename from flowkit/config/json/config.go rename to config/json/config.go diff --git a/flowkit/config/json/config_test.go b/config/json/config_test.go similarity index 100% rename from flowkit/config/json/config_test.go rename to config/json/config_test.go diff --git a/flowkit/config/json/contract.go b/config/json/contract.go similarity index 100% rename from flowkit/config/json/contract.go rename to config/json/contract.go diff --git a/flowkit/config/json/contract_test.go b/config/json/contract_test.go similarity index 100% rename from flowkit/config/json/contract_test.go rename to config/json/contract_test.go diff --git a/flowkit/config/json/dependency.go b/config/json/dependency.go similarity index 100% rename from flowkit/config/json/dependency.go rename to config/json/dependency.go diff --git a/flowkit/config/json/dependency_test.go b/config/json/dependency_test.go similarity index 100% rename from flowkit/config/json/dependency_test.go rename to config/json/dependency_test.go diff --git a/flowkit/config/json/deploy.go b/config/json/deploy.go similarity index 100% rename from flowkit/config/json/deploy.go rename to config/json/deploy.go diff --git a/flowkit/config/json/deploy_test.go b/config/json/deploy_test.go similarity index 100% rename from flowkit/config/json/deploy_test.go rename to config/json/deploy_test.go diff --git a/flowkit/config/json/emulator.go b/config/json/emulator.go similarity index 100% rename from flowkit/config/json/emulator.go rename to config/json/emulator.go diff --git a/flowkit/config/json/emulator_test.go b/config/json/emulator_test.go similarity index 100% rename from flowkit/config/json/emulator_test.go rename to config/json/emulator_test.go diff --git a/flowkit/config/json/network.go b/config/json/network.go similarity index 100% rename from flowkit/config/json/network.go rename to config/json/network.go diff --git a/flowkit/config/json/network_test.go b/config/json/network_test.go similarity index 100% rename from flowkit/config/json/network_test.go rename to config/json/network_test.go diff --git a/flowkit/config/json/schema.go b/config/json/schema.go similarity index 100% rename from flowkit/config/json/schema.go rename to config/json/schema.go diff --git a/flowkit/config/loader.go b/config/loader.go similarity index 100% rename from flowkit/config/loader.go rename to config/loader.go diff --git a/flowkit/config/loader_test.go b/config/loader_test.go similarity index 100% rename from flowkit/config/loader_test.go rename to config/loader_test.go diff --git a/flowkit/config/network.go b/config/network.go similarity index 100% rename from flowkit/config/network.go rename to config/network.go diff --git a/flowkit/config/network_test.go b/config/network_test.go similarity index 100% rename from flowkit/config/network_test.go rename to config/network_test.go diff --git a/flowkit/config/processor.go b/config/processor.go similarity index 100% rename from flowkit/config/processor.go rename to config/processor.go diff --git a/flowkit/config/processor_test.go b/config/processor_test.go similarity index 100% rename from flowkit/config/processor_test.go rename to config/processor_test.go diff --git a/coverage.txt b/coverage.txt new file mode 100644 index 000000000..dd4c5a821 --- /dev/null +++ b/coverage.txt @@ -0,0 +1,1136 @@ +mode: set +github.com/onflow/flow-cli/flowkit/config/json/account.go:45.61,47.26 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:47.26,49.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:51.2,51.53 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:51.53,53.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:55.2,55.40 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:59.92,67.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:67.16,69.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:70.2,70.20 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:70.20,73.3 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:75.2,79.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:79.16,81.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:82.2,85.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:85.16,87.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:88.2,88.27 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:88.27,90.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:92.2,93.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:93.16,95.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:97.2,101.8 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:106.80,108.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:108.16,110.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:112.2,112.34 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:112.34,114.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:116.2,117.21 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:117.21,119.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:121.2,122.23 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:122.23,124.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:125.2,125.29 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:125.29,127.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:129.2,132.8 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:136.96,138.25 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:138.25,140.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:142.2,142.49 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:142.49,144.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:146.2,147.26 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:147.26,149.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:151.2,151.45 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:151.45,153.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:155.2,156.46 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:156.46,158.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:161.2,162.81 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:162.81,163.14 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:163.14,164.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:166.3,166.10 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:166.10,168.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:169.3,169.13 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:172.2,173.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:173.16,175.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:177.2,184.20 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:185.25,186.29 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:186.29,188.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:190.3,191.17 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:191.17,193.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:194.3,194.21 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:194.21,197.4 2 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:199.3,203.17 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:203.17,205.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:207.3,207.24 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:208.27,209.27 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:209.27,211.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:212.3,214.31 3 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:214.31,216.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:218.31,219.29 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:219.29,221.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:222.3,222.36 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:224.26,225.27 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:225.27,227.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:228.3,228.52 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:231.2,235.8 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:239.68,242.32 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:242.32,245.29 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:245.29,247.18 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:247.18,249.5 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:250.9,252.18 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:252.18,254.5 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:257.3,257.40 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:260.2,260.22 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:264.69,267.29 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:267.29,268.24 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:268.24,270.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:270.9,272.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:275.2,275.21 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:278.61,280.21 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:280.21,282.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:284.2,289.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:292.63,299.2 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:301.67,306.20 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:306.20,308.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:310.2,310.42 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:310.42,312.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:314.2,314.44 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:314.44,316.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:318.2,318.18 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:319.25,321.20 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:321.20,323.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:324.27,326.50 2 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:327.31,328.42 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:329.26,330.56 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:333.2,333.20 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:390.49,393.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:393.16,395.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:397.2,397.24 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:397.24,398.29 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:399.15,400.34 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:401.11,402.36 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:406.2,406.27 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:407.14,408.27 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:409.10,410.29 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:414.49,417.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:417.16,419.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/account.go:421.2,421.16 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:422.20,425.20 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:427.26,433.4 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:435.28,443.72 4 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:445.22,448.24 3 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:451.2,451.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:454.48,455.35 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:455.35,457.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:459.2,459.33 1 1 +github.com/onflow/flow-cli/flowkit/config/json/account.go:462.50,485.2 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:37.66,39.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:39.16,41.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:43.2,44.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:44.16,46.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:48.2,49.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:49.16,51.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:53.2,54.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:54.16,56.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:58.2,59.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:59.16,61.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:63.2,71.18 2 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:74.62,82.2 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:89.39,93.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:93.16,95.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:97.2,97.22 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:97.22,99.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:101.2,101.14 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:108.26,110.2 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:113.65,116.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:116.16,118.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:120.2,120.18 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:124.66,126.26 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:126.26,128.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:130.2,132.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:132.16,134.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/config.go:136.2,136.37 1 1 +github.com/onflow/flow-cli/flowkit/config/json/config.go:140.56,142.2 1 0 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:35.70,38.33 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:38.33,39.21 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:39.21,46.4 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:46.9,51.51 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:51.51,53.37 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:53.37,55.6 1 0 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:57.5,57.43 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:59.4,59.43 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:63.2,63.23 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:67.73,70.30 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:70.30,72.21 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:72.21,76.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:76.9,79.36 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:79.36,81.5 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:83.4,88.5 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:92.2,92.22 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:107.54,113.16 4 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:113.16,116.3 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:119.2,120.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:120.16,123.3 2 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:123.8,125.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:127.2,127.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:130.53,131.20 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:131.20,133.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:133.8,135.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/contract.go:138.55,152.2 1 0 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:35.74,38.38 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:38.38,41.47 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:41.47,48.39 3 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:48.39,49.30 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:49.30,57.6 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:57.11,59.49 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:59.49,61.21 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:61.21,63.8 1 0 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:65.7,66.21 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:66.21,68.8 1 0 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:70.7,70.38 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:73.6,79.7 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:83.4,84.45 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:88.2,88.25 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:92.87,95.38 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:95.38,98.33 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:98.33,99.24 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:99.24,103.5 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:103.10,105.32 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:105.32,106.29 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:107.18,111.9 1 0 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:112.14,116.9 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:120.5,125.7 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:129.3,129.42 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:129.42,131.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:131.9,135.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:139.2,139.20 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:154.52,159.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:159.16,162.3 2 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:165.2,167.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:167.16,169.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:169.8,171.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:173.2,173.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:176.51,177.20 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:177.20,179.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:179.8,181.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/deploy.go:184.53,198.2 1 0 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:30.70,33.25 2 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:33.25,34.35 1 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:34.35,36.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:38.3,44.42 2 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:47.2,47.23 1 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:51.73,54.30 2 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:54.30,55.34 1 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:55.34,56.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:58.3,61.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/emulator.go:64.2,64.22 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:36.68,39.32 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:39.32,40.52 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:40.52,42.18 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:42.18,44.5 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:46.4,50.6 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:51.9,51.33 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:51.33,56.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:56.9,58.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:61.2,61.22 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:65.69,68.29 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:68.29,69.18 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:69.18,71.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:71.9,73.4 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:76.2,76.21 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:79.65,85.2 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:87.67,94.2 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:110.53,113.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:113.16,116.3 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:119.2,121.16 3 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:121.16,124.3 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:126.2,126.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:129.52,130.35 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:130.35,132.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:134.2,134.33 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:138.45,140.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:140.16,142.3 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:144.2,145.16 2 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:145.16,147.3 1 0 +github.com/onflow/flow-cli/flowkit/config/json/network.go:149.2,149.12 1 1 +github.com/onflow/flow-cli/flowkit/config/json/network.go:152.54,169.2 1 0 +github.com/onflow/flow-cli/flowkit/config/json/schema.go:25.42,32.47 3 0 +github.com/onflow/flow-cli/flowkit/config/json/schema.go:32.47,33.35 1 0 +github.com/onflow/flow-cli/flowkit/config/json/schema.go:33.35,36.4 2 0 +github.com/onflow/flow-cli/flowkit/config/json/schema.go:37.3,37.18 1 0 +github.com/onflow/flow-cli/flowkit/config/json/schema.go:37.18,39.4 1 0 +github.com/onflow/flow-cli/flowkit/config/json/schema.go:41.2,43.15 2 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:40.57,42.2 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:44.63,46.16 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:46.16,48.3 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:49.2,49.12 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:55.54,60.16 4 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:60.16,62.3 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:64.2,65.26 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:65.26,67.3 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:68.2,68.25 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:75.108,87.32 8 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:87.32,88.47 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:88.47,90.4 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:93.2,94.38 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:94.38,95.53 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:95.53,97.4 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:100.2,101.32 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:101.32,103.36 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:103.36,104.71 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:104.71,106.5 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:110.2,110.26 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:110.26,112.3 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:114.2,114.37 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:114.37,116.3 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:118.2,119.16 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:119.16,121.3 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:123.2,123.42 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:123.42,127.34 3 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:127.34,128.48 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:128.48,130.5 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:131.9,131.55 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:131.55,132.48 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:132.48,134.5 1 0 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:137.3,138.17 2 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:138.17,144.4 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:146.3,146.41 1 1 +github.com/onflow/flow-cli/flowkit/arguments/arguments.go:148.2,148.24 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:39.56,41.44 2 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:41.44,43.17 2 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:43.17,45.4 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:46.3,46.36 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:49.2,49.22 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:52.50,55.35 2 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:55.35,57.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:59.2,59.21 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:62.59,64.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:64.16,66.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:68.2,72.8 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:75.47,77.24 2 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:77.24,79.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:81.2,85.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:88.109,91.16 3 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:91.16,93.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:95.2,96.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:96.16,98.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:100.2,104.8 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:111.46,113.16 2 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:113.16,115.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:117.2,117.20 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:117.20,119.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/account.go:121.2,121.25 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:121.25,122.23 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:122.23,124.4 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:127.2,127.12 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:130.36,132.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:134.37,136.25 2 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:136.25,138.3 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:139.2,139.17 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:143.69,144.19 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:144.19,145.30 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:145.30,147.4 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:150.2,150.96 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:154.57,155.19 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:155.19,156.24 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:156.24,158.4 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:161.2,161.90 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:165.50,166.25 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:166.25,167.31 1 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:167.31,170.4 2 1 +github.com/onflow/flow-cli/flowkit/accounts/account.go:173.2,173.27 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:74.67,75.29 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:76.25,77.42 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:78.27,79.44 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:80.31,81.42 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:82.26,83.43 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:86.2,86.71 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:96.67,103.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:105.41,107.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:109.55,110.51 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:110.51,112.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:113.2,113.18 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:116.51,117.47 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:117.47,119.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:120.2,120.19 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:123.31,125.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:127.36,129.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:138.47,146.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:148.69,150.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:150.16,152.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:154.2,158.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:158.16,160.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:162.2,162.30 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:165.35,167.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:169.59,171.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:176.55,178.29 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:178.29,180.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:182.2,183.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:183.16,185.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:187.2,188.20 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:188.20,192.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:194.2,197.16 3 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:197.16,199.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:201.2,208.12 5 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:211.59,213.16 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:213.16,215.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:217.2,225.8 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:238.11,248.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:250.70,255.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:257.69,259.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:261.59,263.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:265.47,273.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:275.35,277.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:277.16,279.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:281.2,281.12 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:284.41,286.2 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:289.72,294.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:304.12,314.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:325.70,327.16 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:327.16,329.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:331.2,331.53 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:334.60,335.25 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:335.25,337.17 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:337.17,339.4 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:340.3,341.17 2 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:341.17,343.4 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:344.3,344.22 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:346.2,346.27 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:349.48,356.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:366.61,377.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:379.71,381.16 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:381.16,383.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:385.2,385.54 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:388.61,389.25 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:389.25,391.17 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:391.17,393.4 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:395.2,395.27 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:398.49,408.2 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:410.37,412.40 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:412.40,414.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:416.2,417.16 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:417.16,419.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:421.2,423.36 3 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:423.36,425.3 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:426.2,427.16 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:427.16,429.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:431.2,431.35 1 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:431.35,434.17 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:434.17,436.4 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:438.2,439.16 2 1 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:439.16,441.3 1 0 +github.com/onflow/flow-cli/flowkit/accounts/keys.go:442.2,442.12 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:57.62,64.2 1 0 +github.com/onflow/flow-cli/flowkit/config/account.go:66.39,71.2 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:74.58,75.29 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:75.29,76.27 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:76.27,78.4 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:81.2,81.86 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:85.62,86.37 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:86.37,87.35 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:87.35,90.4 2 1 +github.com/onflow/flow-cli/flowkit/config/account.go:93.2,93.26 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:97.40,98.29 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:98.29,99.27 1 1 +github.com/onflow/flow-cli/flowkit/config/account.go:99.27,101.4 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:53.35,54.34 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:54.34,55.37 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:55.37,57.41 2 1 +github.com/onflow/flow-cli/flowkit/config/config.go:57.41,59.5 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:63.2,63.33 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:63.33,64.65 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:64.65,66.4 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:69.2,69.34 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:69.34,70.57 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:70.57,72.4 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:74.3,74.35 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:74.35,75.58 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:75.58,77.5 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:80.3,80.57 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:80.57,82.4 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:85.2,85.12 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:89.24,94.2 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:100.41,102.2 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:105.26,107.16 2 1 +github.com/onflow/flow-cli/flowkit/config/config.go:107.16,109.3 1 0 +github.com/onflow/flow-cli/flowkit/config/config.go:111.2,111.51 1 1 +github.com/onflow/flow-cli/flowkit/config/config.go:115.30,120.2 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:43.52,44.27 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:44.27,45.31 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:45.31,47.4 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:50.2,50.12 1 0 +github.com/onflow/flow-cli/flowkit/config/contract.go:53.61,54.27 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:54.27,55.31 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:55.31,57.4 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:59.2,62.4 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:68.37,70.2 1 0 +github.com/onflow/flow-cli/flowkit/config/contract.go:73.60,74.30 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:74.30,75.28 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:75.28,77.4 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:80.2,80.60 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:84.52,85.38 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:85.38,86.45 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:86.45,89.4 2 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:92.2,92.27 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:96.47,97.42 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:97.42,99.3 1 0 +github.com/onflow/flow-cli/flowkit/config/contract.go:101.2,101.30 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:101.30,102.28 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:102.28,104.4 1 1 +github.com/onflow/flow-cli/flowkit/config/contract.go:107.2,107.12 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:42.63,43.32 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:43.32,44.30 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:44.30,46.4 1 0 +github.com/onflow/flow-cli/flowkit/config/deployment.go:49.2,49.45 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:53.58,54.39 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:54.39,55.36 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:55.36,57.4 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:64.41,66.2 1 0 +github.com/onflow/flow-cli/flowkit/config/deployment.go:69.61,72.28 2 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:72.28,73.32 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:73.32,75.4 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:78.2,78.20 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:82.87,83.28 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:83.28,84.61 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:84.61,86.4 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:89.2,89.12 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:93.58,94.40 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:94.40,96.53 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:96.53,99.4 2 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:102.2,102.29 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:106.68,108.23 2 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:108.23,114.3 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:116.2,116.32 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:116.32,117.69 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:117.69,119.4 1 1 +github.com/onflow/flow-cli/flowkit/config/deployment.go:122.2,122.12 1 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:40.41,41.24 1 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:41.24,42.38 1 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:42.38,44.4 1 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:47.2,47.12 1 0 +github.com/onflow/flow-cli/flowkit/config/emulator.go:51.65,52.38 1 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:52.38,53.36 1 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:53.36,56.4 2 1 +github.com/onflow/flow-cli/flowkit/config/emulator.go:59.2,59.27 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:32.31,34.24 2 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:34.24,36.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:37.2,37.22 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:56.58,57.28 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:57.28,58.39 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:58.39,60.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:63.2,63.12 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:74.51,78.2 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:81.49,83.2 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:86.56,91.25 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:91.25,93.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:95.2,96.16 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:96.16,98.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:100.2,101.16 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:101.16,103.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:105.2,105.12 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:108.63,112.16 3 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:112.16,114.3 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:116.2,117.16 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:117.16,119.3 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:121.2,122.25 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:122.25,124.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:126.2,126.47 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:133.56,136.26 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:136.26,138.17 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:138.17,140.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:141.3,141.39 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:141.39,143.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:145.3,146.17 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:146.17,148.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:148.9,150.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:153.2,154.33 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:154.33,156.17 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:156.17,158.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:160.3,160.22 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:160.22,162.12 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:165.3,165.34 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:169.2,169.21 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:169.21,171.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:173.2,173.32 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:177.57,179.2 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:182.65,185.16 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:185.16,187.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:189.2,189.22 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:193.64,195.40 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:195.40,197.3 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:198.2,198.40 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:198.40,200.3 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:201.2,201.42 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:201.42,203.3 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:204.2,204.46 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:204.46,206.3 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:210.56,213.16 2 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:213.16,214.25 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:214.25,216.4 1 1 +github.com/onflow/flow-cli/flowkit/config/loader.go:218.3,218.18 1 0 +github.com/onflow/flow-cli/flowkit/config/loader.go:221.2,221.17 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:61.58,62.29 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:62.29,63.27 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:63.27,65.4 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:68.2,68.82 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:72.49,73.37 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:73.37,74.43 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:74.43,77.4 2 1 +github.com/onflow/flow-cli/flowkit/config/network.go:80.2,80.26 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:84.46,86.16 2 1 +github.com/onflow/flow-cli/flowkit/config/network.go:86.16,88.3 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:90.2,90.29 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:90.29,91.27 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:91.27,93.4 1 1 +github.com/onflow/flow-cli/flowkit/config/network.go:96.2,96.12 1 1 +github.com/onflow/flow-cli/flowkit/config/processor.go:27.47,38.16 4 1 +github.com/onflow/flow-cli/flowkit/config/processor.go:38.16,40.3 1 1 +github.com/onflow/flow-cli/flowkit/config/processor.go:42.2,43.16 2 1 +github.com/onflow/flow-cli/flowkit/config/processor.go:43.16,45.3 1 0 +github.com/onflow/flow-cli/flowkit/config/processor.go:47.2,47.17 1 1 +github.com/onflow/flow-cli/flowkit/project/contract.go:43.13,52.2 1 1 +github.com/onflow/flow-cli/flowkit/project/contract.go:54.34,56.2 1 1 +github.com/onflow/flow-cli/flowkit/project/contract.go:58.41,60.2 1 1 +github.com/onflow/flow-cli/flowkit/project/contract.go:62.38,64.2 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:37.37,39.2 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:41.78,43.2 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:59.89,66.37 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:66.37,68.17 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:68.17,70.4 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:73.2,73.24 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:76.52,78.16 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:78.16,80.3 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:82.2,93.12 5 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:101.50,102.24 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:102.24,104.3 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:106.2,107.16 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:107.16,109.3 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:111.2,112.16 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:112.16,114.3 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:116.2,117.27 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:117.27,119.3 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:121.2,121.23 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:125.44,127.32 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:127.32,128.40 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:128.40,130.4 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:131.3,131.22 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:134.2,134.14 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:138.48,139.39 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:139.39,140.55 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:140.55,144.14 3 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:144.14,146.13 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:149.4,150.20 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:150.20,152.13 2 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:156.4,156.50 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:156.50,157.13 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:159.4,159.48 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:159.48,160.13 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:163.4,167.5 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:171.2,171.12 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:181.84,184.30 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:184.30,186.3 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:188.2,188.30 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:188.30,189.38 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:189.38,191.4 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:194.2,195.16 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:195.16,196.32 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:197.25,198.75 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:199.11,200.19 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:204.2,204.38 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:207.71,210.26 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:210.26,212.3 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:214.2,214.18 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:217.61,220.26 2 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:220.26,222.3 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:224.2,224.18 1 1 +github.com/onflow/flow-cli/flowkit/project/deployment.go:233.56,236.33 2 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:236.33,238.34 2 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:238.34,240.4 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:242.3,242.37 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:245.2,245.15 1 0 +github.com/onflow/flow-cli/flowkit/project/deployment.go:248.44,253.2 1 0 +github.com/onflow/flow-cli/flowkit/project/imports.go:39.88,44.2 1 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:46.70,50.30 3 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:50.30,54.13 3 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:54.13,56.12 2 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:59.3,60.19 2 0 +github.com/onflow/flow-cli/flowkit/project/imports.go:60.19,62.12 2 0 +github.com/onflow/flow-cli/flowkit/project/imports.go:65.3,65.89 1 0 +github.com/onflow/flow-cli/flowkit/project/imports.go:68.2,68.21 1 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:72.68,74.39 2 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:74.39,78.3 2 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:80.2,80.40 1 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:80.40,82.3 1 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:84.2,84.24 1 1 +github.com/onflow/flow-cli/flowkit/project/imports.go:87.57,89.2 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:38.87,40.16 2 1 +github.com/onflow/flow-cli/flowkit/project/program.go:40.16,42.3 1 0 +github.com/onflow/flow-cli/flowkit/project/program.go:44.2,49.8 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:56.38,59.70 2 1 +github.com/onflow/flow-cli/flowkit/project/program.go:59.70,62.21 2 1 +github.com/onflow/flow-cli/flowkit/project/program.go:62.21,64.4 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:67.2,67.16 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:70.37,72.2 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:74.66,87.2 9 1 +github.com/onflow/flow-cli/flowkit/project/program.go:89.37,91.2 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:93.33,95.2 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:97.42,99.91 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:99.91,101.3 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:103.2,103.76 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:103.76,104.73 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:104.73,106.4 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:109.2,109.76 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:109.76,110.73 1 0 +github.com/onflow/flow-cli/flowkit/project/program.go:110.73,112.4 1 0 +github.com/onflow/flow-cli/flowkit/project/program.go:115.2,115.60 1 1 +github.com/onflow/flow-cli/flowkit/project/program.go:118.28,120.16 2 1 +github.com/onflow/flow-cli/flowkit/project/program.go:120.16,122.3 1 0 +github.com/onflow/flow-cli/flowkit/project/program.go:124.2,124.27 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:37.25,41.2 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:44.59,46.16 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:46.16,48.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:50.2,51.16 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:51.16,53.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:55.2,59.16 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:63.107,73.2 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:81.25,86.2 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:89.92,94.2 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:102.25,120.27 5 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:120.27,123.3 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:127.2,128.27 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:128.27,131.3 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:133.2,139.16 6 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:139.16,141.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:142.2,144.15 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:152.25,154.16 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:154.16,156.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:157.2,157.42 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:160.100,164.16 3 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:164.16,166.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:167.2,170.16 3 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:181.50,183.2 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:186.48,188.2 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:191.59,193.2 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:195.84,198.2 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:201.66,202.24 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:202.24,204.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:206.2,207.16 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:207.16,209.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:211.2,211.37 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:211.37,219.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:221.2,222.12 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:226.56,230.2 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:233.70,234.37 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:234.37,235.19 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:235.19,237.4 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:240.2,240.14 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:244.79,245.36 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:245.36,247.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:249.2,258.12 4 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:262.67,265.2 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:268.73,271.2 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:274.66,277.2 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:280.64,281.27 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:281.27,283.17 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:283.17,285.4 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:288.2,288.12 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:292.60,294.2 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:297.88,299.16 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:299.16,301.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:304.2,305.28 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:305.28,307.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:309.2,311.36 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:311.36,313.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:313.8,319.3 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:321.2,321.44 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:321.44,327.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:329.2,329.41 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:329.41,331.3 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:333.2,333.15 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:337.52,340.16 3 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:340.16,342.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:344.2,344.28 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:344.28,346.17 2 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:346.17,348.4 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:349.8,351.17 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:351.17,353.4 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:356.2,356.15 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:360.49,362.2 1 1 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:366.63,372.2 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:384.53,386.34 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:386.34,388.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:390.2,394.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:398.53,401.51 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:401.51,402.28 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:402.28,403.37 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:403.37,405.5 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:407.3,407.31 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:410.2,411.37 2 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:411.37,413.3 1 0 +github.com/onflow/flow-cli/flowkit/transactions/transaction.go:414.2,416.13 2 0 +github.com/onflow/flow-cli/flowkit/events.go:31.44,32.56 1 1 +github.com/onflow/flow-cli/flowkit/events.go:32.56,35.3 2 1 +github.com/onflow/flow-cli/flowkit/events.go:37.2,37.12 1 0 +github.com/onflow/flow-cli/flowkit/events.go:42.63,44.34 2 1 +github.com/onflow/flow-cli/flowkit/events.go:44.34,46.3 1 1 +github.com/onflow/flow-cli/flowkit/events.go:48.2,48.15 1 1 +github.com/onflow/flow-cli/flowkit/events.go:51.39,54.57 2 1 +github.com/onflow/flow-cli/flowkit/events.go:54.57,56.3 1 1 +github.com/onflow/flow-cli/flowkit/events.go:57.2,58.44 2 1 +github.com/onflow/flow-cli/flowkit/events.go:58.44,60.3 1 1 +github.com/onflow/flow-cli/flowkit/events.go:62.2,65.3 1 1 +github.com/onflow/flow-cli/flowkit/events.go:68.56,70.27 2 1 +github.com/onflow/flow-cli/flowkit/events.go:70.27,71.45 1 1 +github.com/onflow/flow-cli/flowkit/events.go:71.45,73.4 1 1 +github.com/onflow/flow-cli/flowkit/events.go:76.2,76.18 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:67.54,68.23 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:68.23,70.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:71.2,71.63 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:71.63,73.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:74.2,74.51 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:74.51,76.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:78.2,78.110 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:105.12,107.2 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:116.44,118.2 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:120.45,122.2 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:124.51,126.2 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:128.43,129.20 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:129.20,131.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:132.2,132.21 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:135.32,137.2 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:140.94,142.2 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:152.43,154.25 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:154.25,155.20 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:155.20,157.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:159.3,167.17 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:167.17,169.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:171.3,171.36 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:174.2,175.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:175.16,177.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:179.2,180.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:180.16,182.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:184.2,189.16 5 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:189.16,191.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:193.2,197.16 4 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:197.16,199.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:201.2,201.25 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:201.25,203.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:205.2,207.33 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:207.33,209.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:211.2,212.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:212.16,214.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:216.2,216.34 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:223.38,225.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:225.16,227.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:229.2,230.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:230.16,232.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:234.2,235.69 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:235.69,237.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:239.2,240.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:240.16,242.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:244.2,244.16 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:251.65,252.48 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:252.48,254.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:267.34,269.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:269.16,271.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:273.2,274.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:274.16,276.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:278.2,278.26 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:278.26,280.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:280.17,282.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:284.3,290.17 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:290.17,292.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:295.2,296.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:296.16,298.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:300.2,306.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:306.16,308.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:310.2,315.16 4 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:315.16,317.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:318.2,321.32 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:321.32,323.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:325.2,326.31 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:326.31,328.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:330.2,330.30 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:330.30,332.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:332.17,334.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:337.2,338.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:338.16,340.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:343.2,344.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:344.16,346.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:348.2,348.12 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:348.12,350.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:350.8,352.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:355.2,356.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:356.16,358.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:359.2,359.22 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:359.22,361.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:363.2,368.14 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:368.14,370.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:370.8,377.3 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:380.2,380.54 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:380.54,385.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:387.2,387.41 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:397.28,400.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:400.16,402.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:404.2,405.55 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:405.55,411.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:413.2,414.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:414.16,416.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:418.2,419.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:419.16,421.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:423.2,429.16 4 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:429.16,431.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:433.2,434.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:434.16,436.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:437.2,437.36 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:437.36,439.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:441.2,443.25 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:447.86,450.18 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:450.18,452.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:452.8,452.28 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:452.28,454.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:454.8,456.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:458.2,458.16 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:458.16,460.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:462.2,462.18 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:462.18,464.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:466.2,466.19 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:470.98,472.2 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:486.31,487.29 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:487.29,489.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:491.2,491.19 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:491.19,496.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:498.2,505.36 5 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:505.36,507.13 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:507.13,510.4 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:515.2,515.12 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:515.12,518.3 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:520.2,520.12 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:520.12,522.33 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:522.33,524.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:527.2,528.35 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:528.35,529.29 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:529.29,531.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:533.3,533.61 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:536.2,536.26 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:539.102,540.25 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:540.25,542.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:542.17,544.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:545.3,545.49 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:559.26,561.31 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:561.31,564.37 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:564.37,566.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:567.3,567.32 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:567.32,573.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:574.3,574.39 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:576.2,576.16 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:584.30,587.21 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:587.21,590.17 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:590.17,592.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:595.2,596.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:596.16,598.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:600.2,600.24 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:610.38,612.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:612.16,614.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:615.2,616.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:616.16,618.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:620.2,620.38 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:620.38,622.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:624.2,627.16 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:627.16,629.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:631.2,631.27 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:639.30,640.38 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:640.38,642.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:644.2,646.66 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:653.30,655.20 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:655.20,657.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:659.2,659.26 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:659.26,661.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:663.2,664.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:664.16,666.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:668.2,669.34 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:669.34,671.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:671.8,671.46 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:671.46,673.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:675.2,676.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:676.16,678.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:680.2,680.25 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:680.25,683.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:683.17,685.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:687.2,688.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:688.16,690.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:691.2,691.24 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:699.106,701.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:701.16,703.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:705.2,706.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:706.16,708.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:710.2,711.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:711.16,713.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:715.2,716.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:716.16,718.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:720.2,728.34 4 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:728.34,730.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:730.17,732.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:734.3,740.52 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:740.52,746.12 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:747.9,747.24 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:747.24,749.12 2 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:752.3,758.5 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:761.2,761.34 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:761.34,763.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:765.2,766.20 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:773.89,774.24 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:774.24,776.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:777.2,777.61 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:780.63,782.2 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:784.49,786.32 2 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:786.32,788.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:789.2,789.12 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:803.109,805.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:805.16,807.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:809.2,810.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:810.16,812.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:814.2,814.26 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:814.26,816.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:816.17,818.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:820.3,825.19 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:825.19,827.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:828.3,828.39 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:828.39,830.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:831.3,831.28 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:831.28,833.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:835.3,836.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:836.17,838.4 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:841.2,841.18 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:841.18,843.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:843.8,843.37 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:843.37,845.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:845.8,847.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:855.55,860.16 4 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:860.16,862.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:864.2,864.14 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:864.14,867.3 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:869.2,870.24 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:876.59,878.16 2 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:878.16,880.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:882.2,883.16 2 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:883.16,885.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:886.2,886.23 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:898.38,900.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:900.16,902.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:904.2,905.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:905.16,907.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:909.2,910.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:910.16,912.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:914.2,920.16 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:920.16,922.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:924.2,924.26 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:924.26,925.39 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:925.39,927.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:928.3,928.28 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:928.28,930.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:932.3,933.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:933.17,935.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:937.3,943.17 3 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:943.17,945.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:948.2,948.74 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:948.74,950.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:952.2,952.74 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:952.74,954.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:956.2,957.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:957.16,959.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:961.2,961.16 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:971.38,973.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:973.16,975.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:977.2,978.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:978.16,980.3 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:982.2,982.18 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:991.55,993.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:993.16,995.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:997.2,998.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:998.16,1000.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:1002.2,1002.25 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:1012.55,1020.16 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:1020.16,1022.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:1024.2,1024.44 1 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:1024.44,1026.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:1026.17,1028.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:1030.3,1031.17 2 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:1031.17,1033.4 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:1036.2,1041.16 5 1 +github.com/onflow/flow-cli/flowkit/flowkit.go:1041.16,1043.3 1 0 +github.com/onflow/flow-cli/flowkit/flowkit.go:1045.2,1051.25 5 1 +github.com/onflow/flow-cli/flowkit/state.go:52.45,54.2 1 0 +github.com/onflow/flow-cli/flowkit/state.go:57.57,59.2 1 0 +github.com/onflow/flow-cli/flowkit/state.go:62.37,64.2 1 1 +github.com/onflow/flow-cli/flowkit/state.go:67.50,69.52 1 1 +github.com/onflow/flow-cli/flowkit/state.go:69.52,71.3 1 1 +github.com/onflow/flow-cli/flowkit/state.go:73.2,73.33 1 1 +github.com/onflow/flow-cli/flowkit/state.go:73.33,75.17 2 1 +github.com/onflow/flow-cli/flowkit/state.go:75.17,77.4 1 1 +github.com/onflow/flow-cli/flowkit/state.go:77.9,79.4 1 1 +github.com/onflow/flow-cli/flowkit/state.go:82.2,82.25 1 1 +github.com/onflow/flow-cli/flowkit/state.go:86.41,90.16 3 1 +github.com/onflow/flow-cli/flowkit/state.go:90.16,92.3 1 0 +github.com/onflow/flow-cli/flowkit/state.go:94.2,94.12 1 1 +github.com/onflow/flow-cli/flowkit/state.go:98.45,100.2 1 1 +github.com/onflow/flow-cli/flowkit/state.go:103.51,105.2 1 1 +github.com/onflow/flow-cli/flowkit/state.go:108.47,110.2 1 1 +github.com/onflow/flow-cli/flowkit/state.go:113.47,115.2 1 1 +github.com/onflow/flow-cli/flowkit/state.go:118.41,120.2 1 0 +github.com/onflow/flow-cli/flowkit/state.go:123.69,125.21 2 1 +github.com/onflow/flow-cli/flowkit/state.go:125.21,127.3 1 0 +github.com/onflow/flow-cli/flowkit/state.go:129.2,129.51 1 1 +github.com/onflow/flow-cli/flowkit/state.go:133.62,136.2 2 1 +github.com/onflow/flow-cli/flowkit/state.go:142.99,146.68 2 1 +github.com/onflow/flow-cli/flowkit/state.go:146.68,148.17 2 1 +github.com/onflow/flow-cli/flowkit/state.go:148.17,150.4 1 0 +github.com/onflow/flow-cli/flowkit/state.go:153.3,153.55 1 1 +github.com/onflow/flow-cli/flowkit/state.go:153.55,155.18 2 1 +github.com/onflow/flow-cli/flowkit/state.go:155.18,157.5 1 0 +github.com/onflow/flow-cli/flowkit/state.go:159.4,162.46 2 1 +github.com/onflow/flow-cli/flowkit/state.go:162.46,167.5 1 0 +github.com/onflow/flow-cli/flowkit/state.go:169.4,170.18 2 1 +github.com/onflow/flow-cli/flowkit/state.go:170.18,172.5 1 0 +github.com/onflow/flow-cli/flowkit/state.go:174.4,183.43 2 1 +github.com/onflow/flow-cli/flowkit/state.go:187.2,187.23 1 1 +github.com/onflow/flow-cli/flowkit/state.go:191.79,195.38 3 1 +github.com/onflow/flow-cli/flowkit/state.go:195.38,196.80 1 1 +github.com/onflow/flow-cli/flowkit/state.go:196.80,197.60 1 1 +github.com/onflow/flow-cli/flowkit/state.go:197.60,199.5 1 0 +github.com/onflow/flow-cli/flowkit/state.go:200.4,200.29 1 1 +github.com/onflow/flow-cli/flowkit/state.go:200.29,202.5 1 1 +github.com/onflow/flow-cli/flowkit/state.go:205.2,205.14 1 1 +github.com/onflow/flow-cli/flowkit/state.go:209.83,213.44 2 1 +github.com/onflow/flow-cli/flowkit/state.go:213.44,214.78 1 1 +github.com/onflow/flow-cli/flowkit/state.go:214.78,218.4 3 1 +github.com/onflow/flow-cli/flowkit/state.go:221.2,221.16 1 1 +github.com/onflow/flow-cli/flowkit/state.go:225.80,231.16 4 1 +github.com/onflow/flow-cli/flowkit/state.go:231.16,233.3 1 0 +github.com/onflow/flow-cli/flowkit/state.go:235.2,236.44 2 1 +github.com/onflow/flow-cli/flowkit/state.go:236.44,238.3 1 1 +github.com/onflow/flow-cli/flowkit/state.go:239.2,240.16 2 1 +github.com/onflow/flow-cli/flowkit/state.go:240.16,242.3 1 0 +github.com/onflow/flow-cli/flowkit/state.go:244.2,244.18 1 1 +github.com/onflow/flow-cli/flowkit/state.go:252.19,254.16 2 1 +github.com/onflow/flow-cli/flowkit/state.go:254.16,256.3 1 0 +github.com/onflow/flow-cli/flowkit/state.go:258.2,266.8 3 1 +github.com/onflow/flow-cli/flowkit/state.go:274.19,276.16 2 1 +github.com/onflow/flow-cli/flowkit/state.go:276.16,278.3 1 0 +github.com/onflow/flow-cli/flowkit/state.go:280.2,285.8 1 1 +github.com/onflow/flow-cli/flowkit/tests/resources.go:524.45,527.30 2 1 +github.com/onflow/flow-cli/flowkit/tests/resources.go:527.30,529.3 1 1 +github.com/onflow/flow-cli/flowkit/tests/resources.go:531.2,531.40 1 1 +github.com/onflow/flow-cli/flowkit/tests/resources.go:534.35,537.32 3 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:537.32,539.3 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:540.2,540.16 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:543.37,545.25 2 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:545.25,551.3 2 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:552.2,552.17 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:555.45,558.32 3 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:558.32,560.3 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:561.2,561.17 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:564.41,566.25 2 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:566.25,568.3 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:569.2,569.18 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:578.58,582.2 3 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:584.41,586.2 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:588.29,590.2 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:592.39,594.2 1 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:596.102,616.2 4 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:618.72,624.2 4 0 +github.com/onflow/flow-cli/flowkit/tests/resources.go:626.75,645.2 2 0 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 90a7a1f5c..000000000 --- a/docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/README.md diff --git a/docs/account-add-contract.md b/docs/account-add-contract.md deleted file mode 100644 index 8b872296a..000000000 --- a/docs/account-add-contract.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/account-add-contract.md diff --git a/docs/account-remove-contract.md b/docs/account-remove-contract.md deleted file mode 100644 index 3d23036fe..000000000 --- a/docs/account-remove-contract.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/account-remove-contract.md diff --git a/docs/account-staking-info.md b/docs/account-staking-info.md deleted file mode 100644 index 1cb98beb0..000000000 --- a/docs/account-staking-info.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/account-staking-info.md diff --git a/docs/account-update-contract.md b/docs/account-update-contract.md deleted file mode 100644 index 8e740464a..000000000 --- a/docs/account-update-contract.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/account-update-contract.md diff --git a/docs/build-transactions.md b/docs/build-transactions.md deleted file mode 100644 index 9eb81c58e..000000000 --- a/docs/build-transactions.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/build-transactions.md diff --git a/docs/complex-transactions.md b/docs/complex-transactions.md deleted file mode 100644 index 7deaea349..000000000 --- a/docs/complex-transactions.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/complex-transactions.md diff --git a/docs/configuration.md b/docs/configuration.md deleted file mode 100644 index c5de596d3..000000000 --- a/docs/configuration.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/configuration.md diff --git a/docs/create-accounts.md b/docs/create-accounts.md deleted file mode 100644 index 81128380a..000000000 --- a/docs/create-accounts.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/create-accounts.md diff --git a/docs/data-collection.md b/docs/data-collection.md deleted file mode 100644 index e8a0c8c3a..000000000 --- a/docs/data-collection.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/data-collection.md diff --git a/docs/decode-keys.md b/docs/decode-keys.md deleted file mode 100644 index 2df4973b6..000000000 --- a/docs/decode-keys.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/decode-keys.md diff --git a/docs/decode-transactions.md b/docs/decode-transactions.md deleted file mode 100644 index cc47b4afe..000000000 --- a/docs/decode-transactions.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/decode-transactions.md diff --git a/docs/deploy-project-contracts.md b/docs/deploy-project-contracts.md deleted file mode 100644 index e322985a3..000000000 --- a/docs/deploy-project-contracts.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/deploy-project-contracts.md diff --git a/docs/derive-keys.md b/docs/derive-keys.md deleted file mode 100644 index 1568ef04a..000000000 --- a/docs/derive-keys.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/derive-keys.md diff --git a/docs/developer-updates/release-notes-v17.md b/docs/developer-updates/release-notes-v17.md deleted file mode 100644 index ac1a7aef0..000000000 --- a/docs/developer-updates/release-notes-v17.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v17.md diff --git a/docs/developer-updates/release-notes-v18.md b/docs/developer-updates/release-notes-v18.md deleted file mode 100644 index d5cd1daa1..000000000 --- a/docs/developer-updates/release-notes-v18.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v18.md diff --git a/docs/developer-updates/release-notes-v19.md b/docs/developer-updates/release-notes-v19.md deleted file mode 100644 index 0245fa12e..000000000 --- a/docs/developer-updates/release-notes-v19.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v19.md diff --git a/docs/developer-updates/release-notes-v21.md b/docs/developer-updates/release-notes-v21.md deleted file mode 100644 index fcf6ef08b..000000000 --- a/docs/developer-updates/release-notes-v21.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v21.md diff --git a/docs/developer-updates/release-notes-v24.md b/docs/developer-updates/release-notes-v24.md deleted file mode 100644 index e30c506f3..000000000 --- a/docs/developer-updates/release-notes-v24.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v24.md diff --git a/docs/developer-updates/release-notes-v26.md b/docs/developer-updates/release-notes-v26.md deleted file mode 100644 index aac2f54ba..000000000 --- a/docs/developer-updates/release-notes-v26.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v26.md diff --git a/docs/developer-updates/release-notes-v28.md b/docs/developer-updates/release-notes-v28.md deleted file mode 100644 index e5616550a..000000000 --- a/docs/developer-updates/release-notes-v28.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/developer-updates/release-notes-v28.md diff --git a/docs/emulator-snapshot.md b/docs/emulator-snapshot.md deleted file mode 100644 index a4e01f4f7..000000000 --- a/docs/emulator-snapshot.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/emulator-snapshot.md diff --git a/docs/execute-scripts.md b/docs/execute-scripts.md deleted file mode 100644 index cbb527f9c..000000000 --- a/docs/execute-scripts.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/execute-scripts.md diff --git a/docs/generate-keys.md b/docs/generate-keys.md deleted file mode 100644 index 1f3e71aae..000000000 --- a/docs/generate-keys.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/generate-keys.md diff --git a/docs/get-accounts.md b/docs/get-accounts.md deleted file mode 100644 index d46e48c7c..000000000 --- a/docs/get-accounts.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/get-accounts.md diff --git a/docs/get-blocks.md b/docs/get-blocks.md deleted file mode 100644 index fb9cb8309..000000000 --- a/docs/get-blocks.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/get-blocks.md diff --git a/docs/get-collections.md b/docs/get-collections.md deleted file mode 100644 index 5935b4186..000000000 --- a/docs/get-collections.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/get-collections.md diff --git a/docs/get-events.md b/docs/get-events.md deleted file mode 100644 index 2e87d6f24..000000000 --- a/docs/get-events.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/get-events.md diff --git a/docs/get-status.md b/docs/get-status.md deleted file mode 100644 index 9ee3304d3..000000000 --- a/docs/get-status.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/get-status.md diff --git a/docs/get-transactions.md b/docs/get-transactions.md deleted file mode 100644 index 899def186..000000000 --- a/docs/get-transactions.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/get-transactions.md diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index cfecc8176..000000000 --- a/docs/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/index.md diff --git a/docs/initialize-configuration.md b/docs/initialize-configuration.md deleted file mode 100644 index 5df654c3a..000000000 --- a/docs/initialize-configuration.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/initialize-configuration.md diff --git a/docs/install.md b/docs/install.md deleted file mode 100644 index 221030e60..000000000 --- a/docs/install.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/install.md diff --git a/docs/manage-configuration.md b/docs/manage-configuration.md deleted file mode 100644 index 18ebddd24..000000000 --- a/docs/manage-configuration.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/manage-configuration.md diff --git a/docs/project-app.md b/docs/project-app.md deleted file mode 100644 index 19b6ed1f0..000000000 --- a/docs/project-app.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/project-app.md diff --git a/docs/project-contracts.md b/docs/project-contracts.md deleted file mode 100644 index 15fcbaded..000000000 --- a/docs/project-contracts.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/project-contracts.md diff --git a/docs/run-tests.md b/docs/run-tests.md deleted file mode 100644 index 2ef50b80f..000000000 --- a/docs/run-tests.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/run-tests.md diff --git a/docs/security.md b/docs/security.md deleted file mode 100644 index b3afded34..000000000 --- a/docs/security.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/security.md diff --git a/docs/send-signed-transactions.md b/docs/send-signed-transactions.md deleted file mode 100644 index 8c3491b81..000000000 --- a/docs/send-signed-transactions.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/send-signed-transactions.md diff --git a/docs/send-transactions.md b/docs/send-transactions.md deleted file mode 100644 index c61f6a165..000000000 --- a/docs/send-transactions.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/send-transactions.md diff --git a/docs/sign-transaction.md b/docs/sign-transaction.md deleted file mode 100644 index 63962c949..000000000 --- a/docs/sign-transaction.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/sign-transaction.md diff --git a/docs/signature-generate.md b/docs/signature-generate.md deleted file mode 100644 index a697a18fd..000000000 --- a/docs/signature-generate.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/signature-generate.md diff --git a/docs/signature-verify.md b/docs/signature-verify.md deleted file mode 100644 index 2ca135056..000000000 --- a/docs/signature-verify.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/signature-verify.md diff --git a/docs/snapshot-save.md b/docs/snapshot-save.md deleted file mode 100644 index 30b61c8dd..000000000 --- a/docs/snapshot-save.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/snapshot-save.md diff --git a/docs/start-emulator.md b/docs/start-emulator.md deleted file mode 100644 index 0fd2bffc3..000000000 --- a/docs/start-emulator.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/start-emulator.md diff --git a/docs/super-commands.md b/docs/super-commands.md deleted file mode 100644 index 8274462c5..000000000 --- a/docs/super-commands.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/super-commands.md diff --git a/docs/template.md b/docs/template.md deleted file mode 100644 index 9f50fdb9b..000000000 --- a/docs/template.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/template.md diff --git a/docs/tools.md b/docs/tools.md deleted file mode 100644 index 5a37105c0..000000000 --- a/docs/tools.md +++ /dev/null @@ -1,3 +0,0 @@ -# This document has been moved to a new location: - -https://github.com/onflow/docs/tree/main/docs/tooling/flow-cli/tools.md diff --git a/flowkit/events.go b/events.go similarity index 100% rename from flowkit/events.go rename to events.go diff --git a/flowkit/events_test.go b/events_test.go similarity index 100% rename from flowkit/events_test.go rename to events_test.go diff --git a/flowkit/flowkit.go b/flowkit.go similarity index 100% rename from flowkit/flowkit.go rename to flowkit.go diff --git a/flowkit/README.md b/flowkit/README.md deleted file mode 100644 index dc8ed2f0a..000000000 --- a/flowkit/README.md +++ /dev/null @@ -1,16 +0,0 @@ -## Flowkit Package Design -Flowkit is a core package used by the CLI commands. It features APIs for interacting with the Flow network -in the context of flow.json configuration values. Flowkit is defined by the [interface here](services.go). - -Flowkit contains multiple subpackages, the most important ones are: -- **config**: parsing and storing of flow.json values, as well as validation, -- **gateway**: implementation of Flow AN methods, uses emulator as well as Go SDK to communicate with ANs, -- **project**: stateful operations on top of flow.json, which allows resolving imports in contracts used in deployments - -It is important we define clear boundaries between flowkit and other CLI packages. If we are in doubt where certain -methods should be implemented we must ask ourselves if the method provides value for any other consumers of the -pacakge or only provides utility for CLI usage, if it's only providing utility for CLI then it should be added inside -the internal package, instead of flowkit. If in doubt better to add things to internal package and then move to flowkit -if such need is identified. - - diff --git a/flowkit/go.mod b/flowkit/go.mod deleted file mode 100644 index 859ef77d2..000000000 --- a/flowkit/go.mod +++ /dev/null @@ -1,207 +0,0 @@ -module github.com/onflow/flow-cli/flowkit - -go 1.20 - -require ( - github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 - github.com/ethereum/go-ethereum v1.12.0 - github.com/gosuri/uilive v0.0.4 - github.com/invopop/jsonschema v0.7.0 - github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12 - github.com/onflow/cadence v0.42.6 - github.com/onflow/flow-emulator v0.59.0 - github.com/onflow/flow-go v0.32.4-0.20231130134727-3c01c7f8966c - github.com/onflow/flow-go-sdk v0.41.17 - github.com/onflow/flow-go/crypto v0.24.9 - github.com/pkg/errors v0.9.1 - github.com/rs/zerolog v1.29.0 - github.com/spf13/afero v1.9.4 - github.com/stretchr/testify v1.8.4 - github.com/thoas/go-funk v0.9.2 - github.com/tyler-smith/go-bip39 v1.1.0 - golang.org/x/exp v0.0.0-20230321023759-10a507213a29 - gonum.org/v1/gonum v0.13.0 - google.golang.org/grpc v1.59.0 -) - -require ( - cloud.google.com/go/compute v1.23.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.1 // indirect - cloud.google.com/go/kms v1.15.0 // indirect - github.com/DataDog/zstd v1.5.2 // indirect - github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect - github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect - github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect - github.com/VictoriaMetrics/fastcache v1.6.0 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.7.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.2.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e // indirect - github.com/cockroachdb/errors v1.9.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect - github.com/cockroachdb/redact v1.1.3 // indirect - github.com/coreos/go-semver v0.3.0 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/deckarep/golang-set/v2 v2.1.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect - github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/ef-ds/deque v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c // indirect - github.com/fxamacker/circlehash v0.3.0 // indirect - github.com/getsentry/sentry-go v0.18.0 // indirect - github.com/glebarez/go-sqlite v1.21.1 // indirect - github.com/go-logr/logr v1.2.4 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/go-redis/redis/v8 v8.11.5 // indirect - github.com/go-stack/stack v1.8.1 // indirect - github.com/gofrs/flock v0.8.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.1 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.11.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect - github.com/hashicorp/golang-lru/v2 v2.0.2 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/holiman/bloomfilter/v2 v2.0.3 // indirect - github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c // indirect - github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/bbloom v0.0.4 // indirect - github.com/ipfs/go-block-format v0.1.2 // indirect - github.com/ipfs/go-cid v0.4.1 // indirect - github.com/ipfs/go-datastore v0.6.0 // indirect - github.com/ipfs/go-ipfs-blockstore v1.3.0 // indirect - github.com/ipfs/go-ipfs-ds-help v1.1.0 // indirect - github.com/ipfs/go-ipfs-util v0.0.2 // indirect - github.com/ipfs/go-ipld-format v0.5.0 // indirect - github.com/ipfs/go-log v1.0.5 // indirect - github.com/ipfs/go-log/v2 v2.5.1 // indirect - github.com/ipfs/go-metrics-interface v0.0.1 // indirect - github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect - github.com/jbenet/goprocess v0.1.4 // indirect - github.com/k0kubun/pp/v3 v3.2.0 // indirect - github.com/kevinburke/go-bindata v3.23.0+incompatible // indirect - github.com/klauspost/compress v1.16.5 // indirect - github.com/klauspost/cpuid/v2 v2.2.5 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-libp2p v0.28.1 // indirect - github.com/logrusorgru/aurora v2.0.3+incompatible // indirect - github.com/logrusorgru/aurora/v4 v4.0.0 // indirect - github.com/magiconair/properties v1.8.7 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.9.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.0 // indirect - github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-multistream v0.4.1 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/onflow/atree v0.6.0 // indirect - github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20231016154253-a00dbf7c061f // indirect - github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20231016154253-a00dbf7c061f // indirect - github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230711213910-baad011d2b13 // indirect - github.com/onflow/flow-nft/lib/go/contracts v1.1.0 // indirect - github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6 // indirect - github.com/onflow/nft-storefront/lib/go/contracts v0.0.0-20221222181731-14b90207cead // indirect - github.com/onflow/sdks v0.5.0 // indirect - github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/pierrec/lz4 v2.6.1+incompatible // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.16.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.10.1 // indirect - github.com/psiemens/graceland v1.0.0 // indirect - github.com/psiemens/sconfig v0.1.0 // indirect - github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect - github.com/sethvargo/go-retry v0.2.3 // indirect - github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/slok/go-http-metrics v0.10.0 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.8.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.15.0 // indirect - github.com/stretchr/objx v0.5.0 // indirect - github.com/subosito/gotenv v1.4.2 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect - github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect - github.com/tklauser/go-sysconf v0.3.9 // indirect - github.com/tklauser/numcpus v0.3.0 // indirect - github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d // indirect - github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect - github.com/vmihailenco/msgpack/v4 v4.3.11 // indirect - github.com/vmihailenco/tagparser v0.1.1 // indirect - github.com/x448/float16 v0.8.4 // indirect - github.com/zeebo/blake3 v0.2.3 // indirect - go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/otel v1.16.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect - go.opentelemetry.io/otel/metric v1.16.0 // indirect - go.opentelemetry.io/otel/sdk v1.16.0 // indirect - go.opentelemetry.io/otel/trace v1.16.0 // indirect - go.opentelemetry.io/proto/otlp v0.19.0 // indirect - go.uber.org/atomic v1.11.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.12.0 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/oauth2 v0.11.0 // indirect - golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.126.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect - gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect - lukechampine.com/blake3 v1.2.1 // indirect - modernc.org/libc v1.22.3 // indirect - modernc.org/mathutil v1.5.0 // indirect - modernc.org/memory v1.5.0 // indirect - modernc.org/sqlite v1.21.1 // indirect -) diff --git a/flowkit/go.sum b/flowkit/go.sum deleted file mode 100644 index 263187cd6..000000000 --- a/flowkit/go.sum +++ /dev/null @@ -1,1475 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= -cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= -cloud.google.com/go/kms v1.0.0/go.mod h1:nhUehi+w7zht2XrUfvTRNpxrfayBHqP4lu2NSywui/0= -cloud.google.com/go/kms v1.15.0 h1:xYl5WEaSekKYN5gGRyhjvZKM22GVBBCzegGNVPy+aIs= -cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= -github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= -github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= -github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= -github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= -github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= -github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= -github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= -github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= -github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= -github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd/btcec/v2 v2.2.1 h1:xP60mv8fvp+0khmrN0zTdPC3cNm24rfeE6lh2R/Yv3E= -github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bytecodealliance/wasmtime-go v0.22.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= -github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= -github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= -github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= -github.com/cockroachdb/logtags v0.0.0-20211118104740-dabe8e521a4f/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM/P5NAw0e2Rf1FGvzDau1h54MKvx8G7w= -github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= -github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/ef-ds/deque v1.0.4 h1:iFAZNmveMT9WERAkqLJ+oaABF9AcVQ5AjXem/hroniI= -github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= -github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/ethereum/go-ethereum v1.9.9/go.mod h1:a9TqabFudpDu1nucId+k9S8R9whYaHnGBLKFouA5EAo= -github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2zljOa0= -github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= -github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fxamacker/cbor/v2 v2.2.1-0.20210927235116-3d6d5d1de29b/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c h1:5tm/Wbs9d9r+qZaUFXk59CWDD0+77PBqDREffYkyi5c= -github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/fxamacker/circlehash v0.1.0/go.mod h1:3aq3OfVvsWtkWMb6A1owjOQFA+TLsD5FgJflnaQwtMM= -github.com/fxamacker/circlehash v0.3.0 h1:XKdvTtIJV9t7DDUtsf0RIpC1OcxZtPbmgIH7ekx28WA= -github.com/fxamacker/circlehash v0.3.0/go.mod h1:3aq3OfVvsWtkWMb6A1owjOQFA+TLsD5FgJflnaQwtMM= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= -github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/glebarez/go-sqlite v1.21.1 h1:7MZyUPh2XTrHS7xNEHQbrhfMZuPSzhkm2A1qgg0y5NY= -github.com/glebarez/go-sqlite v1.21.1/go.mod h1:ISs8MF6yk5cL4n/43rSOmVMGJJjHYr7L2MbZZ5Q4E2E= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= -github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/go-test/deep v1.0.5/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= -github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2-0.20190517061210-b285ee9cfc6c/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= -github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gosuri/uilive v0.0.4 h1:hUEBpQDj8D8jXgtCdBu7sWsy5sbW/5GhuO8KBwJ2jyY= -github.com/gosuri/uilive v0.0.4/go.mod h1:V/epo5LjjlDE5RJUcqx8dbw+zc93y5Ya3yg8tfZ74VI= -github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru/v2 v2.0.2 h1:Dwmkdr5Nc/oBiXgJS3CDHNhJtIHkuZ3DZF5twqnfBdU= -github.com/hashicorp/golang-lru/v2 v2.0.2/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c h1:DZfsyhDK1hnSS5lH8l+JggqzEleHteTYfutAiVlSUM8= -github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= -github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= -github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 h1:i462o439ZjprVSFSZLZxcsoAe592sZB1rci2Z8j4wdk= -github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/invopop/jsonschema v0.7.0 h1:2vgQcBz1n256N+FpX3Jq7Y17AjYt46Ig3zIWyy770So= -github.com/invopop/jsonschema v0.7.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0= -github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= -github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= -github.com/ipfs/boxo v0.10.0 h1:tdDAxq8jrsbRkYoF+5Rcqyeb91hgWe2hp7iLu7ORZLY= -github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo= -github.com/ipfs/go-block-format v0.1.2/go.mod h1:mACVcrxarQKstUU3Yf/RdwbC4DzPV6++rO2a3d+a/KE= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= -github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk= -github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ipfs-blockstore v1.3.0 h1:m2EXaWgwTzAfsmt5UdJ7Is6l4gJcaM/A12XwJyvYvMM= -github.com/ipfs/go-ipfs-blockstore v1.3.0/go.mod h1:KgtZyc9fq+P2xJUiCAzbRdhhqJHvsw8u2Dlqy2MyRTE= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-ds-help v1.1.0 h1:yLE2w9RAsl31LtfMt91tRZcrx+e61O5mDxFRR994w4Q= -github.com/ipfs/go-ipfs-ds-help v1.1.0/go.mod h1:YR5+6EaebOhfcqVCyqemItCLthrpVNot+rsOU/5IatU= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-ipld-format v0.5.0 h1:WyEle9K96MSrvr47zZHKKcDxJ/vlpET6PSiQsAFO+Ds= -github.com/ipfs/go-ipld-format v0.5.0/go.mod h1:ImdZqJQaEouMjCvqCe0ORUS+uoBmf7Hf+EO/jh+nk3M= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= -github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= -github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= -github.com/k0kubun/pp/v3 v3.2.0 h1:h33hNTZ9nVFNP3u2Fsgz8JXiF5JINoZfFq4SvKJwNcs= -github.com/k0kubun/pp/v3 v3.2.0/go.mod h1:ODtJQbQcIRfAD3N+theGCV1m/CBxweERz2dapdz1EwA= -github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= -github.com/kevinburke/go-bindata v3.22.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM= -github.com/kevinburke/go-bindata v3.23.0+incompatible h1:rqNOXZlqrYhMVVAsQx8wuc+LaA73YcfbQ407wAykyS8= -github.com/kevinburke/go-bindata v3.23.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= -github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= -github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= -github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-libp2p v0.28.1 h1:YurK+ZAI6cKfASLJBVFkpVBdl3wGhFi6fusOt725ii8= -github.com/libp2p/go-libp2p v0.28.1/go.mod h1:s3Xabc9LSwOcnv9UD4nORnXKTsWkPMkIMB/JIGXVnzk= -github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= -github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0= -github.com/libp2p/go-libp2p-pubsub v0.9.3 h1:ihcz9oIBMaCK9kcx+yHWm3mLAFBMAUsM4ux42aikDxo= -github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= -github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ= -github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12 h1:qFV7dBLhw5z4hka5gjtIzg1Kq9ie8t8P7Cy0uIxRyAQ= -github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12/go.mod h1:QIsK6U93yCP6TnGsShCv5wl4gcz/mpCHl+aToBsl5Sc= -github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= -github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/logrusorgru/aurora/v4 v4.0.0 h1:sRjfPpun/63iADiSvGGjgA1cAYegEWMPCJdUpJYn9JA= -github.com/logrusorgru/aurora/v4 v4.0.0/go.mod h1:lP0iIa2nrnT/qoFXcOZSrZQpJ1o6n2CUf/hyHi2Q4ZQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= -github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= -github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= -github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= -github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo= -github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= -github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onflow/atree v0.1.0-beta1.0.20211027184039-559ee654ece9/go.mod h1:+6x071HgCF/0v5hQcaE5qqjc2UqN5gCU8h5Mk6uqpOg= -github.com/onflow/atree v0.6.0 h1:j7nQ2r8npznx4NX39zPpBYHmdy45f4xwoi+dm37Jk7c= -github.com/onflow/atree v0.6.0/go.mod h1:gBHU0M05qCbv9NN0kijLWMgC47gHVNBIp4KmsVFi0tc= -github.com/onflow/cadence v0.20.1/go.mod h1:7mzUvPZUIJztIbr9eTvs+fQjWWHTF8veC+yk4ihcNIA= -github.com/onflow/cadence v0.42.6 h1:VtI0EpKrdbfqITRMsvyZC4dhgcW1x1LNUQuEpdMDzus= -github.com/onflow/cadence v0.42.6/go.mod h1:raU8va8QRyTa/eUbhej4mbyW2ETePfSaywoo36MddgE= -github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20231016154253-a00dbf7c061f h1:S8yIZw9LFXfYD1V5H9BiixihHw3GrXVPrmfplSzYaww= -github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20231016154253-a00dbf7c061f/go.mod h1:jM6GMAL+m0hjusUgiYDNrixPQ6b9s8xjoJQoEu5bHQI= -github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20231016154253-a00dbf7c061f h1:Ep+Mpo2miWMe4pjPGIaEvEzshRep30dvNgxqk+//FrQ= -github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20231016154253-a00dbf7c061f/go.mod h1:ZeLxwaBkzuSInESGjL8/IPZWezF+YOYsYbMrZlhN+q4= -github.com/onflow/flow-emulator v0.59.0 h1:KIfm9/+x62KqcZDjqE35fkuvVuY506OZ917xNtb3U6E= -github.com/onflow/flow-emulator v0.59.0/go.mod h1:Js1KKaXrui2yKKkXAlKTqmByRySis6/FH+vkGA6Kqu0= -github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230711213910-baad011d2b13 h1:B4ll7e3j+MqTJv2122Enq3RtDNzmIGRu9xjV7fo7un0= -github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230711213910-baad011d2b13/go.mod h1:kTMFIySzEJJeupk+7EmXs0EJ6CBWY/MV9fv9iYQk+RU= -github.com/onflow/flow-go v0.32.4-0.20231130134727-3c01c7f8966c h1:75LED6hmarR0uazKZG8nkqqDlUiqz6NdzkdQQiGjvlI= -github.com/onflow/flow-go v0.32.4-0.20231130134727-3c01c7f8966c/go.mod h1:YJDAoDjbY4OWBj44XV+Qe+dIwn+hlywUDL5xclOOLbw= -github.com/onflow/flow-go-sdk v0.24.0/go.mod h1:IoptMLPyFXWvyd9yYA6/4EmSeeozl6nJoIv4FaEMg74= -github.com/onflow/flow-go-sdk v0.41.17 h1:HpNn3j2fqLGA6H3HGfAuh2A+TsPBv8gWO3kvK9Hvtic= -github.com/onflow/flow-go-sdk v0.41.17/go.mod h1:ZIj2XBI9R0QiKzbI6iPwOeqyIy/M4+atczoMOEWdKYw= -github.com/onflow/flow-go/crypto v0.21.3/go.mod h1:vI6V4CY3R6c4JKBxdcRiR/AnjBfL8OSD97bJc60cLuQ= -github.com/onflow/flow-go/crypto v0.24.9 h1:0EQp+kSZYJepMIiSypfJVe7tzsPcb6UXOdOtsTCDhBs= -github.com/onflow/flow-go/crypto v0.24.9/go.mod h1:fqCzkIBBMRRkciVrvW21rECKq1oD7Q6u+bCI78lfNX0= -github.com/onflow/flow-nft/lib/go/contracts v1.1.0 h1:rhUDeD27jhLwOqQKI/23008CYfnqXErrJvc4EFRP2a0= -github.com/onflow/flow-nft/lib/go/contracts v1.1.0/go.mod h1:YsvzYng4htDgRB9sa9jxdwoTuuhjK8WYWXTyLkIigZY= -github.com/onflow/flow/protobuf/go/flow v0.2.2/go.mod h1:gQxYqCfkI8lpnKsmIjwtN2mV/N2PIwc1I+RUK4HPIc8= -github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6 h1:KMN+OEVaw7KAgxL3p8ux7CMuyTvacAlYTbasOqowh4M= -github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6/go.mod h1:NA2pX2nw8zuaxfKphhKsk00kWLwfd+tv8mS23YXO4Sk= -github.com/onflow/nft-storefront/lib/go/contracts v0.0.0-20221222181731-14b90207cead h1:2j1Unqs76Z1b95Gu4C3Y28hzNUHBix7wL490e61SMSw= -github.com/onflow/nft-storefront/lib/go/contracts v0.0.0-20221222181731-14b90207cead/go.mod h1:E3ScfQb5XcWJCIAdtIeEnr5i5l2y60GT0BTXeIHseWg= -github.com/onflow/sdks v0.5.0 h1:2HCRibwqDaQ1c9oUApnkZtEAhWiNY2GTpRD5+ftdkN8= -github.com/onflow/sdks v0.5.0/go.mod h1:F0dj0EyHC55kknLkeD10js4mo14yTdMotnWMslPirrU= -github.com/onflow/wal v0.0.0-20230529184820-bc9f8244608d h1:gAEqYPn3DS83rHIKEpsajnppVD1+zwuYPFyeDVFaQvg= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= -github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= -github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/psiemens/graceland v1.0.0 h1:L580AVV4Q2XLcPpmvxJRH9UpEAYr/eu2jBKmMglhvM8= -github.com/psiemens/graceland v1.0.0/go.mod h1:1Tof+vt1LbmcZFE0lzgdwMN0QBymAChG3FRgDx8XisU= -github.com/psiemens/sconfig v0.1.0 h1:xfWqW+TRpih7mXZIqKYTmpRhlZLQ1kbxV8EjllPv76s= -github.com/psiemens/sconfig v0.1.0/go.mod h1:+MLKqdledP/8G3rOBpknbLh0IclCf4WneJUtS26JB2U= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= -github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/robertkrimen/otto v0.0.0-20170205013659-6a77b7cbc37d/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= -github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -github.com/schollz/progressbar/v3 v3.8.3/go.mod h1:pWnVCjSBZsT2X3nx9HfRdnCDrpbevliMeoEVhStwHko= -github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sethvargo/go-retry v0.2.3 h1:oYlgvIvsju3jNbottWABtbnoLC+GDtLdBHxKWxQm/iU= -github.com/sethvargo/go-retry v0.2.3/go.mod h1:1afjQuvh7s4gflMObvjLPaWgluLLyhA1wmVZ6KLpICw= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/slok/go-http-metrics v0.10.0 h1:rh0LaYEKza5eaYRGDXujKrOln57nHBi4TtVhmNEpbgM= -github.com/slok/go-http-metrics v0.10.0/go.mod h1:lFqdaS4kWMfUKCSukjC47PdCeTk+hXDUVm8kLHRqJ38= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.4 h1:Sd43wM1IWz/s1aVXdOBkjJvuP8UdyqioeE4AmM0QsBs= -github.com/spf13/afero v1.9.4/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= -github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20170601210322-f6abca593680/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.4/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/supranational/blst v0.3.11-0.20230406105308-e9dfc5ee724b h1:u49mjRnygnB34h8OKbnNJFVUtWSKIKb1KukdV8bILUM= -github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c h1:HelZ2kAFadG0La9d+4htN4HzQ68Bm2iM9qKMSMES6xg= -github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c/go.mod h1:JlzghshsemAMDGZLytTFY8C1JQxQPhnatWqNwUXjggo= -github.com/thoas/go-funk v0.9.2 h1:oKlNYv0AY5nyf9g+/GhMgS/UO2ces0QRdPKwkhY3VCk= -github.com/thoas/go-funk v0.9.2/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= -github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= -github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= -github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d h1:5JInRQbk5UBX8JfUvKh2oYTLMVwj3p6n+wapDDm7hko= -github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d/go.mod h1:Nlx5Y115XQvNcIdIy7dZXaNSUpzwBSge4/Ivk93/Yog= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= -github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/vmihailenco/msgpack/v4 v4.3.11 h1:Q47CePddpNGNhk4GCnAx9DDtASi2rasatE0cd26cZoE= -github.com/vmihailenco/msgpack/v4 v4.3.11/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= -github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= -github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zeebo/assert v1.1.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= -github.com/zeebo/blake3 v0.2.0/go.mod h1:G9pM4qQwjRzF1/v7+vabMj/c5mWpGZ2Wzo3Eb4z0pb4= -github.com/zeebo/blake3 v0.2.3 h1:TFoLXsjeXqRNFxSbk35Dk4YtszE/MQQGK10BH4ptoTg= -github.com/zeebo/blake3 v0.2.3/go.mod h1:mjJjZpnsyIVtVgTOSpJ9vmRE4wgDeyt2HU3qXvvKCaQ= -github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= -github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= -github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= -go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 h1:t4ZwRPU+emrcvM2e9DHd0Fsf0JTPVcbfa/BhTDF03d0= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0/go.mod h1:vLarbg68dH2Wa77g71zmKQqlQ8+8Rq3GRG31uc0WcWI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 h1:cbsD4cUcviQGXdw8+bo5x2wazq10SKz8hEbtCRPcU78= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0/go.mod h1:JgXSGah17croqhJfhByOLVY719k1emAXC8MVhCIJlRs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 h1:ap+y8RXX3Mu9apKVtOkM6WSFESLM8K3wNQyOU8sWHcc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0/go.mod h1:5w41DY6S9gZrbjuq6Y+753e96WfPha5IcsOSZTtullM= -go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= -go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= -go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE= -go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4= -go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= -go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= -golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201014080544-cc95f250f6bc/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200828161849-5deb26317202/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.1/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM= -gonum.org/v1/gonum v0.13.0/go.mod h1:/WPYRckkfWrhWefxyYTfrTtQR0KH4iyHNuzxqXAKyAU= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= -google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= -google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= -google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20190213234257-ec84240a7772/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb78= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= -launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= -lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= -lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= -modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= -modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= -modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU= -modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= -pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= -pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/flowkit/flowkit_test.go b/flowkit_test.go similarity index 100% rename from flowkit/flowkit_test.go rename to flowkit_test.go diff --git a/flowkit/gateway/emulator.go b/gateway/emulator.go similarity index 100% rename from flowkit/gateway/emulator.go rename to gateway/emulator.go diff --git a/flowkit/gateway/gateway.go b/gateway/gateway.go similarity index 100% rename from flowkit/gateway/gateway.go rename to gateway/gateway.go diff --git a/flowkit/gateway/grpc.go b/gateway/grpc.go similarity index 100% rename from flowkit/gateway/grpc.go rename to gateway/grpc.go diff --git a/flowkit/gateway/mocks/Gateway.go b/gateway/mocks/Gateway.go similarity index 100% rename from flowkit/gateway/mocks/Gateway.go rename to gateway/mocks/Gateway.go diff --git a/flowkit/gateway/mocks/gateway_mock.go b/gateway/mocks/gateway_mock.go similarity index 100% rename from flowkit/gateway/mocks/gateway_mock.go rename to gateway/mocks/gateway_mock.go diff --git a/go.mod b/go.mod index d1991a187..859ef77d2 100644 --- a/go.mod +++ b/go.mod @@ -1,112 +1,82 @@ -module github.com/onflow/flow-cli +module github.com/onflow/flow-cli/flowkit go 1.20 require ( - github.com/dukex/mixpanel v1.0.1 - github.com/getsentry/sentry-go v0.26.0 - github.com/go-git/go-git/v5 v5.11.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 + github.com/ethereum/go-ethereum v1.12.0 github.com/gosuri/uilive v0.0.4 - github.com/manifoldco/promptui v0.9.0 + github.com/invopop/jsonschema v0.7.0 + github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12 github.com/onflow/cadence v0.42.6 - github.com/onflow/cadence-tools/languageserver v0.33.3 - github.com/onflow/cadence-tools/test v0.14.5 - github.com/onflow/fcl-dev-wallet v0.7.4 - github.com/onflow/flixkit-go v1.1.1 - github.com/onflow/flow-cli/flowkit v1.11.0 - github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20231016154253-a00dbf7c061f github.com/onflow/flow-emulator v0.59.0 + github.com/onflow/flow-go v0.32.4-0.20231130134727-3c01c7f8966c github.com/onflow/flow-go-sdk v0.41.17 - github.com/onflowser/flowser/v3 v3.1.3 - github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c + github.com/onflow/flow-go/crypto v0.24.9 github.com/pkg/errors v0.9.1 - github.com/psiemens/sconfig v0.1.0 - github.com/radovskyb/watcher v1.0.7 - github.com/sergi/go-diff v1.3.1 - github.com/spf13/afero v1.10.0 - github.com/spf13/cobra v1.8.0 - github.com/spf13/viper v1.16.0 + github.com/rs/zerolog v1.29.0 + github.com/spf13/afero v1.9.4 github.com/stretchr/testify v1.8.4 + github.com/thoas/go-funk v0.9.2 + github.com/tyler-smith/go-bip39 v1.1.0 golang.org/x/exp v0.0.0-20230321023759-10a507213a29 - google.golang.org/grpc v1.61.0 + gonum.org/v1/gonum v0.13.0 + google.golang.org/grpc v1.59.0 ) require ( - cloud.google.com/go/compute v1.23.3 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.5 // indirect - cloud.google.com/go/kms v1.15.5 // indirect - dario.cat/mergo v1.0.0 // indirect + cloud.google.com/go/iam v1.1.1 // indirect + cloud.google.com/go/kms v1.15.0 // indirect github.com/DataDog/zstd v1.5.2 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 // indirect github.com/VictoriaMetrics/fastcache v1.6.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bits-and-blooms/bitset v1.10.0 // indirect + github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.2.1 // indirect - github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3 // indirect - github.com/c-bata/go-prompt v0.2.6 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/cockroachdb/errors v1.9.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 // indirect github.com/cockroachdb/redact v1.1.3 // indirect github.com/coreos/go-semver v0.3.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect - github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/ef-ds/deque v1.0.4 // indirect - github.com/emirpasic/gods v1.18.1 // indirect - github.com/ethereum/go-ethereum v1.12.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c // indirect github.com/fxamacker/circlehash v0.3.0 // indirect + github.com/getsentry/sentry-go v0.18.0 // indirect github.com/glebarez/go-sqlite v1.21.1 // indirect - github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect - github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-stack/stack v1.8.1 // indirect - github.com/gobwas/ws v1.3.0 // indirect github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect - github.com/google/go-dap v0.11.0 // indirect - github.com/google/go-github v17.0.0+incompatible // indirect - github.com/google/go-querystring v1.1.0 // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.4.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gorilla/mux v1.8.1 // indirect + github.com/google/s2a-go v0.1.4 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2 v2.0.0-rc.2 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.2 // indirect - github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect @@ -116,9 +86,7 @@ require ( github.com/holiman/bloomfilter/v2 v2.0.3 // indirect github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c // indirect github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 // indirect - github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/invopop/jsonschema v0.7.0 // indirect github.com/ipfs/bbloom v0.0.4 // indirect github.com/ipfs/go-block-format v0.1.2 // indirect github.com/ipfs/go-cid v0.4.1 // indirect @@ -130,29 +98,22 @@ require ( github.com/ipfs/go-log v1.0.5 // indirect github.com/ipfs/go-log/v2 v2.5.1 // indirect github.com/ipfs/go-metrics-interface v0.0.1 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect github.com/jbenet/goprocess v0.1.4 // indirect - github.com/joho/godotenv v1.4.0 // indirect github.com/k0kubun/pp/v3 v3.2.0 // indirect github.com/kevinburke/go-bindata v3.23.0+incompatible // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/compress v1.16.5 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.28.1 // indirect - github.com/libp2p/go-libp2p-pubsub v0.9.3 // indirect - github.com/libp2p/go-msgio v0.3.0 // indirect - github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect github.com/logrusorgru/aurora/v4 v4.0.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/mattn/go-tty v0.0.4 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect @@ -167,57 +128,47 @@ require ( github.com/multiformats/go-varint v0.0.7 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/onflow/atree v0.6.0 // indirect - github.com/onflow/cadence-tools/lint v0.14.1 // indirect github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20231016154253-a00dbf7c061f // indirect + github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20231016154253-a00dbf7c061f // indirect github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230711213910-baad011d2b13 // indirect - github.com/onflow/flow-go v0.32.4-0.20231211231711-1aba0828ca33 // indirect - github.com/onflow/flow-go/crypto v0.25.0 // indirect github.com/onflow/flow-nft/lib/go/contracts v1.1.0 // indirect github.com/onflow/flow/protobuf/go/flow v0.3.2-0.20231124194313-106cc495def6 // indirect github.com/onflow/nft-storefront/lib/go/contracts v0.0.0-20221222181731-14b90207cead // indirect github.com/onflow/sdks v0.5.0 // indirect - github.com/onflow/wal v0.0.0-20230529184820-bc9f8244608d // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect - github.com/pkg/term v1.2.0-beta.2 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.16.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect github.com/psiemens/graceland v1.0.0 // indirect + github.com/psiemens/sconfig v0.1.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.4 // indirect - github.com/rogpeppe/go-internal v1.11.0 // indirect - github.com/rs/cors v1.8.0 // indirect - github.com/rs/zerolog v1.29.0 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/sethvargo/go-retry v0.2.3 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/skeema/knownhosts v1.2.1 // indirect github.com/slok/go-http-metrics v0.10.0 // indirect - github.com/sourcegraph/jsonrpc2 v0.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stoewer/go-strcase v1.3.0 // indirect + github.com/spf13/viper v1.15.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c // indirect - github.com/tidwall/pretty v1.2.1 // indirect github.com/tklauser/go-sysconf v0.3.9 // indirect github.com/tklauser/numcpus v0.3.0 // indirect github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d // indirect - github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect github.com/vmihailenco/msgpack/v4 v4.3.11 // indirect github.com/vmihailenco/tagparser v0.1.1 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zeebo/blake3 v0.2.3 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/otel v1.16.0 // indirect @@ -231,36 +182,26 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.16.0 // indirect - golang.org/x/mod v0.13.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/oauth2 v0.14.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.14.0 // indirect - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect - gonum.org/v1/gonum v0.13.0 // indirect - google.golang.org/api v0.149.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect + golang.org/x/crypto v0.12.0 // indirect + golang.org/x/net v0.14.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.126.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect lukechampine.com/blake3 v1.2.1 // indirect modernc.org/libc v1.22.3 // indirect modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/sqlite v1.21.1 // indirect - nhooyr.io/websocket v1.8.7 // indirect ) - -replace github.com/onflow/flow-cli/flowkit => ./flowkit - -// this is a woraround for the flow-go/crypto cross compliation issue -replace github.com/onflow/flow-go/crypto => github.com/onflow/flow-go/crypto v0.24.9 diff --git a/go.sum b/go.sum index be177c5c1..263187cd6 100644 --- a/go.sum +++ b/go.sum @@ -27,24 +27,24 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/kms v1.0.0/go.mod h1:nhUehi+w7zht2XrUfvTRNpxrfayBHqP4lu2NSywui/0= -cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= -cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= +cloud.google.com/go/kms v1.15.0 h1:xYl5WEaSekKYN5gGRyhjvZKM22GVBBCzegGNVPy+aIs= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -55,9 +55,6 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= @@ -84,56 +81,25 @@ github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUq github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5 h1:zl/OfRA6nftbBK9qTohYBJ5xvw6C/oNKizR7cZGl3cI= github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= -github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= -github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.17.7 h1:CLSjnhJSTSogvqUGhIC6LqFKATMRexcxLZ0i/Nzk9Eg= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.5.1 h1:VGkV9KmhGqOQWnHyi4gLG98kE6OecT42fdrCGFWxJsc= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.3.0 h1:gceOysEWNNwLd6cki65IMBZ4WAM0MwgBQq2n7kejoT8= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25 h1:5LHn8JQ0qvjD9L9JhMtylnkcw7j05GDZqM9Oin6hpr0= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.7.0 h1:HWsM0YQWX76V6MOp07YuTYacm8k7h69ObJuw7Nck+og= -github.com/aws/aws-sdk-go-v2/service/s3 v1.15.0 h1:nPLfLPfglacc29Y949sDxpr3X/blaY40s3B85WT2yZU= -github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= @@ -141,23 +107,23 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88= -github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.7.0 h1:YjAGVd3XmtK9ktAbX8Zg2g2PwLIMjGREZJHlV4j7NEo= +github.com/bits-and-blooms/bitset v1.7.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd/btcec/v2 v2.2.1 h1:xP60mv8fvp+0khmrN0zTdPC3cNm24rfeE6lh2R/Yv3E= github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3 h1:SDlJ7bAm4ewvrmZtR0DaiYbQGdKPeaaIm7bM+qRhFeU= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.3/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2 h1:KdUfX2zKommPRa+PD0sWZUyXe9w277ABlgELO7H04IM= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.2/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bytecodealliance/wasmtime-go v0.22.0/go.mod h1:q320gUxqyI8yB+ZqRuaJOEnGkAnHh6WtJjMaT2CW4wI= github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw= -github.com/c-bata/go-prompt v0.2.6 h1:POP+nrHE+DfLYx370bedwNhsqmpCUynWPxuHi0C5vZI= -github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -169,18 +135,13 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cloudflare/cloudflare-go v0.10.2-0.20190916151808-a80f83b9add9/go.mod h1:1MxXX1Ux4x6mqPmjkUgTP1CdXIBXKX7T+Jk9Gxrmx+U= github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= +github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -189,7 +150,6 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/datadriven v1.0.3-0.20230801171734-e384cf455877 h1:1MLK4YpFtIEo3ZtMA5C795Wtv5VuUnrXX7mQG+aHg6o= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= @@ -201,45 +161,32 @@ github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06 h1:T+Np/xtzIjYM github.com/cockroachdb/pebble v0.0.0-20230906160148-46873a6a7a06/go.mod h1:bynZ3gvVyhlvjLI7PT6dmZ7g76xzJ7HpxfjgkzCGz6s= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI= github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= @@ -253,27 +200,14 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/dukex/mixpanel v1.0.1 h1:IQ3qBjtgltF044jU9+i6MubdDdpc8PKpK9yvfawRgeE= -github.com/dukex/mixpanel v1.0.1/go.mod h1:080BDsRRMzAxViWT3OjlQaMW9nhaIEXDHHtGeDK60b8= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/ef-ds/deque v1.0.4 h1:iFAZNmveMT9WERAkqLJ+oaABF9AcVQ5AjXem/hroniI= github.com/ef-ds/deque v1.0.4/go.mod h1:gXDnTC3yqvBcHbq2lcExjtAcVrOnJCbMcZXmuj8Z4tg= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= -github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -289,15 +223,10 @@ github.com/ethereum/go-ethereum v1.12.0 h1:bdnhLPtqETd4m3mS8BGMNvBTf36bO5bx/hxE2 github.com/ethereum/go-ethereum v1.12.0/go.mod h1:/oo2X/dZLJjf2mJ6YT9wcWxa4nNJDBKDBU6sFIpx1Gs= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -308,50 +237,28 @@ github.com/fxamacker/cbor/v2 v2.4.1-0.20230228173756-c0c9f774e40c/go.mod h1:TA1x github.com/fxamacker/circlehash v0.1.0/go.mod h1:3aq3OfVvsWtkWMb6A1owjOQFA+TLsD5FgJflnaQwtMM= github.com/fxamacker/circlehash v0.3.0 h1:XKdvTtIJV9t7DDUtsf0RIpC1OcxZtPbmgIH7ekx28WA= github.com/fxamacker/circlehash v0.3.0/go.mod h1:3aq3OfVvsWtkWMb6A1owjOQFA+TLsD5FgJflnaQwtMM= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gammazero/deque v0.1.0 h1:f9LnNmq66VDeuAlSAapemq/U7hJ2jpIWa4c09q8Dlik= -github.com/gammazero/workerpool v1.1.2 h1:vuioDQbgrz4HoaCi2q1HLlOXdpbap5AET7xu5/qj87g= github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/getsentry/sentry-go v0.26.0 h1:IX3++sF6/4B5JcevhdZfdKIHfyvMmAq/UnqcyT2H6mA= -github.com/getsentry/sentry-go v0.26.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= +github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/glebarez/go-sqlite v1.21.1 h1:7MZyUPh2XTrHS7xNEHQbrhfMZuPSzhkm2A1qgg0y5NY= github.com/glebarez/go-sqlite v1.21.1/go.mod h1:ISs8MF6yk5cL4n/43rSOmVMGJJjHYr7L2MbZZ5Q4E2E= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= -github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= -github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -361,39 +268,19 @@ github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AE github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-test/deep v1.0.5/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= -github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= -github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/gobwas/ws v1.3.0 h1:sbeU3Y4Qzlb+MOzIe6mQGf7QR4Hkv6ZD0qhGkBFL2O0= -github.com/gobwas/ws v1.3.0/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -407,7 +294,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -444,7 +330,6 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -465,16 +350,9 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-dap v0.11.0 h1:SpAZJL41rOOvd85PuLCCLE1dteTQOyKNnn0H3DBHywo= -github.com/google/go-dap v0.11.0/go.mod h1:HAeyoSd2WIfTfg+0GRXcFrb+RnojAtGNh+k+XTIxJDE= -github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -496,29 +374,22 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= @@ -528,39 +399,18 @@ github.com/gosuri/uilive v0.0.4 h1:hUEBpQDj8D8jXgtCdBu7sWsy5sbW/5GhuO8KBwJ2jyY= github.com/gosuri/uilive v0.0.4/go.mod h1:V/epo5LjjlDE5RJUcqx8dbw+zc93y5Ya3yg8tfZ74VI= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2 v2.0.0-rc.2 h1:uxUHSMwWDJ/9jVPHNumRC8WZOi3hrBL22ObVOoLg4ww= -github.com/grpc-ecosystem/go-grpc-middleware/providers/zerolog/v2 v2.0.0-rc.2/go.mod h1:BL7w7qd2l/j9jgY6WMhYutfOFQc0I8RTVwtjpnAMoTM= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-20200501113911-9a95f0fdbfea/go.mod h1:GugMBs30ZSAkckqXEAIEGyYdDH6EgqowG8ppA3Zt+AY= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.2 h1:1aeRCnE2CkKYqyzBu0+B2lgTcZPc3ea2lGpijeHbI1c= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.2/go.mod h1:GhphxcdlaRyAuBSvo6rV71BvQcvB/vuX8ugCyybuS2k= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -570,19 +420,11 @@ github.com/hashicorp/golang-lru/v2 v2.0.2 h1:Dwmkdr5Nc/oBiXgJS3CDHNhJtIHkuZ3DZF5 github.com/hashicorp/golang-lru/v2 v2.0.2/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hexops/autogold/v2 v2.2.1 h1:JPUXuZQGkcQMv7eeDXuNMovjfoRYaa0yVcm+F3voaGY= -github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/hexops/valast v1.4.4 h1:rETyycw+/L2ZVJHHNxEBgh8KUn+87WugH9MxcEv9PGs= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c h1:DZfsyhDK1hnSS5lH8l+JggqzEleHteTYfutAiVlSUM8= github.com/holiman/uint256 v1.2.2-0.20230321075855-87b91420868c/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= github.com/hydrogen18/memlistener v0.0.0-20200120041712-dcc25e7acd91/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 h1:i462o439ZjprVSFSZLZxcsoAe592sZB1rci2Z8j4wdk= @@ -590,13 +432,10 @@ github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/invopop/jsonschema v0.7.0 h1:2vgQcBz1n256N+FpX3Jq7Y17AjYt46Ig3zIWyy770So= github.com/invopop/jsonschema v0.7.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0= github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= @@ -635,30 +474,20 @@ github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0Gqw github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg= -github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= @@ -673,15 +502,12 @@ github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubc github.com/kevinburke/go-bindata v3.22.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM= github.com/kevinburke/go-bindata v3.23.0+incompatible h1:rqNOXZlqrYhMVVAsQx8wuc+LaA73YcfbQ407wAykyS8= github.com/kevinburke/go-bindata v3.23.0+incompatible/go.mod h1:/pEEZ72flUW2p0yi30bslSp9YqD9pysLxunQDdb2CPM= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= @@ -690,7 +516,6 @@ github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuOb github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -707,27 +532,16 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= -github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= github.com/libp2p/go-libp2p v0.28.1 h1:YurK+ZAI6cKfASLJBVFkpVBdl3wGhFi6fusOt725ii8= github.com/libp2p/go-libp2p v0.28.1/go.mod h1:s3Xabc9LSwOcnv9UD4nORnXKTsWkPMkIMB/JIGXVnzk= github.com/libp2p/go-libp2p-asn-util v0.3.0 h1:gMDcMyYiZKkocGXDQ5nsUQyquC9+H+iLEQHwOCZ7s8s= github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0= github.com/libp2p/go-libp2p-pubsub v0.9.3 h1:ihcz9oIBMaCK9kcx+yHWm3mLAFBMAUsM4ux42aikDxo= -github.com/libp2p/go-libp2p-pubsub v0.9.3/go.mod h1:RYA7aM9jIic5VV47WXu4GkcRxRhrdElWf8xtyli+Dzc= -github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= -github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= -github.com/libp2p/go-reuseport v0.3.0 h1:iiZslO5byUYZEg9iCwJGf5h+sf1Agmqx2V2FDjPyvUw= github.com/libp2p/go-yamux/v4 v4.0.0 h1:+Y80dV2Yx/kv7Y7JKu0LECyVdMXm1VUoko+VQ9rBfZQ= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12 h1:qFV7dBLhw5z4hka5gjtIzg1Kq9ie8t8P7Cy0uIxRyAQ= github.com/lmars/go-slip10 v0.0.0-20190606092855-400ba44fee12/go.mod h1:QIsK6U93yCP6TnGsShCv5wl4gcz/mpCHl+aToBsl5Sc= github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= @@ -735,14 +549,9 @@ github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczG github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/logrusorgru/aurora/v4 v4.0.0 h1:sRjfPpun/63iADiSvGGjgA1cAYegEWMPCJdUpJYn9JA= github.com/logrusorgru/aurora/v4 v4.0.0/go.mod h1:lP0iIa2nrnT/qoFXcOZSrZQpJ1o6n2CUf/hyHi2Q4ZQ= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -754,8 +563,6 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5-0.20180830101745-3fb116b82035/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -764,52 +571,37 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-tty v0.0.3/go.mod h1:ihxohKRERHTVzN+aSVRwACLCeqIoZAWpoICkkvrWyR0= -github.com/mattn/go-tty v0.0.4 h1:NVikla9X8MN0SQAqCYzpGyXv0jY7MNl3HOWD2dkle7E= -github.com/mattn/go-tty v0.0.4/go.mod h1:u5GGXBtZU6RQoKV8gY5W6UhMudbR5vXnUe7j3pxse28= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -823,7 +615,6 @@ github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a github.com/multiformats/go-multiaddr v0.9.0 h1:3h4V1LHIk5w4hJHekMKWALPXErDfz/sggzwC/NcqbDQ= github.com/multiformats/go-multiaddr v0.9.0/go.mod h1:mI67Lb1EeTOYb8GQfL/7wpIZwc46ElrvzhYnoJOmTT0= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= @@ -838,25 +629,15 @@ github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXS github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= @@ -867,16 +648,6 @@ github.com/onflow/atree v0.6.0/go.mod h1:gBHU0M05qCbv9NN0kijLWMgC47gHVNBIp4KmsVF github.com/onflow/cadence v0.20.1/go.mod h1:7mzUvPZUIJztIbr9eTvs+fQjWWHTF8veC+yk4ihcNIA= github.com/onflow/cadence v0.42.6 h1:VtI0EpKrdbfqITRMsvyZC4dhgcW1x1LNUQuEpdMDzus= github.com/onflow/cadence v0.42.6/go.mod h1:raU8va8QRyTa/eUbhej4mbyW2ETePfSaywoo36MddgE= -github.com/onflow/cadence-tools/languageserver v0.33.3 h1:o6f2kPxsgSruH+HT8CakcZlm43QX5WtIuW6XVh/R5DM= -github.com/onflow/cadence-tools/languageserver v0.33.3/go.mod h1:rUy3zxWWZl+KYAyzhAcnrYNI8ZDKI242RFK8Q9w+90M= -github.com/onflow/cadence-tools/lint v0.14.1 h1:Qkw8+q+ALfB62W7KWHMFh+90gTfJ+NoFulYETMCTkcI= -github.com/onflow/cadence-tools/lint v0.14.1/go.mod h1:w1xfiiPpZ35v/F+2+MF/Rily7LcIgE0dm/FMW1vQkpc= -github.com/onflow/cadence-tools/test v0.14.5 h1:u1kYkotKdwKEf9c3h65mI3VMevBkHY+7WsOiOLamjzU= -github.com/onflow/cadence-tools/test v0.14.5/go.mod h1:ix09Bb3GQ/fZMNpSR8E+vSFItGF54fzP9gFxU7AsOIw= -github.com/onflow/fcl-dev-wallet v0.7.4 h1:vI6t3U0AO88R/Iitn5KsnniSpbN9Lqsqwvi9EJT4C0k= -github.com/onflow/fcl-dev-wallet v0.7.4/go.mod h1:kc42jkiuoPJmxMRFjfbRO9XvnR/3XLheaOerxVMDTiw= -github.com/onflow/flixkit-go v1.1.1 h1:ARgLsfWxc3LjgUHUAELildY5lxJ6kA4gVfAS2+ZRaCE= -github.com/onflow/flixkit-go v1.1.1/go.mod h1:XkbRPv6drM8uQpvdKgZ5stShtOlOMiQ6Fy86D0EsW5U= github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20231016154253-a00dbf7c061f h1:S8yIZw9LFXfYD1V5H9BiixihHw3GrXVPrmfplSzYaww= github.com/onflow/flow-core-contracts/lib/go/contracts v1.2.4-0.20231016154253-a00dbf7c061f/go.mod h1:jM6GMAL+m0hjusUgiYDNrixPQ6b9s8xjoJQoEu5bHQI= github.com/onflow/flow-core-contracts/lib/go/templates v1.2.4-0.20231016154253-a00dbf7c061f h1:Ep+Mpo2miWMe4pjPGIaEvEzshRep30dvNgxqk+//FrQ= @@ -885,11 +656,12 @@ github.com/onflow/flow-emulator v0.59.0 h1:KIfm9/+x62KqcZDjqE35fkuvVuY506OZ917xN github.com/onflow/flow-emulator v0.59.0/go.mod h1:Js1KKaXrui2yKKkXAlKTqmByRySis6/FH+vkGA6Kqu0= github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230711213910-baad011d2b13 h1:B4ll7e3j+MqTJv2122Enq3RtDNzmIGRu9xjV7fo7un0= github.com/onflow/flow-ft/lib/go/contracts v0.7.1-0.20230711213910-baad011d2b13/go.mod h1:kTMFIySzEJJeupk+7EmXs0EJ6CBWY/MV9fv9iYQk+RU= -github.com/onflow/flow-go v0.32.4-0.20231211231711-1aba0828ca33 h1:QCUFvIlE4Y7OMp3ZqXMCOw7emLV0jBMcC5BSoNX375Q= -github.com/onflow/flow-go v0.32.4-0.20231211231711-1aba0828ca33/go.mod h1:+MttssV2daiKbbTOLDfeTWU1affMjC+1mcR3fnqWtGM= +github.com/onflow/flow-go v0.32.4-0.20231130134727-3c01c7f8966c h1:75LED6hmarR0uazKZG8nkqqDlUiqz6NdzkdQQiGjvlI= +github.com/onflow/flow-go v0.32.4-0.20231130134727-3c01c7f8966c/go.mod h1:YJDAoDjbY4OWBj44XV+Qe+dIwn+hlywUDL5xclOOLbw= github.com/onflow/flow-go-sdk v0.24.0/go.mod h1:IoptMLPyFXWvyd9yYA6/4EmSeeozl6nJoIv4FaEMg74= github.com/onflow/flow-go-sdk v0.41.17 h1:HpNn3j2fqLGA6H3HGfAuh2A+TsPBv8gWO3kvK9Hvtic= github.com/onflow/flow-go-sdk v0.41.17/go.mod h1:ZIj2XBI9R0QiKzbI6iPwOeqyIy/M4+atczoMOEWdKYw= +github.com/onflow/flow-go/crypto v0.21.3/go.mod h1:vI6V4CY3R6c4JKBxdcRiR/AnjBfL8OSD97bJc60cLuQ= github.com/onflow/flow-go/crypto v0.24.9 h1:0EQp+kSZYJepMIiSypfJVe7tzsPcb6UXOdOtsTCDhBs= github.com/onflow/flow-go/crypto v0.24.9/go.mod h1:fqCzkIBBMRRkciVrvW21rECKq1oD7Q6u+bCI78lfNX0= github.com/onflow/flow-nft/lib/go/contracts v1.1.0 h1:rhUDeD27jhLwOqQKI/23008CYfnqXErrJvc4EFRP2a0= @@ -902,99 +674,54 @@ github.com/onflow/nft-storefront/lib/go/contracts v0.0.0-20221222181731-14b90207 github.com/onflow/sdks v0.5.0 h1:2HCRibwqDaQ1c9oUApnkZtEAhWiNY2GTpRD5+ftdkN8= github.com/onflow/sdks v0.5.0/go.mod h1:F0dj0EyHC55kknLkeD10js4mo14yTdMotnWMslPirrU= github.com/onflow/wal v0.0.0-20230529184820-bc9f8244608d h1:gAEqYPn3DS83rHIKEpsajnppVD1+zwuYPFyeDVFaQvg= -github.com/onflow/wal v0.0.0-20230529184820-bc9f8244608d/go.mod h1:iMC8gkLqu4nkbkAla5HkSBb+FGyQOZiWz3DYm2wSXCk= -github.com/onflowser/flowser/v3 v3.1.3 h1:Y8HyQRwhroCWGcV2UPBD+GZDLHTzu2GjdaBoIEn6YAU= -github.com/onflowser/flowser/v3 v3.1.3/go.mod h1:3UZqdIyKVh+wXOhz9p2YrVl+ZvxohxhAmdM68dDKYPE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= -github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= -github.com/pkg/term v1.2.0-beta.2 h1:L3y/h2jkuBVFdWiJvNfYfKmzcCnILw7mJWm2JQuMppw= -github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -1003,13 +730,6 @@ github.com/psiemens/graceland v1.0.0 h1:L580AVV4Q2XLcPpmvxJRH9UpEAYr/eu2jBKmMglh github.com/psiemens/graceland v1.0.0/go.mod h1:1Tof+vt1LbmcZFE0lzgdwMN0QBymAChG3FRgDx8XisU= github.com/psiemens/sconfig v0.1.0 h1:xfWqW+TRpih7mXZIqKYTmpRhlZLQ1kbxV8EjllPv76s= github.com/psiemens/sconfig v0.1.0/go.mod h1:+MLKqdledP/8G3rOBpknbLh0IclCf4WneJUtS26JB2U= -github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= -github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= -github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y0= -github.com/radovskyb/watcher v1.0.7 h1:AYePLih6dpmS32vlHfhCeli8127LzkIgwJGcwwe8tUE= -github.com/radovskyb/watcher v1.0.7/go.mod h1:78okwvY5wPdzcb1UYnip1pvrZNIVEIh/Cm+ZuvsUYIg= -github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -1023,32 +743,21 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.0 h1:P2KMzcFwrPoSjkF1WLRPsp3UMLyql8L4v9hQpVeK5so= -github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/schollz/progressbar/v3 v3.8.3/go.mod h1:pWnVCjSBZsT2X3nx9HfRdnCDrpbevliMeoEVhStwHko= github.com/schollz/progressbar/v3 v3.13.1 h1:o8rySDYiQ59Mwzy2FELeHY5ZARXZTVJC7iHD6PEFUiE= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= -github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/sethvargo/go-retry v0.2.3 h1:oYlgvIvsju3jNbottWABtbnoLC+GDtLdBHxKWxQm/iU= github.com/sethvargo/go-retry v0.2.3/go.mod h1:1afjQuvh7s4gflMObvjLPaWgluLLyhA1wmVZ6KLpICw= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= @@ -1056,52 +765,38 @@ github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= -github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/slok/go-http-metrics v0.10.0 h1:rh0LaYEKza5eaYRGDXujKrOln57nHBi4TtVhmNEpbgM= github.com/slok/go-http-metrics v0.10.0/go.mod h1:lFqdaS4kWMfUKCSukjC47PdCeTk+hXDUVm8kLHRqJ38= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/jsonrpc2 v0.1.0 h1:ohJHjZ+PcaLxDUjqk2NC3tIGsVa5bXThe1ZheSXOjuk= -github.com/sourcegraph/jsonrpc2 v0.1.0/go.mod h1:ZafdZgk/axhT1cvZAPOhw+95nz2I/Ra5qMlU4gTRwIo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.9.4 h1:Sd43wM1IWz/s1aVXdOBkjJvuP8UdyqioeE4AmM0QsBs= +github.com/spf13/afero v1.9.4/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= -github.com/stoewer/go-strcase v1.3.0 h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs= -github.com/stoewer/go-strcase v1.3.0/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -1118,12 +813,11 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.10/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.4/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/supranational/blst v0.3.11-0.20230406105308-e9dfc5ee724b h1:u49mjRnygnB34h8OKbnNJFVUtWSKIKb1KukdV8bILUM= github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -1131,13 +825,11 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45 github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c h1:HelZ2kAFadG0La9d+4htN4HzQ68Bm2iM9qKMSMES6xg= github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c/go.mod h1:JlzghshsemAMDGZLytTFY8C1JQxQPhnatWqNwUXjggo= github.com/thoas/go-funk v0.9.2 h1:oKlNYv0AY5nyf9g+/GhMgS/UO2ces0QRdPKwkhY3VCk= -github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= -github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/thoas/go-funk v0.9.2/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d h1:5JInRQbk5UBX8JfUvKh2oYTLMVwj3p6n+wapDDm7hko= github.com/turbolent/prettier v0.0.0-20220320183459-661cc755135d/go.mod h1:Nlx5Y115XQvNcIdIy7dZXaNSUpzwBSge4/Ivk93/Yog= @@ -1145,12 +837,9 @@ github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:s github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -1167,8 +856,6 @@ github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgq github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= @@ -1193,10 +880,6 @@ github.com/zeebo/pcg v1.0.0/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo= github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1223,9 +906,7 @@ go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLk go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= @@ -1234,21 +915,19 @@ go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1257,18 +936,17 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1282,7 +960,6 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -1312,18 +989,13 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= -golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1332,11 +1004,9 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1345,7 +1015,6 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= @@ -1365,15 +1034,11 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1390,8 +1055,8 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= -golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1404,17 +1069,13 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1429,18 +1090,15 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200107162124-548cf772de50/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1450,15 +1108,12 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1470,7 +1125,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1488,7 +1142,6 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1498,24 +1151,17 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1526,21 +1172,14 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1558,7 +1197,6 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1571,7 +1209,6 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1606,22 +1243,19 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= -golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= -golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.6.1/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= gonum.org/v1/gonum v0.13.0 h1:a0T3bh+7fhRyqeNbiC3qVHYmkiQgit3wnNan/2c0HMM= gonum.org/v1/gonum v0.13.0/go.mod h1:/WPYRckkfWrhWefxyYTfrTtQR0KH4iyHNuzxqXAKyAU= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1652,25 +1286,22 @@ google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= -google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY= -google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1687,7 +1318,6 @@ google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= @@ -1703,7 +1333,6 @@ google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1730,23 +1359,18 @@ google.golang.org/genproto v0.0.0-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211007155348-82e027067bd4/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405 h1:o4S3HvTUEXgRsNSUQsALDVog0O9F/U1JJlHmmUN8Uas= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1756,7 +1380,6 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= @@ -1770,8 +1393,9 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.61.0 h1:TOvOcuXn30kRao+gfcvsebNEa5iZIiLkisYEkf7R7o0= -google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1793,13 +1417,10 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -1812,18 +1433,14 @@ gopkg.in/sourcemap.v1 v1.0.5/go.mod h1:2RlvNNSMglmRrcvhfuzp4hQHwOtjxlbjX7UPY/GXb gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1831,7 +1448,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1840,6 +1456,7 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= @@ -1850,15 +1467,9 @@ modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU= modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= -mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= -nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/install.ps1 b/install.ps1 deleted file mode 100644 index 0e13ed48a..000000000 --- a/install.ps1 +++ /dev/null @@ -1,85 +0,0 @@ -<# -.Synopsis - Install the Flow CLI on Windows. -.DESCRIPTION - By default, the latest release will be installed. - If '-Version' is specified, then the given version is installed. -.Parameter Directory - The destination path to install to. -.Parameter Version - The version to install. -.Parameter AddToPath - Add the absolute destination path to the 'User' scope environment variable 'Path'. -.Parameter GitHubToken - Optional GitHub token to use to prevent rate limiting. -.EXAMPLE - Install the current version - .\install.ps1 -.EXAMPLE - Install version v0.5.2 - .\install.ps1 -Version v0.5.2 -.EXAMPLE - Invoke-Expression "& { $(Invoke-RestMethod 'https://storage.googleapis.com/flow-cli/install.ps1') }" -#> -param ( - [string] $version="", - [string] $directory = "$env:APPDATA\Flow", - [bool] $addToPath = $true, - [string] $githubToken = "" -) - -Set-StrictMode -Version 3.0 - -# Enable support for ANSI escape sequences -Set-ItemProperty HKCU:\Console VirtualTerminalLevel -Type DWORD 1 - -$ErrorActionPreference = "Stop" - -$repo = "onflow/flow-cli" -$versionURL = "https://api.github.com/repos/$repo/releases/latest" -$assetsURL = "https://github.com/$repo/releases/download" - -# Add the GitHub token to the web request headers if it was provided -$webRequestOptions = if ($githubToken) { - @{ 'Headers' = @{ 'Authorization' = "Bearer $githubToken" } } -} else { - @{} -} - -if (!$version) { - $q = (Invoke-WebRequest -Uri "$versionURL" -UseBasicParsing @webRequestOptions) | ConvertFrom-Json - $version = $q.tag_name -} - -Write-Output("Installing version {0} ..." -f $version) - -New-Item -ItemType Directory -Force -Path $directory | Out-Null - -$progressPreference = 'silentlyContinue' - -Invoke-WebRequest -Uri "$assetsURL/$version/flow-cli-$version-windows-amd64.zip" -UseBasicParsing -OutFile "$directory\flow.zip" @webRequestOptions - -Expand-Archive -Path "$directory\flow.zip" -DestinationPath "$directory" -Force - -try { - Stop-Process -Name flow -Force - Start-Sleep -Seconds 1 -} -catch {} - -Move-Item -Path "$directory\flow-cli.exe" -Destination "$directory\flow.exe" -Force - -# Check if the directory is already in the PATH -$existingPaths = [Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::User).Split(';') - -if ($addToPath -and $existingPaths -notcontains $directory) { - Write-Output "Adding to PATH ..." - $processPath = [System.Environment]::GetEnvironmentVariable('PATH', [System.EnvironmentVariableTarget]::Process) + ";$directory" - $userPath = [System.Environment]::GetEnvironmentVariable('PATH', [System.EnvironmentVariableTarget]::User) + ";$directory" - [System.Environment]::SetEnvironmentVariable("PATH", $processPath, [System.EnvironmentVariableTarget]::Process) - [System.Environment]::SetEnvironmentVariable("PATH", $userPath, [System.EnvironmentVariableTarget]::User) -} - -Write-Output "Done." - -Start-Sleep -Seconds 1 \ No newline at end of file diff --git a/install.sh b/install.sh deleted file mode 100755 index a2da2bfe6..000000000 --- a/install.sh +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -# Exit as soon as any command fails -set -e - -REPO="onflow/flow-cli" -ASSETS_URL="https://github.com/$REPO/releases/download/" -# The version to download, set by get_version (defaults to args[1]) -VERSION="$1" -# The architecture string, set by get_architecture -ARCH="" - -# Optional environment variable for Github API token -# If GITHUB_TOKEN is set, use it in the curl requests to avoid rate limiting -github_token_header="" -if [ -n "$GITHUB_TOKEN" ]; then - github_token_header="Authorization: Bearer $GITHUB_TOKEN" -fi - -# Get the architecture (CPU, OS) of the current system as a string. -# Only MacOS/x86_64/ARM64 and Linux/x86_64/ARM64 architectures are supported. -get_architecture() { - _ostype="$(uname -s)" - _cputype="$(uname -m)" - _targetpath="" - if [ "$_ostype" = Darwin ] && [ "$_cputype" = i386 ]; then - if sysctl hw.optional.x86_64 | grep -q ': 1'; then - _cputype=x86_64 - fi - fi - case "$_ostype" in - Linux) - _ostype=linux - _targetpath=$HOME/.local/bin - ;; - Darwin) - _ostype=darwin - _targetpath=/usr/local/bin - ;; - *) - echo "unrecognized OS type: $_ostype" - return 1 - ;; - esac - case "$_cputype" in - x86_64 | x86-64 | x64 | amd64) - _cputype=amd64 - ;; - arm64 | aarch64) - _cputype=arm64 - ;; - *) - echo "unknown CPU type: $_cputype" - return 1 - ;; - esac - _arch="${_ostype}-${_cputype}" - ARCH="${_arch}" - TARGET_PATH="${_targetpath}" -} - -# Get the latest version from remote if none specified in args. -get_version() { - if [ -z "$VERSION" ] - then - VERSION="" - if [ -n "$github_token_header" ] - then - VERSION=$(curl -H "$github_token_header" -s "https://api.github.com/repos/$REPO/releases/latest" | grep -E 'tag_name' | cut -d '"' -f 4) - else - VERSION=$(curl -s "https://api.github.com/repos/$REPO/releases/latest" | grep -E 'tag_name' | cut -d '"' -f 4) - fi - - if [ -z "$VERSION" ] && [ -n "$github_token_header" ] - then - echo "Failed to get latest version from Github API, is your GITHUB_TOKEN valid? Trying without authentication..." - github_token_header="" - get_version - fi - fi -} - -# Determine the system architecure, download the appropriate binary, and -# install it in `/usr/local/bin` on macOS and `~/.local/bin` on Linux -# with executable permission. -main() { - - get_architecture || exit 1 - get_version || exit 1 - - echo "Downloading version $VERSION ..." - - tmpfile=$(mktemp 2>/dev/null || mktemp -t flow) - url="$ASSETS_URL$VERSION/flow-cli-$VERSION-$ARCH.tar.gz" - if [ -n "$github_token_header" ] - then - curl -H "$github_token_header" -L --progress-bar "$url" -o $tmpfile - else - curl -L --progress-bar "$url" -o $tmpfile - fi - - # Ensure we don't receive a not found error as response. - if grep -q "Not Found" $tmpfile - then - echo "Version $VERSION could not be found" - exit 1 - fi - - [ -d $TARGET_PATH ] || mkdir -p $TARGET_PATH - - tar -xf $tmpfile -C $TARGET_PATH - mv $TARGET_PATH/flow-cli $TARGET_PATH/flow - chmod +x $TARGET_PATH/flow - - echo "Successfully installed the Flow CLI to $TARGET_PATH." - echo "Make sure $TARGET_PATH is in your \$PATH environment variable." -} - -main diff --git a/internal/accounts/accounts.go b/internal/accounts/accounts.go deleted file mode 100644 index a88a25071..000000000 --- a/internal/accounts/accounts.go +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "bytes" - "fmt" - - "github.com/onflow/cadence" - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "accounts", - Short: "Create and retrieve accounts and deploy contracts", - TraverseChildren: true, - GroupID: "resources", -} - -func testnetFaucetURL(address flow.Address) string { - return fmt.Sprintf("https://testnet-faucet.onflow.org/fund-account?address=%s", address) -} - -func init() { - addContractCommand.AddToParent(Cmd) - removeCommand.AddToParent(Cmd) - updateCommand.AddToParent(Cmd) - createCommand.AddToParent(Cmd) - stakingCommand.AddToParent(Cmd) - getCommand.AddToParent(Cmd) - fundCommand.AddToParent(Cmd) -} - -// accountResult represent result from all account commands. -type accountResult struct { - *flow.Account - include []string -} - -func (r *accountResult) JSON() any { - result := make(map[string]any) - result["address"] = r.Address - result["balance"] = cadence.UFix64(r.Balance).String() - - keys := make([]string, 0) - for _, key := range r.Keys { - keys = append(keys, fmt.Sprintf("%x", key.PublicKey.Encode())) - } - - result["keys"] = keys - - contracts := make([]string, 0, len(r.Contracts)) - for name := range r.Contracts { - contracts = append(contracts, name) - } - - result["contracts"] = contracts - - if command.ContainsFlag(r.include, "contracts") { - c := make(map[string]string) - for name, code := range r.Contracts { - c[name] = string(code) - } - result["code"] = c - } - - return result -} - -func (r *accountResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - if r.Address.IsValid(flow.Testnet) { - _, _ = fmt.Fprintf( - writer, - "If you would like to fund the account with 1000 FLOW tokens for testing,"+ - " visit %s\n\n", - testnetFaucetURL(r.Address), - ) - } - - _, _ = fmt.Fprintf(writer, "Address\t 0x%s\n", r.Address) - _, _ = fmt.Fprintf(writer, "Balance\t %s\n", cadence.UFix64(r.Balance)) - - _, _ = fmt.Fprintf(writer, "Keys\t %d\n", len(r.Keys)) - - for i, key := range r.Keys { - _, _ = fmt.Fprintf(writer, "\nKey %d\tPublic Key\t %x\n", i, key.PublicKey.Encode()) - _, _ = fmt.Fprintf(writer, "\tWeight\t %d\n", key.Weight) - _, _ = fmt.Fprintf(writer, "\tSignature Algorithm\t %s\n", key.SigAlgo) - _, _ = fmt.Fprintf(writer, "\tHash Algorithm\t %s\n", key.HashAlgo) - _, _ = fmt.Fprintf(writer, "\tRevoked \t %t\n", key.Revoked) - _, _ = fmt.Fprintf(writer, "\tSequence Number \t %d\n", key.SequenceNumber) - _, _ = fmt.Fprintf(writer, "\tIndex \t %d\n", key.Index) - _, _ = fmt.Fprintf(writer, "\n") - - // only show up to 3 keys and then show label to expand more info - if i == 3 && !command.ContainsFlag(r.include, "keys") { - _, _ = fmt.Fprint(writer, "...keys minimized, use --include keys flag if you want to view all\n\n") - break - } - } - - _, _ = fmt.Fprintf(writer, "Contracts Deployed: %d\n", len(r.Contracts)) - for name := range r.Contracts { - _, _ = fmt.Fprintf(writer, "Contract: '%s'\n", name) - } - - if command.ContainsFlag(r.include, "contracts") { - for name, code := range r.Contracts { - _, _ = fmt.Fprintf(writer, "Contracts '%s':\n", name) - _, _ = fmt.Fprintln(writer, string(code)) - } - } else { - _, _ = fmt.Fprint(writer, "\n\nContracts (hidden, use --include contracts)") - } - - _ = writer.Flush() - - return b.String() -} - -func (r *accountResult) Oneliner() string { - keys := make([]string, 0, len(r.Keys)) - for _, key := range r.Keys { - keys = append(keys, key.PublicKey.String()) - } - - return fmt.Sprintf("Address: 0x%s, Balance: %s, Public Keys: %s", r.Address, cadence.UFix64(r.Balance), keys) -} diff --git a/internal/accounts/accounts_test.go b/internal/accounts/accounts_test.go deleted file mode 100644 index c6db069dd..000000000 --- a/internal/accounts/accounts_test.go +++ /dev/null @@ -1,314 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "fmt" - "strings" - "testing" - - "github.com/onflow/flow-cli/flowkit/accounts" - - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_DeployContract(t *testing.T) { - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{tests.ContractSimpleWithArgs.Filename, "1"} - - srv.AddContract.Run(func(args mock.Arguments) { - script := args.Get(2).(flowkit.Script) - assert.Equal(t, tests.ContractSimpleWithArgs.Filename, script.Location) - assert.Len(t, script.Args, 1) - assert.Equal(t, inArgs[1], script.Args[0].String()) - }) - - result, err := deployContract(false, &addContractFlags)( - inArgs, - command.GlobalFlags{}, - util.NoLogger, - srv.Mock, - state, - ) - - require.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Success JSON arg", func(t *testing.T) { - srv.AddContract.Run(func(args mock.Arguments) { - script := args.Get(2).(flowkit.Script) - assert.Equal(t, tests.ContractSimpleWithArgs.Filename, script.Location) - assert.Len(t, script.Args, 1) - assert.Equal(t, "1", script.Args[0].String()) - }) - - addContractFlags.ArgsJSON = `[{"type": "UInt64", "value": "1"}]` - args := []string{tests.ContractSimpleWithArgs.Filename} - result, err := deployContract(false, &addContractFlags)( - args, - command.GlobalFlags{}, - util.NoLogger, - srv.Mock, - state, - ) - - require.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail non-existing file", func(t *testing.T) { - args := []string{"non-existing"} - result, err := deployContract(false, &addContractFlags)( - args, - command.GlobalFlags{}, - util.NoLogger, - srv.Mock, - state, - ) - - assert.Nil(t, result) - assert.EqualError(t, err, "error loading contract file: open non-existing: file does not exist") - }) - - t.Run("Fail invalid-json", func(t *testing.T) { - args := []string{tests.ContractA.Filename} - addContractFlags.ArgsJSON = "invalid" - result, err := deployContract(false, &addContractFlags)( - args, - command.GlobalFlags{}, - util.NoLogger, - srv.Mock, - state, - ) - - assert.Nil(t, result) - assert.EqualError(t, err, "error parsing transaction arguments: invalid character 'i' looking for beginning of value") - }) - - t.Run("Fail invalid signer", func(t *testing.T) { - args := []string{tests.ContractA.Filename} - addContractFlags.Signer = "invalid" - result, err := deployContract(false, &addContractFlags)( - args, - command.GlobalFlags{}, - util.NoLogger, - srv.Mock, - state, - ) - - assert.Nil(t, result) - assert.EqualError(t, err, "could not find account with name invalid in the configuration") - }) - -} - -func Test_RemoveContract(t *testing.T) { - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"test"} - - srv.RemoveContract.Run(func(args mock.Arguments) { - acc := args.Get(1).(*accounts.Account) - assert.Equal(t, "emulator-account", acc.Name) - assert.Equal(t, inArgs[0], args.Get(2).(string)) - }) - - result, err := removeContract(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail non-existing account", func(t *testing.T) { - inArgs := []string{"test"} - flagsRemove.Signer = "invalid" - - _, err := removeContract(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "could not find account with name invalid in the configuration") - }) -} - -func Test_Create(t *testing.T) { - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - pkey := "014d91eb68b5fddeca118821e74f70b48d9582c8546d8a2ae9d6835cdb7d1d008624945f55c4b409c628b63a89a54570ed028e8e68a1fe0c98ef08d7f488037b" - createFlags.Keys = []string{pkey} - - srv.CreateAccount.Run(func(args mock.Arguments) { - acc := args.Get(1).(*accounts.Account) - keys := args.Get(2).([]accounts.PublicKey) - assert.Equal(t, "emulator-account", acc.Name) - assert.Len(t, keys, 1) - assert.Equal(t, fmt.Sprintf("0x%s", pkey), keys[0].Public.String()) - assert.Equal(t, crypto.ECDSA_P256, keys[0].SigAlgo) - assert.Equal(t, crypto.SHA3_256, keys[0].HashAlgo) - }) - - result, err := create([]string{}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - require.NoError(t, err) - require.NotNil(t, result) - }) - - t.Run("Success multiple keys", func(t *testing.T) { - pkey1 := "014d91eb68b5fddeca118821e74f70b48d9582c8546d8a2ae9d6835cdb7d1d008624945f55c4b409c628b63a89a54570ed028e8e68a1fe0c98ef08d7f488037b" - pkey2 := "c4bcde70e3c29cdc472ce7be46e219ca42f0ed2174369b3ba693c5655ed03f7027c571ba3881ed4b480fba41760572bcc167a8dbcf4e6ed952dcce831f82fc92" - createFlags.Keys = []string{pkey1, pkey2} - createFlags.SigAlgo = []string{"ECDSA_P256", "ECDSA_secp256k1"} - createFlags.HashAlgo = []string{"SHA3_256", "SHA2_256"} - createFlags.Weights = []int{500, 500} - - srv.CreateAccount.Run(func(args mock.Arguments) { - acc := args.Get(1).(*accounts.Account) - keys := args.Get(2).([]accounts.PublicKey) - assert.Equal(t, "emulator-account", acc.Name) - assert.Len(t, keys, 2) - - assert.Equal(t, fmt.Sprintf("0x%s", pkey1), keys[0].Public.String()) - assert.Equal(t, crypto.ECDSA_P256, keys[0].SigAlgo) - assert.Equal(t, crypto.SHA3_256, keys[0].HashAlgo) - assert.Equal(t, 500, keys[0].Weight) - - assert.Equal(t, fmt.Sprintf("0x%s", pkey2), keys[1].Public.String()) - assert.Equal(t, crypto.ECDSA_secp256k1, keys[1].SigAlgo) - assert.Equal(t, 500, keys[1].Weight) - }) - - result, err := create([]string{}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - require.NoError(t, err) - require.NotNil(t, result) - }) - - t.Run("Fail not enough weights", func(t *testing.T) { - pkey1 := "014d91eb68b5fddeca118821e74f70b48d9582c8546d8a2ae9d6835cdb7d1d008624945f55c4b409c628b63a89a54570ed028e8e68a1fe0c98ef08d7f488037b" - pkey2 := "c4bcde70e3c29cdc472ce7be46e219ca42f0ed2174369b3ba693c5655ed03f7027c571ba3881ed4b480fba41760572bcc167a8dbcf4e6ed952dcce831f82fc92" - createFlags.Keys = []string{pkey1, pkey2} - createFlags.SigAlgo = []string{"ECDSA_P256", "ECDSA_secp256k1"} - createFlags.HashAlgo = []string{"SHA3_256", "SHA2_256"} - createFlags.Weights = []int{1000} - - result, err := create([]string{}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - require.EqualError(t, err, "must provide a key weight for each key provided, keys provided: 2, weights provided: 1") - require.Nil(t, result) - }) - - t.Run("Fail miss match algos", func(t *testing.T) { - pkey1 := "014d91eb68b5fddeca118821e74f70b48d9582c8546d8a2ae9d6835cdb7d1d008624945f55c4b409c628b63a89a54570ed028e8e68a1fe0c98ef08d7f488037b" - createFlags.Keys = []string{pkey1} - createFlags.SigAlgo = []string{"ECDSA_P256", "ECDSA_secp256k1"} - createFlags.HashAlgo = []string{"SHA3_256"} - createFlags.Weights = []int{1000} - - result, err := create([]string{}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - require.EqualError(t, err, "must provide a signature and hash algorithm for every key provided to --key: 1 keys, 2 signature algo, 1 hash algo") - require.Nil(t, result) - }) - - t.Run("Fail parse keys", func(t *testing.T) { - _, err := parsePublicKeys([]string{"invalid"}, []crypto.SignatureAlgorithm{crypto.ECDSA_P256}) - assert.EqualError(t, err, "failed decoding public key: invalid with error: encoding/hex: invalid byte: U+0069 'i'") - }) - - t.Run("Fail parse hash", func(t *testing.T) { - _, err := parseHashingAlgorithms([]string{"invalid"}) - assert.EqualError(t, err, "invalid hash algorithm: invalid") - }) - - t.Run("Fail parse signature algorithm", func(t *testing.T) { - _, err := parseSignatureAlgorithms([]string{"invalid"}) - assert.EqualError(t, err, "invalid signature algorithm: invalid") - }) -} - -func Test_Get(t *testing.T) { - srv, _, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"0x01"} - - srv.GetAccount.Run(func(args mock.Arguments) { - addr := args.Get(1).(flow.Address) - assert.Equal(t, "0000000000000001", addr.String()) - srv.GetAccount.Return(tests.NewAccountWithAddress(inArgs[0]), nil) - }) - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, nil, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) -} - -func Test_Result(t *testing.T) { - pkey, _ := crypto.DecodePublicKeyHex(crypto.ECDSA_P256, "a60b9c10a39070806d37d8f0e6be081e7af2d18cd92ee1bd850d10c994d61d538d2693eebe8faa94fea59ee579ea65a70ed897b05126e508e74f55b8669eec6b") - account := &flow.Account{ - Address: flow.HexToAddress("0x01"), - Balance: uint64(1), - Keys: []*flow.AccountKey{{ - Index: 0, - PublicKey: pkey, - SigAlgo: crypto.ECDSA_P256, - HashAlgo: crypto.SHA3_256, - Weight: 1000, - SequenceNumber: 0, - Revoked: false, - }}, - Contracts: nil, - } - result := accountResult{Account: account} - - assert.Equal(t, strings.TrimPrefix(` -Address 0x0000000000000001 -Balance 0.00000001 -Keys 1 - -Key 0 Public Key a60b9c10a39070806d37d8f0e6be081e7af2d18cd92ee1bd850d10c994d61d538d2693eebe8faa94fea59ee579ea65a70ed897b05126e508e74f55b8669eec6b - Weight 1000 - Signature Algorithm ECDSA_P256 - Hash Algorithm SHA3_256 - Revoked false - Sequence Number 0 - Index 0 - -Contracts Deployed: 0 - - -Contracts (hidden, use --include contracts)`, "\n"), result.String()) - - assert.Equal(t, map[string]any{ - "address": flow.Address{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1}, - "balance": "0.00000001", - "contracts": []string{}, - "keys": []string{ - "a60b9c10a39070806d37d8f0e6be081e7af2d18cd92ee1bd850d10c994d61d538d2693eebe8faa94fea59ee579ea65a70ed897b05126e508e74f55b8669eec6b", - }, - }, result.JSON()) - -} diff --git a/internal/accounts/contract-add.go b/internal/accounts/contract-add.go deleted file mode 100644 index 084b91716..000000000 --- a/internal/accounts/contract-add.go +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "context" - "fmt" - - "github.com/onflow/flow-cli/internal/util" - - "github.com/onflow/cadence" - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/arguments" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type deployContractFlags struct { - ArgsJSON string `default:"" flag:"args-json" info:"arguments in JSON-Cadence format"` - Signer string `default:"emulator-account" flag:"signer" info:"Account name from configuration used to sign the transaction"` - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: contracts."` - ShowDiff bool `default:"false" flag:"show-diff" info:"Shows diff between existing and new contracts on update"` -} - -var addContractFlags = deployContractFlags{} - -var addContractCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "add-contract ", - Short: "Deploy a new contract to an account", - Example: `flow accounts add-contract ./FungibleToken.cdc helloArg`, - Args: cobra.MinimumNArgs(1), - }, - Flags: &addContractFlags, - RunS: deployContract(false, &addContractFlags), -} - -func deployContract(update bool, flags *deployContractFlags) command.RunWithState { - return func( - args []string, - globalFlags command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, - ) (command.Result, error) { - filename := args[0] - - code, err := state.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error loading contract file: %w", err) - } - - to, err := state.Accounts().ByName(flags.Signer) - if err != nil { - return nil, err - } - - var contractArgs []cadence.Value - if flags.ArgsJSON != "" { - contractArgs, err = arguments.ParseJSON(flags.ArgsJSON) - } else if len(args) > 1 { - contractArgs, err = arguments.ParseWithoutType(args[1:], code, filename) - } - - if err != nil { - return nil, fmt.Errorf("error parsing transaction arguments: %w", err) - } - - deployFunc := flowkit.UpdateExistingContract(update) - if updateContractFlags.ShowDiff { - deployFunc = util.ShowContractDiffPrompt(logger) - } - - txID, _, err := flow.AddContract( - context.Background(), - to, - flowkit.Script{ - Code: code, - Args: contractArgs, - Location: filename, - }, - deployFunc, - ) - - if err != nil { - if txID != flowsdk.EmptyID { - logger.Info(fmt.Sprintf( - "Failed to %s contract on the account '%s' with transaction ID: %s", - map[bool]string{true: "updated", false: "created"}[update], - to.Address, - txID.String(), - )) - } - - return nil, err - } - - err = state.SaveDefault() - - if err != nil { - return nil, err - } - - logger.Info(fmt.Sprintf( - "Contract %s on the account '%s' with transaction ID %s.", - map[bool]string{true: "updated", false: "created"}[update], - to.Address, - txID.String(), - )) - - account, err := flow.GetAccount(context.Background(), to.Address) - if err != nil { - return nil, err - } - - return &accountResult{ - Account: account, - include: flags.Include, - }, nil - } -} diff --git a/internal/accounts/contract-remove.go b/internal/accounts/contract-remove.go deleted file mode 100644 index a6839febd..000000000 --- a/internal/accounts/contract-remove.go +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "context" - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/util" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsRemoveContract struct { - Signer string `default:"emulator-account" flag:"signer" info:"Account name from configuration used to sign the transaction"` - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: contracts."` - Network string `default:"" flag:"network" info:"Network name from configuration to use"` -} - -var flagsRemove = flagsRemoveContract{} - -var removeCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "remove-contract ", - Short: "Remove a contract deployed to an account", - Example: `flow accounts remove-contract FungibleToken`, - Args: cobra.ExactArgs(1), - }, - Flags: &flagsRemove, - RunS: removeContract, -} - -func removeContract( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - contractName := args[0] - - from, err := state.Accounts().ByName(flagsRemove.Signer) - if err != nil { - return nil, err - } - - id, err := flow.RemoveContract(context.Background(), from, contractName) - if err != nil { - return nil, err - } - - removeFromState := util.RemoveContractFromFlowJSONPrompt(contractName) - - if removeFromState { - // If a network flag is provided, remove from that networks deployments - // Otherwise, remove from all deployments - if flagsRemove.Network != "" { - state.Deployments().ByAccountAndNetwork(from.Name, flagsRemove.Network).RemoveContract(contractName) - } else { - for i := range state.Deployments().All() { - if state.Deployments().All()[i].Account == from.Name { - state.Deployments().All()[i].RemoveContract(contractName) - } - } - } - - err = state.SaveDefault() - if err != nil { - return nil, err - } - } - - logger.Info(fmt.Sprintf( - "Contract %s removed from account %s with transaction ID: %s.", - contractName, - from.Address, - id.String(), - )) - - account, err := flow.GetAccount(context.Background(), from.Address) - if err != nil { - return nil, err - } - return &accountResult{ - Account: account, - include: flagsRemove.Include, - }, nil -} diff --git a/internal/accounts/contract-update.go b/internal/accounts/contract-update.go deleted file mode 100644 index 3dee382a0..000000000 --- a/internal/accounts/contract-update.go +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/command" -) - -var updateContractFlags = deployContractFlags{} - -var updateCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "update-contract ", - Short: "Update a contract deployed to an account", - Example: `flow accounts update-contract ./FungibleToken.cdc helloArg`, - Args: cobra.MinimumNArgs(1), - }, - Flags: &updateContractFlags, - RunS: deployContract(true, &updateContractFlags), -} diff --git a/internal/accounts/create-interactive.go b/internal/accounts/create-interactive.go deleted file mode 100644 index 3d8aa2b2b..000000000 --- a/internal/accounts/create-interactive.go +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "bytes" - "context" - "crypto/tls" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "strings" - "time" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/accounts" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/gateway" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/util" -) - -// createInteractive is used when user calls a default account create command without any provided values. -// -// This process takes the user through couple of steps with prompts asking for them to provide name and network, -// and it then uses account creation APIs to automatically create the account on the network as well as save it. -func createInteractive(state *flowkit.State) (*accountResult, error) { - log := output.NewStdoutLogger(output.InfoLog) - name := util.AccountNamePrompt(state.Accounts().Names()) - networkName, selectedNetwork := util.CreateAccountNetworkPrompt() - privateFile := accounts.PrivateKeyFile(name) - - // create new gateway based on chosen network - gw, err := gateway.NewGrpcGateway(selectedNetwork) - if err != nil { - return nil, err - } - flow := flowkit.NewFlowkit(state, selectedNetwork, gw, output.NewStdoutLogger(output.NoneLog)) - - key, err := flow.GenerateKey(context.Background(), defaultSignAlgo, "") - if err != nil { - return nil, err - } - - log.StartProgress(fmt.Sprintf("Creating account %s on %s...", name, networkName)) - defer log.StopProgress() - - var account *accounts.Account - if selectedNetwork == config.EmulatorNetwork { - account, err = createEmulatorAccount(state, flow, name, key) - log.StopProgress() - log.Info(output.Italic("\nPlease note that the newly-created account will only be available while you keep the emulator service running. If you restart the emulator service, all accounts will be reset. If you want to persist accounts between restarts, please use the '--persist' flag when starting the flow emulator.\n")) - } else { - account, err = createNetworkAccount(state, flow, name, key, privateFile, selectedNetwork) - log.StopProgress() - } - if err != nil { - return nil, err - } - - log.Info(fmt.Sprintf( - "%s New account created with address %s and name %s on %s network.\n", - output.SuccessEmoji(), - output.Bold(fmt.Sprintf("0x%s", account.Address.String())), - output.Bold(name), - output.Bold(networkName)), - ) - - state.Accounts().AddOrUpdate(account) - err = state.SaveDefault() - if err != nil { - return nil, err - } - - items := []string{ - "Here’s a summary of all the actions that were taken", - fmt.Sprintf("Added the new account to %s.", output.Bold("flow.json")), - } - if selectedNetwork != config.EmulatorNetwork { - items = append(items, - fmt.Sprintf("Saved the private key to %s.", output.Bold(privateFile)), - fmt.Sprintf("Added %s to %s.", output.Bold(privateFile), output.Bold(".gitignore")), - ) - } - outputList(log, items, false) - - return &accountResult{ - Account: &flowsdk.Account{ - Address: account.Address, - Balance: 0, - Keys: []*flowsdk.AccountKey{flowsdk.NewAccountKey().FromPrivateKey(key)}, - }, - include: nil, - }, nil -} - -// createNetworkAccount using the account creation API and return the newly created account address. -func createNetworkAccount( - state *flowkit.State, - flow flowkit.Services, - name string, - key crypto.PrivateKey, - privateFile string, - network config.Network, -) (*accounts.Account, error) { - networkAccount := &lilicoAccount{ - PublicKey: strings.TrimPrefix(key.PublicKey().String(), "0x"), - } - - id, err := networkAccount.create(network.Name) - if err != nil { - return nil, err - } - - result, err := getAccountCreationResult(flow, id) - if err != nil { - return nil, err - } - - events := flowkit.EventsFromTransaction(result) - address := events.GetCreatedAddresses() - if len(address) == 0 { - return nil, fmt.Errorf("account creation error") - } - - err = util.AddToGitIgnore(privateFile, state.ReaderWriter()) - if err != nil { - return nil, err - } - - err = state.ReaderWriter().WriteFile(privateFile, []byte(key.String()), os.FileMode(0644)) - if err != nil { - return nil, fmt.Errorf("failed saving private key: %w", err) - } - - return &accounts.Account{ - Name: name, - Address: *address[0], - Key: accounts.NewFileKey(privateFile, 0, defaultSignAlgo, defaultHashAlgo, state.ReaderWriter()), - }, nil -} - -func createEmulatorAccount( - state *flowkit.State, - flow flowkit.Services, - name string, - key crypto.PrivateKey, -) (*accounts.Account, error) { - signer, err := state.EmulatorServiceAccount() - if err != nil { - return nil, err - } - - networkAccount, _, err := flow.CreateAccount( - context.Background(), - signer, - []accounts.PublicKey{{ - Public: key.PublicKey(), - Weight: flowsdk.AccountKeyWeightThreshold, - SigAlgo: defaultSignAlgo, - HashAlgo: defaultHashAlgo, - }}, - ) - if err != nil { - return nil, err - } - - return &accounts.Account{ - Name: name, - Address: networkAccount.Address, - Key: accounts.NewHexKeyFromPrivateKey(0, defaultHashAlgo, key), - }, nil -} - -func getAccountCreationResult(flow flowkit.Services, id flowsdk.Identifier) (*flowsdk.TransactionResult, error) { - _, result, err := flow.GetTransactionByID(context.Background(), id, true) - if err != nil { - if status.Code(err) == codes.NotFound { // if transaction not yet propagated, wait for it - time.Sleep(1 * time.Second) - return getAccountCreationResult(flow, id) - } - return nil, err - } - - return result, nil -} - -// lilicoAccount contains all the data needed for interaction with lilico account creation API. -type lilicoAccount struct { - PublicKey string `json:"publicKey"` - SignatureAlgorithm string `json:"signatureAlgorithm"` - HashAlgorithm string `json:"hashAlgorithm"` - Weight int `json:"weight"` -} - -type lilicoResponse struct { - Data struct { - TxId string `json:"txId"` - } `json:"data"` -} - -var accountToken = "" - -const defaultHashAlgo = crypto.SHA3_256 - -const defaultSignAlgo = crypto.ECDSA_P256 - -// create a new account using the lilico API and parsing the response, returning account creation transaction ID. -func (l *lilicoAccount) create(network string) (flowsdk.Identifier, error) { - // fix to the defaults as we don't support other values - l.HashAlgorithm = defaultHashAlgo.String() - l.SignatureAlgorithm = defaultSignAlgo.String() - l.Weight = flowsdk.AccountKeyWeightThreshold - - data, err := json.Marshal(l) - if err != nil { - return flowsdk.EmptyID, err - } - - apiNetwork := "" - if network == config.TestnetNetwork.Name { - apiNetwork = "/testnet" - } - - request, err := http.NewRequest( - http.MethodPost, - fmt.Sprintf("https://openapi.lilico.org/v1/address%s", apiNetwork), - bytes.NewReader(data), - ) - if err != nil { - return flowsdk.EmptyID, fmt.Errorf("could not create an account: %w", err) - } - - request.Header.Add("Content-Type", "application/json; charset=UTF-8") - request.Header.Add("Authorization", accountToken) - - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // lilico api doesn't yet have a valid cert, todo reevaluate - }, - } - res, err := client.Do(request) - if err != nil { - return flowsdk.EmptyID, fmt.Errorf("could not create an account: %w", err) - } - defer res.Body.Close() - - body, _ := io.ReadAll(res.Body) - var lilicoRes lilicoResponse - - err = json.Unmarshal(body, &lilicoRes) - if err != nil { - return flowsdk.EmptyID, fmt.Errorf("could not create an account: %w", err) - } - return flowsdk.HexToID(lilicoRes.Data.TxId), nil -} - -// outputList helper for printing lists -func outputList(log *output.StdoutLogger, items []string, numbered bool) { - log.Info(fmt.Sprintf("%s:", items[0])) - items = items[1:] - for n, item := range items { - sep := " -" - if numbered { - sep = fmt.Sprintf(" %d.", n+1) - } - log.Info(fmt.Sprintf("%s %s", sep, item)) - } - log.Info("") -} diff --git a/internal/accounts/create.go b/internal/accounts/create.go deleted file mode 100644 index 436321fad..000000000 --- a/internal/accounts/create.go +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "context" - "fmt" - "strings" - - "github.com/onflow/flow-cli/flowkit/accounts" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsCreate struct { - Signer string `default:"emulator-account" flag:"signer" info:"Account name from configuration used to sign the transaction"` - Keys []string `flag:"key" info:"Public keys to attach to account"` - Weights []int `default:"1000" flag:"key-weight" info:"Weight for the key"` - SigAlgo []string `default:"ECDSA_P256" flag:"sig-algo" info:"Signature algorithm used to generate the keys"` - HashAlgo []string `default:"SHA3_256" flag:"hash-algo" info:"Hash used for the digest"` - Include []string `default:"" flag:"include" info:"Fields to include in the output"` -} - -var createFlags = flagsCreate{} - -var createCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "create", - Short: "Create a new account on network", - Example: `flow accounts create --key d651f1931a2...8745`, - }, - Flags: &createFlags, - RunS: create, -} - -func create( - _ []string, - _ command.GlobalFlags, - _ output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - if len(createFlags.Keys) == 0 { // if user doesn't provide any flags go into interactive mode - return createInteractive(state) - } else { - return createManual(state, flow) - } -} - -func createManual( - state *flowkit.State, - flow flowkit.Services, -) (*accountResult, error) { - sigsFlag := createFlags.SigAlgo - hashFlag := createFlags.HashAlgo - keysFlag := createFlags.Keys - weightFlag := createFlags.Weights - - signer, err := state.Accounts().ByName(createFlags.Signer) - if err != nil { - return nil, err - } - - if len(sigsFlag) == 1 && len(hashFlag) == 1 { - // Fill up depending on size of key input - if len(createFlags.Keys) > 1 { - for i := 1; i < len(createFlags.Keys); i++ { - sigsFlag = append(sigsFlag, sigsFlag[0]) - hashFlag = append(hashFlag, hashFlag[0]) - } - } - } else if len(keysFlag) != len(sigsFlag) || len(sigsFlag) != len(hashFlag) { // double check matching array lengths on inputs - return nil, fmt.Errorf("must provide a signature and hash algorithm for every key provided to --key: %d keys, %d signature algo, %d hash algo", len(keysFlag), len(sigsFlag), len(hashFlag)) - } - - if len(keysFlag) != len(weightFlag) { - return nil, fmt.Errorf("must provide a key weight for each key provided, keys provided: %d, weights provided: %d", len(keysFlag), len(weightFlag)) - } - - sigAlgos, err := parseSignatureAlgorithms(sigsFlag) - if err != nil { - return nil, err - } - - hashAlgos, err := parseHashingAlgorithms(hashFlag) - if err != nil { - return nil, err - } - - pubKeys, err := parsePublicKeys(keysFlag, sigAlgos) - if err != nil { - return nil, err - } - - keys := make([]accounts.PublicKey, len(pubKeys)) - for i, key := range pubKeys { - keys[i] = accounts.PublicKey{ - Public: key, Weight: weightFlag[i], SigAlgo: sigAlgos[i], HashAlgo: hashAlgos[i], - } - } - - account, _, err := flow.CreateAccount( - context.Background(), - signer, - keys, - ) - if err != nil { - return nil, err - } - - return &accountResult{ - Account: account, - include: createFlags.Include, - }, nil -} - -func parseHashingAlgorithms(algorithms []string) ([]crypto.HashAlgorithm, error) { - hashAlgos := make([]crypto.HashAlgorithm, 0, len(algorithms)) - for _, hashAlgoStr := range algorithms { - hashAlgo := crypto.StringToHashAlgorithm(hashAlgoStr) - if hashAlgo == crypto.UnknownHashAlgorithm { - return nil, fmt.Errorf("invalid hash algorithm: %s", hashAlgoStr) - } - hashAlgos = append(hashAlgos, hashAlgo) - } - return hashAlgos, nil -} - -func parseSignatureAlgorithms(algorithms []string) ([]crypto.SignatureAlgorithm, error) { - sigAlgos := make([]crypto.SignatureAlgorithm, 0, len(algorithms)) - for _, sigAlgoStr := range algorithms { - sigAlgo := crypto.StringToSignatureAlgorithm(sigAlgoStr) - if sigAlgo == crypto.UnknownSignatureAlgorithm { - return nil, fmt.Errorf("invalid signature algorithm: %s", sigAlgoStr) - } - sigAlgos = append(sigAlgos, sigAlgo) - } - return sigAlgos, nil -} - -func parsePublicKeys(publicKeys []string, sigAlgorithms []crypto.SignatureAlgorithm) ([]crypto.PublicKey, error) { - pubKeys := make([]crypto.PublicKey, 0, len(createFlags.Keys)) - for i, k := range publicKeys { - k = strings.TrimPrefix(k, "0x") // clear possible prefix - key, err := crypto.DecodePublicKeyHex(sigAlgorithms[i], k) - if err != nil { - return nil, fmt.Errorf("failed decoding public key: %s with error: %w", k, err) - } - pubKeys = append(pubKeys, key) - } - return pubKeys, nil -} diff --git a/internal/accounts/fund.go b/internal/accounts/fund.go deleted file mode 100644 index 4f161a20c..000000000 --- a/internal/accounts/fund.go +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "fmt" - "time" - - flowsdk "github.com/onflow/flow-go-sdk" - - "github.com/pkg/browser" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsFund struct { - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: contracts."` -} - -var fundFlags = flagsFund{} - -var fundCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "fund
", - Short: "Funds an account by address through the Testnet Faucet", - Example: "flow accounts fund 8e94eaa81771313a", - Args: cobra.ExactArgs(1), - }, - Flags: &fundFlags, - Run: fund, -} - -func fund( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - address := flowsdk.HexToAddress(args[0]) - if !address.IsValid(flowsdk.Testnet) { - return nil, fmt.Errorf("unsupported address %s, faucet can only work for valid Testnet addresses", address.String()) - } - - logger.Info( - fmt.Sprintf( - "Opening the Testnet faucet to fund 0x%s on your native browser."+ - "\n\nIf there is an issue, please use this link instead: %s", - address.String(), - testnetFaucetURL(address), - )) - // wait for the user to read the message - time.Sleep(5 * time.Second) - - if err := browser.OpenURL(testnetFaucetURL(address)); err != nil { - return nil, err - } - - return nil, nil -} diff --git a/internal/accounts/get.go b/internal/accounts/get.go deleted file mode 100644 index 9c9c5b8cd..000000000 --- a/internal/accounts/get.go +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "context" - "fmt" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsGet struct { - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: contracts."` -} - -var getFlags = flagsGet{} - -var getCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "get
", - Short: "Gets an account by address", - Example: "flow accounts get f8d6e0586b0a20c7", - Args: cobra.ExactArgs(1), - }, - Flags: &getFlags, - Run: get, -} - -func get( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - address := flowsdk.HexToAddress(args[0]) - - logger.StartProgress(fmt.Sprintf("Loading account %s...", address)) - defer logger.StopProgress() - - account, err := flow.GetAccount(context.Background(), address) - if err != nil { - return nil, err - } - - return &accountResult{ - Account: account, - include: getFlags.Include, - }, nil -} diff --git a/internal/accounts/staking-info.go b/internal/accounts/staking-info.go deleted file mode 100644 index 4ef3013ba..000000000 --- a/internal/accounts/staking-info.go +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package accounts - -import ( - "bytes" - "context" - "fmt" - - "github.com/onflow/cadence" - tmpl "github.com/onflow/flow-core-contracts/lib/go/templates" - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsStakingInfo struct{} - -var stakingFlags = flagsStakingInfo{} - -var stakingCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "staking-info
", - Short: "Get account staking info", - Example: "flow accounts staking-info f8d6e0586b0a20c7", - Args: cobra.ExactArgs(1), - }, - Flags: &stakingFlags, - Run: stakingInfo, -} - -func stakingInfo( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - address := flowsdk.HexToAddress(args[0]) - - logger.StartProgress(fmt.Sprintf("Fetching info for %s...", address.String())) - defer logger.StopProgress() - - cadenceAddress := []cadence.Value{cadence.NewAddress(address)} - - chain, err := util.GetAddressNetwork(address) - if err != nil { - return nil, fmt.Errorf("failed to determine network from address, check the address and network") - } - - if chain == flowsdk.Emulator { - return nil, fmt.Errorf("emulator chain not supported") - } - - env := envFromNetwork(chain) - - stakingInfoScript := tmpl.GenerateCollectionGetAllNodeInfoScript(env) - delegationInfoScript := tmpl.GenerateCollectionGetAllDelegatorInfoScript(env) - - stakingValue, err := flow.ExecuteScript( - context.Background(), - flowkit.Script{Code: stakingInfoScript, Args: cadenceAddress}, - flowkit.LatestScriptQuery, - ) - if err != nil { - return nil, fmt.Errorf("error getting staking info: %s", err.Error()) - } - - delegationValue, err := flow.ExecuteScript( - context.Background(), - flowkit.Script{Code: delegationInfoScript, Args: cadenceAddress}, - flowkit.LatestScriptQuery, - ) - if err != nil { - return nil, fmt.Errorf("error getting delegation info: %s", err.Error()) - } - - // get staking infos and delegation infos - staking, err := newStakingInfoFromValue(stakingValue) - if err != nil { - return nil, fmt.Errorf("error parsing staking info: %s", err.Error()) - } - delegation, err := newStakingInfoFromValue(delegationValue) - if err != nil { - return nil, fmt.Errorf("error parsing delegation info: %s", err.Error()) - } - - // get a set of node ids from all staking infos - nodeStakes := make(map[string]cadence.Value) - for _, stakingInfo := range staking { - nodeID, ok := stakingInfo["id"] - if ok { - nodeStakes[nodeIDToString(nodeID)] = nil - } - } - totalCommitmentScript := tmpl.GenerateGetTotalCommitmentBalanceScript(env) - - // foreach node id, get the node total stake - for nodeID := range nodeStakes { - stake, err := flow.ExecuteScript( - context.Background(), - flowkit.Script{ - Code: totalCommitmentScript, - Args: []cadence.Value{cadence.String(nodeID)}, - }, - flowkit.LatestScriptQuery, - ) - if err != nil { - return nil, fmt.Errorf("error getting total stake for node: %s", err.Error()) - } - - nodeStakes[nodeID] = stake - } - - // foreach staking info, add the node total stake - for _, stakingInfo := range staking { - nodeID, ok := stakingInfo["id"] - if ok { - stakingInfo["nodeTotalStake"] = nodeStakes[nodeIDToString(nodeID)].(cadence.UFix64) - } - } - - logger.StopProgress() - - return &stakingResult{staking, delegation}, nil -} - -func envFromNetwork(network flowsdk.ChainID) tmpl.Environment { - if network == flowsdk.Mainnet { - return tmpl.Environment{ - IDTableAddress: "8624b52f9ddcd04a", - FungibleTokenAddress: "f233dcee88fe0abe", - FlowTokenAddress: "1654653399040a61", - LockedTokensAddress: "8d0e87b65159ae63", - StakingProxyAddress: "62430cf28c26d095", - } - } - - if network == flowsdk.Testnet { - return tmpl.Environment{ - IDTableAddress: "9eca2b38b18b5dfe", - FungibleTokenAddress: "9a0766d93b6608b7", - FlowTokenAddress: "7e60df042a9c0868", - LockedTokensAddress: "95e019a17d0e23d7", - StakingProxyAddress: "7aad92e5a0715d21", - } - } - - return tmpl.Environment{} -} - -func nodeIDToString(value any) string { - return value.(cadence.String).ToGoValue().(string) -} - -func newStakingInfoFromValue(value cadence.Value) ([]map[string]any, error) { - stakingInfo := make([]map[string]any, 0) - arrayValue, ok := value.(cadence.Array) - if !ok { - return stakingInfo, fmt.Errorf("staking info must be a cadence array") - } - - if len(arrayValue.Values) == 0 { - return stakingInfo, nil - } - - for _, v := range arrayValue.Values { - vs, ok := v.(cadence.Struct) - if !ok { - return stakingInfo, fmt.Errorf("staking info must be a cadence array of structs") - } - - keys := make([]string, 0) - values := make(map[string]any) - for _, field := range vs.StructType.Fields { - keys = append(keys, field.Identifier) - } - for j, value := range vs.Fields { - values[keys[j]] = value - } - stakingInfo = append(stakingInfo, values) - } - - return stakingInfo, nil -} - -type stakingResult struct { - staking []map[string]any // stake as FlowIDTableStaking.NodeInfo - delegation []map[string]any // delegation as FlowIDTableStaking.DelegatorInfo -} - -func (r *stakingResult) JSON() any { - result := make(map[string]any) - result["staking"] = r.staking - result["delegation"] = r.delegation - - return result -} - -func (r *stakingResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - if len(r.staking) != 0 { - _, _ = fmt.Fprintf(writer, "Account staking info:\n") - - for _, stakingInfo := range r.staking { - _, _ = fmt.Fprintf(writer, "\tID: \t %v\n", stakingInfo["id"]) - _, _ = fmt.Fprintf(writer, "\tInitial Weight: \t %v\n", stakingInfo["initialWeight"]) - _, _ = fmt.Fprintf(writer, "\tNetworking Address: \t %v\n", stakingInfo["networkingAddress"]) - _, _ = fmt.Fprintf(writer, "\tNetworking Key: \t %v\n", stakingInfo["networkingKey"]) - _, _ = fmt.Fprintf(writer, "\tRole: \t %v\n", stakingInfo["role"]) - _, _ = fmt.Fprintf(writer, "\tStaking Key: \t %v\n", stakingInfo["stakingKey"]) - _, _ = fmt.Fprintf(writer, "\tTokens Committed: \t %v\n", stakingInfo["tokensCommitted"]) - _, _ = fmt.Fprintf(writer, "\tTokens To Unstake: \t %v\n", stakingInfo["tokensRequestedToUnstake"]) - _, _ = fmt.Fprintf(writer, "\tTokens Rewarded: \t %v\n", stakingInfo["tokensRewarded"]) - _, _ = fmt.Fprintf(writer, "\tTokens Staked: \t %v\n", stakingInfo["tokensStaked"]) - _, _ = fmt.Fprintf(writer, "\tTokens Unstaked: \t %v\n", stakingInfo["tokensUnstaked"]) - _, _ = fmt.Fprintf(writer, "\tTokens Unstaking: \t %v\n", stakingInfo["tokensUnstaking"]) - _, _ = fmt.Fprintf(writer, "\tNode Total Stake (including delegators): \t %v\n", stakingInfo["nodeTotalStake"]) - _, _ = fmt.Fprintf(writer, "\n") - } - } else { - _, _ = fmt.Fprintf(writer, "Account has no stakes.\n") - } - - if len(r.delegation) != 0 { - _, _ = fmt.Fprintf(writer, "\nAccount delegation info:\n") - - for _, delegationStakingInfo := range r.delegation { - _, _ = fmt.Fprintf(writer, "\tID: \t %v\n", delegationStakingInfo["id"]) - _, _ = fmt.Fprintf(writer, "\tNode ID: \t %v\n", delegationStakingInfo["nodeID"]) - _, _ = fmt.Fprintf(writer, "\tTokens Committed: \t %v\n", delegationStakingInfo["tokensCommitted"]) - _, _ = fmt.Fprintf(writer, "\tTokens To Unstake: \t %v\n", delegationStakingInfo["tokensRequestedToUnstake"]) - _, _ = fmt.Fprintf(writer, "\tTokens Rewarded: \t %v\n", delegationStakingInfo["tokensRewarded"]) - _, _ = fmt.Fprintf(writer, "\tTokens Staked: \t %v\n", delegationStakingInfo["tokensStaked"]) - _, _ = fmt.Fprintf(writer, "\tTokens Unstaked: \t %v\n", delegationStakingInfo["tokensUnstaked"]) - _, _ = fmt.Fprintf(writer, "\tTokens Unstaking: \t %v\n", delegationStakingInfo["tokensUnstaking"]) - _, _ = fmt.Fprintf(writer, "\n") - } - } else { - _, _ = fmt.Fprintf(writer, "Account has no delegations.\n") - } - - writer.Flush() - return b.String() -} - -func (r *stakingResult) Oneliner() string { - return "" -} diff --git a/internal/blocks/blocks.go b/internal/blocks/blocks.go deleted file mode 100644 index c38cb6a0d..000000000 --- a/internal/blocks/blocks.go +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package blocks - -import ( - "bytes" - "fmt" - - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/events" - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "blocks", - Short: "Retrieve blocks", - TraverseChildren: true, - GroupID: "resources", -} - -func init() { - getCommand.AddToParent(Cmd) -} - -type blockResult struct { - block *flow.Block - events []flow.BlockEvents - collections []*flow.Collection - included []string -} - -func (r *blockResult) JSON() any { - result := make(map[string]any) - result["blockId"] = r.block.ID.String() - result["parentId"] = r.block.ParentID.String() - result["height"] = r.block.Height - result["totalSeals"] = len(r.block.Seals) - result["totalCollections"] = len(r.block.CollectionGuarantees) - - collections := make([]any, 0, len(r.block.CollectionGuarantees)) - for i, guarantee := range r.block.CollectionGuarantees { - collection := make(map[string]any) - collection["id"] = guarantee.CollectionID.String() - - if command.ContainsFlag(r.included, "transactions") { - txs := make([]string, 0) - for _, tx := range r.collections[i].TransactionIDs { - txs = append(txs, tx.String()) - } - collection["transactions"] = txs - } - - collections = append(collections, collection) - } - - result["collection"] = collections - return result -} - -func blockStatusToString(code flow.BlockStatus) string { - switch code { - case 1: - return "Finalized" - case 2: - return "Sealed" - default: - return "Unknown" - } -} - -func (r *blockResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - _, _ = fmt.Fprintf(writer, "Block ID\t%s\n", r.block.ID) - _, _ = fmt.Fprintf(writer, "Parent ID\t%s\n", r.block.ParentID) - _, _ = fmt.Fprintf(writer, "Proposal Timestamp\t%s\n", r.block.Timestamp) - _, _ = fmt.Fprintf(writer, "Proposal Timestamp Unix\t%d\n", r.block.Timestamp.Unix()) - _, _ = fmt.Fprintf(writer, "Height\t%v\n", r.block.Height) - _, _ = fmt.Fprintf(writer, "Status\t%s\n", blockStatusToString(r.block.Status)) - - _, _ = fmt.Fprintf(writer, "Total Seals\t%v\n", len(r.block.Seals)) - - _, _ = fmt.Fprintf(writer, "Total Collections\t%v\n", len(r.block.CollectionGuarantees)) - - for i, guarantee := range r.block.CollectionGuarantees { - _, _ = fmt.Fprintf(writer, " Collection %d:\t%s\n", i, guarantee.CollectionID) - - if command.ContainsFlag(r.included, "transactions") { - for x, tx := range r.collections[i].TransactionIDs { - _, _ = fmt.Fprintf(writer, " Transaction %d: %s\n", x, tx) - } - } - } - - if len(r.events) > 0 { - _, _ = fmt.Fprintf(writer, "\n") - - e := events.EventResult{BlockEvents: r.events} - _, _ = fmt.Fprintf(writer, "%s", e.String()) - } - - _ = writer.Flush() - return b.String() -} - -func (r *blockResult) Oneliner() string { - return r.block.ID.String() -} diff --git a/internal/blocks/blocks_test.go b/internal/blocks/blocks_test.go deleted file mode 100644 index 04f6dd12d..000000000 --- a/internal/blocks/blocks_test.go +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package blocks - -import ( - "strings" - "testing" - - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_GetBlock(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"100"} - blockFlags.Events = "A.foo" - blockFlags.Include = []string{"transactions"} - - srv.GetEvents.Run(func(args mock.Arguments) { - assert.Equal(t, "A.foo", args.Get(1).([]string)[0]) - assert.Equal(t, uint64(100), args.Get(2).(uint64)) - assert.Equal(t, uint64(100), args.Get(3).(uint64)) - }).Return(nil, nil) - - srv.GetCollection.Return(nil, nil) - - returnBlock := tests.NewBlock() - returnBlock.Height = uint64(100) - - srv.GetBlock.Run(func(args mock.Arguments) { - assert.Equal(t, uint64(100), args.Get(1).(flowkit.BlockQuery).Height) - }).Return(returnBlock, nil) - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NotNil(t, result) - assert.NoError(t, err) - }) -} - -func Test_Result(t *testing.T) { - result := blockResult{ - block: tests.NewBlock(), - collections: []*flow.Collection{tests.NewCollection()}, - } - - assert.Equal(t, strings.TrimPrefix(` -Block ID 0202020202020202020202020202020202020202020202020202020202020202 -Parent ID 0303030303030303030303030303030303030303030303030303030303030303 -Proposal Timestamp 2020-06-04 16:43:21 +0000 UTC -Proposal Timestamp Unix 1591289001 -Height 1 -Status Unknown -Total Seals 1 -Total Collections 3 - Collection 0: 0202020202020202020202020202020202020202020202020202020202020202 - Collection 1: 0303030303030303030303030303030303030303030303030303030303030303 - Collection 2: 0404040404040404040404040404040404040404040404040404040404040404 -`, "\n"), result.String()) - - assert.Equal( - t, - map[string]any{ - "blockId": "0202020202020202020202020202020202020202020202020202020202020202", - "collection": []any{ - map[string]any{"id": "0202020202020202020202020202020202020202020202020202020202020202"}, - map[string]any{"id": "0303030303030303030303030303030303030303030303030303030303030303"}, - map[string]any{"id": "0404040404040404040404040404040404040404040404040404040404040404"}, - }, - "height": uint64(1), - "parentId": "0303030303030303030303030303030303030303030303030303030303030303", - "totalCollections": 3, - "totalSeals": 1, - }, - result.JSON(), - ) -} diff --git a/internal/blocks/get.go b/internal/blocks/get.go deleted file mode 100644 index de384fd27..000000000 --- a/internal/blocks/get.go +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package blocks - -import ( - "context" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsBlocks struct { - Events string `default:"" flag:"events" info:"List events of this type for the block"` - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: transactions."` -} - -var blockFlags = flagsBlocks{} - -var getCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "get ", - Short: "Get block info", - Example: "flow blocks get latest --network testnet", - Args: cobra.ExactArgs(1), - }, - Flags: &blockFlags, - Run: get, -} - -func get( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - - query, err := flowkit.NewBlockQuery(args[0]) - if err != nil { - return nil, err - } - - logger.StartProgress("Fetching Block...") - defer logger.StopProgress() - block, err := flow.GetBlock(context.Background(), query) - if err != nil { - return nil, err - } - - var events []flowsdk.BlockEvents - if blockFlags.Events != "" { - events, err = flow.GetEvents( - context.Background(), - []string{blockFlags.Events}, - block.Height, - block.Height, - nil, - ) - if err != nil { - return nil, err - } - } - - collections := make([]*flowsdk.Collection, 0) - if command.ContainsFlag(blockFlags.Include, "transactions") { - for _, guarantee := range block.CollectionGuarantees { - collection, err := flow.GetCollection(context.Background(), guarantee.CollectionID) - if err != nil { - return nil, err - } - collections = append(collections, collection) - } - } - - return &blockResult{ - block: block, - events: events, - collections: collections, - included: blockFlags.Include, - }, nil -} diff --git a/internal/cadence/cadence.go b/internal/cadence/cadence.go deleted file mode 100644 index 2c83aa094..000000000 --- a/internal/cadence/cadence.go +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cadence - -import ( - "github.com/onflow/cadence/runtime/cmd/execute" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/cadence/languageserver" -) - -var Cmd = &cobra.Command{ - Use: "cadence", - Short: "Execute Cadence code", - GroupID: "tools", - Run: func(cmd *cobra.Command, args []string) { - if len(args) > 0 { - execute.Execute(args, nil) - } else { - repl, err := execute.NewConsoleREPL() - if err != nil { - panic(err) - } - repl.Run() - } - }, -} - -func init() { - Cmd.AddCommand(languageserver.Cmd) -} diff --git a/internal/cadence/languageserver/languageserver.go b/internal/cadence/languageserver/languageserver.go deleted file mode 100644 index 9d29cdf17..000000000 --- a/internal/cadence/languageserver/languageserver.go +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package languageserver - -import ( - "log" - - "github.com/onflow/cadence-tools/languageserver" - "github.com/psiemens/sconfig" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/util" -) - -type config struct { - EnableFlowClient bool `default:"true" flag:"enable-flow-client" info:"Enable Flow client functionality"` -} - -var conf config - -var Cmd = &cobra.Command{ - Use: "language-server", - Short: "Start the Cadence language server", - Run: func(cmd *cobra.Command, args []string) { - languageserver.RunWithStdio(conf.EnableFlowClient) - }, -} - -func init() { - initConfig() -} - -func initConfig() { - err := sconfig.New(&conf). - FromEnvironment(util.EnvPrefix). - BindFlags(Cmd.PersistentFlags()). - Parse() - if err != nil { - log.Fatal(err) - } -} diff --git a/internal/collections/collections.go b/internal/collections/collections.go deleted file mode 100644 index 5da71b523..000000000 --- a/internal/collections/collections.go +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package collections - -import ( - "bytes" - "fmt" - "strings" - - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "collections", - Short: "Retrieve collections", - TraverseChildren: true, - GroupID: "resources", -} - -func init() { - getCommand.AddToParent(Cmd) -} - -type collectionResult struct { - *flow.Collection -} - -func (c *collectionResult) JSON() any { - txIDs := make([]string, 0) - - for _, tx := range c.Collection.TransactionIDs { - txIDs = append(txIDs, tx.String()) - } - - return txIDs -} - -func (c *collectionResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - _, _ = fmt.Fprintf(writer, "Collection ID %s:\n", c.Collection.ID()) - - for _, tx := range c.Collection.TransactionIDs { - _, _ = fmt.Fprintf(writer, "%s\n", tx.String()) - } - - _ = writer.Flush() - - return b.String() -} - -func (c *collectionResult) Oneliner() string { - return strings.Join(c.JSON().([]string), ",") -} diff --git a/internal/collections/collections_test.go b/internal/collections/collections_test.go deleted file mode 100644 index 68e7be02e..000000000 --- a/internal/collections/collections_test.go +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package collections - -import ( - "testing" - - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_Get(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{util.TestID.String()} - - srv.GetCollection.Run(func(args mock.Arguments) { - id := args.Get(1).(flow.Identifier) - assert.Equal(t, inArgs[0], id.String()) - }) - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - require.NoError(t, err) - require.NotNil(t, result) - }) -} diff --git a/internal/collections/get.go b/internal/collections/get.go deleted file mode 100644 index 72370444a..000000000 --- a/internal/collections/get.go +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package collections - -import ( - "context" - "fmt" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsCollections struct{} - -var collectionFlags = flagsCollections{} - -var getCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "get ", - Short: "Get collection info", - Example: "flow collections get 270d...9c31e", - Args: cobra.ExactArgs(1), - }, - Flags: &collectionFlags, - Run: get, -} - -func get( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - id := flowsdk.HexToID(args[0]) - - logger.StartProgress(fmt.Sprintf("Loading collection %s", id)) - defer logger.StopProgress() - - collection, err := flow.GetCollection(context.Background(), id) - if err != nil { - return nil, err - } - - return &collectionResult{collection}, nil -} diff --git a/internal/command/command.go b/internal/command/command.go deleted file mode 100644 index f1dcd81ca..000000000 --- a/internal/command/command.go +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package command - -import ( - "crypto/sha256" - "encoding/base64" - "errors" - "fmt" - "io" - "net/http" - "os" - "os/user" - "runtime" - "runtime/debug" - "strings" - "sync" - "time" - - "github.com/dukex/mixpanel" - "github.com/getsentry/sentry-go" - "github.com/spf13/afero" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/build" - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/gateway" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/settings" - "github.com/onflow/flow-cli/internal/util" -) - -// run the command with arguments. -type run func( - args []string, - globalFlags GlobalFlags, - logger output.Logger, - readerWriter flowkit.ReaderWriter, - flow flowkit.Services, -) (Result, error) - -// RunWithState runs the command with arguments and state. -type RunWithState func( - args []string, - globalFlags GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (Result, error) - -type Command struct { - Cmd *cobra.Command - Flags any - Run run - RunS RunWithState - Status *int -} - -const ( - formatText = "text" - formatInline = "inline" - formatJSON = "json" -) - -const ( - logLevelDebug = "debug" - logLevelInfo = "info" - logLevelError = "error" - logLevelNone = "none" -) - -// AddToParent add new command to main parent cmd -// and initializes all necessary things as well as take care of errors and output -// here we can do all boilerplate code that is else copied in each command and make sure -// we have one place to handle all errors and ensure commands have consistent results. -func (c Command) AddToParent(parent *cobra.Command) { - // initialize crash reporting for the CLI - initCrashReporting() - - c.Cmd.Run = func(cmd *cobra.Command, args []string) { - if !isDevelopment() { // only report crashes in production - defer sentry.Flush(2 * time.Second) - defer sentry.Recover() - } - - // initialize file loader used in commands - loader := &afero.Afero{Fs: afero.NewOsFs()} - - // if we receive a config error that isn't missing config we should handle it - state, confErr := flowkit.Load(Flags.ConfigPaths, loader) - if !errors.Is(confErr, config.ErrDoesNotExist) { - handleError("Config Error", confErr) - } - - network, err := resolveHost(state, Flags.Host, Flags.HostNetworkKey, Flags.Network) - handleError("Host Error", err) - - clientGateway, err := createGateway(*network) - handleError("Gateway Error", err) - - logger := createLogger(Flags.Log, Flags.Format) - - // initialize services - flow := flowkit.NewFlowkit(state, *network, clientGateway, logger) - - // skip version check if flag is set - if !Flags.SkipVersionCheck { - checkVersion(logger) - } - - // record command usage - wg := sync.WaitGroup{} - go UsageMetrics(c.Cmd, &wg) - - // run command based on requirements for state - var result Result - if c.Run != nil { - result, err = c.Run(args, Flags, logger, loader, flow) - } else if c.RunS != nil { - if confErr != nil { - handleError("Config Error", confErr) - } - - result, err = c.RunS(args, Flags, logger, flow, state) - } else { - panic("command implementation needs to provide run functionality") - } - - handleError("Command Error", err) - - // Do not print a result if none is provided. - // - // This is useful for interactive commands that do not - // require a printed summary (e.g. flow accounts create). - if result == nil { - return - } - - // format output result - formattedResult, err := formatResult(result, Flags.Filter, Flags.Format) - handleError("Result", err) - - // output result - err = outputResult(formattedResult, Flags.Save, Flags.Format, Flags.Filter) - handleError("Output Error", err) - - wg.Wait() - } - - bindFlags(c) - parent.AddCommand(c.Cmd) -} - -// createGateway creates a gateway to be used, defaults to grpc but can support others. -func createGateway(network config.Network) (gateway.Gateway, error) { - // create secure grpc client if hostNetworkKey provided - if network.Key != "" { - return gateway.NewSecureGrpcGateway(network) - } - - return gateway.NewGrpcGateway(network) -} - -// resolveHost from the flags provided. -// -// Resolve the network host in the following order: -// 1. if host flag is provided resolve to that host -// 2. if conf is initialized return host by network flag -// 3. if conf is not initialized and network flag is provided resolve to coded value for that network -// 4. default to emulator network -func resolveHost(state *flowkit.State, hostFlag, networkKeyFlag, networkFlag string) (*config.Network, error) { - // host flag has the highest priority - if hostFlag != "" { - // if network-key was provided validate it - if networkKeyFlag != "" { - err := util.ValidateECDSAP256Pub(networkKeyFlag) - if err != nil { - return nil, fmt.Errorf("invalid network key %s: %w", networkKeyFlag, err) - } - } - - if state != nil { - _, err := state.Networks().ByName(networkFlag) - if err != nil { - return nil, fmt.Errorf("network with name %s does not exist in configuration", networkFlag) - } - } else { - networkFlag = "custom" - } - - return &config.Network{Name: networkFlag, Host: hostFlag, Key: networkKeyFlag}, nil - } - - // network flag with project initialized is next - if state != nil { - stateNetwork, err := state.Networks().ByName(networkFlag) - if err != nil { - return nil, fmt.Errorf("network with name %s does not exist in configuration", networkFlag) - } - - return stateNetwork, nil - } - - networks := config.DefaultNetworks - network, err := networks.ByName(networkFlag) - if err != nil { - return nil, fmt.Errorf("invalid network with name %s", networkFlag) - } - - return network, nil -} - -// create logger utility. -func createLogger(logFlag string, formatFlag string) output.Logger { - // disable logging if we user want a specific format like JSON - // (more common they will not want also to have logs) - if formatFlag != formatText { - logFlag = logLevelNone - } - - var logLevel int - - switch logFlag { - case logLevelDebug: - logLevel = output.DebugLog - case logLevelError: - logLevel = output.ErrorLog - case logLevelNone: - logLevel = output.NoneLog - default: - logLevel = output.InfoLog - } - - return output.NewStdoutLogger(logLevel) -} - -// checkVersion fetches latest version and compares it to local. -func checkVersion(logger output.Logger) { - resp, err := http.Get("https://raw.githubusercontent.com/onflow/flow-cli/master/version.txt") - if err != nil || resp.StatusCode >= 400 { - return - } - - defer func(Body io.ReadCloser) { - err := Body.Close() - if err != nil { - logger.Error("error closing request") - } - }(resp.Body) - - body, _ := io.ReadAll(resp.Body) - latestVersion := strings.TrimSpace(string(body)) - - currentVersion := build.Semver() - if isDevelopment() { - return // avoid warning in local development - } - - if currentVersion != latestVersion { - logger.Info(fmt.Sprintf( - "\n%s Version warning: a new version of Flow CLI is available (%s).\n"+ - " Read the installation guide for upgrade instructions: https://docs.onflow.org/flow-cli/install\n", - output.WarningEmoji(), - strings.ReplaceAll(latestVersion, "\n", ""), - )) - } -} - -func isDevelopment() bool { - return build.Semver() == "undefined" -} - -// initCrashReporting set-ups sentry as crash reporting tool, it also sets listener for panics -// and asks before sending the error for a permission to do so from the user. -func initCrashReporting() { - currentVersion := build.Semver() - sentrySyncTransport := sentry.NewHTTPSyncTransport() - sentrySyncTransport.Timeout = time.Second * 3 - - err := sentry.Init(sentry.ClientOptions{ - Dsn: "https://f4e84ec91b1645779765bbe249b42311@o114654.ingest.sentry.io/6178538", - Environment: "Prod", - Release: currentVersion, - AttachStacktrace: true, - Transport: sentrySyncTransport, - BeforeSend: func(event *sentry.Event, hint *sentry.EventHint) *sentry.Event { - // ask for crash report permission - fmt.Printf("\n%s Crash detected! %s\n\n", output.ErrorEmoji(), event.Message) - - if util.ReportCrash() { - return event - } else { - fmt.Printf("\nPlease help us improve the Flow CLI by opening an issue on https://github.com/onflow/flow-cli/issues, \nand pasting the output as well as a description of the actions you took that resulted in this crash.\n\n") - fmt.Println(hint.RecoveredException) - fmt.Println(event.Threads, event.Fingerprint) - fmt.Println(event.Contexts) - fmt.Println(string(debug.Stack())) - } - - return nil - }, - }) - if err != nil { - _, _ = fmt.Fprintln(os.Stderr, err) // safest output method at this point - } -} - -// The token is injected at build-time using ldflags -var mixpanelToken = "" - -func UsageMetrics(command *cobra.Command, wg *sync.WaitGroup) { - if !settings.MetricsEnabled() || mixpanelToken == "" { - return - } - wg.Add(1) - client := mixpanel.New(mixpanelToken, "") - - // calculates a user ID that doesn't leak any personal information - usr, _ := user.Current() // ignore err, just use empty string - hash := sha256.Sum256([]byte(fmt.Sprintf("%s%s", usr.Username, usr.Uid))) - userID := base64.StdEncoding.EncodeToString(hash[:]) - - _ = client.Track(userID, "cli-command", &mixpanel.Event{ - IP: "0", // do not track IPs - Properties: map[string]any{ - "command": command.CommandPath(), - "version": build.Semver(), - "os": runtime.GOOS, - }, - }) - wg.Done() -} - -// GlobalFlags contains all global flags definitions. -type GlobalFlags struct { - Filter string - Format string - Save string - Host string - HostNetworkKey string - Log string - Network string - Yes bool - ConfigPaths []string - SkipVersionCheck bool -} diff --git a/internal/command/global_flags.go b/internal/command/global_flags.go deleted file mode 100644 index 33ecc0a9f..000000000 --- a/internal/command/global_flags.go +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package command - -import ( - "fmt" - "os" - - "github.com/psiemens/sconfig" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/internal/util" -) - -// Flags initialized to default values. -var Flags = GlobalFlags{ - Filter: "", - Format: formatText, - Save: "", - Host: "", - HostNetworkKey: "", - Network: config.EmulatorNetwork.Name, - Log: logLevelInfo, - Yes: false, - ConfigPaths: config.DefaultPaths(), - SkipVersionCheck: false, -} - -// InitFlags init all the global persistent flags. -func InitFlags(cmd *cobra.Command) { - cmd.PersistentFlags().StringVarP( - &Flags.Filter, - "filter", - "x", - Flags.Filter, - "Filter result values by property name", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.Format, - "format", - "", - Flags.Format, - "Format result values", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.Host, - "host", - "", - Flags.Host, - "Flow Access API host address", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.HostNetworkKey, - "network-key", - "", - Flags.HostNetworkKey, - "Flow Access API host network key for secure client connections", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.Format, - "output", - "o", - Flags.Format, - "Output format, options: \"text\", \"json\", \"inline\"", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.Save, - "save", - "s", - Flags.Save, - "Save result to a filename", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.Log, - "log", - "l", - Flags.Log, - "Log level, options: \"debug\", \"info\", \"error\", \"none\"", - ) - - cmd.PersistentFlags().StringSliceVarP( - &Flags.ConfigPaths, - "config-path", - "f", - Flags.ConfigPaths, - "Path to flow configuration file", - ) - - cmd.PersistentFlags().StringVarP( - &Flags.Network, - "network", - "n", - Flags.Network, - "Network from configuration file", - ) - - cmd.PersistentFlags().BoolVarP( - &Flags.Yes, - "yes", - "y", - Flags.Yes, - "Approve any prompts", - ) - - cmd.PersistentFlags().BoolVarP( - &Flags.SkipVersionCheck, - "skip-version-check", - "", - Flags.SkipVersionCheck, - "Skip version check during start up", - ) -} - -// bindFlags bind all the flags needed. -func bindFlags(command Command) { - err := sconfig.New(command.Flags). - FromEnvironment(util.EnvPrefix). - BindFlags(command.Cmd.PersistentFlags()). - Parse() - if err != nil { - fmt.Fprintln(os.Stderr, err) - } -} diff --git a/internal/command/global_flags_test.go b/internal/command/global_flags_test.go deleted file mode 100644 index f57c568eb..000000000 --- a/internal/command/global_flags_test.go +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package command_test - -import ( - "fmt" - "strconv" - "strings" - "testing" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/command" -) - -func TestInitFlags(t *testing.T) { - cmd := &cobra.Command{} - command.InitFlags(cmd) - - flags := []struct { - name string - expected string - }{ - {"filter", command.Flags.Filter}, - {"format", command.Flags.Format}, - {"save", command.Flags.Save}, - {"host", command.Flags.Host}, - {"network-key", command.Flags.HostNetworkKey}, - {"network", command.Flags.Network}, - {"log", command.Flags.Log}, - {"yes", strconv.FormatBool(command.Flags.Yes)}, - {"config-path", fmt.Sprintf("[%s]", strings.Join(command.Flags.ConfigPaths, ","))}, - {"skip-version-check", strconv.FormatBool(command.Flags.SkipVersionCheck)}, - } - - for _, flag := range flags { - f := cmd.PersistentFlags().Lookup(flag.name) - if f == nil { - t.Errorf("Flag %s was not initialized", flag.name) - } else if f.DefValue != flag.expected { - t.Errorf("Flag %s was not initialized with correct default value. Value: %s, Expected: %s", flag.name, f.Value.String(), flag.expected) - } - } -} diff --git a/internal/command/result.go b/internal/command/result.go deleted file mode 100644 index ed9be9266..000000000 --- a/internal/command/result.go +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package command - -import ( - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/onflow/flow-go-sdk/access/grpc" - "github.com/spf13/afero" - "golang.org/x/exp/maps" - - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" -) - -// Result interface describes all the formats for the result output. -type Result interface { - // String will output the result in human readable output. - String() string - // Oneliner will output the result in "grep-able" format. - Oneliner() string - // JSON will output the result in JSON format - JSON() any -} - -// ContainsFlag checks if output flag is present for the provided field. -func ContainsFlag(flags []string, field string) bool { - for _, n := range flags { - if strings.ToLower(n) == field { - return true - } - } - - return false -} - -// formatResult formats a result for printing. -func formatResult(result Result, filterFlag string, formatFlag string) (string, error) { - if result == nil { - return "", fmt.Errorf("missing result") - } - - if filterFlag != "" { - value, err := filterResultValue(result, filterFlag) - if err != nil { - return "", err - } - - return fmt.Sprintf("%v", value), nil - } - - switch strings.ToLower(formatFlag) { - case formatJSON: - jsonRes, _ := json.Marshal(result.JSON()) - return string(jsonRes), nil - case formatInline: - return result.Oneliner(), nil - default: - return result.String(), nil - } -} - -// outputResult to selected media. -func outputResult(result string, saveFlag string, formatFlag string, filterFlag string) error { - if saveFlag != "" { - af := afero.Afero{ - Fs: afero.NewOsFs(), - } - - // create directory if doesn't exist - dir := filepath.Dir(saveFlag) - err := af.MkdirAll(dir, 0644) - if err != nil { - return err - } - - fmt.Printf("%s result saved to: %s \n", output.SaveEmoji(), saveFlag) - return af.WriteFile(saveFlag, []byte(result), 0644) - } - - if formatFlag == formatInline || filterFlag != "" { - _, _ = fmt.Fprintf(os.Stdout, "%s", result) - } else { // default normal output - _, _ = fmt.Fprintf(os.Stdout, "\n%s\n\n", result) - } - return nil -} - -// filterResultValue returns a value by its name filtered from other result values. -func filterResultValue(result Result, filter string) (any, error) { - res, ok := result.JSON().(map[string]any) - if !ok { - return "", fmt.Errorf("not possible to filter by the value") - } - - value := res[filter] - if value == nil { - value = res[strings.ToLower(filter)] - } - if value == nil { - return nil, fmt.Errorf("value for filter: '%s' doesn't exists, possible values to filter by: %s", filter, maps.Keys(res)) - } - - return value, nil -} - -// handleError handle errors returned from command execution, try to understand why error happens and offer help to the user. -func handleError(description string, err error) { - if err == nil { - return - } - - // TODO(sideninja): refactor this to better handle errors not by string matching - // handle rpc error - switch t := err.(type) { - case *grpc.RPCError: - _, _ = fmt.Fprintf(os.Stderr, "%s Grpc Error: %s \n", output.ErrorEmoji(), t.GRPCStatus().Err().Error()) - default: - if errors.Is(err, config.ErrOutdatedFormat) { - _, _ = fmt.Fprintf(os.Stderr, "%s Config Error: %s \n", output.ErrorEmoji(), err.Error()) - _, _ = fmt.Fprintf(os.Stderr, "%s Please reset configuration using: 'flow init --reset'. Read more about new configuration here: https://github.com/onflow/flow-cli/releases/tag/v0.17.0", output.TryEmoji()) - } else if errors.Is(err, config.ErrDoesNotExist) { - _, _ = fmt.Fprintf(os.Stderr, "%s Config Error: %s \n", output.ErrorEmoji(), err.Error()) - _, _ = fmt.Fprintf(os.Stderr, "%s Please create configuration using: flow init", output.TryEmoji()) - } else if strings.Contains(err.Error(), "transport:") { - _, _ = fmt.Fprintf(os.Stderr, "%s %s \n", output.ErrorEmoji(), strings.Split(err.Error(), "transport:")[1]) - _, _ = fmt.Fprintf(os.Stderr, "%s Make sure your emulator is running or connection address is correct.", output.TryEmoji()) - } else if strings.Contains(err.Error(), "NotFound desc =") { - _, _ = fmt.Fprintf(os.Stderr, "%s Not Found:%s \n", output.ErrorEmoji(), strings.Split(err.Error(), "NotFound desc =")[1]) - } else if strings.Contains(err.Error(), "code = InvalidArgument desc = ") { - desc := strings.Split(err.Error(), "code = InvalidArgument desc = ") - _, _ = fmt.Fprintf(os.Stderr, "%s Invalid argument: %s \n", output.ErrorEmoji(), desc[len(desc)-1]) - if strings.Contains(err.Error(), "is invalid for chain") { - _, _ = fmt.Fprintf(os.Stderr, "%s Check you are connecting to the correct network or account address you use is correct.", output.TryEmoji()) - } else { - _, _ = fmt.Fprintf(os.Stderr, "%s Check your argument and flags value, you can use --help.", output.TryEmoji()) - } - } else if strings.Contains(err.Error(), "invalid signature:") { - _, _ = fmt.Fprintf(os.Stderr, "%s Invalid signature: %s \n", output.ErrorEmoji(), strings.Split(err.Error(), "invalid signature:")[1]) - _, _ = fmt.Fprintf(os.Stderr, "%s Check the signer private key is provided or is in the correct format. If running emulator, make sure it's using the same configuration as this command.", output.TryEmoji()) - } else if strings.Contains(err.Error(), "signature could not be verified using public key with") { - _, _ = fmt.Fprintf(os.Stderr, "%s %s: %s \n", output.ErrorEmoji(), description, err) - _, _ = fmt.Fprintf(os.Stderr, "%s If you are running emulator locally make sure that the emulator was started with the same config as used in this command. \nTry restarting the emulator.", output.TryEmoji()) - } else { - _, _ = fmt.Fprintf(os.Stderr, "%s %s: %s", output.ErrorEmoji(), description, err) - } - } - - fmt.Println() - os.Exit(1) -} diff --git a/internal/command/template.go b/internal/command/template.go deleted file mode 100644 index 87cfa62dd..000000000 --- a/internal/command/template.go +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package command - -var UsageTemplate = `Usage:{{if .Runnable}} - {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}} - {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}} - -Aliases: - {{.NameAndAliases}}{{end}}{{if .HasExample}} - -Examples: -{{.Example}}{{end}} -{{if .HasAvailableSubCommands}}{{if (eq .Name "flow")}} -👋 Welcome Flow developer! - If you are starting a new flow project use our super commands, start by running 'flow setup'. {{end}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}} -Available Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name "help"))}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}} - -{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name "help")))}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}} - -Additional Commands:{{range $cmds}}{{if (and (eq .GroupID "") (or .IsAvailableCommand (eq .Name "help")))}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}} - -Flags: -{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}} - -Global Flags: -{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} - -Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} - {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}} - -Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} -` diff --git a/internal/config/add-account.go b/internal/config/add-account.go deleted file mode 100644 index c3255292c..000000000 --- a/internal/config/add-account.go +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "fmt" - "strconv" - - "github.com/onflow/flow-cli/flowkit/accounts" - - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsAddAccount struct { - Name string `flag:"name" info:"Name for the account"` - Address string `flag:"address" info:"Account address"` - KeyIndex string `default:"0" flag:"key-index" info:"Account key index"` - SigAlgo string `default:"ECDSA_P256" flag:"sig-algo" info:"Signature algorithm of this account key"` - HashAlgo string `default:"SHA3_256" flag:"hash-algo" info:"Hash algorithm to pair with this account key"` - Key string `flag:"private-key" info:"Account private key"` -} - -var addAccountFlags = flagsAddAccount{} - -var addAccountCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "account", - Short: "Add account to configuration", - Example: "flow config add account", - Args: cobra.NoArgs, - }, - Flags: &addAccountFlags, - RunS: addAccount, -} - -func addAccount( - _ []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - raw, flagsProvided, err := flagsToAccountData(addAccountFlags) - if err != nil { - return nil, err - } - - if !flagsProvided { - raw = util.NewAccountPrompt() - } - - key, err := parseKey(raw.Key, raw.SigAlgo) - if err != nil { - return nil, err - } - - index, err := parseKeyIndex(raw.KeyIndex) - if err != nil { - return nil, err - } - - accountKey := config.AccountKey{ - Type: config.KeyTypeHex, - Index: index, - SigAlgo: crypto.StringToSignatureAlgorithm(raw.SigAlgo), - HashAlgo: crypto.StringToHashAlgorithm(raw.HashAlgo), - PrivateKey: key, - } - - account := &config.Account{ - Name: raw.Name, - Address: flow.HexToAddress(raw.Address), - Key: accountKey, - } - - hexKey := accounts.NewHexKeyFromPrivateKey(account.Key.Index, account.Key.HashAlgo, account.Key.PrivateKey) - state.Accounts().AddOrUpdate(&accounts.Account{ - Name: account.Name, - Address: account.Address, - Key: hexKey, - }) - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: fmt.Sprintf("Account %s added to the configuration", raw.Name), - }, nil - -} - -func parseKey(key string, sigAlgo string) (crypto.PrivateKey, error) { - privateKey, err := crypto.DecodePrivateKeyHex( - crypto.StringToSignatureAlgorithm(sigAlgo), - key, - ) - if err != nil { - return nil, err - } - - return privateKey, nil -} - -func parseKeyIndex(value string) (int, error) { - v, err := strconv.Atoi(value) - if err != nil { - return 0, fmt.Errorf("invalid index, must be a number") - } - if v < 0 { - return 0, fmt.Errorf("invalid index, must be positive") - } - - return v, nil -} - -func flagsToAccountData(flags flagsAddAccount) (*util.AccountData, bool, error) { - if flags.Name == "" && flags.Address == "" && flags.Key == "" { - return nil, false, nil - } - - if flags.Name == "" { - return nil, true, fmt.Errorf("name must be provided") - } else if flags.Address == "" { - return nil, true, fmt.Errorf("address must be provided") - } else if flags.Key == "" { - return nil, true, fmt.Errorf("key must be provided") - } - - if flow.HexToAddress(flags.Address) == flow.EmptyAddress { - return nil, true, fmt.Errorf("invalid address") - } - - return &util.AccountData{ - Name: flags.Name, - Address: flags.Address, - SigAlgo: flags.SigAlgo, - HashAlgo: flags.HashAlgo, - Key: flags.Key, - KeyIndex: flags.KeyIndex, - }, true, nil -} diff --git a/internal/config/add-contract.go b/internal/config/add-contract.go deleted file mode 100644 index 2191a7ac2..000000000 --- a/internal/config/add-contract.go +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "fmt" - - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsAddContract struct { - Name string `flag:"name" info:"Name of the contract"` - Filename string `flag:"filename" info:"Filename of the contract source"` - EmulatorAlias string `flag:"emulator-alias" info:"Address for the emulator alias"` - TestnetAlias string `flag:"testnet-alias" info:"Address for the testnet alias"` - MainnetAlias string `flag:"mainnet-alias" info:"Address for the mainnet alias"` -} - -var addContractFlags = flagsAddContract{} - -var addContractCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "contract", - Short: "Add contract to configuration", - Example: "flow config add contract", - Args: cobra.NoArgs, - }, - Flags: &addContractFlags, - RunS: addContract, -} - -func addContract( - _ []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - raw, flagsProvided, err := flagsToContractData(addContractFlags) - if err != nil { - return nil, err - } - - if !flagsProvided { - raw = util.NewContractPrompt() - } - - contract := config.Contract{ - Name: raw.Name, - Location: raw.Source, - } - - if raw.Emulator != "" { - contract.Aliases.Add( - config.EmulatorNetwork.Name, - flow.HexToAddress(raw.Emulator), - ) - } - - if raw.Mainnet != "" { - contract.Aliases.Add( - config.MainnetNetwork.Name, - flow.HexToAddress(raw.Mainnet), - ) - } - - if raw.Testnet != "" { - contract.Aliases.Add( - config.TestnetNetwork.Name, - flow.HexToAddress(raw.Testnet), - ) - } - - state.Contracts().AddOrUpdate(contract) - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: fmt.Sprintf("Contract %s added to the configuration", raw.Name), - }, nil -} - -func flagsToContractData(flags flagsAddContract) (*util.ContractData, bool, error) { - if flags.Name == "" && flags.Filename == "" { - return nil, false, nil - } - - if flags.Name == "" { - return nil, true, fmt.Errorf("name must be provided") - } - - if flags.Filename == "" { - return nil, true, fmt.Errorf("contract file name must be provided") - } - - if !config.Exists(flags.Filename) { - return nil, true, fmt.Errorf("contract file doesn't exist: %s", flags.Filename) - } - - if flags.EmulatorAlias != "" && flow.HexToAddress(flags.EmulatorAlias) == flow.EmptyAddress { - return nil, true, fmt.Errorf("invalid emulator alias address") - } - - if flags.TestnetAlias != "" && flow.HexToAddress(flags.TestnetAlias) == flow.EmptyAddress { - return nil, true, fmt.Errorf("invalid testnet alias address") - } - - if flags.MainnetAlias != "" && flow.HexToAddress(flags.MainnetAlias) == flow.EmptyAddress { - return nil, true, fmt.Errorf("invalid mainnnet alias address") - } - - return &util.ContractData{ - Name: flags.Name, - Source: flags.Filename, - Emulator: flags.EmulatorAlias, - Testnet: flags.TestnetAlias, - Mainnet: flags.MainnetAlias, - }, true, nil -} diff --git a/internal/config/add-deployment.go b/internal/config/add-deployment.go deleted file mode 100644 index b642dc7a5..000000000 --- a/internal/config/add-deployment.go +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsAddDeployment struct { - Network string `flag:"network" info:"Network name used for deployment"` - Account string `flag:"account" info:"Account name used for deployment"` - Contracts []string `flag:"contract" info:"Name of the contract to be deployed"` -} - -var addDeploymentFlags = flagsAddDeployment{} - -var addDeploymentCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "deployment", - Short: "Add deployment to configuration", - Example: "flow config add deployment", - Args: cobra.NoArgs, - }, - Flags: &addDeploymentFlags, - RunS: addDeployment, -} - -func addDeployment( - _ []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - raw, flagsProvided, err := flagsToDeploymentData(addDeploymentFlags) - if err != nil { - return nil, err - } - - if !flagsProvided { - raw = util.NewDeploymentPrompt(*state.Networks(), state.Config().Accounts, *state.Contracts()) - } - - deployment := state.Deployments().ByAccountAndNetwork(raw.Account, raw.Network) - if deployment == nil { - // add deployment if non-existing - state.Deployments().AddOrUpdate(config.Deployment{ - Network: raw.Network, - Account: raw.Account, - }) - deployment = state.Deployments().ByAccountAndNetwork(raw.Account, raw.Network) - } - - for _, c := range raw.Contracts { - deployment.AddContract(config.ContractDeployment{Name: c}) - } - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: "Deployment added to the configuration.\nYou can deploy using 'flow project deploy' command", - }, nil -} - -func flagsToDeploymentData(flags flagsAddDeployment) (*util.DeploymentData, bool, error) { - if flags.Network == "" && flags.Account == "" && len(flags.Contracts) == 0 { - return nil, false, nil - } - - if flags.Network == "" { - return nil, true, fmt.Errorf("network name must be provided") - } else if flags.Account == "" { - return nil, true, fmt.Errorf("account name must be provided") - } else if len(flags.Contracts) == 0 { - return nil, true, fmt.Errorf("at least one contract name must be provided") - } - - return &util.DeploymentData{ - Network: flags.Network, - Account: flags.Account, - Contracts: flags.Contracts, - }, true, nil -} diff --git a/internal/config/add-network.go b/internal/config/add-network.go deleted file mode 100644 index 832ee1d7e..000000000 --- a/internal/config/add-network.go +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "fmt" - "net/url" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsAddNetwork struct { - Name string `flag:"name" info:"Network name"` - Host string `flag:"host" info:"Flow Access API host address"` - Key string `flag:"network-key" info:"Flow Access API host network key for secure client connections"` -} - -var addNetworkFlags = flagsAddNetwork{} - -var addNetworkCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "network", - Short: "Add network to configuration", - Example: "flow config add network", - Args: cobra.NoArgs, - }, - Flags: &addNetworkFlags, - RunS: addNetwork, -} - -func addNetwork( - _ []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - raw, flagsProvided, err := flagsToNetworkData(addNetworkFlags) - if err != nil { - return nil, err - } - - if !flagsProvided { - raw = util.NewNetworkPrompt() - } - - state.Networks().AddOrUpdate(config.Network{ - Name: raw["name"], - Host: raw["host"], - Key: raw["key"], - }) - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: fmt.Sprintf("Network %s added to the configuration", raw["name"]), - }, nil -} - -func flagsToNetworkData(flags flagsAddNetwork) (map[string]string, bool, error) { - if flags.Name == "" && flags.Host == "" { - return nil, false, nil - } - - if flags.Name == "" { - return nil, true, fmt.Errorf("name must be provided") - } else if flags.Host == "" { - return nil, true, fmt.Errorf("host must be provided") - } - - _, err := url.ParseRequestURI(flags.Host) - if err != nil { - return nil, true, err - } - - err = util.ValidateECDSAP256Pub(flags.Key) - if err != nil { - return nil, true, fmt.Errorf("invalid network-key provided") - } - - return map[string]string{ - "name": flags.Name, - "host": flags.Host, - "key": flags.Key, - }, true, nil -} diff --git a/internal/config/add.go b/internal/config/add.go deleted file mode 100644 index 3a28666ce..000000000 --- a/internal/config/add.go +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" -) - -var addCmd = &cobra.Command{ - Use: "add ", - Short: "Add resource to configuration", - Example: "flow config add account", - Args: cobra.ExactArgs(1), - TraverseChildren: true, -} - -func init() { - addAccountCommand.AddToParent(addCmd) - addContractCommand.AddToParent(addCmd) - addDeploymentCommand.AddToParent(addCmd) - addNetworkCommand.AddToParent(addCmd) -} diff --git a/internal/config/config.go b/internal/config/config.go deleted file mode 100644 index 3689ca348..000000000 --- a/internal/config/config.go +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" -) - -var Cmd = &cobra.Command{ - Use: "config", - Short: "Utilities to manage configuration", - TraverseChildren: true, -} - -func init() { - initCommand.AddToParent(Cmd) - Cmd.AddCommand(addCmd) - Cmd.AddCommand(removeCmd) -} - -type result struct { - result string -} - -func (r *result) JSON() any { - return nil -} - -func (r *result) String() string { - if r.result != "" { - return r.result - } - - return "" -} - -func (r *result) Oneliner() string { - return "" -} diff --git a/internal/config/init.go b/internal/config/init.go deleted file mode 100644 index c726004fe..000000000 --- a/internal/config/init.go +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "bytes" - "fmt" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsInit struct { - ServicePrivateKey string `flag:"service-private-key" info:"Service account private key"` - ServiceKeySigAlgo string `default:"ECDSA_P256" flag:"service-sig-algo" info:"Service account key signature algorithm"` - ServiceKeyHashAlgo string `default:"SHA3_256" flag:"service-hash-algo" info:"Service account key hash algorithm"` - Reset bool `default:"false" flag:"reset" info:"Reset configuration file"` - Global bool `default:"false" flag:"global" info:"Initialize global user configuration"` -} - -var InitFlag = flagsInit{} - -var initCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "init", - Short: "Initialize a new configuration", - }, - Flags: &InitFlag, - Run: Initialise, -} - -func Initialise( - _ []string, - _ command.GlobalFlags, - logger output.Logger, - readerWriter flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - logger.Info("⚠️Notice: for starting a new project prefer using 'flow setup'.") - - sigAlgo := crypto.StringToSignatureAlgorithm(InitFlag.ServiceKeySigAlgo) - if sigAlgo == crypto.UnknownSignatureAlgorithm { - return nil, fmt.Errorf("invalid signature algorithm: %s", InitFlag.ServiceKeySigAlgo) - } - - hashAlgo := crypto.StringToHashAlgorithm(InitFlag.ServiceKeyHashAlgo) - if hashAlgo == crypto.UnknownHashAlgorithm { - return nil, fmt.Errorf("invalid hash algorithm: %s", InitFlag.ServiceKeyHashAlgo) - } - - state, err := flowkit.Init(readerWriter, sigAlgo, hashAlgo) - if err != nil { - return nil, err - } - - if InitFlag.ServicePrivateKey != "" { - privateKey, err := crypto.DecodePrivateKeyHex(sigAlgo, InitFlag.ServicePrivateKey) - if err != nil { - return nil, fmt.Errorf("invalid private key: %w", err) - } - - state.SetEmulatorKey(privateKey) - } - - path := config.DefaultPath - if InitFlag.Global { - path = config.GlobalPath() - } - - if config.Exists(path) && !InitFlag.Reset { - return nil, fmt.Errorf( - "configuration already exists at: %s, if you want to reset configuration use the reset flag", - path, - ) - } - - err = state.Save(path) - if err != nil { - return nil, err - } - - return &initResult{State: state}, nil -} - -type initResult struct { - *flowkit.State -} - -func (r *initResult) JSON() any { - return r -} - -func (r *initResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - account, _ := r.State.EmulatorServiceAccount() - - _, _ = fmt.Fprintf(writer, "Configuration initialized\n") - _, _ = fmt.Fprintf(writer, "Service account: %s\n\n", output.Bold("0x"+account.Address.String())) - _, _ = fmt.Fprintf(writer, - "Start emulator by running: %s \nReset configuration using: %s\n", - output.Bold("'flow emulator'"), - output.Bold("'flow init --reset'"), - ) - - _ = writer.Flush() - return b.String() -} - -func (r *initResult) Oneliner() string { - return "" -} diff --git a/internal/config/remove-account.go b/internal/config/remove-account.go deleted file mode 100644 index a2b42f36b..000000000 --- a/internal/config/remove-account.go +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsRemoveAccount struct{} - -var removeAccountFlags = flagsRemoveAccount{} - -var removeAccountCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "account ", - Short: "Remove account from configuration", - Example: "flow config remove account Foo", - Args: cobra.MaximumNArgs(1), - }, - Flags: &removeAccountFlags, - RunS: removeAccount, -} - -func removeAccount( - args []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - name := "" - if len(args) == 1 { - name = args[0] - } else { - name = util.RemoveAccountPrompt(state.Config().Accounts) - } - - err := state.Accounts().Remove(name) - if err != nil { - return nil, err - } - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: "account removed", - }, nil -} diff --git a/internal/config/remove-contract.go b/internal/config/remove-contract.go deleted file mode 100644 index fd7236566..000000000 --- a/internal/config/remove-contract.go +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsRemoveContract struct{} - -var removeContractFlags = flagsRemoveContract{} - -var removeContractCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "contract ", - Short: "Remove contract from configuration", - Example: "flow config remove contract Foo", - Args: cobra.MaximumNArgs(1), - }, - Flags: &removeContractFlags, - RunS: removeContract, -} - -func removeContract( - args []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - name := "" - if len(args) == 1 { - name = args[0] - } else { - name = util.RemoveContractPrompt(*state.Contracts()) - } - - err := state.Contracts().Remove(name) - if err != nil { - return nil, err - } - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: "contract removed", - }, nil -} diff --git a/internal/config/remove-deployment.go b/internal/config/remove-deployment.go deleted file mode 100644 index 6a8c0daf1..000000000 --- a/internal/config/remove-deployment.go +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsRemoveDeployment struct{} - -var removeDeploymentFlags = flagsRemoveDeployment{} - -var removeDeploymentCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "deployment ", - Short: "Remove deployment from configuration", - Example: "flow config remove deployment Foo testnet", - Args: cobra.MaximumNArgs(2), - }, - Flags: &removeDeploymentFlags, - RunS: removeDeployment, -} - -func removeDeployment( - args []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - account := "" - network := "" - if len(args) == 2 { - account = args[0] - network = args[1] - } else { - account, network = util.RemoveDeploymentPrompt(*state.Deployments()) - } - - err := state.Deployments().Remove(account, network) - if err != nil { - return nil, err - } - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: "deployment removed", - }, nil -} diff --git a/internal/config/remove-network.go b/internal/config/remove-network.go deleted file mode 100644 index 48f2d956f..000000000 --- a/internal/config/remove-network.go +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsRemoveNetwork struct{} - -var removeNetworkFlags = flagsRemoveNetwork{} - -var removeNetworkCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "network ", - Short: "Remove network from configuration", - Example: "flow config remove network Foo", - Args: cobra.MaximumNArgs(1), - }, - Flags: &removeNetworkFlags, - RunS: removeNetwork, -} - -func removeNetwork( - args []string, - globalFlags command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - name := "" - if len(args) == 1 { - name = args[0] - } else { - name = util.RemoveNetworkPrompt(*state.Networks()) - } - - err := state.Networks().Remove(name) - if err != nil { - return nil, err - } - - err = state.SaveEdited(globalFlags.ConfigPaths) - if err != nil { - return nil, err - } - - return &result{ - result: "network removed", - }, nil -} diff --git a/internal/config/remove.go b/internal/config/remove.go deleted file mode 100644 index 771438c07..000000000 --- a/internal/config/remove.go +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import ( - "github.com/spf13/cobra" -) - -var removeCmd = &cobra.Command{ - Use: "remove ", - Short: "Remove resource from configuration", - Example: "flow config remove account", - Args: cobra.ExactArgs(1), - TraverseChildren: true, -} - -func init() { - removeAccountCommand.AddToParent(removeCmd) - removeContractCommand.AddToParent(removeCmd) - removeDeploymentCommand.AddToParent(removeCmd) - removeNetworkCommand.AddToParent(removeCmd) -} diff --git a/internal/dependencymanager/add.go b/internal/dependencymanager/add.go deleted file mode 100644 index 72eaedb7e..000000000 --- a/internal/dependencymanager/add.go +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dependencymanager - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type addFlagsCollection struct { - name string `default:"" flag:"name" info:"Name of the dependency"` -} - -var addFlags = addFlagsCollection{} - -var addCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "add ", - Short: "Add a single contract and its dependencies.", - Example: "flow dependencies add testnet://0afe396ebc8eee65.FlowToken", - Args: cobra.ExactArgs(1), - }, - Flags: &addFlags, - RunS: add, -} - -func add( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - logger.Info(fmt.Sprintf("🔄 Installing dependencies for %s...", args[0])) - - dep := args[0] - - installer, err := NewDependencyInstaller(logger, state) - if err != nil { - logger.Error(fmt.Sprintf("Error: %v", err)) - return nil, err - } - - if err := installer.Add(dep, addFlags.name); err != nil { - logger.Error(fmt.Sprintf("Error: %v", err)) - return nil, err - } - - logger.Info("✅ Dependency installation complete. Check your flow.json") - logger.Info("Ensure you add any required dependencies to your 'deployments' section. This can be done using the 'flow config add deployment' command.") - logger.Info("Note: Core contracts do not need to be added to deployments. For reference, see this URL: https://github.com/onflow/flow-core-contracts") - - return nil, nil -} diff --git a/internal/dependencymanager/dependencies.go b/internal/dependencymanager/dependencies.go deleted file mode 100644 index 7175b7e9b..000000000 --- a/internal/dependencymanager/dependencies.go +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dependencymanager - -import ( - "github.com/spf13/cobra" -) - -var Cmd = &cobra.Command{ - Use: "dependencies", - Short: "Manage contracts and dependencies", - TraverseChildren: true, - GroupID: "manager", - Aliases: []string{"deps"}, -} - -func init() { - addCommand.AddToParent(Cmd) - installCommand.AddToParent(Cmd) -} diff --git a/internal/dependencymanager/dependencyinstaller.go b/internal/dependencymanager/dependencyinstaller.go deleted file mode 100644 index 0be79d74b..000000000 --- a/internal/dependencymanager/dependencyinstaller.go +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dependencymanager - -import ( - "crypto/sha256" - "encoding/hex" - "fmt" - "os" - "path/filepath" - "sync" - - "github.com/onflow/flow-cli/internal/util" - - "github.com/onflow/flow-cli/flowkit/gateway" - - "github.com/onflow/flow-cli/flowkit/project" - - flowsdk "github.com/onflow/flow-go-sdk" - - "github.com/onflow/flow-cli/flowkit/config" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" -) - -type DependencyInstaller struct { - Gateways map[string]gateway.Gateway - Logger output.Logger - State *flowkit.State - Mutex sync.Mutex -} - -// NewDependencyInstaller creates a new instance of DependencyInstaller -func NewDependencyInstaller(logger output.Logger, state *flowkit.State) (*DependencyInstaller, error) { - emulatorGateway, err := gateway.NewGrpcGateway(config.EmulatorNetwork) - if err != nil { - return nil, fmt.Errorf("error creating emulator gateway: %v", err) - } - - testnetGateway, err := gateway.NewGrpcGateway(config.TestnetNetwork) - if err != nil { - return nil, fmt.Errorf("error creating testnet gateway: %v", err) - } - - mainnetGateway, err := gateway.NewGrpcGateway(config.MainnetNetwork) - if err != nil { - return nil, fmt.Errorf("error creating mainnet gateway: %v", err) - } - - gateways := map[string]gateway.Gateway{ - config.EmulatorNetwork.Name: emulatorGateway, - config.TestnetNetwork.Name: testnetGateway, - config.MainnetNetwork.Name: mainnetGateway, - } - - return &DependencyInstaller{ - Gateways: gateways, - Logger: logger, - State: state, - }, nil -} - -// Install processes all the dependencies in the state and installs them and any dependencies they have -func (di *DependencyInstaller) Install() error { - for _, dependency := range *di.State.Dependencies() { - if err := di.processDependency(dependency); err != nil { - di.Logger.Error(fmt.Sprintf("Error processing dependency: %v", err)) - return err - } - } - return nil -} - -// Add processes a single dependency and installs it and any dependencies it has, as well as adding it to the state -func (di *DependencyInstaller) Add(depSource, customName string) error { - depNetwork, depAddress, depContractName, err := config.ParseSourceString(depSource) - if err != nil { - return fmt.Errorf("error parsing source: %w", err) - } - - name := depContractName - - if customName != "" { - name = customName - } - - dep := config.Dependency{ - Name: name, - Source: config.Source{ - NetworkName: depNetwork, - Address: flowsdk.HexToAddress(depAddress), - ContractName: depContractName, - }, - } - - if err := di.processDependency(dep); err != nil { - return fmt.Errorf("error processing dependency: %w", err) - } - - return nil -} - -func (di *DependencyInstaller) processDependency(dependency config.Dependency) error { - depAddress := flowsdk.HexToAddress(dependency.Source.Address.String()) - return di.fetchDependencies(dependency.Source.NetworkName, depAddress, dependency.Name, dependency.Source.ContractName) -} - -func (di *DependencyInstaller) fetchDependencies(networkName string, address flowsdk.Address, assignedName, contractName string) error { - account, err := di.Gateways[networkName].GetAccount(address) - if err != nil { - return fmt.Errorf("failed to get account: %w", err) - } - if account == nil { - return fmt.Errorf("account is nil for address: %s", address) - } - - if account.Contracts == nil { - return fmt.Errorf("contracts are nil for account: %s", address) - } - - var wg sync.WaitGroup - errCh := make(chan error, len(account.Contracts)) - - // Create a max number of goroutines so that we don't rate limit the access node - maxGoroutines := 5 - semaphore := make(chan struct{}, maxGoroutines) - - found := false - - for _, contract := range account.Contracts { - program, err := project.NewProgram(contract, nil, "") - if err != nil { - return fmt.Errorf("failed to parse program: %w", err) - } - - parsedContractName, err := program.Name() - if err != nil { - return fmt.Errorf("failed to parse contract name: %w", err) - } - - if parsedContractName == contractName { - found = true - - if err := di.handleFoundContract(networkName, address.String(), assignedName, parsedContractName, program); err != nil { - return fmt.Errorf("failed to handle found contract: %w", err) - } - - if program.HasAddressImports() { - imports := program.AddressImportDeclarations() - for _, imp := range imports { - wg.Add(1) - go func(importAddress flowsdk.Address, contractName string) { - semaphore <- struct{}{} - defer func() { - <-semaphore - wg.Done() - }() - err := di.fetchDependencies(networkName, importAddress, contractName, contractName) - if err != nil { - errCh <- err - } - }(flowsdk.HexToAddress(imp.Location.String()), imp.Identifiers[0].String()) - } - } - } - } - - if !found { - errMsg := fmt.Sprintf("contract %s not found for account %s on network %s", contractName, address, networkName) - di.Logger.Error(errMsg) - } - - wg.Wait() - close(errCh) - close(semaphore) - - for err := range errCh { - if err != nil { - return err - } - } - - return nil -} - -func (di *DependencyInstaller) contractFileExists(address, contractName string) bool { - fileName := fmt.Sprintf("%s.cdc", contractName) - path := filepath.Join("imports", address, fileName) - - _, err := di.State.ReaderWriter().Stat(path) - - return err == nil -} - -func (di *DependencyInstaller) createContractFile(address, contractName, data string) error { - fileName := fmt.Sprintf("%s.cdc", contractName) - path := filepath.Join("imports", address, fileName) - dir := filepath.Dir(path) - - if err := di.State.ReaderWriter().MkdirAll(dir, 0755); err != nil { - return fmt.Errorf("error creating directories: %w", err) - } - - if err := di.State.ReaderWriter().WriteFile(path, []byte(data), 0644); err != nil { - return fmt.Errorf("error writing file: %w", err) - } - - return nil -} - -func (di *DependencyInstaller) handleFileSystem(contractAddr, contractName, contractData, networkName string) error { - di.Mutex.Lock() - defer di.Mutex.Unlock() - - if !di.contractFileExists(contractAddr, contractName) { - if err := di.createContractFile(contractAddr, contractName, contractData); err != nil { - return fmt.Errorf("failed to create contract file: %w", err) - } - - di.Logger.Info(fmt.Sprintf("Dependency Manager: %s from %s on %s installed", contractName, contractAddr, networkName)) - } - - return nil -} - -func (di *DependencyInstaller) handleFoundContract(networkName, contractAddr, assignedName, contractName string, program *project.Program) error { - hash := sha256.New() - hash.Write(program.CodeWithUnprocessedImports()) - originalContractDataHash := hex.EncodeToString(hash.Sum(nil)) - - program.ConvertAddressImports() - contractData := string(program.CodeWithUnprocessedImports()) - - dependency := di.State.Dependencies().ByName(assignedName) - - // If a dependency by this name already exists and its remote source network or address does not match, then give option to stop or continue - if dependency != nil && (dependency.Source.NetworkName != networkName || dependency.Source.Address.String() != contractAddr) { - di.Logger.Info(fmt.Sprintf("🚫 A dependency named %s already exists with a different remote source. Please fix the conflict and retry.", assignedName)) - os.Exit(0) - return nil - } - - // Check if remote source version is different from local version - // If it is, ask if they want to update - // If no hash, ignore - if dependency != nil && dependency.Hash != "" && dependency.Hash != originalContractDataHash { - msg := fmt.Sprintf("The latest version of %s is different from the one you have locally. Do you want to update it?", contractName) - if !util.GenericBoolPrompt(msg) { - return nil - } - } - - err := di.handleFileSystem(contractAddr, contractName, contractData, networkName) - if err != nil { - return fmt.Errorf("error handling file system: %w", err) - } - - err = di.updateState(networkName, contractAddr, assignedName, contractName, originalContractDataHash) - if err != nil { - di.Logger.Error(fmt.Sprintf("Error updating state: %v", err)) - return err - } - - return nil -} - -func (di *DependencyInstaller) updateState(networkName, contractAddress, assignedName, contractName, contractHash string) error { - dep := config.Dependency{ - Name: assignedName, - Source: config.Source{ - NetworkName: networkName, - Address: flowsdk.HexToAddress(contractAddress), - ContractName: contractName, - }, - Hash: contractHash, - } - - isNewDep := di.State.Dependencies().ByName(dep.Name) == nil - - di.State.Dependencies().AddOrUpdate(dep) - di.State.Contracts().AddDependencyAsContract(dep, networkName) - err := di.State.SaveDefault() - if err != nil { - return err - } - - if isNewDep { - di.Logger.Info(fmt.Sprintf("Dependency Manager: %s added to flow.json", dep.Name)) - } - - return nil -} diff --git a/internal/dependencymanager/dependencyinstaller_test.go b/internal/dependencymanager/dependencyinstaller_test.go deleted file mode 100644 index 9a7e1ac59..000000000 --- a/internal/dependencymanager/dependencyinstaller_test.go +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dependencymanager - -import ( - "fmt" - "testing" - - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/gateway" - "github.com/onflow/flow-cli/flowkit/gateway/mocks" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/util" -) - -func TestDependencyInstallerInstall(t *testing.T) { - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - serviceAcc, _ := state.EmulatorServiceAccount() - serviceAddress := serviceAcc.Address - - dep := config.Dependency{ - Name: "Hello", - Source: config.Source{ - NetworkName: "emulator", - Address: serviceAddress, - ContractName: "Hello", - }, - } - - state.Dependencies().AddOrUpdate(dep) - - t.Run("Success", func(t *testing.T) { - gw := mocks.DefaultMockGateway() - - gw.GetAccount.Run(func(args mock.Arguments) { - addr := args.Get(0).(flow.Address) - assert.Equal(t, addr.String(), serviceAcc.Address.String()) - acc := tests.NewAccountWithAddress(addr.String()) - acc.Contracts = map[string][]byte{ - tests.ContractHelloString.Name: tests.ContractHelloString.Source, - } - - gw.GetAccount.Return(acc, nil) - }) - - di := &DependencyInstaller{ - Gateways: map[string]gateway.Gateway{ - config.EmulatorNetwork.Name: gw.Mock, - config.TestnetNetwork.Name: gw.Mock, - config.MainnetNetwork.Name: gw.Mock, - }, - Logger: logger, - State: state, - } - - err := di.Install() - assert.NoError(t, err, "Failed to install dependencies") - - filePath := fmt.Sprintf("imports/%s/%s.cdc", serviceAddress.String(), tests.ContractHelloString.Name) - fileContent, err := state.ReaderWriter().ReadFile(filePath) - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, fileContent) - }) -} - -func TestDependencyInstallerAdd(t *testing.T) { - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - serviceAcc, _ := state.EmulatorServiceAccount() - serviceAddress := serviceAcc.Address - - t.Run("Success", func(t *testing.T) { - gw := mocks.DefaultMockGateway() - - gw.GetAccount.Run(func(args mock.Arguments) { - addr := args.Get(0).(flow.Address) - assert.Equal(t, addr.String(), serviceAcc.Address.String()) - acc := tests.NewAccountWithAddress(addr.String()) - acc.Contracts = map[string][]byte{ - tests.ContractHelloString.Name: tests.ContractHelloString.Source, - } - - gw.GetAccount.Return(acc, nil) - }) - - di := &DependencyInstaller{ - Gateways: map[string]gateway.Gateway{ - config.EmulatorNetwork.Name: gw.Mock, - config.TestnetNetwork.Name: gw.Mock, - config.MainnetNetwork.Name: gw.Mock, - }, - Logger: logger, - State: state, - } - - sourceStr := fmt.Sprintf("emulator://%s.%s", serviceAddress.String(), tests.ContractHelloString.Name) - err := di.Add(sourceStr, "") - assert.NoError(t, err, "Failed to install dependencies") - - filePath := fmt.Sprintf("imports/%s/%s.cdc", serviceAddress.String(), tests.ContractHelloString.Name) - fileContent, err := state.ReaderWriter().ReadFile(filePath) - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, fileContent) - }) -} diff --git a/internal/dependencymanager/install.go b/internal/dependencymanager/install.go deleted file mode 100644 index cd16effb9..000000000 --- a/internal/dependencymanager/install.go +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package dependencymanager - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type installFlagsCollection struct{} - -var installFlags = installFlagsCollection{} - -var installCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "install", - Short: "Install contract and dependencies.", - Example: "flow dependencies install", - }, - Flags: &installFlags, - RunS: install, -} - -func install( - _ []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - logger.Info("🔄 Installing dependencies from flow.json...") - - installer, err := NewDependencyInstaller(logger, state) - if err != nil { - logger.Error(fmt.Sprintf("Error: %v", err)) - return nil, err - } - - if err := installer.Install(); err != nil { - logger.Error(fmt.Sprintf("Error: %v", err)) - return nil, err - } - - logger.Info("✅ Dependency installation complete. Check your flow.json") - - return nil, nil -} diff --git a/internal/emulator/snapshot.go b/internal/emulator/snapshot.go deleted file mode 100644 index 5855e403d..000000000 --- a/internal/emulator/snapshot.go +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package emulator - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "strings" - - "github.com/spf13/cobra" - "golang.org/x/exp/slices" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type SnapshotFlag struct{} - -var snapshotFlag = SnapshotFlag{} - -var SnapshotCmd = &command.Command{ - Cmd: &cobra.Command{ - Use: "snapshot [snapshotName]", - Short: "Create/Load/List emulator snapshots", - Example: "flow emulator snapshot create testSnapshot", - Args: cobra.RangeArgs(1, 2), - }, - Flags: &snapshotFlag, - Run: snapshot, -} - -type snapshotList struct { - Snapshots []string -} - -func (s *snapshotList) JSON() any { - return s.Snapshots -} - -func (s *snapshotList) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - _, _ = fmt.Fprintf(writer, "Snapshots:\n") - for _, snapshotName := range s.Snapshots { - _, _ = fmt.Fprintf(writer, "\t%s\n", snapshotName) - } - _ = writer.Flush() - return b.String() -} - -func (s *snapshotList) Oneliner() string { - return strings.Join(s.Snapshots, ",") -} - -type snapShotResult struct { - Name string `json:"context"` - BlockID string `json:"blockId"` - Height uint64 `json:"height"` - Result string `json:"result,omitempty"` -} - -func (r *snapShotResult) JSON() any { - result := make(map[string]any) - result["name"] = r.Name - result["blockID"] = r.BlockID - result["height"] = r.Height - if r.Result != "" { - result["result"] = r.Result - } - - return result -} - -func (r *snapShotResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - if r.Result != "" { - _, _ = fmt.Fprintf(writer, "%s\n", r.Result) - } - _, _ = fmt.Fprintf(writer, "Name\t%s\n", r.Name) - _, _ = fmt.Fprintf(writer, "Block ID\t%s\n", r.BlockID) - _, _ = fmt.Fprintf(writer, "Height\t%d", r.Height) - - _ = writer.Flush() - return b.String() -} - -func (r *snapShotResult) Oneliner() string { - return fmt.Sprintf("%s : %s (%d) %s", r.Name, r.BlockID, r.Height, r.Result) -} - -const snapshotEndpoint = "http://localhost:8080/emulator/snapshots" - -func makeRequest(r *http.Request, v any) error { - resp, err := http.DefaultClient.Do(r) - if err != nil { - return fmt.Errorf("emulator snapshot request error: %w", err) - } - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("emulator snapshot request error: status_code=%d", resp.StatusCode) - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - err = json.Unmarshal(body, v) - if err != nil { - return err - } - - return nil -} - -func requestListSnapshots() (*http.Request, error) { - request, err := http.NewRequest("GET", snapshotEndpoint, nil) - if err != nil { - return nil, err - } - return request, nil -} - -func requestCreateSnapshot(name string) (*http.Request, error) { - requestBody := bytes.NewBufferString(fmt.Sprintf("name=%s", name)) - request, err := http.NewRequest("POST", snapshotEndpoint, requestBody) - request.Header.Add("Content-Type", "application/x-www-form-urlencoded") - if err != nil { - return nil, err - } - return request, nil -} - -func requestLoadSnapshot(name string) (*http.Request, error) { - request, err := http.NewRequest("PUT", fmt.Sprintf("%s/%s", snapshotEndpoint, name), nil) - if err != nil { - return nil, err - } - return request, nil -} - -func listSnapshot() (result []string, err error) { - req, err := requestListSnapshots() - if err != nil { - return []string{}, err - } - - err = makeRequest(req, &result) - if err != nil { - return []string{}, err - } - - return result, nil -} - -type snapshotCommand string - -const ( - snapshotCommandList snapshotCommand = "list" - snapshotCommandCreate snapshotCommand = "create" - snapshotCommandLoad snapshotCommand = "load" -) - -func snapshot( - args []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - - subCommand := args[0] - - snapshots, err := listSnapshot() - if err != nil { - return nil, err - } - - switch snapshotCommand(subCommand) { - case snapshotCommandList: - return &snapshotList{Snapshots: snapshots}, nil - - case snapshotCommandCreate: - if len(args) < 2 { - return nil, fmt.Errorf("snapshot create command requires name argument") - } - name := args[1] - exists := slices.Contains(snapshots, name) - if exists { - return nil, fmt.Errorf("snapshot '%s' already exists", name) - } - - var result snapShotResult - req, err := requestCreateSnapshot(name) - if err != nil { - return nil, err - } - err = makeRequest(req, &result) - if err != nil { - return nil, err - } - result.Result = "Snapshot created" - return &result, nil - - case snapshotCommandLoad: - if len(args) < 2 { - return nil, fmt.Errorf("snapshot load command requires name argument") - } - name := args[1] - exists := slices.Contains(snapshots, name) - if !exists { - return nil, fmt.Errorf("snapshot '%s' does not exist", name) - } - - var result snapShotResult - req, err := requestLoadSnapshot(name) - if err != nil { - return nil, err - } - err = makeRequest(req, &result) - if err != nil { - return nil, err - } - result.Result = "Snapshot loaded" - return &result, nil - - default: - return nil, fmt.Errorf("invalid snapshot command: valid commands are: 'list', 'create', 'load'") - } - -} diff --git a/internal/emulator/start.go b/internal/emulator/start.go deleted file mode 100644 index d0661b088..000000000 --- a/internal/emulator/start.go +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package emulator - -import ( - "errors" - "fmt" - "os" - "sync" - - "github.com/onflow/flow-emulator/cmd/emulator/start" - "github.com/onflow/flow-emulator/emulator" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/afero" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd *cobra.Command - -func configuredServiceKey( - init bool, - sigAlgo crypto.SignatureAlgorithm, - hashAlgo crypto.HashAlgorithm, -) ( - crypto.PrivateKey, - crypto.SignatureAlgorithm, - crypto.HashAlgorithm, -) { - var state *flowkit.State - var err error - loader := &afero.Afero{Fs: afero.NewOsFs()} - command.UsageMetrics(Cmd, &sync.WaitGroup{}) - - if init { - if sigAlgo == crypto.UnknownSignatureAlgorithm { - sigAlgo = emulator.DefaultServiceKeySigAlgo - } - - if hashAlgo == crypto.UnknownHashAlgorithm { - hashAlgo = emulator.DefaultServiceKeyHashAlgo - } - - state, err = flowkit.Init(loader, sigAlgo, hashAlgo) - if err != nil { - exitf(1, err.Error()) - } else { - err = state.SaveDefault() - if err != nil { - exitf(1, err.Error()) - } - } - } else { - state, err = flowkit.Load(command.Flags.ConfigPaths, loader) - if err != nil { - if errors.Is(err, config.ErrDoesNotExist) { - exitf(1, "🙏 Configuration is missing, initialize it with: 'flow init' and then rerun this command.") - } else { - exitf(1, err.Error()) - } - } - } - - serviceAccount, err := state.EmulatorServiceAccount() - if err != nil { - util.Exit(1, err.Error()) - } - - privateKey, err := serviceAccount.Key.PrivateKey() - if err != nil { - util.Exit(1, "Only hexadecimal keys can be used as the emulator service account key.") - } - - err = serviceAccount.Key.Validate() - if err != nil { - util.Exit( - 1, - fmt.Sprintf("invalid private key in %s emulator configuration, %s", - serviceAccount.Name, - err.Error(), - ), - ) - } - - return *privateKey, serviceAccount.Key.SigAlgo(), serviceAccount.Key.HashAlgo() -} - -func init() { - Cmd = start.Cmd(configuredServiceKey) - Cmd.Use = "emulator" - Cmd.Short = "Run Flow network for development" - Cmd.GroupID = "tools" - SnapshotCmd.AddToParent(Cmd) -} - -func exitf(code int, msg string, args ...any) { - fmt.Printf(msg+"\n", args...) - os.Exit(code) -} diff --git a/internal/events/events.go b/internal/events/events.go deleted file mode 100644 index 83ab34d3a..000000000 --- a/internal/events/events.go +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package events - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - - "github.com/onflow/cadence" - jsoncdc "github.com/onflow/cadence/encoding/json" - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "events", - Short: "Retrieve events", - TraverseChildren: true, - GroupID: "resources", -} - -func init() { - getCommand.AddToParent(Cmd) -} - -type EventResult struct { - BlockEvents []flow.BlockEvents - Events []flow.Event -} - -func (e *EventResult) JSON() any { - result := make([]any, 0) - - for _, blockEvent := range e.BlockEvents { - if len(blockEvent.Events) > 0 { - for _, event := range blockEvent.Events { - result = append(result, map[string]any{ - "blockID": blockEvent.Height, - "index": event.EventIndex, - "type": event.Type, - "transactionId": event.TransactionID.String(), - "values": json.RawMessage( - jsoncdc.MustEncode(event.Value), - ), - }) - } - } - } - - return result -} - -func (e *EventResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - for _, blockEvent := range e.BlockEvents { - if len(blockEvent.Events) > 0 { - _, _ = fmt.Fprintf(writer, "Events Block #%v:", blockEvent.Height) - eventsString(writer, blockEvent.Events) - _, _ = fmt.Fprintf(writer, "\n") - } - } - - // if we have events passed directly and not in relation to block - eventsString(writer, e.Events) - - _ = writer.Flush() - return b.String() -} - -func (e *EventResult) Oneliner() string { - result := "" - for _, blockEvent := range e.BlockEvents { - if len(blockEvent.Events) > 0 { - result += fmt.Sprintf("Events Block #%v: [", blockEvent.Height) - for _, event := range blockEvent.Events { - result += fmt.Sprintf( - "Index: %v, Type: %v, TxID: %s, Value: %v", - event.EventIndex, event.Type, event.TransactionID, event.Value, - ) - } - result += "] " - } - } - - return result -} - -func eventsString(writer io.Writer, events []flow.Event) { - for _, event := range events { - eventString(writer, event) - } -} - -func eventString(writer io.Writer, event flow.Event) { - _, _ = fmt.Fprintf(writer, "\n Index\t%d\n", event.EventIndex) - _, _ = fmt.Fprintf(writer, " Type\t%s\n", event.Type) - _, _ = fmt.Fprintf(writer, " Tx ID\t%s\n", event.TransactionID) - _, _ = fmt.Fprintf(writer, " Values\n") - - for i, field := range event.Value.EventType.Fields { - value := event.Value.Fields[i] - printField(writer, field, value) - } -} - -func printValues(writer io.Writer, fieldIdentifier, typedId, valueString string) { - _, _ = fmt.Fprintf(writer, "\t\t- %s (%s): %s \n", fieldIdentifier, typedId, valueString) -} - -func printField(writer io.Writer, field cadence.Field, value cadence.Value) { - v := value.String() - var typeId string - - defer func() { - if err := recover(); err != nil { - printValues(writer, field.Identifier, "?", v) - } - }() - - if field.Type != nil { - //TODO: onflow/cadence issue #1672 - //currently getting ID for cadence array will cause panic - typeId = field.Type.ID() - } - - if typeId == "" { // exception for not known typeId workaround for cadence arrays - v = fmt.Sprintf("%s\n\t\thex: %x", v, v) - typeId = "?" - } - printValues(writer, field.Identifier, typeId, v) -} diff --git a/internal/events/events_test.go b/internal/events/events_test.go deleted file mode 100644 index 02c6fa7d4..000000000 --- a/internal/events/events_test.go +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package events - -import ( - "encoding/json" - "strings" - "testing" - - "github.com/onflow/cadence" - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_Get(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"test.event"} - eventsFlags.Start = 10 - eventsFlags.End = 20 - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Success not passed start end", func(t *testing.T) { - inArgs := []string{"test.event"} - eventsFlags.Start = 0 - eventsFlags.End = 0 - - srv.GetBlock.Run(func(args mock.Arguments) { - query := args.Get(1).(flowkit.BlockQuery) - assert.True(t, query.Latest) - }).Return(tests.NewBlock(), nil) - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail invalid range", func(t *testing.T) { - inArgs := []string{"test.event"} - eventsFlags.Start = 20 - eventsFlags.End = 0 - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "please provide either both start and end for range or only last flag") - assert.Nil(t, result) - }) - -} - -func Test_Result(t *testing.T) { - block := tests.NewBlock() - event := EventResult{ - BlockEvents: []flow.BlockEvents{{ - BlockID: block.ID, - Height: block.Height, - BlockTimestamp: block.Timestamp, - Events: []flow.Event{ - *tests.NewEvent( - 0, - "A.foo", - []cadence.Field{{Type: cadence.StringType{}, Identifier: "bar"}}, - []cadence.Value{cadence.NewInt(1)}, - ), - }, - }}, - } - - assert.Equal(t, strings.TrimPrefix(` -Events Block #1: - Index 0 - Type A.foo - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - -`, "\n"), event.String()) - - assert.Equal(t, []any{map[string]any{ - "blockID": uint64(1), - "index": 0, - "transactionId": "0000000000000000000000000000000000000000000000000000000000000000", - "type": "A.foo", - "values": json.RawMessage{0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x69, 0x64, 0x22, 0x3a, 0x22, 0x41, 0x2e, 0x66, 0x6f, 0x6f, 0x22, 0x2c, 0x22, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x3a, 0x5b, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x7b, 0x22, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3a, 0x22, 0x31, 0x22, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x49, 0x6e, 0x74, 0x22, 0x7d, 0x2c, 0x22, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x22, 0x62, 0x61, 0x72, 0x22, 0x7d, 0x5d, 0x7d, 0x2c, 0x22, 0x74, 0x79, 0x70, 0x65, 0x22, 0x3a, 0x22, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x7d, 0xa}, - }}, event.JSON()) -} diff --git a/internal/events/get.go b/internal/events/get.go deleted file mode 100644 index f6f0a6bcc..000000000 --- a/internal/events/get.go +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package events - -import ( - "context" - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsEvents struct { - Start uint64 `flag:"start" info:"Start block height"` - End uint64 `flag:"end" info:"End block height"` - Last uint64 `default:"10" flag:"last" info:"Fetch number of blocks relative to the last block. Ignored if the start flag is set. Used as a default if no flags are provided"` - Workers int `default:"10" flag:"workers" info:"Number of workers to use when fetching events in parallel"` - Batch uint64 `default:"25" flag:"batch" info:"Number of blocks each worker will fetch"` -} - -var eventsFlags = flagsEvents{} - -var getCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "get ", - Short: "Get events in a block range", - Args: cobra.MinimumNArgs(1), - Example: `#fetch events from the latest 10 blocks is the default behavior -flow events get A.1654653399040a61.FlowToken.TokensDeposited - -#specify manual start and stop blocks -flow events get A.1654653399040a61.FlowToken.TokensDeposited --start 11559500 --end 11559600 - -#in order to get and event from the 20 latest blocks on a network run -flow events get A.1654653399040a61.FlowToken.TokensDeposited --last 20 --network mainnet - -#if you want to fetch multiple event types that is done by sending in more events. Even fetching will be done in parallel. -flow events get A.1654653399040a61.FlowToken.TokensDeposited A.1654653399040a61.FlowToken.TokensWithdrawn - `, - }, - Flags: &eventsFlags, - Run: get, -} - -func get( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - var err error - start := eventsFlags.Start - end := eventsFlags.End - last := eventsFlags.Last - - // handle if not passing start and end - if start == 0 && end == 0 { - latest, err := flow.GetBlock( - context.Background(), - flowkit.BlockQuery{Latest: true}, - ) - if err != nil { - return nil, err - } - end = latest.Height - - start = end - last - if end < last { - start = 0 - } - } else if start == 0 || end == 0 { - return nil, fmt.Errorf("please provide either both start and end for range or only last flag") - } - - logger.StartProgress("Fetching events...") - defer logger.StopProgress() - - events, err := flow.GetEvents( - context.Background(), - args, - start, - end, - &flowkit.EventWorker{ - Count: eventsFlags.Workers, - BlocksPerWorker: eventsFlags.Batch, - }, - ) - if err != nil { - return nil, err - } - - return &EventResult{BlockEvents: events}, nil -} diff --git a/internal/keys/decode.go b/internal/keys/decode.go deleted file mode 100644 index 98057289a..000000000 --- a/internal/keys/decode.go +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package keys - -import ( - "encoding/hex" - "fmt" - "strings" - - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsDecode struct { - SigAlgo string `default:"ECDSA_P256" flag:"sig-algo" info:"Signature algorithm"` - FromFile string `default:"" flag:"from-file" info:"Load key from file"` -} - -var decodeFlags = flagsDecode{} - -var decodeCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "decode ", - Short: "Decode an encoded public key", - Args: cobra.RangeArgs(1, 2), - ValidArgs: []string{"rlp", "pem"}, - Example: "flow keys decode rlp f847b8408...2402038203e8", - }, - Flags: &decodeFlags, - Run: decode, -} - -func decode( - args []string, - _ command.GlobalFlags, - _ output.Logger, - reader flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - encoding := args[0] - fromFile := decodeFlags.FromFile - - var encoded string - if len(args) > 1 { - encoded = args[1] - } - - /* TODO(sideninja) from file flag should be remove and should be replaced with $(echo file) - but cobra has an issue with parsing pem content as it recognize it as flag due to ---- characters */ - if encoded != "" && fromFile != "" { - return nil, fmt.Errorf("can not pass both command argument and from file flag") - } - if encoded == "" && fromFile == "" { - return nil, fmt.Errorf("provide argument for encoded key or use from file flag") - } - - if fromFile != "" { - e, err := reader.ReadFile(fromFile) - if err != nil { - return nil, err - } - encoded = strings.TrimSpace(string(e)) - } - - var accountKey *flow.AccountKey - var err error - switch strings.ToLower(encoding) { - case "pem": - sigAlgo := crypto.StringToSignatureAlgorithm(decodeFlags.SigAlgo) - if sigAlgo == crypto.UnknownSignatureAlgorithm { - return nil, fmt.Errorf("invalid signature algorithm: %s", decodeFlags.SigAlgo) - } - - accountKey, err = decodePEM(encoded, sigAlgo) - case "rlp": - accountKey, err = decodeRLP(encoded) - default: - return nil, fmt.Errorf("encoding type not supported. Valid encoding: RLP and PEM") - } - - if err != nil { - return nil, err - } - - return &keyResult{ - publicKey: accountKey.PublicKey, - sigAlgo: accountKey.SigAlgo, - hashAlgo: accountKey.HashAlgo, - weight: accountKey.Weight, - }, err -} - -func decodePEM(pubKey string, sigAlgo crypto.SignatureAlgorithm) (*flow.AccountKey, error) { - pk, err := crypto.DecodePublicKeyPEM(sigAlgo, pubKey) - if err != nil { - return nil, err - } - - return &flow.AccountKey{ - PublicKey: pk, - SigAlgo: sigAlgo, - Weight: -1, - }, nil -} - -func decodeRLP(pubKey string) (*flow.AccountKey, error) { - publicKeyBytes, err := hex.DecodeString(pubKey) - if err != nil { - return nil, fmt.Errorf("failed to decode public key: %w", err) - } - - accountKey, err := flow.DecodeAccountKey(publicKeyBytes) - if err != nil { - return nil, fmt.Errorf("failed to decode: %w", err) - } - - return accountKey, nil -} diff --git a/internal/keys/derive.go b/internal/keys/derive.go deleted file mode 100644 index 453be91cd..000000000 --- a/internal/keys/derive.go +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package keys - -import ( - "fmt" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsDerive struct { - KeySigAlgo string `default:"ECDSA_P256" flag:"sig-algo" info:"Signature algorithm"` -} - -var deriveFlags = flagsDerive{} - -var deriveCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "derive ", - Short: "Derive public key from a private key", - Args: cobra.ExactArgs(1), - Example: "flow keys derive 4247b8408...2402038203e8", - }, - Flags: &deriveFlags, - Run: derive, -} - -func derive( - args []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - - sigAlgo := crypto.StringToSignatureAlgorithm(deriveFlags.KeySigAlgo) - if sigAlgo == crypto.UnknownSignatureAlgorithm { - return nil, fmt.Errorf("invalid signature algorithm: %s", deriveFlags.KeySigAlgo) - } - - parsedPrivateKey, err := crypto.DecodePrivateKeyHex(sigAlgo, args[0]) - if err != nil { - return nil, fmt.Errorf("failed to decode private key: %w", err) - } - - return &keyResult{privateKey: parsedPrivateKey, publicKey: parsedPrivateKey.PublicKey()}, nil -} diff --git a/internal/keys/generate.go b/internal/keys/generate.go deleted file mode 100644 index fd5078a61..000000000 --- a/internal/keys/generate.go +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package keys - -import ( - "context" - "fmt" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsGenerate struct { - Mnemonic string `flag:"mnemonic" info:"Mnemonic seed to use"` - DerivationPath string `default:"m/44'/539'/0'/0/0" flag:"derivationPath" info:"Derivation path"` - KeySigAlgo string `default:"ECDSA_P256" flag:"sig-algo" info:"Signature algorithm"` -} - -var generateFlags = flagsGenerate{} - -var generateCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "generate", - Short: "Generate a new key-pair", - Example: "flow keys generate", - }, - Flags: &generateFlags, - Run: generate, -} - -func generate( - _ []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - sigAlgo := crypto.StringToSignatureAlgorithm(generateFlags.KeySigAlgo) - if sigAlgo == crypto.UnknownSignatureAlgorithm { - return nil, fmt.Errorf("invalid signature algorithm: %s", generateFlags.KeySigAlgo) - } - - var err error - mnemonic := generateFlags.Mnemonic - if mnemonic == "" { - _, mnemonic, err = flow.GenerateMnemonicKey(context.Background(), sigAlgo, generateFlags.DerivationPath) - if err != nil { - return nil, err - } - } - - privateKey, err := flow.DerivePrivateKeyFromMnemonic( - context.Background(), - mnemonic, - sigAlgo, - generateFlags.DerivationPath, - ) - if err != nil { - return nil, err - } - - return &keyResult{ - privateKey: privateKey, - publicKey: privateKey.PublicKey(), - sigAlgo: sigAlgo, - mnemonic: mnemonic, - derivationPath: generateFlags.DerivationPath, - }, nil -} diff --git a/internal/keys/keys.go b/internal/keys/keys.go deleted file mode 100644 index 9ef0114ff..000000000 --- a/internal/keys/keys.go +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package keys - -import ( - "bytes" - "encoding/hex" - "fmt" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "keys", - Short: "Generate and decode Flow keys", - TraverseChildren: true, - GroupID: "security", -} - -func init() { - generateCommand.AddToParent(Cmd) - decodeCommand.AddToParent(Cmd) - deriveCommand.AddToParent(Cmd) -} - -type keyResult struct { - privateKey crypto.PrivateKey - publicKey crypto.PublicKey - sigAlgo crypto.SignatureAlgorithm - hashAlgo crypto.HashAlgorithm - weight int - mnemonic string - derivationPath string -} - -func (k *keyResult) JSON() any { - result := make(map[string]any) - result["public"] = hex.EncodeToString(k.privateKey.PublicKey().Encode()) - - if k.privateKey != nil { - result["private"] = hex.EncodeToString(k.privateKey.Encode()) - } - - if k.mnemonic != "" { - result["mnemonic"] = k.mnemonic - } - - if k.derivationPath != "" { - result["derivationPath"] = k.derivationPath - } - - return result -} - -func (k *keyResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - if k.privateKey != nil { - _, _ = fmt.Fprintf(writer, "%s Store private key safely and don't share with anyone! \n", output.StopEmoji()) - _, _ = fmt.Fprintf(writer, "Private Key \t %x \n", k.privateKey.Encode()) - } - - _, _ = fmt.Fprintf(writer, "Public Key \t %x \n", k.publicKey.Encode()) - - if k.mnemonic != "" { - _, _ = fmt.Fprintf(writer, "Mnemonic \t %s \n", k.mnemonic) - } - - if k.derivationPath != "" { - _, _ = fmt.Fprintf(writer, "Derivation Path \t %s \n", k.derivationPath) - } - - if k.sigAlgo != crypto.UnknownSignatureAlgorithm { - _, _ = fmt.Fprintf(writer, "Signature Algorithm \t %s\n", k.sigAlgo) - } - - if k.hashAlgo != crypto.UnknownHashAlgorithm { - _, _ = fmt.Fprintf(writer, "Hash Algorithm \t %s\n", k.hashAlgo) - } - - if k.weight > 0 { - _, _ = fmt.Fprintf(writer, "Weight \t %d\n", k.weight) - } - - _ = writer.Flush() - - return b.String() -} - -func (k *keyResult) Oneliner() string { - result := fmt.Sprintf("Public Key: %x, ", k.publicKey.Encode()) - - if k.privateKey != nil { - result += fmt.Sprintf("Private Key: %x, ", k.privateKey.Encode()) - } - - if k.mnemonic != "" { - result += fmt.Sprintf("Mnemonic: %s, ", k.mnemonic) - } - - if k.derivationPath != "" { - result += fmt.Sprintf("Derivation Path: %s", k.derivationPath) - } - - return result -} diff --git a/internal/keys/keys_test.go b/internal/keys/keys_test.go deleted file mode 100644 index a6ccc0a3d..000000000 --- a/internal/keys/keys_test.go +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package keys - -import ( - "testing" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/stretchr/testify/assert" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_DecodeKeys(t *testing.T) { - t.Run("Decode RLP Key", func(t *testing.T) { - t.Parallel() - dkey, err := decodeRLP("f847b84084d716c14b051ad6b001624f738f5d302636e6b07cc75e4530af7776a4368a2b586dbefc0564ee28384c2696f178cbed52e62811bcc9ecb59568c996d342db2402038203e8") - - assert.NoError(t, err) - assert.Equal(t, dkey.PublicKey.String(), "0x84d716c14b051ad6b001624f738f5d302636e6b07cc75e4530af7776a4368a2b586dbefc0564ee28384c2696f178cbed52e62811bcc9ecb59568c996d342db24") - assert.Equal(t, dkey.SigAlgo.String(), "ECDSA_P256") - }) - - t.Run("Decode RLP Key Invalid", func(t *testing.T) { - t.Parallel() - - _, err := decodeRLP("aaa") - assert.EqualError(t, err, "failed to decode public key: encoding/hex: odd length hex string") - }) - - t.Run("Decode PEM Key", func(t *testing.T) { - t.Parallel() - - dkey, err := decodePEM("-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1HmzzcntvdsZXLErNRYa3oJrAypk\nvdQGLMh/s7p+ccnPZG/yOZC7RTLKRcRFx+kIzvJ4ssRhU2ADmmZgo2apXw==\n-----END PUBLIC KEY-----", crypto.ECDSA_P256) - - assert.NoError(t, err) - assert.Equal(t, dkey.PublicKey.String(), "0xd479b3cdc9edbddb195cb12b35161ade826b032a64bdd4062cc87fb3ba7e71c9cf646ff23990bb4532ca45c445c7e908cef278b2c4615360039a6660a366a95f") - assert.Equal(t, dkey.SigAlgo.String(), "ECDSA_P256") - }) - - t.Run("Decode PEM Key Invalid", func(t *testing.T) { - t.Parallel() - - _, err := decodePEM("nope", crypto.ECDSA_P256) - assert.EqualError(t, err, "crypto: failed to parse PEM string, not all bytes in PEM key were decoded: 6e6f7065") - }) - - srv, _, rw := util.TestMocks(t) - t.Run("Success", func(t *testing.T) { - inArgsTests := [][]string{ - {"rlp", "f847b84084d716c14b051ad6b001624f738f5d302636e6b07cc75e4530af7776a4368a2b586dbefc0564ee28384c2696f178cbed52e62811bcc9ecb59568c996d342db2402038203e8"}, - {"pem", "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1HmzzcntvdsZXLErNRYa3oJrAypk\nvdQGLMh/s7p+ccnPZG/yOZC7RTLKRcRFx+kIzvJ4ssRhU2ADmmZgo2apXw==\n-----END PUBLIC KEY-----"}, - } - - for _, inArgs := range inArgsTests { - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - } - }) - - t.Run("Success from file", func(t *testing.T) { - inArgs := []string{"rlp"} - _ = rw.WriteFile("test", []byte("f847b84084d716c14b051ad6b001624f738f5d302636e6b07cc75e4530af7776a4368a2b586dbefc0564ee28384c2696f178cbed52e62811bcc9ecb59568c996d342db2402038203e8"), 0677) - decodeFlags.FromFile = "test" - - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - decodeFlags.FromFile = "" // reset to default - }) - - t.Run("Fail invalid args", func(t *testing.T) { - inArgs := []string{"invalid", "invalid"} - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "encoding type not supported. Valid encoding: RLP and PEM") - assert.Nil(t, result) - }) - - t.Run("Fail invalid args", func(t *testing.T) { - inArgs := []string{"", ""} - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "provide argument for encoded key or use from file flag") - assert.Nil(t, result) - }) - - t.Run("Fail invalid flags", func(t *testing.T) { - inArgs := []string{"rlp", "some public key"} - decodeFlags.FromFile = "from file" - - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "can not pass both command argument and from file flag") - assert.Nil(t, result) - }) -} - -func Test_DeriveKeys(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"cf3178b20a73846dc8bf6255c79be47178b0744dd8244bcff099e449a9700d7f"} - result, err := derive(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail invalid key", func(t *testing.T) { - inArgs := []string{"invalid"} - - result, err := derive(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "failed to decode private key: encoding/hex: invalid byte: U+0069 'i'") - assert.Nil(t, result) - }) - - t.Run("Fail invalid signature algorithm", func(t *testing.T) { - inArgs := []string{"cf3178b20a73846dc8bf6255c79be47178b0744dd8244bcff099e449a9700d7f"} - deriveFlags.KeySigAlgo = "invalid" - - result, err := derive(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "invalid signature algorithm: invalid") - assert.Nil(t, result) - }) -} - -func Test_Generate(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Fail invalid signature algorithm", func(t *testing.T) { - generateFlags.KeySigAlgo = "invalid" - _, err := generate([]string{}, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "invalid signature algorithm: invalid") - }) -} diff --git a/internal/project/deploy.go b/internal/project/deploy.go deleted file mode 100644 index e545a6210..000000000 --- a/internal/project/deploy.go +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package project - -import ( - "context" - "errors" - "fmt" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - "golang.org/x/exp/slices" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/project" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsDeploy struct { - Update bool `flag:"update" default:"false" info:"use update flag to update existing contracts"` - ShowDiff bool `flag:"show-diff" default:"false" info:"use show-diff flag to show diff between existing and new contracts on update"` -} - -var deployFlags = flagsDeploy{} - -var DeployCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "deploy", - Short: "Deploy Cadence contracts", - Example: "flow project deploy --network testnet", - }, - Flags: &deployFlags, - RunS: deploy, -} - -func deploy( - _ []string, - global command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - - if flow.Network() == config.MainnetNetwork { // if using mainnet check for standard contract usage - err := checkForStandardContractUsageOnMainnet(state, logger, global.Yes) - if err != nil { - return nil, err - } - } - - deployFunc := flowkit.UpdateExistingContract(deployFlags.Update) - if deployFlags.ShowDiff { - deployFunc = util.ShowContractDiffPrompt(logger) - } - - c, err := flow.DeployProject(context.Background(), deployFunc) - if err != nil { - var projectErr *flowkit.ProjectDeploymentError - if errors.As(err, &projectErr) { - for name, err := range projectErr.Contracts() { - logger.Info(fmt.Sprintf( - "%s Failed to deploy contract %s: %s", - output.ErrorEmoji(), - name, - err.Error(), - )) - } - return nil, fmt.Errorf("failed deploying all contracts") - } - return nil, err - } - - return &deployResult{c}, nil -} - -type deployResult struct { - contracts []*project.Contract -} - -func (r *deployResult) JSON() any { - result := make(map[string]any) - - for _, contract := range r.contracts { - result[contract.Name] = contract.AccountAddress.String() - } - - return result -} - -func (r *deployResult) String() string { - return "" -} - -func (r *deployResult) Oneliner() string { - return "" -} - -// checkForStandardContractUsageOnMainnet checks if any contract defined to be used on mainnet -// are referencing standard contract and if so warn the use that they should use the already -// deployed contracts as an alias on mainnet instead of deploying their own copy. -func checkForStandardContractUsageOnMainnet(state *flowkit.State, logger output.Logger, replace bool) error { - mainnetContracts := map[string]standardContract{ - "FungibleToken": { - name: "FungibleToken", - address: flowsdk.HexToAddress("0xf233dcee88fe0abe"), - infoLink: "https://developers.flow.com/flow/core-contracts/fungible-token", - }, - "FlowToken": { - name: "FlowToken", - address: flowsdk.HexToAddress("0x1654653399040a61"), - infoLink: "https://developers.flow.com/flow/core-contracts/flow-token", - }, - "FlowFees": { - name: "FlowFees", - address: flowsdk.HexToAddress("0xf919ee77447b7497"), - infoLink: "https://developers.flow.com/flow/core-contracts/flow-fees", - }, - "FlowServiceAccount": { - name: "FlowServiceAccount", - address: flowsdk.HexToAddress("0xe467b9dd11fa00df"), - infoLink: "https://developers.flow.com/flow/core-contracts/service-account", - }, - "FlowStorageFees": { - name: "FlowStorageFees", - address: flowsdk.HexToAddress("0xe467b9dd11fa00df"), - infoLink: "https://developers.flow.com/flow/core-contracts/service-account", - }, - "FlowIDTableStaking": { - name: "FlowIDTableStaking", - address: flowsdk.HexToAddress("0x8624b52f9ddcd04a"), - infoLink: "https://developers.flow.com/flow/core-contracts/staking-contract-reference", - }, - "FlowEpoch": { - name: "FlowEpoch", - address: flowsdk.HexToAddress("0x8624b52f9ddcd04a"), - infoLink: "https://developers.flow.com/flow/core-contracts/epoch-contract-reference", - }, - "FlowClusterQC": { - name: "FlowClusterQC", - address: flowsdk.HexToAddress("0x8624b52f9ddcd04a"), - infoLink: "https://developers.flow.com/flow/core-contracts/epoch-contract-reference", - }, - "FlowDKG": { - name: "FlowDKG", - address: flowsdk.HexToAddress("0x8624b52f9ddcd04a"), - infoLink: "https://developers.flow.com/flow/core-contracts/epoch-contract-reference", - }, - "NonFungibleToken": { - name: "NonFungibleToken", - address: flowsdk.HexToAddress("0x1d7e57aa55817448"), - infoLink: "https://developers.flow.com/flow/core-contracts/non-fungible-token", - }, - "MetadataViews": { - name: "MetadataViews", - address: flowsdk.HexToAddress("0x1d7e57aa55817448"), - infoLink: "https://developers.flow.com/flow/core-contracts/nft-metadata", - }, - } - - contracts, err := state.DeploymentContractsByNetwork(config.MainnetNetwork) - if err != nil { - return err - } - - for _, contract := range contracts { - standardContract, ok := mainnetContracts[contract.Name] - if !ok { - continue - } - - logger.Info(fmt.Sprintf("It seems like you are trying to deploy %s to Mainnet \n", contract.Name)) - logger.Info(fmt.Sprintf("It is a standard contract already deployed at address 0x%s \n", standardContract.address.String())) - logger.Info(fmt.Sprintf("You can read more about it here: %s \n", standardContract.infoLink)) - - if replace || util.WantToUseMainnetVersionPrompt() { - err := replaceContractWithAlias(state, standardContract) - if err != nil { - return err - } - } - } - return nil -} - -type standardContract struct { - name string - address flowsdk.Address - infoLink string -} - -func replaceContractWithAlias(state *flowkit.State, standardContract standardContract) error { - contract, err := state.Config().Contracts.ByName(standardContract.name) - if err != nil { - return err - } - contract.Aliases.Add(config.MainnetNetwork.Name, standardContract.address) // replace contract with an alias - - for di, d := range state.Config().Deployments.ByNetwork(config.MainnetNetwork.Name) { - for ci, c := range d.Contracts { - if c.Name == standardContract.name { - state.Config().Deployments[di].Contracts = slices.Delete(state.Config().Deployments[di].Contracts, ci, ci+1) - if len(state.Config().Deployments[di].Contracts) == 0 { - _ = state.Config().Deployments.Remove(d.Account, d.Network) - } - break - } - } - } - return nil -} diff --git a/internal/project/project.go b/internal/project/project.go deleted file mode 100644 index 5b26ec473..000000000 --- a/internal/project/project.go +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package project - -import ( - "github.com/spf13/cobra" -) - -var Cmd = &cobra.Command{ - Use: "project", - Short: "Manage your Cadence project", - TraverseChildren: true, - GroupID: "project", -} - -func init() { - DeployCommand.AddToParent(Cmd) -} diff --git a/internal/project/project_test.go b/internal/project/project_test.go deleted file mode 100644 index e61a76ee0..000000000 --- a/internal/project/project_test.go +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package project - -import ( - "testing" - - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/accounts" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_ProjectDeploy(t *testing.T) { - srv, state, rw := util.TestMocks(t) - - t.Run("Fail contract errors", func(t *testing.T) { - srv.DeployProject.Return(nil, &flowkit.ProjectDeploymentError{}) - _, err := deploy([]string{}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "failed deploying all contracts") - }) - - t.Run("Success replace standard contracts", func(t *testing.T) { - const ft = "FungibleToken" - const acc = "mainnet-account" - state.Contracts().AddOrUpdate(config.Contract{ - Name: ft, - Location: "./ft.cdc", - }) - _ = rw.WriteFile("./ft.cdc", []byte("test"), 0677) // mock the file - state.Accounts().AddOrUpdate(&accounts.Account{Name: acc, Address: flow.HexToAddress("0x01")}) - - state.Deployments().AddOrUpdate(config.Deployment{ - Network: config.MainnetNetwork.Name, - Account: acc, - Contracts: []config.ContractDeployment{{Name: ft}}, - }) - - state.Deployments().AddOrUpdate(config.Deployment{ - Network: config.EmulatorNetwork.Name, - Account: config.DefaultEmulator.ServiceAccount, - Contracts: []config.ContractDeployment{{Name: ft}}, - }) - - err := checkForStandardContractUsageOnMainnet(state, util.NoLogger, true) - require.NoError(t, err) - - assert.Len(t, state.Deployments().ByNetwork(config.MainnetNetwork.Name), 0) // should remove it - assert.Len(t, state.Deployments().ByNetwork(config.EmulatorNetwork.Name), 1) // should not remove it - c, err := state.Contracts().ByName(ft) - assert.NoError(t, err) - assert.NotNil(t, c.Aliases) - - assert.Equal(t, "f233dcee88fe0abe", c.Aliases.ByNetwork(config.MainnetNetwork.Name).Address.String()) - }) - -} diff --git a/internal/quick/deploy.go b/internal/quick/deploy.go deleted file mode 100644 index 128047cc3..000000000 --- a/internal/quick/deploy.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -* Flow CLI -* -* Copyright 2019 Dapper Labs, Inc. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - */ - -package quick - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/project" -) - -var DeployCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "deploy", - Short: "Deploy all project contracts", - Example: "flow deploy", - GroupID: "project", - }, - Flags: project.DeployCommand.Flags, - RunS: project.DeployCommand.RunS, -} diff --git a/internal/quick/init.go b/internal/quick/init.go deleted file mode 100644 index 4f9c3df52..000000000 --- a/internal/quick/init.go +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package quick - -import ( - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/config" -) - -// TODO(sideninja) workaround - init needed to be copied in order to work else there is flag duplicate error - -var InitCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "init", - Short: "Initialize a new configuration", - Example: "flow project init", - GroupID: "project", - }, - Flags: &config.InitFlag, - Run: config.Initialise, // TODO(sideninja) workaround - init needed to be copied in order to work else there is flag duplicate error -} diff --git a/internal/quick/run.go b/internal/quick/run.go deleted file mode 100644 index 3954ebd8a..000000000 --- a/internal/quick/run.go +++ /dev/null @@ -1,69 +0,0 @@ -/* -* Flow CLI -* -* Copyright 2019 Dapper Labs, Inc. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - */ - -package quick - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsRun struct { -} - -var runFlags = flagsRun{} - -// RunCommand This command will act as an alias for running the emulator and deploying the contracts -var RunCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "run", - Short: "Start emulator and deploy all project contracts", - Example: "flow run", - GroupID: "project", - }, - Flags: &runFlags, - Run: func( - _ []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.ReaderWriter, - _ flowkit.Services, - ) (command.Result, error) { - fmt.Println("⚠️Deprecation notice: Use 'flow dev' command.") - return &runResult{}, nil - }, -} - -type runResult struct{} - -func (r *runResult) JSON() any { - return nil -} - -func (r *runResult) String() string { - return "" -} - -func (r *runResult) Oneliner() string { - return "" -} diff --git a/internal/scripts/execute.go b/internal/scripts/execute.go deleted file mode 100644 index 050518951..000000000 --- a/internal/scripts/execute.go +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package scripts - -import ( - "context" - "fmt" - - "github.com/onflow/cadence" - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/arguments" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type Flags struct { - ArgsJSON string `default:"" flag:"args-json" info:"arguments in JSON-Cadence format"` - BlockID string `default:"" flag:"block-id" info:"block ID to execute the script at"` - BlockHeight uint64 `default:"" flag:"block-height" info:"block height to execute the script at"` -} - -var flags = Flags{} - -var executeCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "execute [ ...]", - Short: "Execute a script", - Example: `flow scripts execute script.cdc "Meow" "Woof"`, - Args: cobra.MinimumNArgs(1), - }, - Flags: &flags, - Run: execute, -} - -func execute( - args []string, - _ command.GlobalFlags, - _ output.Logger, - readerWriter flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - filename := args[0] - - code, err := readerWriter.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error loading script file: %w", err) - } - - return SendScript(code, args[1:], filename, flow, flags) -} - -func SendScript(code []byte, argsArr []string, location string, flow flowkit.Services, scriptFlags Flags) (command.Result, error) { - var cadenceArgs []cadence.Value - var err error - if scriptFlags.ArgsJSON != "" { - cadenceArgs, err = arguments.ParseJSON(scriptFlags.ArgsJSON) - } else { - cadenceArgs, err = arguments.ParseWithoutType(argsArr, code, location) - } - - if err != nil { - return nil, fmt.Errorf("error parsing script arguments: %w", err) - } - - query := flowkit.ScriptQuery{} - if scriptFlags.BlockHeight != 0 { - query.Height = scriptFlags.BlockHeight - } else if scriptFlags.BlockID != "" { - query.ID = flowsdk.HexToID(scriptFlags.BlockID) - } else { - query.Latest = true - } - - value, err := flow.ExecuteScript( - context.Background(), - flowkit.Script{ - Code: code, - Args: cadenceArgs, - Location: location, - }, - query, - ) - if err != nil { - return nil, err - } - - return &scriptResult{value}, nil -} diff --git a/internal/scripts/scripts.go b/internal/scripts/scripts.go deleted file mode 100644 index b074d28e0..000000000 --- a/internal/scripts/scripts.go +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package scripts - -import ( - "bytes" - "encoding/json" - "fmt" - - "github.com/onflow/cadence" - jsoncdc "github.com/onflow/cadence/encoding/json" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "scripts", - Short: "Execute Cadence scripts", - TraverseChildren: true, - GroupID: "interactions", -} - -func init() { - executeCommand.AddToParent(Cmd) -} - -type scriptResult struct { - cadence.Value -} - -func (r *scriptResult) JSON() any { - return json.RawMessage( - jsoncdc.MustEncode(r.Value), - ) -} - -func (r *scriptResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - _, _ = fmt.Fprintf(writer, "Result: %s\n", r.Value) - - _ = writer.Flush() - - return b.String() -} - -func (r *scriptResult) Oneliner() string { - return r.Value.String() -} diff --git a/internal/scripts/scripts_test.go b/internal/scripts/scripts_test.go deleted file mode 100644 index baa191f3d..000000000 --- a/internal/scripts/scripts_test.go +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package scripts - -import ( - "fmt" - "testing" - - "github.com/onflow/cadence" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_Execute(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{tests.ScriptArgString.Filename, "foo"} - - srv.ExecuteScript.Run(func(args mock.Arguments) { - script := args.Get(1).(flowkit.Script) - assert.Equal(t, fmt.Sprintf("\"%s\"", inArgs[1]), script.Args[0].String()) - assert.Equal(t, tests.ScriptArgString.Filename, script.Location) - }).Return(cadence.NewInt(1), nil) - - result, err := execute(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NotNil(t, result) - assert.NoError(t, err) - }) - - t.Run("Fail non-existing file", func(t *testing.T) { - inArgs := []string{"non-existing"} - result, err := execute(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.Nil(t, result) - assert.EqualError(t, err, "error loading script file: open non-existing: file does not exist") - }) - - t.Run("Fail parsing invalid JSON args", func(t *testing.T) { - inArgs := []string{tests.TestScriptSimple.Filename} - flags.ArgsJSON = "invalid" - - result, err := execute(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.Nil(t, result) - assert.EqualError(t, err, "error parsing script arguments: invalid character 'i' looking for beginning of value") - }) - -} diff --git a/internal/settings/cmd.go b/internal/settings/cmd.go deleted file mode 100644 index bccc4b04a..000000000 --- a/internal/settings/cmd.go +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package settings - -import ( - "github.com/spf13/cobra" -) - -var Cmd = &cobra.Command{ - Use: "settings", - Short: "Manage persisted global settings", - TraverseChildren: true, -} - -func init() { - Cmd.AddCommand(metricsSettings) -} diff --git a/internal/settings/defaults.go b/internal/settings/defaults.go deleted file mode 100644 index d361e66ae..000000000 --- a/internal/settings/defaults.go +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package settings - -import ( - "fmt" - "os/user" - "runtime" -) - -const ( - metricsEnabled = "MetricsEnabled" - flowserPath = "FlowserPath" -) - -// defaults holds the default values for global settings -var defaults = map[string]any{ - metricsEnabled: true, - flowserPath: getDefaultInstallDir(), -} - -const ( - Darwin = "darwin" - Windows = "windows" - Linux = "linux" -) - -// getDefaultInstallDir returns default installation directory based on the OS. -func getDefaultInstallDir() string { - switch runtime.GOOS { - case Darwin: - return "/Applications" - case Windows: - // https://superuser.com/questions/1327037/what-choices-do-i-have-about-where-to-install-software-on-windows-10 - usr, _ := user.Current() // safe to ignore cache errors - return fmt.Sprintf(`%s\AppData\Local\Programs`, usr.HomeDir) - case Linux: - // https://unix.stackexchange.com/questions/127076/into-which-directory-should-i-install-programs-in-linux - usr, _ := user.Current() // safe to ignore cache errors - // Use path in users home folder to not require sudo permissions for installation - return fmt.Sprintf(`%s/.local/bin`, usr.HomeDir) - default: - return "" - } -} diff --git a/internal/settings/metrics.go b/internal/settings/metrics.go deleted file mode 100644 index 81b77c913..000000000 --- a/internal/settings/metrics.go +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package settings - -import ( - "fmt" - - "github.com/pkg/errors" - "github.com/spf13/cobra" -) - -const enable = "enable" - -const disable = "disable" - -var metricsSettings = &cobra.Command{ - Use: "metrics", - Short: "Configure command usage metrics settings", - Example: "flow settings metrics disable \nflow settings metrics enable", - Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs), - ValidArgs: []string{enable, disable}, - RunE: handleMetricsSettings, -} - -// handleMetricsSettings sets global settings for metrics -func handleMetricsSettings( - _ *cobra.Command, - args []string, -) error { - enabled := args[0] == enable - if err := Set(metricsEnabled, enabled); err != nil { - return errors.Wrap(err, "failed to update metrics settings") - } - - fmt.Println(fmt.Sprintf( - "Command usage tracking is %sd. Settings were updated in %s \n", - args[0], - FileName())) - - return nil -} diff --git a/internal/settings/settings.go b/internal/settings/settings.go deleted file mode 100644 index d611123ac..000000000 --- a/internal/settings/settings.go +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package settings - -import ( - "errors" - "fmt" - "os" - "path/filepath" - - "github.com/spf13/viper" -) - -const settingsFile = "flow-cli.settings" - -const settingsDir = "flow-cli" - -const settingsType = "yaml" - -// viperLoaded only load settings file once -var viperLoaded = false - -func init() { - viper.SetConfigName(settingsFile) - viper.SetConfigType(settingsType) - viper.AddConfigPath(FileDir()) -} - -func FileName() string { - return fmt.Sprintf("%s.%s", settingsFile, settingsType) -} - -func FileDir() string { - dir, err := os.UserConfigDir() - if err != nil { - dir = "." - } - return filepath.Join(dir, settingsDir) -} - -// Set updates settings file with new value for provided key -func Set(key string, val any) error { - if err := loadViper(); err != nil { - return err - } - - viper.Set(key, val) - if err := viper.WriteConfig(); err != nil { - return err - } - - return nil -} - -// loadViper loads the global settings file -func loadViper() error { - if viperLoaded { - return nil - } - viperLoaded = true - - if err := createSettingsDir(); err != nil { - return err - } - - err := viper.MergeConfigMap(defaults) - if err != nil { - return err - } - - // Load settings file - if err := viper.MergeInConfig(); err != nil { - switch err.(type) { - case viper.ConfigFileNotFoundError: - // Create settings file for the first time - if err = viper.SafeWriteConfig(); err != nil { - return err - } - default: - return err - } - } - - return nil -} - -// createSettingsDir creates settings dir if it doesn't exist -func createSettingsDir() error { - if _, err := os.Stat(FileDir()); errors.Is(err, os.ErrNotExist) { - err = os.Mkdir(FileDir(), os.ModePerm) - if err != nil { - return err - } - } - return nil -} - -// GetFlowserPath gets set Flowser install path with sensible default. -func GetFlowserPath() (string, error) { - if err := loadViper(); err != nil { - return "", err - } - return viper.GetString(flowserPath), nil -} - -func SetFlowserPath(path string) error { - return Set(flowserPath, path) -} - -// MetricsEnabled checks whether metric tracking is enabled. -func MetricsEnabled() bool { - if err := loadViper(); err != nil { - return true - } - return viper.GetBool(metricsEnabled) -} diff --git a/internal/signatures/generate.go b/internal/signatures/generate.go deleted file mode 100644 index 4d4fefb0c..000000000 --- a/internal/signatures/generate.go +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package signatures - -import ( - "bytes" - "context" - "fmt" - - "github.com/onflow/flow-cli/flowkit/accounts" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsGenerate struct { - Signer string `default:"emulator-account" flag:"signer" info:"name of the account used to sign"` -} - -var generateFlags = flagsGenerate{} - -var generateCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "generate ", - Short: "Generate the message signature", - Example: "flow signatures generate 'The quick brown fox jumps over the lazy dog' --signer alice", - Args: cobra.ExactArgs(1), - }, - Flags: &generateFlags, - RunS: sign, -} - -func sign( - args []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - message := []byte(args[0]) - accountName := generateFlags.Signer - acc, err := state.Accounts().ByName(accountName) - if err != nil { - return nil, err - } - - s, err := acc.Key.Signer(context.Background()) - if err != nil { - return nil, err - } - - signed, err := s.Sign(message) - if err != nil { - return nil, err - } - - return &signatureResult{ - result: string(signed), - message: string(message), - key: acc.Key, - }, nil -} - -type signatureResult struct { - result string - message string - key accounts.Key -} - -func (s *signatureResult) pubKey() string { - pkey, err := s.key.PrivateKey() - if err == nil { - return (*pkey).PublicKey().String() - } - - return "ERR" -} - -func (s *signatureResult) JSON() any { - return map[string]string{ - "signature": fmt.Sprintf("%x", s.result), - "message": s.message, - "hashAlgo": s.key.HashAlgo().String(), - "sigAlgo": s.key.SigAlgo().String(), - "pubKey": s.pubKey(), - } -} - -func (s *signatureResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - _, _ = fmt.Fprintf(writer, "Signature \t %x\n", s.result) - _, _ = fmt.Fprintf(writer, "Message \t %s\n", s.message) - _, _ = fmt.Fprintf(writer, "Public Key \t %s\n", s.pubKey()) - _, _ = fmt.Fprintf(writer, "Hash Algorithm \t %s\n", s.key.HashAlgo()) - _, _ = fmt.Fprintf(writer, "Signature Algorithm \t %s\n", s.key.SigAlgo()) - - _ = writer.Flush() - return b.String() -} - -func (s *signatureResult) Oneliner() string { - - return fmt.Sprintf( - "signature: %x, message: %s, hashAlgo: %s, sigAlgo: %s, pubKey: %s", - s.result, s.message, s.key.HashAlgo(), s.key.SigAlgo(), s.pubKey(), - ) -} diff --git a/internal/signatures/signatures.go b/internal/signatures/signatures.go deleted file mode 100644 index 6776c39a6..000000000 --- a/internal/signatures/signatures.go +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package signatures - -import ( - "github.com/spf13/cobra" -) - -var Cmd = &cobra.Command{ - Use: "signatures", - Short: "Signature verification and creation", - TraverseChildren: true, - GroupID: "security", -} - -func init() { - generateCommand.AddToParent(Cmd) - verifyCommand.AddToParent(Cmd) -} diff --git a/internal/signatures/signatures_test.go b/internal/signatures/signatures_test.go deleted file mode 100644 index 8c79bd052..000000000 --- a/internal/signatures/signatures_test.go +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package signatures - -import ( - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_Verify(t *testing.T) { - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{ - "test signature", - "f80f6007dbe6795bcf343e5586d40d0ba26a6c1d7edda5653cbdb377c9c20034cdbf899bb20fa2388d4993f6c88b5c97cbe05963d6d9799e6868902c2c14bc22", - "0xab70e9e341a38861fd7f9fb1cda4c560465cfeb3ce4abcd2be552550c85ebbef9a2a9cac731c6bfa73b10c701c93038f0c18253487d4962d3bc6d5291f9c5eae", - } - - result, err := verify(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Invalid signature", func(t *testing.T) { - inArgsTests := []struct { - args []string - err string - }{{ - args: []string{"invalid", "invalid"}, - err: "invalid message signature: encoding/hex: invalid byte: U+0069 'i'", - }, { - args: []string{"invalid", "0xaaaa", "invalid"}, - err: "invalid public key: encoding/hex: invalid byte: U+0069 'i'", - }, { - args: []string{"invalid", "0xaaaa", "0x1234"}, - err: "invalid public key: input has incorrect ECDSA_P256 key size, got 2, expects 64", - }} - - for _, test := range inArgsTests { - result, err := verify(test.args, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, test.err) - assert.Nil(t, result) - } - }) - -} - -func Test_Sign(t *testing.T) { - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"test message"} - - result, err := sign(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail unknown signer", func(t *testing.T) { - inArgs := []string{"test message"} - generateFlags.Signer = "invalid" - result, err := sign(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "could not find account with name invalid in the configuration") - assert.Nil(t, result) - }) -} diff --git a/internal/signatures/verify.go b/internal/signatures/verify.go deleted file mode 100644 index 841346ccf..000000000 --- a/internal/signatures/verify.go +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package signatures - -import ( - "bytes" - "encoding/hex" - "fmt" - "strings" - - "github.com/onflow/flow-go-sdk/crypto" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsVerify struct { - SigAlgo string `flag:"sig-algo" default:"ECDSA_P256" info:"Signature algorithm used to create the public key"` - HashAlgo string `flag:"hash-algo" default:"SHA3_256" info:"Hashing algorithm used to create signature"` -} - -var verifyFlags = flagsVerify{} - -var verifyCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "verify ", - Short: "Verify the signature", - Example: "flow signatures verify 'The quick brown fox jumps over the lazy dog' 99fa...25b af3...52d", - Args: cobra.ExactArgs(3), - }, - Flags: &verifyFlags, - RunS: verify, -} - -func verify( - args []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - _ *flowkit.State, -) (command.Result, error) { - message := []byte(args[0]) - - sig, err := hex.DecodeString(strings.ReplaceAll(args[1], "0x", "")) - if err != nil { - return nil, fmt.Errorf("invalid message signature: %w", err) - } - - key, err := hex.DecodeString(strings.ReplaceAll(args[2], "0x", "")) - if err != nil { - return nil, fmt.Errorf("invalid public key: %w", err) - } - - sigAlgo := crypto.StringToSignatureAlgorithm(verifyFlags.SigAlgo) - hashAlgo := crypto.StringToHashAlgorithm(verifyFlags.HashAlgo) - - pkey, err := crypto.DecodePublicKey(sigAlgo, key) - if err != nil { - return nil, fmt.Errorf("invalid public key: %w", err) - } - - hasher, err := crypto.NewHasher(hashAlgo) - if err != nil { - return nil, err - } - - valid, err := pkey.Verify(sig, message, hasher) - if err != nil { - return nil, err - } - - return &verificationResult{ - valid: valid, - message: message, - signature: sig, - hashAlgo: hashAlgo, - sigAlgo: sigAlgo, - pubKey: key, - }, nil -} - -type verificationResult struct { - valid bool - message []byte - signature []byte - pubKey []byte - sigAlgo crypto.SignatureAlgorithm - hashAlgo crypto.HashAlgorithm -} - -func (s *verificationResult) JSON() any { - return map[string]any{ - "valid": fmt.Sprintf("%v", s.valid), - "message": string(s.message), - "signature": string(s.signature), - "hashAlgo": s.hashAlgo.String(), - "sigAlgo": s.sigAlgo.String(), - "pubKey": fmt.Sprintf("%x", s.pubKey), - } -} - -func (s *verificationResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - _, _ = fmt.Fprintf(writer, "Valid \t %v\n", s.valid) - _, _ = fmt.Fprintf(writer, "Message \t %s\n", s.message) - _, _ = fmt.Fprintf(writer, "Signature \t %x\n", s.signature) - _, _ = fmt.Fprintf(writer, "Public Key \t %x\n", s.pubKey) - _, _ = fmt.Fprintf(writer, "Hash Algorithm \t %s\n", s.hashAlgo) - _, _ = fmt.Fprintf(writer, "Signature Algorithm \t %s\n", s.sigAlgo) - - _ = writer.Flush() - return b.String() -} - -func (s *verificationResult) Oneliner() string { - return fmt.Sprintf( - "valid: %v, message: %s, signature: %x, sigAlgo: %s, hashAlgo: %s, pubKey: %x", - s.valid, s.message, s.signature, s.sigAlgo, s.hashAlgo, s.pubKey, - ) -} diff --git a/internal/snapshot/save.go b/internal/snapshot/save.go deleted file mode 100644 index 3007b80ca..000000000 --- a/internal/snapshot/save.go +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package snapshot - -import ( - "fmt" - "path/filepath" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -var saveCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "save", - Short: "Get the latest finalized protocol snapshot", - Example: "flow snapshot save /tmp/snapshot.json", - Args: cobra.ExactArgs(1), - }, - Flags: &struct{}{}, - Run: save, -} - -func save( - args []string, - _ command.GlobalFlags, - logger output.Logger, - writer flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - fileName := args[0] - - logger.StartProgress("Downloading protocol snapshot...") - defer logger.StopProgress() - if !flow.Gateway().SecureConnection() { - logger.Info(fmt.Sprintf("%s warning: using insecure client connection to download snapshot, you should use a secure network configuration...", output.WarningEmoji())) - } - - snapshotBytes, err := flow.Gateway().GetLatestProtocolStateSnapshot() - if err != nil { - return nil, fmt.Errorf("failed to get latest finalized protocol snapshot from gateway: %w", err) - } - - logger.StopProgress() - - outputPath, err := filepath.Abs(fileName) - if err != nil { - return nil, fmt.Errorf("failed to get absolute output path for protocol snapshot") - } - - err = writer.WriteFile(outputPath, snapshotBytes, 0644) - if err != nil { - return nil, fmt.Errorf("failed to write protocol snapshot file to %s: %w", outputPath, err) - } - - return &saveResult{OutputPath: outputPath}, nil -} diff --git a/internal/snapshot/snapshot.go b/internal/snapshot/snapshot.go deleted file mode 100644 index 32ea84e8c..000000000 --- a/internal/snapshot/snapshot.go +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package snapshot - -import ( - "fmt" - - "github.com/spf13/cobra" -) - -var Cmd = &cobra.Command{ - Use: "snapshot", - Short: "Retrieve the protocol state snapshot", - TraverseChildren: true, -} - -func init() { - saveCommand.AddToParent(Cmd) -} - -// saveResult represents the result of the snapshot save command. -type saveResult struct { - OutputPath string -} - -func (r *saveResult) JSON() any { - return map[string]string{"path": r.OutputPath} -} - -func (r *saveResult) String() string { - return fmt.Sprintf("snapshot saved: %s", r.OutputPath) -} - -func (r *saveResult) Oneliner() string { - return fmt.Sprintf("snapshot saved: %s", r.OutputPath) -} diff --git a/internal/status/status.go b/internal/status/status.go deleted file mode 100644 index 60f6c6608..000000000 --- a/internal/status/status.go +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package status - -import ( - "bytes" - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsStatus struct { -} - -var statusFlags = flagsStatus{} - -var Command = &command.Command{ - Cmd: &cobra.Command{ - Use: "status", - Short: "Display the status of the Flow network", - }, - Flags: &statusFlags, - RunS: status, -} - -func status( - _ []string, - _ command.GlobalFlags, - _ output.Logger, - flow flowkit.Services, - _ *flowkit.State, -) (command.Result, error) { - err := flow.Ping() - - return &result{ - network: flow.Network().Name, - accessNode: flow.Network().Host, - err: err, - }, nil -} - -type result struct { - network string - accessNode string - err error -} - -// getStatus returns string representation for Flow network status. -func (r *result) getStatus() string { - if r.err == nil { - return "ONLINE" - } - - return "OFFLINE" -} - -// getColoredStatus returns colored string representation for Flow network status. -func (r *result) getColoredStatus() string { - if r.err == nil { - return output.Green(r.getStatus()) - } - - return output.Red(output.Red(r.getStatus())) -} - -// getIcon returns emoji icon representing Flow network status. -func (r *result) getIcon() string { - if r.err == nil { - return output.GoEmoji() - } - - return output.StopEmoji() -} - -// String converts result to a string. -func (r *result) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - _, _ = fmt.Fprintf(writer, "Status:\t %s %s\n", r.getIcon(), r.getColoredStatus()) - _, _ = fmt.Fprintf(writer, "Network:\t %s\n", r.network) - _, _ = fmt.Fprintf(writer, "Access Node:\t %s\n", r.accessNode) - - _ = writer.Flush() - return b.String() -} - -// JSON converts result to a JSON. -func (r *result) JSON() any { - result := make(map[string]string) - - result["network"] = r.network - result["accessNode"] = r.accessNode - result["status"] = r.getStatus() - - return result -} - -// Oneliner returns result as one liner grep friendly. -func (r *result) Oneliner() string { - return r.getStatus() -} diff --git a/internal/super/dev.go b/internal/super/dev.go deleted file mode 100644 index 29ab1f068..000000000 --- a/internal/super/dev.go +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "errors" - "fmt" - "os" - "strings" - - "github.com/onflow/cadence/runtime/parser" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsDev struct{} - -var devFlags = flagsDev{} - -var DevCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "dev", - Short: "Build your Flow project", - Args: cobra.ExactArgs(0), - Example: "flow dev", - GroupID: "super", - }, - Flags: &devFlags, - RunS: dev, -} - -func dev( - _ []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - dir, err := os.Getwd() - if err != nil { - return nil, err - } - - err = flow.Ping() - if err != nil { - logger.Error("Error connecting to emulator. Make sure you started an emulator using 'flow emulator' command.") - logger.Info(fmt.Sprintf("%s This tool requires emulator to function. Emulator needs to be run inside the project root folder where the configuration file ('flow.json') exists.\n\n", output.TryEmoji())) - return nil, nil - } - - service, err := state.EmulatorServiceAccount() - if err != nil { - return nil, err - } - - flow.SetLogger(output.NewStdoutLogger(output.NoneLog)) - - project, err := newProject( - *service, - flow, - state, - newProjectFiles(dir), - ) - if err != nil { - fmt.Printf("%s Failed to run the command, please make sure you ran 'flow setup' command first and that you are running this command inside the project ROOT folder.\n\n", output.TryEmoji()) - return nil, err - } - - err = project.startup() - if err != nil { - if strings.Contains(err.Error(), "does not have a valid signature") { - fmt.Printf("%s Failed to run the command, please make sure you started the emulator inside the project ROOT folder by running 'flow emulator'.\n\n", output.TryEmoji()) - return nil, nil - } - - var parseErr parser.Error - if errors.As(err, &parseErr) { - fmt.Println(err) // we just print the error but keep watching files for changes, since they might fix the issue - } else { - return nil, err - } - } - - err = project.watch() - if err != nil { - return nil, err - } - - return nil, nil -} diff --git a/internal/super/files.go b/internal/super/files.go deleted file mode 100644 index d1388bfa2..000000000 --- a/internal/super/files.go +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "fmt" - "io/fs" - "os" - "path/filepath" - "time" - - "github.com/pkg/errors" - "github.com/radovskyb/watcher" - - "github.com/onflow/flow-cli/flowkit/config" -) - -const ( - cadenceDir = "cadence" - contractDir = "contracts" - scriptDir = "scripts" - transactionDir = "transactions" - cadenceExt = ".cdc" - created = 1 - removed = 2 - changed = 3 - renamed = 4 -) - -type accountChange struct { - status int - name string -} - -type contractChange struct { - status int - path string - oldPath string - account string -} - -func newProjectFiles(projectPath string) *projectFiles { - return &projectFiles{ - cadencePath: filepath.Join(projectPath, cadenceDir), - watcher: watcher.New(), - } -} - -type projectFiles struct { - cadencePath string - watcher *watcher.Watcher -} - -// exist checks if current directory contains all project files required. -func (f *projectFiles) exist() error { - if _, err := os.Stat(f.cadencePath); errors.Is(err, os.ErrNotExist) { - if _, err := os.Stat(contractDir); errors.Is(err, os.ErrNotExist) { - return fmt.Errorf("required cadence folder or contract folder does not exist") - } else if err == nil { - f.cadencePath = "" // in case there's no cadence folder we just use contracts folder directly - } - } - if _, err := os.Stat(config.DefaultPath); errors.Is(err, os.ErrNotExist) { - return fmt.Errorf("required project configuration ('flow.json') does not exist") - } - - return nil -} - -// contracts returns a list of contracts in project. -func (f *projectFiles) contracts() ([]string, error) { - return f.getCadenceFilepaths(contractDir) -} - -// contracts returns a map of deployments in project, mapping account name to all contracts saved to that account. -func (f *projectFiles) deployments() (map[string][]string, error) { - deployments := make(map[string][]string) - - contracts, err := f.contracts() - if err != nil { - return nil, errors.Wrap(err, "failed to get contracts in deployment") - } - - for _, file := range contracts { - accName, _ := accountFromPath(file) - deployments[accName] = append(deployments[accName], file) - } - - return deployments, nil -} - -// contracts returns a list of scripts in project. -func (f *projectFiles) scripts() ([]string, error) { - return f.getCadenceFilepaths(scriptDir) -} - -// contracts returns a list of transactions in project. -func (f *projectFiles) transactions() ([]string, error) { - return f.getCadenceFilepaths(transactionDir) -} - -// watch for file changes in the contract folder and signal any changes through channel. -// -// This function returns two channels, accountChange which reports any changes on the accounts folders and -// contractChange which reports any changes to the contract files. -func (f *projectFiles) watch() (<-chan accountChange, <-chan contractChange, error) { - err := f.watcher.AddRecursive(filepath.Join(f.cadencePath, contractDir)) - if err != nil { - return nil, nil, errors.Wrap(err, "add recursive files failed") - } - - go func() { - err = f.watcher.Start(500 * time.Millisecond) - if err != nil { - panic(err) - } - }() - - accounts := make(chan accountChange) - contracts := make(chan contractChange) - - go func() { - status := map[watcher.Op]int{ - watcher.Create: created, - watcher.Remove: removed, - watcher.Write: changed, - watcher.Rename: renamed, - } - - for { - select { - case event := <-f.watcher.Event: - rel, err := f.relProjectPath(event.Path) - if err != nil { // skip if failed - continue - } - - name, containsAccount := accountFromPath(rel) - if event.IsDir() && containsAccount { - // TODO(sideninja) handle moving of files - accounts <- accountChange{ - status: status[event.Op], - name: name, - } - continue - } - - if filepath.Ext(rel) != cadenceExt { // skip any non cadence files - continue - } - - oldPath := "" - if event.Op == watcher.Rename { // add relative path in case of rename - oldPath, err = f.relProjectPath(event.OldPath) - if err != nil { - continue - } - } - - contracts <- contractChange{ - status: status[event.Op], - path: rel, - oldPath: oldPath, - account: name, - } - case <-f.watcher.Closed: - close(contracts) - close(accounts) - return - } - } - }() - - return accounts, contracts, nil -} - -// getFilePaths returns a list of only Cadence files that are inside the provided directory. -func (f *projectFiles) getCadenceFilepaths(dir string) ([]string, error) { - dir = filepath.Join(f.cadencePath, dir) - paths := make([]string, 0) - err := filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error { - if path == dir || d.IsDir() || filepath.Ext(path) != cadenceExt { // we only want to get .cdc files in the dir - return nil - } - - rel, err := f.relProjectPath(path) - if err != nil { - return err - } - - paths = append(paths, rel) - return nil - }) - if err != nil { - return nil, err - } - - return paths, nil -} - -// relProjectPath gets a filepath relative to the project directory including the base cadence directory. -// eg. a path /Users/Mike/Dev/project/cadence/contracts/foo.cdc will become cadence/contracts/foo.cdc -func (f *projectFiles) relProjectPath(file string) (string, error) { - rel, err := filepath.Rel(filepath.Dir(f.cadencePath), file) - if err != nil { - return "", errors.Wrap(err, "failed getting project relative path") - } - return rel, nil -} - -// accountFromPath returns the account name from provided path if possible, otherwise returns empty and false. -// -// Account name can be extracted from path when the contract folder contains another folder, that in our syntax indicates account name. -func accountFromPath(path string) (string, bool) { - // extract account from path if file path is provided e.g.: cadence/contracts/[alice]/foo.cdc - subAccPattern := filepath.Clean(fmt.Sprintf("%s/%s/*/*%s", cadenceDir, contractDir, cadenceExt)) - if match, _ := filepath.Match(subAccPattern, path); match { - return filepath.Base(filepath.Dir(path)), true - } - // extract account from path if dir path is provided e.g.: cadence/contracts/[alice] - subAccPattern = filepath.Clean(fmt.Sprintf("%s/%s/*", cadenceDir, contractDir)) - if match, _ := filepath.Match(subAccPattern, path); match { - if filepath.Ext(path) != "" { // might be a file - return "", false - } - return filepath.Base(path), true - } - - return "", false -} diff --git a/internal/super/files_test.go b/internal/super/files_test.go deleted file mode 100644 index 9f9888017..000000000 --- a/internal/super/files_test.go +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "fmt" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" -) - -func Test_AccountFromPath(t *testing.T) { - paths := [][]string{ // first is path, second is account name - {"cadence/contracts/alice/foo.cdc", "alice"}, - {"cadence/contracts/alice", "alice"}, - {"cadence/contracts/alice/boo/foo.cdc", ""}, - {"cadence/contracts/foo.cdc", ""}, - {"cadence/contracts/foo/bar/goo/foo", ""}, - } - - for i, test := range paths { - name, ok := accountFromPath(filepath.FromSlash(test[0])) - assert.Equal(t, test[1] != "", ok) // if we don't provide a name we mean it shouldn't be returned - assert.Equal(t, test[1], name, fmt.Sprintf("failed test %d", i)) - } -} - -func Test_RelativeProjectPath(t *testing.T) { - cdcDir := "/Users/Mike/Dev/my-project/cadence" - paths := [][]string{ - {filepath.Join(cdcDir, "/contracts/foo.cdc"), "cadence/contracts/foo.cdc"}, - {filepath.Join(cdcDir, "/contracts/alice/foo.cdc"), "cadence/contracts/alice/foo.cdc"}, - {filepath.Join(cdcDir, "/scripts/bar.cdc"), "cadence/scripts/bar.cdc"}, - {filepath.Join(cdcDir, "/bar.cdc"), "cadence/bar.cdc"}, - } - - f := &projectFiles{ - cadencePath: cdcDir, - } - - for i, test := range paths { - rel, err := f.relProjectPath(filepath.FromSlash(test[0])) - assert.NoError(t, err) - assert.Equal(t, filepath.FromSlash(test[1]), rel, fmt.Sprintf("test %d failed", i)) - } -} diff --git a/internal/super/flix.go b/internal/super/flix.go deleted file mode 100644 index 418b2d126..000000000 --- a/internal/super/flix.go +++ /dev/null @@ -1,298 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "context" - "fmt" - "os" - - "github.com/onflow/flixkit-go/flixkit" - - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/scripts" - "github.com/onflow/flow-cli/internal/transactions" -) - -type flixFlags struct { - ArgsJSON string `default:"" flag:"args-json" info:"arguments in JSON-Cadence format"` - BlockID string `default:"" flag:"block-id" info:"block ID to execute the script at"` - BlockHeight uint64 `default:"" flag:"block-height" info:"block height to execute the script at"` - Signer string `default:"" flag:"signer" info:"Account name from configuration used to sign the transaction as proposer, payer and suthorizer"` - Proposer string `default:"" flag:"proposer" info:"Account name from configuration used as proposer"` - Payer string `default:"" flag:"payer" info:"Account name from configuration used as payer"` - Authorizers []string `default:"" flag:"authorizer" info:"Name of a single or multiple comma-separated accounts used as authorizers from configuration"` - Include []string `default:"" flag:"include" info:"Fields to include in the output"` - Exclude []string `default:"" flag:"exclude" info:"Fields to exclude from the output (events)"` - GasLimit uint64 `default:"1000" flag:"gas-limit" info:"transaction gas limit"` - PreFill string `default:"" flag:"pre-fill" info:"template path to pre fill the FLIX"` - Lang string `default:"js" flag:"lang" info:"language to generate the template for"` -} - -type flixResult struct { - flixQuery string - result string -} - -var flags = flixFlags{} -var FlixCmd = &cobra.Command{ - Use: "flix", - Short: "execute, generate, package", - TraverseChildren: true, - GroupID: "tools", -} - -var executeCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "execute ", - Short: "execute FLIX template with a given id, name, local filename, or url", - Example: "flow flix execute transfer-flow 1 0x123456789", - Args: cobra.MinimumNArgs(1), - }, - Flags: &flags, - RunS: executeCmd, -} - -var packageCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "package --lang ", - Short: "package file for FLIX template fcl-js is default", - Example: "flow flix package multiply.template.json --lang js", - Args: cobra.MinimumNArgs(1), - }, - Flags: &flags, - RunS: packageCmd, -} - -var generateCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "generate ", - Short: "generate FLIX json template given local Cadence filename", - Example: "flow flix generate multiply.cdc", - Args: cobra.MinimumNArgs(1), - }, - Flags: &flags, - RunS: generateCmd, -} - -func init() { - executeCommand.AddToParent(FlixCmd) - packageCommand.AddToParent(FlixCmd) - generateCommand.AddToParent(FlixCmd) -} - -func executeCmd( - args []string, - flags command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - flixService := flixkit.NewFlixService(&flixkit.FlixServiceConfig{ - FileReader: state, - }) - return executeFlixCmd(args, flags, logger, flow, state, flixService) -} - -func executeFlixCmd( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, - flixService flixkit.FlixService, -) (result command.Result, err error) { - flixQuery := args[0] - ctx := context.Background() - cadenceWithImportsReplaced, err := flixService.GetTemplateAndReplaceImports(ctx, flixQuery, flow.Network().Name) - if err != nil { - logger.Error("could not replace imports") - return nil, err - } - - if cadenceWithImportsReplaced.IsScript { - scriptsFlags := scripts.Flags{ - ArgsJSON: flags.ArgsJSON, - BlockID: flags.BlockID, - BlockHeight: flags.BlockHeight, - } - return scripts.SendScript([]byte(cadenceWithImportsReplaced.Cadence), args[1:], "", flow, scriptsFlags) - } - - transactionFlags := transactions.Flags{ - ArgsJSON: flags.ArgsJSON, - Signer: flags.Signer, - Proposer: flags.Proposer, - Payer: flags.Payer, - Authorizers: flags.Authorizers, - Include: flags.Include, - Exclude: flags.Exclude, - GasLimit: flags.GasLimit, - } - return transactions.SendTransaction([]byte(cadenceWithImportsReplaced.Cadence), args[1:], "", flow, state, transactionFlags) -} - -func packageCmd( - args []string, - gFlags command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - flixService := flixkit.NewFlixService(&flixkit.FlixServiceConfig{ - FileReader: state, - }) - - return packageFlixCmd(args, gFlags, logger, flow, state, flixService, flags) -} - -func packageFlixCmd( - args []string, - gFlags command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, - flixService flixkit.FlixService, - flags flixFlags, -) (result command.Result, err error) { - flixQuery := args[0] - ctx := context.Background() - out, err := flixService.GetTemplateAndCreateBinding(ctx, flixQuery, flags.Lang, gFlags.Save) - if err != nil { - return nil, err - } - - return &flixResult{ - flixQuery: flixQuery, - result: out, - }, err -} - -func generateCmd( - args []string, - gFlags command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - flixService := flixkit.NewFlixService(&flixkit.FlixServiceConfig{ - FileReader: state, - Logger: logger, - }) - - return generateFlixCmd(args, gFlags, logger, flow, state, flixService, flags) -} - -func generateFlixCmd( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, - flixService flixkit.FlixService, - flags flixFlags, -) (result command.Result, err error) { - cadenceFile := args[0] - depContracts := getDeployedContracts(state) - if cadenceFile == "" { - return nil, fmt.Errorf("no cadence code found") - } - - code, err := state.ReadFile(cadenceFile) - if err != nil { - return nil, fmt.Errorf("could not read cadence file %s: %w", cadenceFile, err) - } - - if err != nil { - return nil, fmt.Errorf("could not create flix generator %w", err) - } - - ctx := context.Background() - prettyJSON, err := flixService.CreateTemplate(ctx, depContracts, string(code), flags.PreFill) - if err != nil { - return nil, fmt.Errorf("could not generate flix %w", err) - } - - return &flixResult{ - flixQuery: cadenceFile, - result: prettyJSON, - }, err - -} - -func (fr *flixResult) JSON() any { - result := make(map[string]any) - result["flixQuery"] = fr.flixQuery - result["result"] = fr.result - return result -} - -func (fr *flixResult) String() string { - return fr.result -} - -func (fr *flixResult) Oneliner() string { - return fr.result -} - -func getDeployedContracts(state *flowkit.State) flixkit.ContractInfos { - allContracts := make(flixkit.ContractInfos) - depNetworks := make([]string, 0) - // get all configured networks in flow.json - for _, n := range *state.Networks() { - depNetworks = append(depNetworks, n.Name) - } - - // get all deployed and alias contracts for configured networks - for _, network := range depNetworks { - contracts, err := state.DeploymentContractsByNetwork(config.Network{Name: network}) - if err != nil { - continue - } - for _, c := range contracts { - if _, ok := allContracts[c.Name]; !ok { - allContracts[c.Name] = make(flixkit.NetworkAddressMap) - } - allContracts[c.Name][network] = c.AccountAddress.Hex() - } - locAliases := state.AliasesForNetwork(config.Network{Name: network}) - for name, addr := range locAliases { - address := flow.BytesToAddress([]byte(addr)) - if isPath(name) { - continue - } - if _, ok := allContracts[name]; !ok { - allContracts[name] = make(flixkit.NetworkAddressMap) - } - allContracts[name][network] = address.Hex() - } - } - return allContracts -} - -func isPath(path string) bool { - _, err := os.Stat(path) - return err == nil -} diff --git a/internal/super/flix_test.go b/internal/super/flix_test.go deleted file mode 100644 index be6d33692..000000000 --- a/internal/super/flix_test.go +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2024 Flow Foundation, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "context" - "testing" - - "github.com/spf13/afero" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/onflow/flixkit-go/flixkit" - "github.com/onflow/flow-go-sdk/crypto" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/mocks" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type MockFlixService struct { - mock.Mock -} - -var TEMPLATE_STR = "{ \"f_type\": \"IniteractionTemplate\", \"f_version\": \"1.1.0\", \"id\": \"0ea\",}" - -func (m *MockFlixService) GetTemplate(ctx context.Context, templateName string) (string, string, error) { - args := m.Called(ctx, templateName) - return TEMPLATE_STR, args.String(0), args.Error(1) -} - -var CADENCE_SCRIPT = "pub fun main() {\n log(\"Hello, World!\")\n}" - -func (m *MockFlixService) GetTemplateAndReplaceImports(ctx context.Context, templateName string, network string) (*flixkit.FlowInteractionTemplateExecution, error) { - result := &flixkit.FlowInteractionTemplateExecution{ - Network: "emulator", - IsTransaciton: false, - IsScript: true, - Cadence: CADENCE_SCRIPT, - } - return result, nil -} - -func (m *MockFlixService) CreateTemplate(ctx context.Context, contractInfos flixkit.ContractInfos, code string, preFill string) (string, error) { - args := m.Called(ctx, contractInfos, code, preFill) - return TEMPLATE_STR, args.Error(1) -} - -var JS_CODE = "export async function request() { const info = await fcl.query({ template: flixTemplate }); return info; }" - -func (m *MockFlixService) GetTemplateAndCreateBinding(ctx context.Context, templateName string, lang string, destFile string) (string, error) { - args := m.Called(ctx, templateName, lang, destFile) - return JS_CODE, args.Error(1) -} - -func Test_ExecuteFlixScript(t *testing.T) { - ctx := context.Background() - logger := output.NewStdoutLogger(output.NoneLog) - srv, state, _ := util.TestMocks(t) - mockFlixService := new(MockFlixService) - testCadenceScript := "pub fun main() {\n log(\"Hello, World!\")\n}" - mockFlixService.On("GetTemplateAndReplaceImports", ctx, "templateName", "emulator").Return(&flixkit.FlowInteractionTemplateExecution{ - Network: "emulator", - IsTransaciton: false, - IsScript: true, - Cadence: testCadenceScript, - }, nil) - - // Set up a mock return value for the Network method - mockNetwork := config.Network{ - Name: "emulator", - Host: "localhost:3569", - } - srv.Network.Run(func(args mock.Arguments) {}).Return(mockNetwork, nil) - srv.ExecuteScript.Run(func(args mock.Arguments) { - script := args.Get(1).(flowkit.Script) - assert.Equal(t, testCadenceScript, string(script.Code)) - }).Return(nil, nil) - - result, err := executeFlixCmd([]string{"transfer-token"}, command.GlobalFlags{}, logger, srv.Mock, state, mockFlixService) - assert.NoError(t, err) - assert.NotNil(t, result) -} - -func Test_ExecuteFlixTransaction(t *testing.T) { - ctx := context.Background() - logger := output.NewStdoutLogger(output.NoneLog) - srv, state, _ := util.TestMocks(t) - mockFlixService := new(MockFlixService) - testCadenceTx := "transaction { prepare(signer: AuthAccount) { /* prepare logic */ } execute { log(\"Hello, Cadence!\") } }" - mockFlixService.On("GetTemplateAndReplaceImports", ctx, "templateName", "emulator").Return(&flixkit.FlowInteractionTemplateExecution{ - Network: "emulator", - IsTransaciton: false, - IsScript: true, - Cadence: testCadenceTx, - }, nil) - - // Set up a mock return value for the Network method - mockNetwork := config.Network{ - Name: "emulator", - Host: "localhost:3569", - } - srv.Network.Run(func(args mock.Arguments) {}).Return(mockNetwork, nil) - srv.SendTransaction.Run(func(args mock.Arguments) { - script := args.Get(2).(flowkit.Script) - assert.Equal(t, testCadenceTx, string(script.Code)) - }).Return(nil, nil) - - result, err := executeFlixCmd([]string{"transfer-token"}, command.GlobalFlags{}, logger, srv.Mock, state, mockFlixService) - assert.NoError(t, err) - assert.NotNil(t, result) -} - -func Test_PackageFlix(t *testing.T) { - ctx := context.Background() - logger := output.NewStdoutLogger(output.NoneLog) - srv, state, _ := util.TestMocks(t) - mockFlixService := new(MockFlixService) - templateName := "templateName" - mockFlixService.On("GetTemplateAndCreateBinding", ctx, templateName, "js", "").Return(JS_CODE, nil) - - result, err := packageFlixCmd([]string{templateName}, command.GlobalFlags{}, logger, srv.Mock, state, mockFlixService, flixFlags{Lang: "js"}) - assert.NoError(t, err) - assert.NotNil(t, result) - assert.Equal(t, JS_CODE, result.String()) -} -func Test_GenerateFlix(t *testing.T) { - srv := mocks.DefaultMockServices() - cadenceFile := "cadence.cdc" - cadenceCode := "pub fun main() {\n log(\"Hello, World!\")\n}" - - mockFlixService := new(MockFlixService) - - configJson := []byte(`{ - "contracts": {}, - "accounts": { - "emulator-account": { - "address": "f8d6e0586b0a20c7", - "key": "dd72967fd2bd75234ae9037dd4694c1f00baad63a10c35172bf65fbb8ad74b47" - } - }, - "networks": { - "emulator": "127.0.0.1.3569" - }, - "deployments": { - } - }`) - - af := afero.Afero{Fs: afero.NewMemMapFs()} - err := afero.WriteFile(af.Fs, "flow.json", configJson, 0644) - assert.NoError(t, err) - err = afero.WriteFile(af.Fs, cadenceFile, []byte(cadenceCode), 0644) - assert.NoError(t, err) - err = afero.WriteFile(af.Fs, tests.ContractHelloString.Filename, []byte(tests.ContractHelloString.Source), 0644) - assert.NoError(t, err) - paths := []string{"flow.json"} - state, err := flowkit.Load(paths, af) - assert.NotNil(t, state) - assert.NoError(t, err) - d := config.Deployment{ - Network: "emulator", - Account: "emulator-account", - Contracts: []config.ContractDeployment{{ - Name: tests.ContractHelloString.Name, - Args: nil, - }}, - } - state.Deployments().AddOrUpdate(d) - c := config.Contract{ - Name: tests.ContractHelloString.Name, - Location: tests.ContractHelloString.Filename, - } - state.Contracts().AddOrUpdate(c) - - contracts, err := state.DeploymentContractsByNetwork(config.Network{Name: "emulator"}) - assert.NoError(t, err) - assert.Equal(t, 1, len(contracts)) - - logger := output.NewStdoutLogger(output.NoneLog) - contractInfos := make(flixkit.ContractInfos) - contractInfos[tests.ContractHelloString.Name] = make(flixkit.NetworkAddressMap) - contractInfos[tests.ContractHelloString.Name]["emulator"] = "f8d6e0586b0a20c7" - - ctx := context.Background() - mockFlixService.On("CreateTemplate", ctx, contractInfos, cadenceCode, "").Return(TEMPLATE_STR, nil) - - result, err := generateFlixCmd([]string{cadenceFile}, command.GlobalFlags{}, logger, srv.Mock, state, mockFlixService, flixFlags{}) - assert.NoError(t, err) - assert.NotNil(t, result) - assert.Equal(t, TEMPLATE_STR, result.String()) -} - -func Test_GenerateFlixPrefill(t *testing.T) { - logger := output.NewStdoutLogger(output.NoneLog) - srv := mocks.DefaultMockServices() - templateName := "templateName" - cadenceFile := "cadence.cdc" - - var mockFS = afero.NewMemMapFs() - var rw = afero.Afero{Fs: mockFS} - err := rw.WriteFile(cadenceFile, []byte(CADENCE_SCRIPT), 0644) - assert.NoError(t, err) - state, _ := flowkit.Init(rw, crypto.ECDSA_P256, crypto.SHA3_256) - - mockFlixService := new(MockFlixService) - ctx := context.Background() - mockFlixService.On("CreateTemplate", ctx, flixkit.ContractInfos{}, CADENCE_SCRIPT, templateName).Return(TEMPLATE_STR, nil) - - result, err := generateFlixCmd([]string{cadenceFile}, command.GlobalFlags{}, logger, srv.Mock, state, mockFlixService, flixFlags{PreFill: templateName}) - assert.NoError(t, err) - assert.NotNil(t, result) -} diff --git a/internal/super/generate.go b/internal/super/generate.go deleted file mode 100644 index bd8041ff9..000000000 --- a/internal/super/generate.go +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "fmt" - "path/filepath" - "strings" - - "github.com/onflow/flow-cli/flowkit/config" - - "github.com/onflow/flow-cli/flowkit" - - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - - "github.com/spf13/cobra" -) - -type generateFlagsDef struct { - Directory string `default:"" flag:"dir" info:"Directory to generate files in"` -} - -var generateFlags = generateFlagsDef{} - -var GenerateCommand = &cobra.Command{ - Use: "generate", - Short: "Generate template files for common Cadence code", - GroupID: "super", - Aliases: []string{"g"}, -} - -var GenerateContractCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "contract ", - Short: "Generate Cadence smart contract template", - Example: "flow generate contract HelloWorld", - Args: cobra.ExactArgs(1), - }, - Flags: &generateFlags, - RunS: generateContract, -} - -var GenerateTransactionCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "transaction ", - Short: "Generate a Cadence transaction template", - Example: "flow generate transaction SomeTransaction", - Args: cobra.ExactArgs(1), - }, - Flags: &generateFlags, - RunS: generateTransaction, -} - -var GenerateScriptCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "script ", - Short: "Generate a Cadence script template", - Example: "flow generate script SomeScript", - Args: cobra.ExactArgs(1), - }, - Flags: &generateFlags, - RunS: generateScript, -} - -func init() { - GenerateContractCommand.AddToParent(GenerateCommand) - GenerateTransactionCommand.AddToParent(GenerateCommand) - GenerateScriptCommand.AddToParent(GenerateCommand) -} - -func generateContract( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - return generateNew(args, "contract", logger, state) -} - -func generateTransaction( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - return generateNew(args, "transaction", logger, state) -} - -func generateScript( - args []string, - _ command.GlobalFlags, - logger output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - return generateNew(args, "script", logger, state) -} - -func generateNew( - args []string, - templateType string, - logger output.Logger, - state *flowkit.State, -) (result command.Result, err error) { - if len(args) < 1 { - return nil, fmt.Errorf("invalid number of arguments") - } - - name := args[0] - var filename string - - // Don't add .cdc extension if it's already there - if strings.HasSuffix(name, ".cdc") { - filename = name - } else { - filename = fmt.Sprintf("%s.cdc", name) - } - - var fileToWrite string - var basePath string - - if generateFlags.Directory != "" { - basePath = generateFlags.Directory - } else { - switch templateType { - case "contract": - basePath = "cadence/contracts" - case "script": - basePath = "cadence/scripts" - case "transaction": - basePath = "cadence/transactions" - default: - return nil, fmt.Errorf("invalid template type: %s", templateType) - } - } - - switch templateType { - case "contract": - fileToWrite = fmt.Sprintf(` -access(all) contract %s { - init() {} -}`, name) - case "script": - fileToWrite = `access(all) fun main() { - // Script details here -}` - case "transaction": - fileToWrite = `transaction() { - prepare(account:AuthAccount) {} - - execute {} -}` - default: - return nil, fmt.Errorf("invalid template type: %s", templateType) - } - - filenameWithBasePath := filepath.Join(basePath, filename) - - // Check file existence - if _, err := state.ReaderWriter().ReadFile(filenameWithBasePath); err == nil { - return nil, fmt.Errorf("file already exists: %s", filenameWithBasePath) - } - - // Ensure the directory exists - if err := state.ReaderWriter().MkdirAll(basePath, 0755); err != nil { - return nil, fmt.Errorf("error creating directories: %w", err) - } - - err = state.ReaderWriter().WriteFile(filenameWithBasePath, []byte(fileToWrite), 0644) - if err != nil { - return nil, fmt.Errorf("error writing file: %w", err) - } - - logger.Info(fmt.Sprintf("Generated new %s: %s at %s", templateType, name, filenameWithBasePath)) - - if templateType == "contract" { - state.Contracts().AddOrUpdate(config.Contract{Name: name, Location: filenameWithBasePath}) - err = state.SaveDefault() - if err != nil { - return nil, fmt.Errorf("error saving to flow.json: %w", err) - } - } - - return nil, err -} diff --git a/internal/super/generate_test.go b/internal/super/generate_test.go deleted file mode 100644 index 84d56a298..000000000 --- a/internal/super/generate_test.go +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "os" - "testing" - - "github.com/onflow/flow-cli/internal/util" - - "github.com/stretchr/testify/assert" - - "github.com/onflow/flow-cli/flowkit/output" -) - -func TestGenerateNewContract(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - assert.NoError(t, err, "Failed to create temp dir") - defer os.RemoveAll(dir) - - if err := os.Chdir(dir); err != nil { - t.Fatalf("Failed to change directory: %v", err) - } - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - // Test contract generation - _, err = generateNew([]string{"TestContract"}, "contract", logger, state) - assert.NoError(t, err, "Failed to generate contract") - - fileContent, err := state.ReaderWriter().ReadFile("cadence/contracts/TestContract.cdc") - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, fileContent) - - // Check content is correct - expectedContent := ` -access(all) contract TestContract { - init() {} -}` - assert.Equal(t, expectedContent, string(fileContent)) - - // Test file already exists scenario - _, err = generateNew([]string{"TestContract"}, "contract", logger, state) - assert.Error(t, err) - assert.Equal(t, "file already exists: cadence/contracts/TestContract.cdc", err.Error()) -} - -func TestGenerateNewContractFileAlreadyExists(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - assert.NoError(t, err, "Failed to create temp dir") - defer os.RemoveAll(dir) - - if err := os.Chdir(dir); err != nil { - t.Fatalf("Failed to change directory: %v", err) - } - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - // Test contract generation - _, err = generateNew([]string{"TestContract"}, "contract", logger, state) - assert.NoError(t, err, "Failed to generate contract") - - //// Check if the file exists in the correct directory - content, err := state.ReaderWriter().ReadFile("cadence/contracts/TestContract.cdc") - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, content) - - // Test file already exists scenario - _, err = generateNew([]string{"TestContract"}, "contract", logger, state) - assert.Error(t, err) - assert.Equal(t, "file already exists: cadence/contracts/TestContract.cdc", err.Error()) -} - -func TestGenerateNewContractWithFileExtension(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - assert.NoError(t, err, "Failed to create temp dir") - defer os.RemoveAll(dir) - - if err := os.Chdir(dir); err != nil { - t.Fatalf("Failed to change directory: %v", err) - } - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - _, err = generateNew([]string{"TestContract.cdc"}, "contract", logger, state) - assert.NoError(t, err, "Failed to generate contract") - - // Check file exists - content, err := state.ReaderWriter().ReadFile("cadence/contracts/TestContract.cdc") - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, content) -} - -func TestGenerateNewScript(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - assert.NoError(t, err, "Failed to create temp dir") - defer os.RemoveAll(dir) - - if err := os.Chdir(dir); err != nil { - t.Fatalf("Failed to change directory: %v", err) - } - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - _, err = generateNew([]string{"TestScript"}, "script", logger, state) - assert.NoError(t, err, "Failed to generate contract") - - content, err := state.ReaderWriter().ReadFile("cadence/scripts/TestScript.cdc") - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, content) - - expectedContent := `access(all) fun main() { - // Script details here -}` - assert.Equal(t, expectedContent, string(content)) -} - -func TestGenerateNewTransaction(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - assert.NoError(t, err, "Failed to create temp dir") - defer os.RemoveAll(dir) - - if err := os.Chdir(dir); err != nil { - t.Fatalf("Failed to change directory: %v", err) - } - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - _, err = generateNew([]string{"TestTransaction"}, "transaction", logger, state) - assert.NoError(t, err, "Failed to generate contract") - - content, err := state.ReaderWriter().ReadFile("cadence/transactions/TestTransaction.cdc") - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, content) - - expectedContent := `transaction() { - prepare(account:AuthAccount) {} - - execute {} -}` - assert.Equal(t, expectedContent, string(content)) -} - -func TestGenerateNewWithDirFlag(t *testing.T) { - dir, err := os.MkdirTemp("", "test") - assert.NoError(t, err, "Failed to create temp dir") - defer os.RemoveAll(dir) - - if err := os.Chdir(dir); err != nil { - t.Fatalf("Failed to change directory: %v", err) - } - - logger := output.NewStdoutLogger(output.NoneLog) - _, state, _ := util.TestMocks(t) - - // Set a custom directory - generateFlags.Directory = "customDir" - - _, err = generateNew([]string{"TestContract"}, "contract", logger, state) - assert.NoError(t, err, "Failed to generate contract") - - content, err := state.ReaderWriter().ReadFile("customDir/TestContract.cdc") - assert.NoError(t, err, "Failed to read generated file") - assert.NotNil(t, content) - - expectedContent := ` -access(all) contract TestContract { - init() {} -}` - assert.Equal(t, expectedContent, string(content)) -} diff --git a/internal/super/output.go b/internal/super/output.go deleted file mode 100644 index 064a84d34..000000000 --- a/internal/super/output.go +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "bytes" - "errors" - "fmt" - "math/rand" - "os" - sysExec "os/exec" - "regexp" - "strings" - "time" - - "golang.org/x/exp/maps" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - flowkitProject "github.com/onflow/flow-cli/flowkit/project" -) - -func printDeployment(deployed []*flowkitProject.Contract, err error, contractPathNames map[string]string) { - clearScreen() - fmt.Println(helpBanner()) - - if err != nil { - fmt.Println(errorBanner()) - fmt.Println(failureDeployment(err, contractPathNames)) - return - } - - fmt.Println(okBanner()) - fmt.Println(successfulDeployment(deployed)) -} - -func successfulDeployment(deployed []*flowkitProject.Contract) string { - var out bytes.Buffer - okFaces := []string{"😎", "🤩", "🤠", "🤖", "🤡", "👽", "👾", "🥸", "🧐", "👻", "💩", "🤓", "🥳", "🤑", "😍", "👿"} - - // build map of grouped contracts by account for easier output - deployOut := make(map[string][]string) - for _, deploy := range deployed { - key := fmt.Sprintf("%s 0x%s", deploy.AccountName, deploy.AccountAddress.String()) - if deployOut[key] == nil { - deployOut[key] = make([]string, 0) - } - deployOut[key] = append( - deployOut[key], - fmt.Sprintf(" |- %s %s", output.Bold(output.Magenta(deploy.Name)), output.Italic(deploy.Location())), - ) - } - - for account, contracts := range deployOut { - out.WriteString(fmt.Sprintf("\n%s %s\n", okFaces[rand.Intn(len(okFaces))], output.Bold(account))) - for _, contract := range contracts { - out.WriteString(fmt.Sprintf("%s\n", contract)) - } - } - - return out.String() -} - -func failureDeployment(err error, contractPathNames map[string]string) string { - var out bytes.Buffer - - // handle emulator not allowing overwriting contracts - if strings.Contains(err.Error(), "cannot overwrite existing contract with name") { - out.WriteString(output.ErrorEmoji() + output.Red(" Cannot overwrite existing contract, that means you are running the emulator without the --contract-removal flag.\n")) - out.WriteString(output.TryEmoji() + " Please restart the emulator with the --contract-removal flag present as we are required to continuously update contracts as you work.") - } - - // handle import path errors with helpful message - importRegex := regexp.MustCompile(`import from (\w*) could not be found: (\w*), make sure import path is correct`) - if importRegex.MatchString(err.Error()) { - found := importRegex.FindAllStringSubmatch(err.Error(), -1) - contractName := found[0][1] - importName := found[0][2] - contractPath := "" - for p, n := range contractPathNames { - if contractName == n { - contractPath = p - } - } - - out.WriteString(output.ErrorEmoji() + output.Red( - fmt.Sprintf(" Error deploying your project. Import 'import %s' found in %s (%s) could not be resolved.\n", importName, contractName, contractPath), - )) - out.WriteString(fmt.Sprintf( - "Only valid project imports are: %s. If you want to import a contract outside your project you need to import it by specifying an address of already deployed contract, or by first transferring the contract file inside the project and then importing.\n", - strings.Join(maps.Values(contractPathNames), ", "), - )) - return out.String() - } - - // handle cadence runtime errors - var deployErr *flowkit.ProjectDeploymentError - if errors.As(err, &deployErr) { - out.WriteString(output.ErrorEmoji() + " Error deploying your project. Runtime error encountered which means your code is incorrect, check details bellow. \n\n") - - for name, err := range deployErr.Contracts() { - out.WriteString(output.Bold(fmt.Sprintf("%s Errors:\n", name))) - - if strings.Contains(err.Error(), "invalid argument count, too few arguments") { - out.WriteString(output.Red( - "Deploying a contract failed because it requires initialization arguments. We currently don't support passing initialization arguments, so we suggest you hardcode the initialization arguments in the init function to be used during development.\n\n", - )) - continue - } - - // remove transaction error as it confuses developer, the only important part is the actual code - removeDeployOuput := regexp.MustCompile(`(?s)(failed to deploy.*contracts\.add[^\n]*\n[^\n]*\n\nerror: )`) - out.WriteString(output.Red(removeDeployOuput.ReplaceAllString(err.Error(), ""))) - } - return out.String() - } - - return err.Error() -} - -func helpBanner() string { - var out bytes.Buffer - out.WriteString(output.Italic("The development environment will watch your Cadence files and automatically keep your project updated on the emulator.\n")) - out.WriteString(output.Italic("Please add your contracts in the contracts folder. Read more about it here: https://developers.flow.com/tools/flow-cli/super-commands\n")) - out.WriteString(output.Italic("Be aware that resources stored in accounts might no longer be valid after contract code changes.\n\n")) - return out.String() -} - -func okBanner() string { - return output.Bold( - fmt.Sprintf("%s Project synced [%s]\n", output.Green("OK"), time.Now().Format("15:04:05")), - ) -} - -func errorBanner() string { - return output.Bold( - fmt.Sprintf("%s Project error [%s]\n", output.Red("ERR"), time.Now().Format("15:04:05")), - ) -} - -func clearScreen() { - cmd := sysExec.Command("clear") - cmd.Stdout = os.Stdout - _ = cmd.Run() -} diff --git a/internal/super/project.go b/internal/super/project.go deleted file mode 100644 index d8729fd51..000000000 --- a/internal/super/project.go +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "context" - - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/pkg/errors" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/accounts" - "github.com/onflow/flow-cli/flowkit/config" - flowkitProject "github.com/onflow/flow-cli/flowkit/project" - "github.com/onflow/flow-cli/internal/util" -) - -var emulator = config.EmulatorNetwork.Name - -const defaultAccount = "default" - -func newProject( - serviceAccount accounts.Account, - flow flowkit.Services, - state *flowkit.State, - files *projectFiles, -) (*project, error) { - proj := &project{ - service: &serviceAccount, - flow: flow, - state: state, - projectFiles: files, - pathNameLookup: make(map[string]string), - } - - if err := proj.projectFiles.exist(); err != nil { - return nil, err - } - - return proj, nil -} - -type project struct { - service *accounts.Account - flow flowkit.Services - state *flowkit.State - projectFiles *projectFiles - pathNameLookup map[string]string -} - -// startup cleans the state and then rebuilds it from the current folder state. -func (p *project) startup() error { - deployments, err := p.projectFiles.deployments() - if err != nil { - return err - } - - p.cleanState() - err = p.addAccount(defaultAccount) - if err != nil { - return err - } - - for accName, contracts := range deployments { - if accName == "" { // default to emulator account - accName = defaultAccount - } - - err := p.addAccount(accName) - if err != nil { - return err - } - - p.state.Deployments().AddOrUpdate(config.Deployment{ - Network: emulator, - Account: accName, - }) - for _, path := range contracts { - err := p.addContract(path, accName) - if err != nil { - return err - } - } - } - - p.deploy() - - return p.state.SaveDefault() -} - -// deploys all the contracts found in the state configuration. -func (p *project) deploy() { - deployed, err := p.flow.DeployProject(context.Background(), flowkit.UpdateExistingContract(true)) - printDeployment(deployed, err, p.pathNameLookup) -} - -// cleanState of existing contracts, deployments and non-service accounts as we will build it again. -func (p *project) cleanState() { - contracts := make(config.Contracts, len(*p.state.Contracts())) - copy(contracts, *p.state.Contracts()) // we need to make a copy otherwise when we remove order shifts - for _, c := range contracts { - if c.IsAliased() { - continue // don't remove aliased contracts - } - - _ = p.state.Contracts().Remove(c.Name) - } - - accs := make([]accounts.Account, len(*p.state.Accounts())) - copy(accs, *p.state.Accounts()) // we need to make a copy otherwise when we remove order shifts - for _, a := range accs { - chain, err := util.GetAddressNetwork(a.Address) - if err != nil || chain != flow.Emulator { - continue // don't remove non-emulator accounts - } - - if a.Name == config.DefaultEmulator.ServiceAccount { - continue - } - - // If account is not in state.Deployments, don't remove it since it's a user created account - // Otherwise, let it be regenerated by "flow dev" command - if p.state.Deployments().ByAccountAndNetwork(a.Name, emulator) == nil { - continue - } - - _ = p.state.Deployments().Remove(a.Name, emulator) - _ = p.state.Accounts().Remove(a.Name) - } -} - -// watch project files and update the state accordingly. -func (p *project) watch() error { - accountChanges, contractChanges, err := p.projectFiles.watch() - if err != nil { - return errors.Wrap(err, "error watching files") - } - - for { - select { - case account := <-accountChanges: - if account.status == created { - err = p.addAccount(account.name) - } - if account.status == removed { - err = p.removeAccount(account.name) - } - if err != nil { - return errors.Wrap(err, "failed updating accounts") - } - case contract := <-contractChanges: - if contract.account == "" { - contract.account = defaultAccount - } - - switch contract.status { - case created: - _ = p.addContract(contract.path, contract.account) - case changed: - // Remove contract before updating - // This is so one can develop without having to restart the emulator when hitting contract upgrade issues - // See: https://developers.flow.com/cadence/language/contract-updatability - err = p.removeContract(contract.path, contract.account) - if err != nil { - return err - } - _ = p.addContract(contract.path, contract.account) - case renamed: - p.renameContract(contract.oldPath, contract.path) - case removed: - // TODO(sideninja) what if contract contains invalid code and then we want to remove it - err = p.removeContract(contract.path, contract.account) - if err != nil { - return err - } - } - - p.deploy() - } - - err = p.state.SaveDefault() - if err != nil { - return errors.Wrap(err, "failed saving configuration") - } - } -} - -// addAccount to the state and create it on the network. -func (p *project) addAccount(name string) error { - privateKey, err := p.service.Key.PrivateKey() - if err != nil { - return err - } - - pubKey := (*privateKey).PublicKey() - - // create the account on the network and set the address - flowAcc, _, err := p.flow.CreateAccount( - context.Background(), - p.service, - []accounts.PublicKey{{ - Public: pubKey, - Weight: flow.AccountKeyWeightThreshold, - SigAlgo: crypto.ECDSA_P256, - HashAlgo: crypto.SHA3_256, - }}, - ) - if err != nil { - return err - } - - p.state.Accounts().AddOrUpdate(&accounts.Account{ - Name: name, - Address: flowAcc.Address, - Key: accounts.NewHexKeyFromPrivateKey(0, crypto.SHA3_256, *privateKey), - }) - p.state.Deployments().AddOrUpdate(config.Deployment{ // init empty deployment - Network: emulator, - Account: name, - }) - return nil -} - -func (p *project) removeAccount(name string) error { - _ = p.state.Deployments().Remove(name, emulator) - return p.state.Accounts().Remove(name) -} - -// contractName extracts contract name from the source code. -func (p *project) contractName(path string) (string, error) { - if name, ok := p.pathNameLookup[path]; ok { - return name, nil - } - - // TODO(sideninja) add a warning if the name of the file is not matching the name of the contract - content, err := p.state.ReadFile(path) - if err != nil { - return "", errors.Wrap(err, "could not load contract to get the name") - } - - program, err := flowkitProject.NewProgram(content, nil, path) - if err != nil { - return "", err - } - - name, err := program.Name() - if err != nil { - return "", err - } - - p.pathNameLookup[path] = name - - return name, nil -} - -// addContract to the state configuration as a contract and as a deployment. -func (p *project) addContract( - path string, - account string, -) error { - name, err := p.contractName(path) - if err != nil { - return err - } - - contract := config.Contract{ - Name: name, - Location: path, - } - - existing, _ := p.state.Contracts().ByName(name) - if existing != nil { // make sure alises are persisted even if location changes - contract.Aliases = existing.Aliases - } - - if contract.Aliases.ByNetwork(emulator) == nil { // only add if not existing emulator alias - p.state.Deployments(). - ByAccountAndNetwork(account, emulator). - AddContract(config.ContractDeployment{ - Name: contract.Name, - }) - } - - p.state.Contracts().AddOrUpdate(contract) - return nil -} - -// removeContract from state configuration. -func (p *project) removeContract( - path string, - accountName string, -) error { - name, err := p.contractName(path) - if err != nil { - return errors.Wrap(err, "failed to remove contract") - } - - if accountName == "" { - accountName = defaultAccount - } - - if p.state.Deployments().ByAccountAndNetwork(accountName, emulator) != nil { - p.state.Deployments(). - ByAccountAndNetwork(accountName, emulator). - RemoveContract(name) // we might delete account first - _ = p.state.Contracts().Remove(name) - - acc, err := p.state.Accounts().ByName(accountName) - if err != nil { - return err - } - - _, err = p.flow.RemoveContract(context.Background(), acc, name) - if err != nil { - return err - } - } - - return nil -} - -// renameContract and update the location in the state -func (p *project) renameContract(oldLocation string, newLocation string) { - for _, c := range *p.state.Contracts() { - if c.Location == oldLocation { - c.Location = newLocation - p.state.Contracts().AddOrUpdate(c) - } - } -} diff --git a/internal/super/setup.go b/internal/super/setup.go deleted file mode 100644 index fd25a1841..000000000 --- a/internal/super/setup.go +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package super - -import ( - "bytes" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - "path/filepath" - "time" - - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsSetup struct { - Scaffold bool `default:"" flag:"scaffold" info:"Interactively select a provided scaffold for project creation"` - ScaffoldID int `default:"" flag:"scaffold-id" info:"Use provided scaffold ID for project creation"` -} - -var setupFlags = flagsSetup{} - -var SetupCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "setup ", - Short: "Start a new Flow project", - Example: "flow setup my-project", - Args: cobra.ExactArgs(1), - GroupID: "super", - }, - Flags: &setupFlags, - Run: create, -} - -const scaffoldListURL = "https://raw.githubusercontent.com/onflow/flow-cli/master/scaffolds.json" - -type scaffold struct { - Repo string `json:"repo"` - Branch string `json:"branch"` - Name string `json:"name"` - Description string `json:"description"` - Commit string `json:"commit"` - Folder string `json:"folder"` - Type string `json:"type"` -} - -func create( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - targetDir, err := getTargetDirectory(args[0]) - if err != nil { - return nil, err - } - - scaffolds, err := getScaffolds() - if err != nil { - return nil, err - } - - // default to first scaffold - basic scaffold - pickedScaffold := scaffolds[0] - - if setupFlags.ScaffoldID != 0 { - if setupFlags.ScaffoldID > len(scaffolds) { - return nil, fmt.Errorf("scaffold with id %d does not exist", setupFlags.ScaffoldID) - } - pickedScaffold = scaffolds[setupFlags.ScaffoldID-1] - } - - if setupFlags.Scaffold { - scaffoldItems := make([]util.ScaffoldItem, 0) - for i, s := range scaffolds { - scaffoldItems = append( - scaffoldItems, - util.ScaffoldItem{ - Index: i, - Title: fmt.Sprintf("%s - %s", output.Bold(s.Name), s.Description), - Category: s.Type, - }, - ) - } - - selected := util.ScaffoldPrompt(logger, scaffoldItems) - pickedScaffold = scaffolds[selected] - } - - logger.StartProgress(fmt.Sprintf("Creating your project %s", targetDir)) - defer logger.StopProgress() - err = cloneScaffold(targetDir, pickedScaffold) - if err != nil { - return nil, fmt.Errorf("failed creating scaffold %w", err) - } - - return &setupResult{targetDir: targetDir}, nil -} - -func getTargetDirectory(directory string) (string, error) { - pwd, err := os.Getwd() - if err != nil { - return "", err - } - - target := filepath.Join(pwd, directory) - info, err := os.Stat(target) - if !os.IsNotExist(err) { - if !info.IsDir() { - return "", fmt.Errorf("%s is a file", target) - } - - file, err := os.Open(target) - if err != nil { - return "", err - } - defer file.Close() - - _, err = file.Readdirnames(1) - if err != io.EOF { - return "", fmt.Errorf("directory is not empty: %s", target) - } - } - return target, nil -} - -func getScaffolds() ([]scaffold, error) { - httpClient := http.Client{ - Timeout: time.Second * 5, - } - - req, err := http.NewRequest(http.MethodGet, scaffoldListURL, nil) - if err != nil { - return nil, fmt.Errorf("failed creating request for scaffold list: %w", err) - } - - res, err := httpClient.Do(req) - if err != nil { - return nil, fmt.Errorf("failed requesting scaffold list: %w", err) - } - if res.Body != nil { - defer res.Body.Close() - } - - body, err := io.ReadAll(res.Body) - if err != nil { - return nil, fmt.Errorf("failed reading scaffold list response: %w", err) - } - - var all []scaffold - err = json.Unmarshal(body, &all) - if err != nil { - return nil, fmt.Errorf("failed parsing scaffold list response: %w", err) - } - - valid := make([]scaffold, 0) - for _, s := range all { - if s.Repo != "" && s.Description != "" && s.Name != "" && s.Commit != "" { - valid = append(valid, s) - } - } - - return valid, nil -} - -func cloneScaffold(targetDir string, conf scaffold) error { - repo, err := git.PlainClone(targetDir, false, &git.CloneOptions{ - URL: conf.Repo, - }) - if err != nil { - return fmt.Errorf("could not download the scaffold: %w", err) - } - - worktree, _ := repo.Worktree() - err = worktree.Checkout(&git.CheckoutOptions{ - Hash: plumbing.NewHash(conf.Commit), - Force: true, - }) - if err != nil { - return fmt.Errorf("could not find the scaffold version") - } - - // if we defined a folder remove everything else - if conf.Folder != "" { - err = os.Rename( - filepath.Join(targetDir, conf.Folder), - filepath.Join(targetDir, "../scaffold-temp"), - ) - if err != nil { - return err - } - - if err = os.RemoveAll(targetDir); err != nil { - return err - } - - if err = os.Rename(filepath.Join(targetDir, "../scaffold-temp"), targetDir); err != nil { - return err - } - } - - return os.RemoveAll(filepath.Join(targetDir, ".git")) -} - -type setupResult struct { - targetDir string -} - -func (s *setupResult) String() string { - wd, _ := os.Getwd() - relDir, _ := filepath.Rel(wd, s.targetDir) - out := bytes.Buffer{} - - out.WriteString(fmt.Sprintf("%s Congrats! your project was created.\n\n", output.SuccessEmoji())) - out.WriteString("Start development by following these steps:\n") - out.WriteString(fmt.Sprintf("1. '%s' to change to your new project,\n", output.Bold(fmt.Sprintf("cd %s", relDir)))) - out.WriteString(fmt.Sprintf("2. '%s' or run Flowser to start the emulator,\n", output.Bold("flow emulator"))) - out.WriteString(fmt.Sprintf("3. '%s' to start developing.\n\n", output.Bold("flow dev"))) - out.WriteString(fmt.Sprintf("You should also read README.md to learn more about the development process!\n")) - - return out.String() -} - -func (s *setupResult) Oneliner() string { - return fmt.Sprintf("Project created inside %s", s.targetDir) -} - -func (s *setupResult) JSON() any { - return nil -} diff --git a/internal/test/test.go b/internal/test/test.go deleted file mode 100644 index 84d96cb6c..000000000 --- a/internal/test/test.go +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2022 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package test - -import ( - "bytes" - "encoding/json" - "fmt" - "math/rand" - "os" - "path/filepath" - "strings" - - cdcTests "github.com/onflow/cadence-tools/test" - "github.com/onflow/cadence/runtime" - "github.com/onflow/cadence/runtime/common" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -// The key where meta information for a test report in JSON -// format can be found. -const TestReportMetaKey = "meta" - -// The key where coverage meta information for a test report -// in JSON format can be found. -const TestReportCoverageKey = "coverage" - -// The key where seed meta information for a test report -// in JSON format can be found. -const TestReportSeedKey = "seed" - -// Import statements with a path that contain this substring, -// are considered to be helper/utility scripts for test files. -const helperScriptSubstr = "_helper" - -// When the value of flagsTests.CoverCode equals "contracts", -// scripts and transactions are excluded from coverage report. -const contractsCoverCode = "contracts" - -type flagsTests struct { - Cover bool `default:"false" flag:"cover" info:"Use the cover flag to calculate coverage report"` - CoverProfile string `default:"coverage.json" flag:"coverprofile" info:"Filename to write the calculated coverage report. Supported extensions are .json and .lcov"` - CoverCode string `default:"all" flag:"covercode" info:"Use the covercode flag to calculate coverage report only for certain types of code. Available values are \"all\" & \"contracts\""` - Random bool `default:"false" flag:"random" info:"Use the random flag to execute test cases randomly"` - Seed int64 `default:"0" flag:"seed" info:"Use the seed flag to manipulate random execution of test cases"` - Name string `default:"" flag:"name" info:"Use the name flag to run only tests that match the given name"` -} - -var testFlags = flagsTests{} - -var status = 0 - -var TestCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "test ", - Short: "Run Cadence tests", - Example: `flow test script.cdc`, - Args: cobra.MinimumNArgs(1), - GroupID: "tools", - }, - Flags: &testFlags, - RunS: run, - Status: &status, -} - -func run( - args []string, - _ command.GlobalFlags, - logger output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - if !testFlags.Cover && testFlags.CoverProfile != "coverage.json" { - return nil, fmt.Errorf("the '--coverprofile' flag requires the '--cover' flag") - } - if testFlags.Random && testFlags.Seed > 0 { - fmt.Printf( - "%s Both '--seed' and '--random' flags are used. Hence, the '--random' flag will be ignored.\n", - output.WarningEmoji(), - ) - } - - testFiles := make(map[string][]byte, 0) - for _, filename := range args { - code, err := state.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error loading script file: %w", err) - } - - testFiles[filename] = code - } - - result, err := testCode(testFiles, state, testFlags) - if err != nil { - return nil, err - } - - if result.CoverageReport != nil { - var file []byte - var err error - - ext := filepath.Ext(testFlags.CoverProfile) - if ext == ".json" { - file, err = json.MarshalIndent(result.CoverageReport, "", " ") - } else if ext == ".lcov" { - file, err = result.CoverageReport.MarshalLCOV() - } else { - return nil, fmt.Errorf("given format: %v, only .json and .lcov are supported", ext) - } - - if err != nil { - return nil, fmt.Errorf("error serializing coverage report: %w", err) - } - - err = os.WriteFile(testFlags.CoverProfile, file, 0644) - if err != nil { - return nil, fmt.Errorf("error writing coverage report file: %w", err) - } - } - - return result, nil -} - -func testCode( - testFiles map[string][]byte, - state *flowkit.State, - flags flagsTests, -) (*result, error) { - runner := cdcTests.NewTestRunner() - - var coverageReport *runtime.CoverageReport - if flags.Cover { - coverageReport = state.CreateCoverageReport("testing") - if flags.CoverCode == contractsCoverCode { - coverageReport.WithLocationFilter( - func(location common.Location) bool { - _, addressLoc := location.(common.AddressLocation) - // We only allow inspection of AddressLocation, - // since scripts and transactions cannot be - // attributed to their source files anyway. - return addressLoc - }, - ) - } - runner = runner.WithCoverageReport(coverageReport) - } - - var seed int64 - if flags.Seed > 0 { - seed = flags.Seed - runner = runner.WithRandomSeed(seed) - } else if flags.Random { - seed = int64(rand.Intn(150000)) - runner = runner.WithRandomSeed(seed) - } - - contractsConfig := *state.Contracts() - contracts := make(map[string]common.Address, len(contractsConfig)) - for _, contract := range contractsConfig { - alias := contract.Aliases.ByNetwork("testing") - if alias != nil { - contracts[contract.Name] = common.Address(alias.Address) - } - } - - testResults := make(map[string]cdcTests.Results, 0) - for scriptPath, code := range testFiles { - runner := runner. - WithImportResolver(importResolver(scriptPath, state)). - WithFileResolver(fileResolver(scriptPath, state)). - WithContracts(contracts) - - if flags.Name != "" { - testFunctions, err := runner.GetTests(string(code)) - if err != nil { - return nil, err - } - - for _, testFunction := range testFunctions { - if testFunction != flags.Name { - continue - } - - result, err := runner.RunTest(string(code), flags.Name) - if err != nil { - return nil, err - } - testResults[scriptPath] = []cdcTests.Result{*result} - } - } else { - results, err := runner.RunTests(string(code)) - if err != nil { - return nil, err - } - testResults[scriptPath] = results - } - - for _, result := range testResults[scriptPath] { - if result.Error != nil { - status = 1 - break - } - } - } - - return &result{ - Results: testResults, - CoverageReport: coverageReport, - RandomSeed: seed, - }, nil -} - -func importResolver(scriptPath string, state *flowkit.State) cdcTests.ImportResolver { - contracts := make(map[string]config.Contract, 0) - for _, contract := range *state.Contracts() { - contracts[contract.Name] = contract - } - - return func(location common.Location) (string, error) { - contract := config.Contract{} - - switch location := location.(type) { - case common.AddressLocation: - contract = contracts[location.Name] - - case common.StringLocation: - relativePath := location.String() - - if strings.Contains(relativePath, helperScriptSubstr) { - importedScriptFilePath := absolutePath(scriptPath, relativePath) - scriptCode, err := state.ReadFile(importedScriptFilePath) - if err != nil { - return "", nil - } - return string(scriptCode), nil - } - - contract = contracts[relativePath] - } - - if contract.Location == "" { - return "", fmt.Errorf( - "cannot find contract with location '%s' in configuration", - location, - ) - } - - contractCode, err := state.ReadFile(contract.Location) - if err != nil { - return "", err - } - - return string(contractCode), nil - } -} - -func fileResolver(scriptPath string, state *flowkit.State) cdcTests.FileResolver { - return func(path string) (string, error) { - importFilePath := absolutePath(scriptPath, path) - - content, err := state.ReadFile(importFilePath) - if err != nil { - return "", err - } - - return string(content), nil - } -} - -func absolutePath(basePath, filePath string) string { - if filepath.IsAbs(filePath) { - return filePath - } - - return filepath.Join(filepath.Dir(basePath), filePath) -} - -type result struct { - Results map[string]cdcTests.Results - CoverageReport *runtime.CoverageReport - RandomSeed int64 -} - -var _ command.Result = &result{} - -func (r *result) JSON() any { - results := make(map[string]map[string]string, len(r.Results)) - - for testFile, testResult := range r.Results { - testFileResults := make(map[string]string, len(testResult)) - for _, result := range testResult { - var status string - if result.Error == nil { - status = "PASS" - } else { - status = fmt.Sprintf("FAIL: %s", result.Error.Error()) - } - testFileResults[result.TestName] = status - } - results[testFile] = testFileResults - } - - meta := map[string]string{} - if r.CoverageReport != nil { - meta[TestReportCoverageKey] = r.CoverageReport.Percentage() - } - if r.RandomSeed > 0 { - meta[TestReportSeedKey] = fmt.Sprint(r.RandomSeed) - } - results[TestReportMetaKey] = meta - - return results -} - -func (r *result) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - - for scriptPath, testResult := range r.Results { - _, _ = fmt.Fprint(writer, cdcTests.PrettyPrintResults(testResult, scriptPath)) - } - if r.CoverageReport != nil { - _, _ = fmt.Fprint(writer, r.CoverageReport.String()) - } - if r.RandomSeed > 0 { - _, _ = fmt.Fprintf(writer, "\nSeed: %d", r.RandomSeed) - } - - _ = writer.Flush() - - return b.String() -} - -func (r *result) Oneliner() string { - var builder strings.Builder - - if len(r.Results) == 0 { - builder.WriteString("No tests found") - return builder.String() - } - - for scriptPath, testResult := range r.Results { - builder.WriteString(cdcTests.PrettyPrintResults(testResult, scriptPath)) - } - if r.CoverageReport != nil { - builder.WriteString(r.CoverageReport.String()) - builder.WriteString("\n") - } - if r.RandomSeed > 0 { - builder.WriteString(fmt.Sprintf("Seed: %d", r.RandomSeed)) - builder.WriteString("\n") - } - - return builder.String() -} diff --git a/internal/test/test_test.go b/internal/test/test_test.go deleted file mode 100644 index 0f61be418..000000000 --- a/internal/test/test_test.go +++ /dev/null @@ -1,695 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2022 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package test - -import ( - "encoding/json" - "fmt" - "os" - "testing" - - "github.com/onflow/cadence/runtime/common" - "github.com/onflow/cadence/runtime/stdlib" - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/internal/util" -) - -func TestExecutingTests(t *testing.T) { - t.Parallel() - - aliases := config.Aliases{{ - Network: "testing", - Address: flow.HexToAddress("0x0000000000000007"), - }} - - t.Run("simple", func(t *testing.T) { - t.Parallel() - - _, state, _ := util.TestMocks(t) - - script := tests.TestScriptSimple - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - result, err := testCode(testFiles, state, flagsTests{}) - - require.NoError(t, err) - require.Len(t, result.Results, 1) - assert.NoError(t, result.Results[script.Filename][0].Error) - }) - - t.Run("simple failing", func(t *testing.T) { - t.Parallel() - - _, state, _ := util.TestMocks(t) - - script := tests.TestScriptSimpleFailing - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - result, err := testCode(testFiles, state, flagsTests{}) - - require.NoError(t, err) - require.Len(t, result.Results, 1) - - err = result.Results[script.Filename][0].Error - require.Error(t, err) - assert.ErrorAs(t, err, &stdlib.AssertionError{}) - }) - - t.Run("with import", func(t *testing.T) { - t.Parallel() - - _, state, _ := util.TestMocks(t) - - c := config.Contract{ - Name: tests.ContractHelloString.Name, - Location: tests.ContractHelloString.Filename, - Aliases: aliases, - } - state.Contracts().AddOrUpdate(c) - - // Execute script - script := tests.TestScriptWithImport - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - result, err := testCode(testFiles, state, flagsTests{}) - - require.NoError(t, err) - require.Len(t, result.Results, 1) - assert.NoError(t, result.Results[script.Filename][0].Error) - }) - - t.Run("with relative imports", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - readerWriter := state.ReaderWriter() - _ = readerWriter.WriteFile( - "../contracts/contractHello.cdc", - tests.ContractHelloString.Source, - os.ModeTemporary, - ) - _ = readerWriter.WriteFile( - "../contracts/FooContract.cdc", - tests.ContractFooCoverage.Source, - os.ModeTemporary, - ) - - contractHello := config.Contract{ - Name: tests.ContractHelloString.Name, - Location: tests.ContractHelloString.Filename, - Aliases: aliases, - } - state.Contracts().AddOrUpdate(contractHello) - contractFoo := config.Contract{ - Name: tests.ContractFooCoverage.Name, - Location: tests.ContractFooCoverage.Filename, - Aliases: aliases, - } - state.Contracts().AddOrUpdate(contractFoo) - - // Execute script - script := tests.TestScriptWithRelativeImports - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - result, err := testCode(testFiles, state, flagsTests{}) - - require.NoError(t, err) - require.Len(t, result.Results, 1) - assert.NoError(t, result.Results[script.Filename][0].Error) - }) - - t.Run("with helper script import", func(t *testing.T) { - t.Parallel() - - _, state, _ := util.TestMocks(t) - - // Execute script - script := tests.TestScriptWithHelperImport - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - result, err := testCode(testFiles, state, flagsTests{}) - - require.NoError(t, err) - require.Len(t, result.Results, 1) - assert.NoError(t, result.Results[script.Filename][0].Error) - }) - - t.Run("with missing contract in config", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - // Execute script - script := tests.TestScriptWithMissingContract - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - _, err := testCode(testFiles, state, flagsTests{}) - - require.Error(t, err) - assert.ErrorContains( - t, - err, - "cannot find contract with location 'ApprovalVoting' in configuration", - ) - }) - - t.Run("with missing testing alias in config", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - c := config.Contract{ - Name: tests.ContractHelloString.Name, - Location: tests.ContractHelloString.Filename, - Aliases: config.Aliases{{ - Network: "emulator", - Address: flow.HexToAddress("0x0000000000000007"), - }}, - } - state.Contracts().AddOrUpdate(c) - - // Execute script - script := tests.TestScriptWithImport - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - _, err := testCode(testFiles, state, flagsTests{}) - - require.Error(t, err) - assert.ErrorContains( - t, - err, - "could not find the address of contract: Hello", - ) - }) - - t.Run("without testing alias for common contracts", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - c := config.Contract{ - Name: tests.ContractHelloString.Name, - Location: tests.ContractHelloString.Filename, - Aliases: aliases, - } - state.Contracts().AddOrUpdate(c) - // fungibleToken has no `testing` alias, but it is not - // actually deployed/used, so there is no errror. - fungibleToken := config.Contract{ - Name: "FungibleToken", - Location: "cadence/contracts/FungibleToken.cdc", - } - state.Contracts().AddOrUpdate(fungibleToken) - - // Execute script - script := tests.TestScriptWithImport - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - _, err := testCode(testFiles, state, flagsTests{}) - - assert.NoError(t, err) - }) - - t.Run("with file read", func(t *testing.T) { - t.Parallel() - - _, state, rw := util.TestMocks(t) - - _ = rw.WriteFile( - tests.SomeFile.Filename, - tests.SomeFile.Source, - os.ModeTemporary, - ) - - // Execute script - script := tests.TestScriptWithFileRead - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - result, err := testCode(testFiles, state, flagsTests{}) - - require.NoError(t, err) - require.Len(t, result.Results, 1) - assert.NoError(t, result.Results[script.Filename][0].Error) - }) - - t.Run("with code coverage", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - state.Contracts().AddOrUpdate(config.Contract{ - Name: tests.ContractFooCoverage.Name, - Location: tests.ContractFooCoverage.Filename, - Aliases: aliases, - }) - - // Execute script - script := tests.TestScriptWithCoverage - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Cover: true, - } - result, err := testCode(testFiles, state, flags) - - require.NoError(t, err) - require.Len(t, result.Results[script.Filename], 2) - for _, result := range result.Results[script.Filename] { - assert.NoError(t, result.Error) - } - - coverageReport := result.CoverageReport - location := common.AddressLocation{ - Name: "FooContract", - Address: common.Address{0, 0, 0, 0, 0, 0, 0, 7}, - } - coverage := coverageReport.Coverage[location] - - assert.Equal(t, []int{}, coverage.MissedLines()) - assert.Equal(t, 15, coverage.Statements) - assert.Equal(t, "100.0%", coverage.Percentage()) - assert.EqualValues( - t, - map[int]int{ - 6: 1, 14: 1, 18: 10, 19: 1, 20: 9, 21: 1, 22: 8, 23: 1, - 24: 7, 25: 1, 26: 6, 27: 1, 30: 5, 31: 4, 34: 1, - }, - coverage.LineHits, - ) - - assert.True(t, coverageReport.TotalLocations() > 1) - assert.ElementsMatch( - t, - []string{ - "s.7465737400000000000000000000000000000000000000000000000000000000", - "I.Crypto", - "I.Test", - "A.0000000000000001.NodeVersionBeacon", - "A.0000000000000001.FlowServiceAccount", - "A.0000000000000002.FungibleToken", - "A.0000000000000001.FlowClusterQC", - "A.0000000000000001.FlowDKG", - "A.0000000000000002.FungibleTokenMetadataViews", - "A.0000000000000001.NFTStorefrontV2", - "A.0000000000000001.FlowIDTableStaking", - "A.0000000000000001.LockedTokens", - "A.0000000000000001.ExampleNFT", - "A.0000000000000001.NFTStorefront", - "A.0000000000000001.FlowStakingCollection", - "A.0000000000000001.StakingProxy", - "A.0000000000000003.FlowToken", - "A.0000000000000001.FlowEpoch", - "A.0000000000000001.FlowStorageFees", - "A.0000000000000004.FlowFees", - "A.0000000000000001.MetadataViews", - "A.0000000000000001.NonFungibleToken", - "A.0000000000000001.ViewResolver", - "A.0000000000000001.RandomBeaconHistory", - "I.BlockchainHelpers", - }, - coverageReport.ExcludedLocationIDs(), - ) - assert.Equal( - t, - "Coverage: 91.8% of statements", - coverageReport.String(), - ) - assert.Contains( - t, - result.String(), - "Coverage: 91.8% of statements", - ) - - lcovReport, _ := coverageReport.MarshalLCOV() - assert.Contains(t, string(lcovReport), "TN:\nSF:FooContract.cdc\n") - - jsonReport, _ := coverageReport.MarshalJSON() - assert.Contains(t, string(jsonReport), `{"coverage":{"FooContract.cdc":{`) - }) - - t.Run("with code coverage for contracts only", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - state.Contracts().AddOrUpdate(config.Contract{ - Name: tests.ContractFooCoverage.Name, - Location: tests.ContractFooCoverage.Filename, - Aliases: aliases, - }) - - // Execute script - script := tests.TestScriptWithCoverage - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Cover: true, - CoverCode: contractsCoverCode, - } - result, err := testCode(testFiles, state, flags) - - require.NoError(t, err) - require.Len(t, result.Results[script.Filename], 2) - for _, result := range result.Results[script.Filename] { - assert.NoError(t, result.Error) - } - - coverageReport := result.CoverageReport - location := common.AddressLocation{ - Name: "FooContract", - Address: common.Address{0, 0, 0, 0, 0, 0, 0, 7}, - } - coverage := coverageReport.Coverage[location] - - assert.Equal(t, []int{}, coverage.MissedLines()) - assert.Equal(t, 15, coverage.Statements) - assert.Equal(t, "100.0%", coverage.Percentage()) - assert.EqualValues( - t, - map[int]int{ - 6: 1, 14: 1, 18: 10, 19: 1, 20: 9, 21: 1, 22: 8, 23: 1, - 24: 7, 25: 1, 26: 6, 27: 1, 30: 5, 31: 4, 34: 1, - }, - coverage.LineHits, - ) - - assert.Equal(t, 1, coverageReport.TotalLocations()) - assert.ElementsMatch( - t, - []string{ - "s.7465737400000000000000000000000000000000000000000000000000000000", - "I.Crypto", - "I.Test", - "A.0000000000000001.NodeVersionBeacon", - "A.0000000000000001.FlowServiceAccount", - "A.0000000000000002.FungibleToken", - "A.0000000000000001.FlowClusterQC", - "A.0000000000000001.FlowDKG", - "A.0000000000000002.FungibleTokenMetadataViews", - "A.0000000000000001.NFTStorefrontV2", - "A.0000000000000001.FlowIDTableStaking", - "A.0000000000000001.LockedTokens", - "A.0000000000000001.ExampleNFT", - "A.0000000000000001.NFTStorefront", - "A.0000000000000001.FlowStakingCollection", - "A.0000000000000001.StakingProxy", - "A.0000000000000003.FlowToken", - "A.0000000000000001.FlowEpoch", - "A.0000000000000001.FlowStorageFees", - "A.0000000000000004.FlowFees", - "A.0000000000000001.MetadataViews", - "A.0000000000000001.NonFungibleToken", - "A.0000000000000001.ViewResolver", - "A.0000000000000001.RandomBeaconHistory", - "I.BlockchainHelpers", - }, - coverageReport.ExcludedLocationIDs(), - ) - assert.Equal( - t, - "Coverage: 100.0% of statements", - coverageReport.String(), - ) - assert.Contains( - t, - result.String(), - "Coverage: 100.0% of statements", - ) - - lcovReport, _ := coverageReport.MarshalLCOV() - assert.Contains(t, string(lcovReport), "TN:\nSF:FooContract.cdc\n") - - jsonReport, _ := coverageReport.MarshalJSON() - assert.Contains(t, string(jsonReport), `{"coverage":{"FooContract.cdc":{`) - }) - - t.Run("with random test case execution", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - state.Contracts().AddOrUpdate(config.Contract{ - Name: tests.ContractFooCoverage.Name, - Location: tests.ContractFooCoverage.Filename, - Aliases: aliases, - }) - - // Execute script - script := tests.TestScriptWithCoverage - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Random: true, - } - result, err := testCode(testFiles, state, flags) - - require.NoError(t, err) - require.Len(t, result.Results[script.Filename], 2) - for _, result := range result.Results[script.Filename] { - assert.NoError(t, result.Error) - } - - assert.Contains( - t, - result.String(), - fmt.Sprintf("Seed: %d", result.RandomSeed), - ) - }) - - t.Run("with input seed for test case execution", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - state.Contracts().AddOrUpdate(config.Contract{ - Name: tests.ContractFooCoverage.Name, - Location: tests.ContractFooCoverage.Filename, - Aliases: aliases, - }) - - // Execute script - script := tests.TestScriptWithCoverage - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Seed: 1521, - } - result, err := testCode(testFiles, state, flags) - - require.NoError(t, err) - require.Len(t, result.Results[script.Filename], 2) - for _, result := range result.Results[script.Filename] { - assert.NoError(t, result.Error) - } - - assert.Contains( - t, - result.String(), - fmt.Sprintf("Seed: %d", flags.Seed), - ) - - // Note that `testGetIntegerTrait` is the first test case, - // but it gets executed after `testAddSpecialNumber`, due - // to random test execution. - expected := `Test results: "testScriptWithCoverage.cdc" -- PASS: testAddSpecialNumber -- PASS: testGetIntegerTrait -Seed: 1521 -` - assert.Equal( - t, - expected, - result.Oneliner(), - ) - }) - - t.Run("with JSON output", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - state.Contracts().AddOrUpdate(config.Contract{ - Name: tests.ContractFooCoverage.Name, - Location: tests.ContractFooCoverage.Filename, - Aliases: aliases, - }) - - // Execute script - script := tests.TestScriptWithCoverage - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Seed: 1521, - Cover: true, - CoverCode: contractsCoverCode, - } - result, err := testCode(testFiles, state, flags) - - require.NoError(t, err) - require.Len(t, result.Results[script.Filename], 2) - for _, result := range result.Results[script.Filename] { - assert.NoError(t, result.Error) - } - - output, err := json.Marshal(result.JSON()) - require.NoError(t, err) - - expected := ` - { - "meta": { - "coverage": "100.0%", - "seed": "1521" - }, - "testScriptWithCoverage.cdc": { - "testGetIntegerTrait": "PASS", - "testAddSpecialNumber": "PASS" - } - } - ` - - assert.JSONEq( - t, - expected, - string(output), - ) - }) - - t.Run("run specific test case by name", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - // Execute script - script := tests.TestScriptSimple - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Name: "testSimple", - } - - result, err := testCode(testFiles, state, flags) - - assert.NoError(t, err) - assert.Len(t, result.Results, 1) - assert.NoError(t, result.Results[script.Filename][0].Error) - - expected := "Test results: \"./testScriptSimple.cdc\"\n- PASS: testSimple\n" - assert.Equal( - t, - expected, - result.Oneliner(), - ) - }) - - t.Run("run specific test case by name multiple files", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - scriptPassing := tests.TestScriptSimple - scriptFailing := tests.TestScriptSimpleFailing - - // Execute script - testFiles := map[string][]byte{ - scriptPassing.Filename: scriptPassing.Source, - scriptFailing.Filename: scriptFailing.Source, - } - flags := flagsTests{ - Name: "testSimple", - } - - result, err := testCode(testFiles, state, flags) - - assert.NoError(t, err) - assert.Len(t, result.Results, 2) - assert.NoError(t, result.Results[scriptPassing.Filename][0].Error) - assert.Error(t, result.Results[scriptFailing.Filename][0].Error) - assert.ErrorAs(t, result.Results[scriptFailing.Filename][0].Error, &stdlib.AssertionError{}) - - assert.Contains( - t, - result.Oneliner(), - "Test results: \"./testScriptSimple.cdc\"\n- PASS: testSimple", - ) - assert.Contains( - t, - result.Oneliner(), - "Test results: \"./testScriptSimpleFailing.cdc\"\n- FAIL: "+ - "testSimple\n\t\tExecution failed:\n\t\t\terror: assertion failed\n"+ - "\t\t\t --> 7465737400000000000000000000000000000000000000000000000000000000:5:12", - ) - }) - - t.Run("run specific test case by name will do nothing if not found", func(t *testing.T) { - t.Parallel() - - // Setup - _, state, _ := util.TestMocks(t) - - // Execute script - script := tests.TestScriptSimple - testFiles := map[string][]byte{ - script.Filename: script.Source, - } - flags := flagsTests{ - Name: "doesNotExist", - } - - result, err := testCode(testFiles, state, flags) - - assert.NoError(t, err) - assert.Len(t, result.Results, 0) - assert.Equal( - t, - "No tests found", - result.Oneliner(), - ) - }) -} diff --git a/internal/tools/flowser.go b/internal/tools/flowser.go deleted file mode 100644 index 5257bb8d6..000000000 --- a/internal/tools/flowser.go +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package tools - -import ( - "fmt" - "os" - "runtime" - - "github.com/onflowser/flowser/v3/pkg/flowser" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/settings" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsFlowser struct{} - -var flowserFlags = flagsWallet{} - -var Flowser = &command.Command{ - Cmd: &cobra.Command{ - Use: "flowser", - Short: "Run Flowser project explorer", - Example: "flow flowser", - Args: cobra.ExactArgs(0), - GroupID: "tools", - }, - Flags: &flowserFlags, - Run: runFlowser, -} - -func runFlowser( - _ []string, - _ command.GlobalFlags, - _ output.Logger, - reader flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - flowser := flowser.New() - - installPath, err := settings.GetFlowserPath() - if err != nil { - return nil, fmt.Errorf("failure reading setting: %w", err) - } - - if !flowser.Installed(installPath) { - installPath, err = installFlowser(flowser, installPath) - if err != nil { - return nil, err - } - } - - projectPath, err := os.Getwd() - if err != nil { - return nil, err - } - - // check if current directory is existing flow project if not then don't pass project path to Flowser, so user can choose a project - _, err = reader.ReadFile(config.DefaultPath) - if os.IsNotExist(err) { - projectPath = "" - } - - fmt.Printf("%s Starting up Flowser, please wait...\n", output.SuccessEmoji()) - err = flowser.Run(installPath, projectPath) - if err != nil { - return nil, err - } - - return nil, nil -} - -func installFlowser(flowser *flowser.App, installPath string) (string, error) { - fmt.Println("It looks like Flowser is not yet installed on your system.") - installChoice := util.InstallPrompt() - if installChoice == util.CancelInstall { - return "", fmt.Errorf("user denied install") - } - - // if user says it already installed it we only ask for path and return it - if installChoice == util.AlreadyInstalled { - installPath = util.InstallPathPrompt(installPath) - _ = settings.SetFlowserPath(installPath) - return installPath, nil - } - - // MacOS apps must always be installed inside Application folder - if runtime.GOOS != settings.Darwin { - installPath = util.InstallPathPrompt(installPath) - _ = settings.SetFlowserPath(installPath) - } - - logger := output.NewStdoutLogger(output.InfoLog) - logger.StartProgress(fmt.Sprintf("%s Installing Flowser, this may take few minutes, please wait ", output.TryEmoji())) - defer logger.StopProgress() - - // create all folders if they don't exist, does nothing if they exist - err := os.MkdirAll(installPath, os.ModePerm) - if err != nil { - return "", err - } - - err = flowser.Install(installPath) - if err != nil { - return "", fmt.Errorf("could not install Flowser: %w", err) - } - - return installPath, nil -} diff --git a/internal/tools/wallet.go b/internal/tools/wallet.go deleted file mode 100644 index 97a0762c7..000000000 --- a/internal/tools/wallet.go +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package tools - -import ( - "fmt" - "strings" - - devWallet "github.com/onflow/fcl-dev-wallet/go/wallet" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsWallet struct { - Port uint `default:"8701" flag:"port" info:"Dev wallet port to listen on"` - Host string `default:"http://localhost:8888" flag:"emulator-host" info:"Host for access node connection"` -} - -var walletFlags = flagsWallet{} - -var DevWallet = &command.Command{ - Cmd: &cobra.Command{ - Use: "dev-wallet", - Short: "Run a development wallet", - Example: "flow dev-wallet", - Args: cobra.ExactArgs(0), - GroupID: "tools", - }, - Flags: &walletFlags, - RunS: wallet, -} - -func wallet( - _ []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - service, err := state.EmulatorServiceAccount() - if err != nil { - return nil, err - } - - privateKey, err := service.Key.PrivateKey() - if err != nil { - return nil, err - } - - conf := devWallet.FlowConfig{ - Address: fmt.Sprintf("0x%s", service.Address.String()), - PrivateKey: strings.TrimPrefix((*privateKey).String(), "0x"), - PublicKey: strings.TrimPrefix((*privateKey).PublicKey().String(), "0x"), - AccessNode: walletFlags.Host, - } - - srv, err := devWallet.NewHTTPServer(walletFlags.Port, &conf) - if err != nil { - return nil, err - } - - fmt.Printf("%s Starting dev wallet server on port %d\n", output.SuccessEmoji(), walletFlags.Port) - fmt.Printf("%s Make sure the emulator is running\n", output.WarningEmoji()) - - srv.Start() - return nil, nil -} diff --git a/internal/transactions/build.go b/internal/transactions/build.go deleted file mode 100644 index 8ca2cf5a0..000000000 --- a/internal/transactions/build.go +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "context" - "fmt" - - "github.com/onflow/cadence" - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/arguments" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/transactions" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsBuild struct { - ArgsJSON string `default:"" flag:"args-json" info:"arguments in JSON-Cadence format"` - Proposer string `default:"emulator-account" flag:"proposer" info:"transaction proposer"` - ProposerKeyIndex int `default:"0" flag:"proposer-key-index" info:"proposer key index"` - Payer string `default:"emulator-account" flag:"payer" info:"transaction payer"` - Authorizer []string `default:"emulator-account" flag:"authorizer" info:"transaction authorizer"` - GasLimit uint64 `default:"1000" flag:"gas-limit" info:"transaction gas limit"` -} - -var buildFlags = flagsBuild{} - -var buildCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "build [ ...]", - Short: "Build an unsigned transaction", - Example: `flow transactions build ./transaction.cdc "Hello" --proposer alice --authorizer alice --payer bob`, - Args: cobra.MinimumNArgs(1), - }, - Flags: &buildFlags, - RunS: build, -} - -func build( - args []string, - globalFlags command.GlobalFlags, - _ output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - proposer, err := getAddress(buildFlags.Proposer, state) - if err != nil { - return nil, err - } - - // get all authorizers - var authorizers []flowsdk.Address - for _, auth := range buildFlags.Authorizer { - addr, err := getAddress(auth, state) - if err != nil { - return nil, err - } - authorizers = append(authorizers, addr) - } - - payer, err := getAddress(buildFlags.Payer, state) - if err != nil { - return nil, err - } - - filename := args[0] - code, err := state.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error loading transaction file: %w", err) - } - - var transactionArgs []cadence.Value - if buildFlags.ArgsJSON != "" { - transactionArgs, err = arguments.ParseJSON(buildFlags.ArgsJSON) - } else { - transactionArgs, err = arguments.ParseWithoutType(args[1:], code, filename) - } - if err != nil { - return nil, fmt.Errorf("error parsing transaction arguments: %w", err) - } - - tx, err := flow.BuildTransaction( - context.Background(), - transactions.AddressesRoles{ - Proposer: proposer, - Authorizers: authorizers, - Payer: payer, - }, - buildFlags.ProposerKeyIndex, - flowkit.Script{ - Code: code, - Args: transactionArgs, - Location: filename, - }, - buildFlags.GasLimit, - ) - if err != nil { - return nil, err - } - - if !globalFlags.Yes && !util.ApproveTransactionForBuildingPrompt(tx.FlowTransaction()) { - return nil, fmt.Errorf("transaction was not approved") - } - - return &transactionResult{ - tx: tx.FlowTransaction(), - include: []string{"code", "payload", "signatures"}, - }, nil -} - -func getAddress(address string, state *flowkit.State) (flowsdk.Address, error) { - addr, valid := parseAddress(address) - if valid { - return addr, nil - } - - // if address is not valid then try using the string as an account name. - acc, err := state.Accounts().ByName(address) - if err != nil { - return flowsdk.EmptyAddress, err - } - return acc.Address, nil -} - -func parseAddress(value string) (flowsdk.Address, bool) { - address := flowsdk.HexToAddress(value) - - // valid on any chain - return address, address.IsValid(flowsdk.Mainnet) || - address.IsValid(flowsdk.Testnet) || - address.IsValid(flowsdk.Emulator) -} diff --git a/internal/transactions/decode.go b/internal/transactions/decode.go deleted file mode 100644 index fa809bf16..000000000 --- a/internal/transactions/decode.go +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "fmt" - - "github.com/onflow/flow-cli/flowkit/transactions" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsDecode struct { - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: signatures, code, payload."` -} - -var decodeFlags = flagsDecode{} - -var decodeCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "decode ", - Short: "Decode a transaction", - Example: "flow transactions decode ./transaction.rlp", - Args: cobra.ExactArgs(1), - }, - Flags: &decodeFlags, - Run: decode, -} - -func decode( - args []string, - _ command.GlobalFlags, - _ output.Logger, - reader flowkit.ReaderWriter, - _ flowkit.Services, -) (command.Result, error) { - filename := args[0] - payload, err := reader.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("failed to read transaction from %s: %v", filename, err) - } - - tx, err := transactions.NewFromPayload(payload) - if err != nil { - return nil, err - } - - return &transactionResult{ - tx: tx.FlowTransaction(), - include: decodeFlags.Include, - }, nil -} diff --git a/internal/transactions/get.go b/internal/transactions/get.go deleted file mode 100644 index d2379fc00..000000000 --- a/internal/transactions/get.go +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "context" - "strings" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" -) - -type flagsGet struct { - Sealed bool `default:"true" flag:"sealed" info:"Wait for a sealed result"` - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: signatures, code, payload, fee-events."` - Exclude []string `default:"" flag:"exclude" info:"Fields to exclude from the output. Valid values: events."` -} - -var getFlags = flagsGet{} - -var getCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "get ", - Aliases: []string{"status"}, - Short: "Get the transaction by ID", - Example: "flow transactions get 07a8...b433", - Args: cobra.ExactArgs(1), - }, - Flags: &getFlags, - Run: get, -} - -func get( - args []string, - _ command.GlobalFlags, - _ output.Logger, - _ flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - id := flowsdk.HexToID(strings.TrimPrefix(args[0], "0x")) - - tx, result, err := flow.GetTransactionByID(context.Background(), id, getFlags.Sealed) - if err != nil { - return nil, err - } - - return &transactionResult{ - result: result, - tx: tx, - include: getFlags.Include, - exclude: getFlags.Exclude, - }, nil -} diff --git a/internal/transactions/send-signed.go b/internal/transactions/send-signed.go deleted file mode 100644 index d39d84612..000000000 --- a/internal/transactions/send-signed.go +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "context" - "fmt" - - "github.com/onflow/flow-cli/flowkit/transactions" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsSendSigned struct { - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: signatures, code, payload."` - Exclude []string `default:"" flag:"exclude" info:"Fields to exclude from the output (events)"` -} - -var sendSignedFlags = flagsSendSigned{} - -var sendSignedCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "send-signed ", - Short: "Send signed transaction", - Args: cobra.ExactArgs(1), - Example: `flow transactions send-signed signed.rlp`, - }, - Flags: &sendSignedFlags, - Run: sendSigned, -} - -func sendSigned( - args []string, - globalFlags command.GlobalFlags, - logger output.Logger, - reader flowkit.ReaderWriter, - flow flowkit.Services, -) (command.Result, error) { - filename := args[0] - - code, err := reader.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error loading transaction payload: %w", err) - } - - tx, err := transactions.NewFromPayload(code) - if err != nil { - return nil, err - } - - if !globalFlags.Yes && !util.ApproveTransactionForSendingPrompt(tx.FlowTransaction()) { - return nil, fmt.Errorf("transaction was not approved for sending") - } - - logger.StartProgress(fmt.Sprintf("Sending transaction with ID: %s", tx.FlowTransaction().ID())) - defer logger.StopProgress() - - sentTx, result, err := flow.SendSignedTransaction(context.Background(), tx) - if err != nil { - return nil, err - } - - return &transactionResult{ - result: result, - tx: sentTx, - include: sendSignedFlags.Include, - exclude: sendSignedFlags.Exclude, - }, nil -} diff --git a/internal/transactions/send.go b/internal/transactions/send.go deleted file mode 100644 index ac18309c7..000000000 --- a/internal/transactions/send.go +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "context" - "fmt" - - "github.com/onflow/cadence" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/accounts" - "github.com/onflow/flow-cli/flowkit/arguments" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/transactions" - "github.com/onflow/flow-cli/internal/command" -) - -type Flags struct { - ArgsJSON string `default:"" flag:"args-json" info:"arguments in JSON-Cadence format"` - Signer string `default:"" flag:"signer" info:"Account name from configuration used to sign the transaction as proposer, payer and suthorizer"` - Proposer string `default:"" flag:"proposer" info:"Account name from configuration used as proposer"` - Payer string `default:"" flag:"payer" info:"Account name from configuration used as payer"` - Authorizers []string `default:"" flag:"authorizer" info:"Name of a single or multiple comma-separated accounts used as authorizers from configuration"` - Include []string `default:"" flag:"include" info:"Fields to include in the output"` - Exclude []string `default:"" flag:"exclude" info:"Fields to exclude from the output (events)"` - GasLimit uint64 `default:"1000" flag:"gas-limit" info:"transaction gas limit"` -} - -var flags = Flags{} - -var sendCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "send [ ...]", - Short: "Send a transaction", - Args: cobra.MinimumNArgs(1), - Example: `flow transactions send tx.cdc "Hello world"`, - }, - Flags: &flags, - RunS: send, -} - -func send( - args []string, - _ command.GlobalFlags, - _ output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (result command.Result, err error) { - filename := args[0] - - code, err := state.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("error loading transaction file: %w", err) - } - - return SendTransaction(code, args[1:], filename, flow, state, flags) -} - -func SendTransaction(code []byte, args []string, location string, flow flowkit.Services, state *flowkit.State, sendFlags Flags) (result command.Result, err error) { - proposerName := sendFlags.Proposer - var proposer *accounts.Account - if proposerName != "" { - proposer, err = state.Accounts().ByName(proposerName) - if err != nil { - return nil, fmt.Errorf("proposer account: [%s] doesn't exists in configuration", proposerName) - } - } - - payerName := sendFlags.Payer - var payer *accounts.Account - if payerName != "" { - payer, err = state.Accounts().ByName(payerName) - if err != nil { - return nil, fmt.Errorf("payer account: [%s] doesn't exists in configuration", payerName) - } - } - - var authorizers []accounts.Account - for _, authorizerName := range sendFlags.Authorizers { - authorizer, err := state.Accounts().ByName(authorizerName) - if err != nil { - return nil, fmt.Errorf("authorizer account: [%s] doesn't exists in configuration", authorizerName) - } - authorizers = append(authorizers, *authorizer) - } - - signerName := sendFlags.Signer - - if signerName == "" { - if proposer == nil && payer == nil && len(authorizers) == 0 { - signerName = state.Config().Emulators.Default().ServiceAccount - } else { - if proposer == nil || payer == nil { - return nil, fmt.Errorf("proposer/payer flags are required when signer flag is not used") - } - } - } - - if signerName != "" { - if proposer != nil || payer != nil || len(authorizers) > 0 { - return nil, fmt.Errorf("signer flag cannot be combined with payer/proposer/authorizer flags") - } - signer, err := state.Accounts().ByName(signerName) - if err != nil { - return nil, fmt.Errorf("signer account: [%s] doesn't exists in configuration", signerName) - } - proposer = signer - payer = signer - authorizers = append(authorizers, *signer) - } - - var transactionArgs []cadence.Value - if sendFlags.ArgsJSON != "" { - transactionArgs, err = arguments.ParseJSON(sendFlags.ArgsJSON) - } else { - transactionArgs, err = arguments.ParseWithoutType(args, code, location) - } - if err != nil { - return nil, fmt.Errorf("error parsing transaction arguments: %w", err) - } - - tx, txResult, err := flow.SendTransaction( - context.Background(), - transactions.AccountRoles{ - Proposer: *proposer, - Authorizers: authorizers, - Payer: *payer, - }, - flowkit.Script{Code: code, Args: transactionArgs, Location: location}, - sendFlags.GasLimit, - ) - - if err != nil { - return nil, err - } - - return &transactionResult{ - result: txResult, - tx: tx, - include: sendFlags.Include, - exclude: sendFlags.Exclude, - }, nil -} diff --git a/internal/transactions/sign.go b/internal/transactions/sign.go deleted file mode 100644 index bf3c25e99..000000000 --- a/internal/transactions/sign.go +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "bytes" - "context" - "encoding/hex" - "fmt" - "io" - "net/http" - "sort" - - "github.com/onflow/flow-cli/flowkit/transactions" - - "github.com/onflow/flow-cli/flowkit/accounts" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -type flagsSign struct { - Signer []string `default:"emulator-account" flag:"signer" info:"name of a single or multiple comma-separated accounts used to sign"` - Include []string `default:"" flag:"include" info:"Fields to include in the output. Valid values: signatures, code, payload."` - FromRemoteUrl string `default:"" flag:"from-remote-url" info:"server URL where RLP can be fetched, signed RLP will be posted back to remote URL."` -} - -var signFlags = flagsSign{} - -var signCommand = &command.Command{ - Cmd: &cobra.Command{ - Use: "sign [ | --from-remote-url ]", - Short: "Sign built transaction", - Example: "flow transactions sign ./built.rlp --signer alice", - Args: cobra.MaximumNArgs(1), - }, - Flags: &signFlags, - RunS: sign, -} - -func sign( - args []string, - globalFlags command.GlobalFlags, - _ output.Logger, - flow flowkit.Services, - state *flowkit.State, -) (command.Result, error) { - var payload []byte - var err error - var filenameOrUrl string - - if signFlags.FromRemoteUrl != "" && len(args) > 0 { - return nil, fmt.Errorf("only use one, filename argument or --from-remote-url ") - } - - if signFlags.FromRemoteUrl != "" { - if globalFlags.Yes { - return nil, fmt.Errorf("--yes is not supported with this flag") - } - filenameOrUrl = signFlags.FromRemoteUrl - payload, err = getRLPTransaction(filenameOrUrl) - } else { - if len(args) == 0 { - return nil, fmt.Errorf("filename argument is required") - } - filenameOrUrl = args[0] - payload, err = state.ReadFile(filenameOrUrl) - } - - if err != nil { - return nil, fmt.Errorf("failed to read partial transaction from %s: %v", filenameOrUrl, err) - } - - var signed *transactions.Transaction - var signers []*accounts.Account - tx, err := transactions.NewFromPayload(payload) - if err != nil { - return nil, err - } - - // validate all signers - for _, signerName := range signFlags.Signer { - signer, err := state.Accounts().ByName(signerName) - if err != nil { - return nil, fmt.Errorf("signer account: [%s] doesn't exists in configuration", signerName) - } - signers = append(signers, signer) - } - - //payer signs last - sort.SliceStable(signers, func(i, j int) bool { - return signers[i].Address.String() != tx.FlowTransaction().Payer.Hex() - }) - - for _, signer := range signers { - if !globalFlags.Yes && !util.ApproveTransactionForSigningPrompt(tx.FlowTransaction()) { - return nil, fmt.Errorf("transaction was not approved for signing") - } - - signed, err = flow.SignTransactionPayload(context.Background(), signer, payload) - if err != nil { - return nil, err - } - - payload = []byte(hex.EncodeToString(signed.FlowTransaction().Encode())) - } - - if signFlags.FromRemoteUrl != "" { - tx := signed.FlowTransaction() - err = postRLPTransaction(filenameOrUrl, tx) - - if err != nil { - return nil, err - } - fmt.Printf("%s Signed RLP Posted successfully\n", output.SuccessEmoji()) - } - - return &transactionResult{ - tx: signed.FlowTransaction(), - include: signFlags.Include, - }, nil -} - -// getRLPTransaction payload from a remote server. -func getRLPTransaction(rlpUrl string) ([]byte, error) { - client := http.Client{ - CheckRedirect: func(r *http.Request, via []*http.Request) error { - r.URL.Opaque = r.URL.Path - return nil - }, - } - resp, err := client.Get(rlpUrl) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("error downloading RLP identifier") - } - - return io.ReadAll(resp.Body) -} - -// postRLPTransaction signed payload to a remote server. -func postRLPTransaction(rlpUrl string, tx *flowsdk.Transaction) error { - signedRlp := hex.EncodeToString(tx.Encode()) - resp, err := http.Post(rlpUrl, "application/text", bytes.NewBufferString(signedRlp)) - - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("error posting signed RLP") - } - - return nil -} diff --git a/internal/transactions/transactions.go b/internal/transactions/transactions.go deleted file mode 100644 index ed9f0e3cc..000000000 --- a/internal/transactions/transactions.go +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" - - "github.com/onflow/flow-go-sdk" - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/events" - "github.com/onflow/flow-cli/internal/util" -) - -var Cmd = &cobra.Command{ - Use: "transactions", - Short: "Build, sign, send and retrieve transactions", - TraverseChildren: true, - GroupID: "interactions", -} - -func init() { - getCommand.AddToParent(Cmd) - sendCommand.AddToParent(Cmd) - signCommand.AddToParent(Cmd) - buildCommand.AddToParent(Cmd) - sendSignedCommand.AddToParent(Cmd) - decodeCommand.AddToParent(Cmd) -} - -type transactionResult struct { - result *flow.TransactionResult - tx *flow.Transaction - include []string - exclude []string -} - -func (r *transactionResult) JSON() any { - result := make(map[string]any) - result["id"] = r.tx.ID().String() - result["payload"] = fmt.Sprintf("%x", r.tx.Encode()) - result["authorizers"] = fmt.Sprintf("%s", r.tx.Authorizers) - result["payer"] = r.tx.Payer.String() - - if r.result != nil { - result["block_id"] = r.result.BlockID.String() - result["block_height"] = r.result.BlockHeight - result["status"] = r.result.Status.String() - - txEvents := make([]any, 0, len(r.result.Events)) - for _, event := range r.result.Events { - txEvents = append(txEvents, map[string]any{ - "index": event.EventIndex, - "type": event.Type, - "values": json.RawMessage( - event.Payload, - ), - }) - } - result["events"] = txEvents - - if r.result.Error != nil { - result["error"] = r.result.Error.Error() - } - } - - return result -} - -func (r *transactionResult) String() string { - var b bytes.Buffer - writer := util.CreateTabWriter(&b) - const feeEventsCountAppended = 3 - const feeDeductedEvent = "FeesDeducted" - - if r.result != nil { - _, _ = fmt.Fprintf(writer, "Block ID\t%s\n", r.result.BlockID) - _, _ = fmt.Fprintf(writer, "Block Height\t%d\n", r.result.BlockHeight) - if r.result.Error != nil { - _, _ = fmt.Fprintf(writer, "%s Transaction Error \n%s\n\n\n", output.ErrorEmoji(), r.result.Error.Error()) - } - - statusBadge := "" - if r.result.Status == flow.TransactionStatusSealed { - statusBadge = output.OkEmoji() - } - _, _ = fmt.Fprintf(writer, "Status\t%s %s\n", statusBadge, r.result.Status) - } - - _, _ = fmt.Fprintf(writer, "ID\t%s\n", r.tx.ID()) - _, _ = fmt.Fprintf(writer, "Payer\t%s\n", r.tx.Payer.Hex()) - _, _ = fmt.Fprintf(writer, "Authorizers\t%s\n", r.tx.Authorizers) - - _, _ = fmt.Fprintf(writer, - "\nProposal Key:\t\n Address\t%s\n Index\t%v\n Sequence\t%v\n", - r.tx.ProposalKey.Address, r.tx.ProposalKey.KeyIndex, r.tx.ProposalKey.SequenceNumber, - ) - - if len(r.tx.PayloadSignatures) == 0 { - _, _ = fmt.Fprintf(writer, "\nNo Payload Signatures\n") - } - - if len(r.tx.EnvelopeSignatures) == 0 { - _, _ = fmt.Fprintf(writer, "\nNo Envelope Signatures\n") - } - - for i, e := range r.tx.PayloadSignatures { - if command.ContainsFlag(r.include, "signatures") { - _, _ = fmt.Fprintf(writer, "\nPayload Signature %v:\n", i) - _, _ = fmt.Fprintf(writer, " Address\t%s\n", e.Address) - _, _ = fmt.Fprintf(writer, " Signature\t%x\n", e.Signature) - _, _ = fmt.Fprintf(writer, " Key Index\t%d\n", e.KeyIndex) - } else { - _, _ = fmt.Fprintf(writer, "\nPayload Signature %v: %s", i, e.Address) - } - } - - for i, e := range r.tx.EnvelopeSignatures { - if command.ContainsFlag(r.include, "signatures") { - _, _ = fmt.Fprintf(writer, "\nEnvelope Signature %v:\n", i) - _, _ = fmt.Fprintf(writer, " Address\t%s\n", e.Address) - _, _ = fmt.Fprintf(writer, " Signature\t%x\n", e.Signature) - _, _ = fmt.Fprintf(writer, " Key Index\t%d\n", e.KeyIndex) - } else { - _, _ = fmt.Fprintf(writer, "\nEnvelope Signature %v: %s", i, e.Address) - } - } - - if !command.ContainsFlag(r.include, "signatures") { - _, _ = fmt.Fprintf(writer, "\nSignatures (minimized, use --include signatures)") - } - - if r.result != nil && !command.ContainsFlag(r.exclude, "events") { - e := events.EventResult{ - Events: r.result.Events, - } - - if r.result != nil && e.Events != nil && !command.ContainsFlag(r.include, "fee-events") { - for _, event := range e.Events { - if strings.Contains(event.Type, feeDeductedEvent) { - // if fee event are present remove them - e.Events = e.Events[:len(e.Events)-feeEventsCountAppended] - break - } - } - } - - eventsOutput := e.String() - if eventsOutput == "" { - eventsOutput = "None" - } - - _, _ = fmt.Fprintf(writer, "\n\nEvents:\t %s\n", eventsOutput) - } - - if r.tx.Script != nil { - if command.ContainsFlag(r.include, "code") { - if len(r.tx.Arguments) == 0 { - _, _ = fmt.Fprintf(writer, "\n\nArguments\tNo arguments\n") - } else { - _, _ = fmt.Fprintf(writer, "\n\nArguments (%d):\n", len(r.tx.Arguments)) - for i, argument := range r.tx.Arguments { - _, _ = fmt.Fprintf(writer, " - Argument %d: %s\n", i, argument) - } - } - - _, _ = fmt.Fprintf(writer, "\nCode\n\n%s\n", r.tx.Script) - } else { - _, _ = fmt.Fprint(writer, "\n\nCode (hidden, use --include code)") - } - } - - if command.ContainsFlag(r.include, "payload") { - _, _ = fmt.Fprintf(writer, "\n\nPayload:\n%x", r.tx.Encode()) - } else { - _, _ = fmt.Fprint(writer, "\n\nPayload (hidden, use --include payload)") - } - - if !command.ContainsFlag(r.include, "fee-events") && !command.ContainsFlag(r.exclude, "events") { - _, _ = fmt.Fprint(writer, "\n\nFee Events (hidden, use --include fee-events)") - } - - _ = writer.Flush() - return b.String() -} - -func (r *transactionResult) Oneliner() string { - result := fmt.Sprintf( - "ID: %s, Payer: %s, Authorizer: %s", - r.tx.ID(), r.tx.Payer, r.tx.Authorizers) - - if r.result != nil { - result += fmt.Sprintf(", Status: %s, Events: %s", r.result.Status, r.result.Events) - } - - return result -} diff --git a/internal/transactions/transactions_test.go b/internal/transactions/transactions_test.go deleted file mode 100644 index e4dcd3c84..000000000 --- a/internal/transactions/transactions_test.go +++ /dev/null @@ -1,532 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package transactions - -import ( - "encoding/json" - "fmt" - "strings" - "testing" - - "github.com/onflow/cadence" - "github.com/onflow/flow-go-sdk" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/accounts" - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/tests" - "github.com/onflow/flow-cli/flowkit/transactions" - "github.com/onflow/flow-cli/internal/command" - "github.com/onflow/flow-cli/internal/util" -) - -func Test_Build(t *testing.T) { - const serviceAccountAddress = "f8d6e0586b0a20c7" - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{tests.TransactionSimple.Filename} - - srv.BuildTransaction.Run(func(args mock.Arguments) { - roles := args.Get(1).(transactions.AddressesRoles) - assert.Equal(t, serviceAccountAddress, roles.Payer.String()) - assert.Equal(t, serviceAccountAddress, roles.Proposer.String()) - assert.Equal(t, serviceAccountAddress, roles.Authorizers[0].String()) - assert.Equal(t, 0, args.Get(2).(int)) - script := args.Get(3).(flowkit.Script) - assert.Equal(t, tests.TransactionSimple.Filename, script.Location) - }).Return(transactions.New(), nil) - - result, err := build(inArgs, command.GlobalFlags{Yes: true}, util.NoLogger, srv.Mock, state) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail not approved", func(t *testing.T) { - inArgs := []string{tests.TransactionSimple.Filename} - srv.BuildTransaction.Return(transactions.New(), nil) - - result, err := build(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "transaction was not approved") - assert.Nil(t, result) - }) - - t.Run("Fail parsing JSON", func(t *testing.T) { - inArgs := []string{tests.TransactionArgString.Filename} - srv.BuildTransaction.Return(transactions.New(), nil) - buildFlags.ArgsJSON = `invalid` - - result, err := build(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "error parsing transaction arguments: invalid character 'i' looking for beginning of value") - assert.Nil(t, result) - buildFlags.ArgsJSON = "" - }) - - t.Run("Fail invalid file", func(t *testing.T) { - inArgs := []string{"invalid"} - srv.BuildTransaction.Return(transactions.New(), nil) - result, err := build(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "error loading transaction file: open invalid: file does not exist") - assert.Nil(t, result) - }) -} - -func Test_Decode(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"test"} - payload := []byte("f8aaf8a6b8617472616e73616374696f6e2829207b0a097072657061726528617574686f72697a65723a20417574684163636f756e7429207b7d0a0965786563757465207b0a09096c65742078203d20310a090970616e696328227465737422290a097d0a7d0ac0a003d40910037d575d52831647b39814f445bc8cc7ba8653286c0eb1473778c34f8203e888f8d6e0586b0a20c7808088f8d6e0586b0a20c7c988f8d6e0586b0a20c7c0c0") - _ = rw.WriteFile(inArgs[0], payload, 0677) - - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail decode", func(t *testing.T) { - inArgs := []string{"test"} - _ = rw.WriteFile(inArgs[0], []byte("invalid"), 0677) - - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "failed to decode partial transaction from invalid: encoding/hex: invalid byte: U+0069 'i'") - assert.Nil(t, result) - }) - - t.Run("Fail to read file", func(t *testing.T) { - inArgs := []string{"invalid"} - result, err := decode(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "failed to read transaction from invalid: open invalid: file does not exist") - assert.Nil(t, result) - }) -} - -func Test_Get(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"0x01"} - - srv.GetTransactionByID.Run(func(args mock.Arguments) { - id := args.Get(1).(flow.Identifier) - assert.Equal(t, "0100000000000000000000000000000000000000000000000000000000000000", id.String()) - }).Return(nil, nil, nil) - - result, err := get(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) -} - -func Test_Send(t *testing.T) { - srv, state, _ := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - const gas = uint64(1000) - flags.GasLimit = gas - inArgs := []string{tests.TransactionArgString.Filename, "test"} - - srv.SendTransaction.Run(func(args mock.Arguments) { - roles := args.Get(1).(transactions.AccountRoles) - acc := config.DefaultEmulator.ServiceAccount - assert.Equal(t, acc, roles.Payer.Name) - assert.Equal(t, acc, roles.Proposer.Name) - assert.Equal(t, acc, roles.Authorizers[0].Name) - script := args.Get(2).(flowkit.Script) - assert.Equal(t, tests.TransactionArgString.Filename, script.Location) - assert.Equal(t, args.Get(3).(uint64), gas) - }).Return(nil, nil, nil) - - result, err := send(inArgs, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail non-existing account", func(t *testing.T) { - flags.Proposer = "invalid" - _, err := send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "proposer account: [invalid] doesn't exists in configuration") - flags.Proposer = "" // reset - - flags.Payer = "invalid" - _, err = send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "payer account: [invalid] doesn't exists in configuration") - flags.Payer = "" // reset - - flags.Authorizers = []string{"invalid"} - _, err = send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "authorizer account: [invalid] doesn't exists in configuration") - flags.Authorizers = nil // reset - - flags.Signer = "invalid" - _, err = send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "signer account: [invalid] doesn't exists in configuration") - flags.Signer = "" // reset - }) - - t.Run("Fail signer and payer flag", func(t *testing.T) { - flags.Proposer = config.DefaultEmulator.ServiceAccount - flags.Signer = config.DefaultEmulator.ServiceAccount - _, err := send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "signer flag cannot be combined with payer/proposer/authorizer flags") - flags.Signer = "" // reset - }) - - t.Run("Fail signer not used and payer flag not set", func(t *testing.T) { - flags.Payer = "" - flags.Proposer = config.DefaultEmulator.ServiceAccount - _, err := send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "proposer/payer flags are required when signer flag is not used") - flags.Signer = "" // reset - }) - - t.Run("Fail signer not used and proposer flag not set", func(t *testing.T) { - flags.Proposer = "" - flags.Payer = config.DefaultEmulator.ServiceAccount - _, err := send([]string{""}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "proposer/payer flags are required when signer flag is not used") - flags.Signer = "" // reset - }) - - t.Run("Fail loading transaction file", func(t *testing.T) { - flags.Proposer = config.DefaultEmulator.ServiceAccount - flags.Payer = config.DefaultEmulator.ServiceAccount - _, err := send([]string{"invalid"}, command.GlobalFlags{}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "error loading transaction file: open invalid: file does not exist") - }) -} - -func Test_SendSigned(t *testing.T) { - srv, _, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"test"} - payload := []byte("f8aaf8a6b8617472616e73616374696f6e2829207b0a097072657061726528617574686f72697a65723a20417574684163636f756e7429207b7d0a0965786563757465207b0a09096c65742078203d20310a090970616e696328227465737422290a097d0a7d0ac0a003d40910037d575d52831647b39814f445bc8cc7ba8653286c0eb1473778c34f8203e888f8d6e0586b0a20c7808088f8d6e0586b0a20c7c988f8d6e0586b0a20c7c0c0") - _ = rw.WriteFile(inArgs[0], payload, 0677) - - srv.SendSignedTransaction.Run(func(args mock.Arguments) { - tx := args.Get(1).(*transactions.Transaction) - assert.Equal(t, "f8d6e0586b0a20c7", tx.FlowTransaction().Payer.String()) - assert.Equal(t, "f8d6e0586b0a20c7", tx.FlowTransaction().Authorizers[0].String()) - assert.Equal(t, "f8d6e0586b0a20c7", tx.FlowTransaction().ProposalKey.Address.String()) - }).Return(nil, nil, nil) - - result, err := sendSigned(inArgs, command.GlobalFlags{Yes: true}, util.NoLogger, rw, srv.Mock) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail loading transaction", func(t *testing.T) { - inArgs := []string{"invalid"} - _, err := sendSigned(inArgs, command.GlobalFlags{Yes: true}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "error loading transaction payload: open invalid: file does not exist") - }) - - t.Run("Fail not approved", func(t *testing.T) { - inArgs := []string{"test"} - payload := []byte("f8aaf8a6b8617472616e73616374696f6e2829207b0a097072657061726528617574686f72697a65723a20417574684163636f756e7429207b7d0a0965786563757465207b0a09096c65742078203d20310a090970616e696328227465737422290a097d0a7d0ac0a003d40910037d575d52831647b39814f445bc8cc7ba8653286c0eb1473778c34f8203e888f8d6e0586b0a20c7808088f8d6e0586b0a20c7c988f8d6e0586b0a20c7c0c0") - _ = rw.WriteFile(inArgs[0], payload, 0677) - _, err := sendSigned(inArgs, command.GlobalFlags{}, util.NoLogger, rw, srv.Mock) - assert.EqualError(t, err, "transaction was not approved for sending") - }) -} - -func Test_Sign(t *testing.T) { - srv, state, rw := util.TestMocks(t) - - t.Run("Success", func(t *testing.T) { - inArgs := []string{"t1.rlp"} - built := []byte("f884f880b83b7472616e73616374696f6e2829207b0a0909097072657061726528617574686f72697a65723a20417574684163636f756e7429207b7d0a09097d0ac0a003d40910037d575d52831647b39814f445bc8cc7ba8653286c0eb1473778c34f8203e888f8d6e0586b0a20c7808088f8d6e0586b0a20c7c988f8d6e0586b0a20c7c0c0") - _ = rw.WriteFile(inArgs[0], built, 0677) - - srv.SignTransactionPayload.Run(func(args mock.Arguments) { - assert.Equal(t, "emulator-account", args.Get(1).(*accounts.Account).Name) - assert.Equal(t, built, args.Get(2).([]byte)) - }).Return(transactions.New(), nil) - - result, err := sign(inArgs, command.GlobalFlags{Yes: true}, util.NoLogger, srv.Mock, state) - assert.NoError(t, err) - assert.NotNil(t, result) - }) - - t.Run("Fail filename arg required", func(t *testing.T) { - _, err := sign([]string{}, command.GlobalFlags{Yes: true}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "filename argument is required") - }) - - t.Run("Fail only use filename", func(t *testing.T) { - signFlags.FromRemoteUrl = "foo" - _, err := sign([]string{"test"}, command.GlobalFlags{Yes: true}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "only use one, filename argument or --from-remote-url ") - signFlags.FromRemoteUrl = "" - }) - - t.Run("Fail invalid signer", func(t *testing.T) { - inArgs := []string{"t1.rlp"} - built := []byte("f884f880b83b7472616e73616374696f6e2829207b0a0909097072657061726528617574686f72697a65723a20417574684163636f756e7429207b7d0a09097d0ac0a003d40910037d575d52831647b39814f445bc8cc7ba8653286c0eb1473778c34f8203e888f8d6e0586b0a20c7808088f8d6e0586b0a20c7c988f8d6e0586b0a20c7c0c0") - _ = rw.WriteFile(inArgs[0], built, 0677) - signFlags.Signer = []string{"invalid"} - _, err := sign(inArgs, command.GlobalFlags{Yes: true}, util.NoLogger, srv.Mock, state) - assert.EqualError(t, err, "signer account: [invalid] doesn't exists in configuration") - signFlags.Signer = []string{} - }) -} - -func Test_Result(t *testing.T) { - tx := &flow.Transaction{ - Script: []byte(`transaction {}`), - ReferenceBlockID: flow.HexToID("6cde7f812897d22ee7633b82b059070be24faccdc47997bc0f765420e6e28bb6"), - GasLimit: flow.DefaultTransactionGasLimit, - ProposalKey: flow.ProposalKey{ - Address: flow.HexToAddress("0x01"), - KeyIndex: 0, - SequenceNumber: 1, - }, - Payer: flow.HexToAddress("0x02"), - PayloadSignatures: []flow.TransactionSignature{{ - Address: flow.HexToAddress("0x01"), - SignerIndex: 0, - KeyIndex: 0, - Signature: []byte("6cde7f812897d22ee7633b82b059070be24faccdc47997bc0f765420e6e28bb6"), - }}, - EnvelopeSignatures: []flow.TransactionSignature{{ - Address: flow.HexToAddress("0x01"), - SignerIndex: 0, - KeyIndex: 0, - Signature: []byte("6cde7f812897d22ee7633b82b059070be24faccdc47997bc0f765420e6e28bb6"), - }}, - } - - event := tests.NewEvent( - 0, - "A.foo", - []cadence.Field{{Type: cadence.StringType{}, Identifier: "bar"}}, - []cadence.Value{cadence.NewInt(1)}, - ) - event.Payload = []byte("mock_payload") - - withdrawEvent := tests.NewEvent( - 1, - "A.1654653399040a61.FlowToken.TokensWithdrawn", - []cadence.Field{{Type: cadence.StringType{}, Identifier: "bar"}}, - []cadence.Value{cadence.NewInt(1)}, - ) - depositEvent := tests.NewEvent( - 2, - "A.1654653399040a61.FlowToken.TokensDeposited", - []cadence.Field{{Type: cadence.StringType{}, Identifier: "bar"}}, - []cadence.Value{cadence.NewInt(1)}, - ) - feeEvent := tests.NewEvent( - 3, - "A.f919ee77447b7497.FlowFees.FeesDeducted", - []cadence.Field{{Type: cadence.StringType{}, Identifier: "bar"}}, - []cadence.Value{cadence.NewInt(1)}, - ) - txResult := &flow.TransactionResult{ - Status: flow.TransactionStatusSealed, - Error: nil, - Events: []flow.Event{*event}, - BlockID: flow.HexToID("7aa74143741c1c3b837d389fcffa7a5e251b67b4ffef6d6887b40cd9c803f537"), - BlockHeight: 1, - } - - txResultFeeEvents := &flow.TransactionResult{ - Status: flow.TransactionStatusSealed, - Error: nil, - Events: []flow.Event{*event, *withdrawEvent, *depositEvent, *feeEvent}, - BlockID: flow.HexToID("7aa74143741c1c3b837d389fcffa7a5e251b67b4ffef6d6887b40cd9c803f537"), - BlockHeight: 1, - } - t.Run("Success with no result", func(t *testing.T) { - result := transactionResult{tx: tx} - - assert.Equal(t, strings.TrimPrefix(` -ID e913d1f3e431c7df49c99845bea9ebff9db11bbf25d507b9ad0fad45652d515f -Payer 0000000000000002 -Authorizers [] - -Proposal Key: - Address 0000000000000001 - Index 0 - Sequence 1 - -Payload Signature 0: 0000000000000001 -Envelope Signature 0: 0000000000000001 -Signatures (minimized, use --include signatures) - -Code (hidden, use --include code) - -Payload (hidden, use --include payload) - -Fee Events (hidden, use --include fee-events)`, "\n"), result.String()) - - assert.Equal(t, map[string]any{ - "authorizers": "[]", - "id": "e913d1f3e431c7df49c99845bea9ebff9db11bbf25d507b9ad0fad45652d515f", - "payer": "0000000000000002", - "payload": "f8dbf8498e7472616e73616374696f6e207b7dc0a06cde7f812897d22ee7633b82b059070be24faccdc47997bc0f765420e6e28bb682270f8800000000000000018001880000000000000002c0f846f8448080b84036636465376638313238393764323265653736333362383262303539303730626532346661636364633437393937626330663736353432306536653238626236f846f8448080b84036636465376638313238393764323265653736333362383262303539303730626532346661636364633437393937626330663736353432306536653238626236", - }, result.JSON()) - }) - - t.Run("Success with result", func(t *testing.T) { - result := transactionResult{tx: tx, result: txResult} - - expectedString := strings.TrimPrefix(fmt.Sprintf(` -Block ID 7aa74143741c1c3b837d389fcffa7a5e251b67b4ffef6d6887b40cd9c803f537 -Block Height 1 -Status %s SEALED -ID e913d1f3e431c7df49c99845bea9ebff9db11bbf25d507b9ad0fad45652d515f -Payer 0000000000000002 -Authorizers [] - -Proposal Key: - Address 0000000000000001 - Index 0 - Sequence 1 - -Payload Signature 0: 0000000000000001 -Envelope Signature 0: 0000000000000001 -Signatures (minimized, use --include signatures) - -Events: - Index 0 - Type A.foo - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - - - -Code (hidden, use --include code) - -Payload (hidden, use --include payload) - -Fee Events (hidden, use --include fee-events)`, output.OkEmoji()), "\n") - - assert.Equal(t, expectedString, result.String()) - - assert.Equal(t, map[string]any{ - "authorizers": "[]", - "block_height": uint64(1), - "block_id": "7aa74143741c1c3b837d389fcffa7a5e251b67b4ffef6d6887b40cd9c803f537", - "events": []any{ - map[string]any{ - "index": 0, - "type": "A.foo", - "values": json.RawMessage{0x6d, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64}, - }, - }, - "id": "e913d1f3e431c7df49c99845bea9ebff9db11bbf25d507b9ad0fad45652d515f", - "payer": "0000000000000002", - "payload": "f8dbf8498e7472616e73616374696f6e207b7dc0a06cde7f812897d22ee7633b82b059070be24faccdc47997bc0f765420e6e28bb682270f8800000000000000018001880000000000000002c0f846f8448080b84036636465376638313238393764323265653736333362383262303539303730626532346661636364633437393937626330663736353432306536653238626236f846f8448080b84036636465376638313238393764323265653736333362383262303539303730626532346661636364633437393937626330663736353432306536653238626236", - "status": "SEALED", - }, result.JSON()) - }) - - t.Run("Result without fee events", func(t *testing.T) { - result := transactionResult{tx: tx, result: txResultFeeEvents} - - assert.Equal(t, strings.TrimPrefix(` -Block ID 7aa74143741c1c3b837d389fcffa7a5e251b67b4ffef6d6887b40cd9c803f537 -Block Height 1 -Status ✅ SEALED -ID e913d1f3e431c7df49c99845bea9ebff9db11bbf25d507b9ad0fad45652d515f -Payer 0000000000000002 -Authorizers [] - -Proposal Key: - Address 0000000000000001 - Index 0 - Sequence 1 - -Payload Signature 0: 0000000000000001 -Envelope Signature 0: 0000000000000001 -Signatures (minimized, use --include signatures) - -Events: - Index 0 - Type A.foo - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - - - -Code (hidden, use --include code) - -Payload (hidden, use --include payload) - -Fee Events (hidden, use --include fee-events)`, "\n"), result.String()) - }) - t.Run("Result with fee events", func(t *testing.T) { - result := transactionResult{tx: tx, result: txResultFeeEvents, include: []string{"fee-events"}} - - assert.Equal(t, strings.TrimPrefix(` -Block ID 7aa74143741c1c3b837d389fcffa7a5e251b67b4ffef6d6887b40cd9c803f537 -Block Height 1 -Status ✅ SEALED -ID e913d1f3e431c7df49c99845bea9ebff9db11bbf25d507b9ad0fad45652d515f -Payer 0000000000000002 -Authorizers [] - -Proposal Key: - Address 0000000000000001 - Index 0 - Sequence 1 - -Payload Signature 0: 0000000000000001 -Envelope Signature 0: 0000000000000001 -Signatures (minimized, use --include signatures) - -Events: - Index 0 - Type A.foo - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - - Index 1 - Type A.1654653399040a61.FlowToken.TokensWithdrawn - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - - Index 2 - Type A.1654653399040a61.FlowToken.TokensDeposited - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - - Index 3 - Type A.f919ee77447b7497.FlowFees.FeesDeducted - Tx ID 0000000000000000000000000000000000000000000000000000000000000000 - Values - - bar (String): 1 - - - -Code (hidden, use --include code) - -Payload (hidden, use --include payload)`, "\n"), result.String()) - }) -} diff --git a/internal/util/prompt.go b/internal/util/prompt.go deleted file mode 100644 index 392aa8d34..000000000 --- a/internal/util/prompt.go +++ /dev/null @@ -1,768 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package util - -import ( - "fmt" - "os" - "path/filepath" - "strconv" - "strings" - - "github.com/gosuri/uilive" - "github.com/manifoldco/promptui" - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/sergi/go-diff/diffmatchpatch" - "golang.org/x/exp/maps" - "golang.org/x/exp/slices" - - "github.com/onflow/flow-cli/flowkit/config" - "github.com/onflow/flow-cli/flowkit/output" -) - -func ApproveTransactionForSigningPrompt(transaction *flow.Transaction) bool { - return ApproveTransactionPrompt(transaction, "⚠️ Do you want to SIGN this transaction?") -} - -func ApproveTransactionForBuildingPrompt(transaction *flow.Transaction) bool { - return ApproveTransactionPrompt(transaction, "⚠️ Do you want to BUILD this transaction?") -} - -func ApproveTransactionForSendingPrompt(transaction *flow.Transaction) bool { - return ApproveTransactionPrompt(transaction, "⚠️ Do you want to SEND this transaction?") -} - -func ApproveTransactionPrompt(tx *flow.Transaction, promptMsg string) bool { - writer := uilive.New() - - _, _ = fmt.Fprintf(writer, "\n") - _, _ = fmt.Fprintf(writer, "ID\t%s\n", tx.ID()) - _, _ = fmt.Fprintf(writer, "Payer\t%s\n", tx.Payer.Hex()) - _, _ = fmt.Fprintf(writer, "Authorizers\t%s\n", tx.Authorizers) - - _, _ = fmt.Fprintf(writer, - "\nProposal Key:\t\n Address\t%s\n Index\t%v\n Sequence\t%v\n", - tx.ProposalKey.Address, tx.ProposalKey.KeyIndex, tx.ProposalKey.SequenceNumber, - ) - - if len(tx.PayloadSignatures) == 0 { - _, _ = fmt.Fprintf(writer, "\nNo Payload Signatures\n") - } - - if len(tx.EnvelopeSignatures) == 0 { - _, _ = fmt.Fprintf(writer, "\nNo Envelope Signatures\n") - } - - for i, e := range tx.PayloadSignatures { - _, _ = fmt.Fprintf(writer, "\nPayload Signature %v:\n", i) - _, _ = fmt.Fprintf(writer, " Address\t%s\n", e.Address) - _, _ = fmt.Fprintf(writer, " Signature\t%x\n", e.Signature) - _, _ = fmt.Fprintf(writer, " Key Index\t%d\n", e.KeyIndex) - } - - for i, e := range tx.EnvelopeSignatures { - _, _ = fmt.Fprintf(writer, "\nEnvelope Signature %v:\n", i) - _, _ = fmt.Fprintf(writer, " Address\t%s\n", e.Address) - _, _ = fmt.Fprintf(writer, " Signature\t%x\n", e.Signature) - _, _ = fmt.Fprintf(writer, " Key Index\t%d\n", e.KeyIndex) - } - - if tx.Script != nil { - if len(tx.Arguments) == 0 { - _, _ = fmt.Fprintf(writer, "\n\nArguments\tNo arguments\n") - } else { - _, _ = fmt.Fprintf(writer, "\n\nArguments (%d):\n", len(tx.Arguments)) - for i, argument := range tx.Arguments { - _, _ = fmt.Fprintf(writer, " - Argument %d: %s\n", i, argument) - } - } - - _, _ = fmt.Fprintf(writer, "\nCode\n\n%s\n", tx.Script) - } - - _, _ = fmt.Fprintf(writer, "\n\n") - _ = writer.Flush() - - prompt := promptui.Select{ - Label: promptMsg, - Items: []string{"No", "Yes"}, - } - - _, result, _ := prompt.Run() - - _, _ = fmt.Fprintf(writer, "\r\r") - _ = writer.Flush() - - return result == "Yes" -} - -func AutocompletionPrompt() (string, string) { - prompt := promptui.Select{ - Label: "❓ Select your shell (you can run 'echo $SHELL' to find out)", - Items: []string{"bash", "zsh", "powershell"}, - } - - _, shell, _ := prompt.Run() - curOs := "" - - switch shell { - case "bash": - prompt := promptui.Select{ - Label: "❓ Select operation system", - Items: []string{"MacOS", "Linux"}, - } - _, curOs, _ = prompt.Run() - case "powershell": - fmt.Printf(`PowerShell Installation Guide: -PS> flow config setup-completions powershell | Out-String | Invoke-Expression - -# To load completions for every new session, run: -PS> flow config setup-completions powershell > flow.ps1 -# and source this file from your PowerShell profile. -`) - } - - return shell, curOs -} - -func NamePrompt() string { - namePrompt := promptui.Prompt{ - Label: "Enter name", - Validate: func(s string) error { - if len(s) < 1 { - return fmt.Errorf("invalid name") - } - return nil - }, - } - - name, err := namePrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return name -} - -func AccountNamePrompt(accountNames []string) string { - namePrompt := promptui.Prompt{ - Label: "Enter an account name", - Validate: func(s string) error { - if slices.Contains(accountNames, s) { - return fmt.Errorf("name already exists") - } - if len(s) < 1 { - return fmt.Errorf("invalid name") - } - return nil - }, - } - - name, err := namePrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return name -} - -func secureNetworkKeyPrompt() string { - networkKeyPrompt := promptui.Prompt{ - Label: "Enter a valid host network key or leave blank", - Validate: func(s string) error { - if s == "" { - return nil - } - - return ValidateECDSAP256Pub(s) - }, - } - networkKey, err := networkKeyPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return networkKey -} - -func addressPrompt() string { - addressPrompt := promptui.Prompt{ - Label: "Enter address", - Validate: func(s string) error { - if flow.HexToAddress(s) == flow.EmptyAddress { - return fmt.Errorf("invalid address") - } - return nil - }, - } - - address, err := addressPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return address -} - -func contractPrompt(contractNames []string) string { - contractPrompt := promptui.Select{ - Label: "Choose contract you wish to deploy", - Items: contractNames, - } - _, contractName, err := contractPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return contractName -} - -func addAnotherContractToDeploymentPrompt() bool { - addContractPrompt := promptui.Select{ - Label: "Do you wish to add another contract for deployment?", - Items: []string{"No", "Yes"}, - } - _, addMore, err := addContractPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return addMore == "Yes" -} - -// ShowContractDiffPrompt shows a diff between the new contract and the existing contract -// and asks the user if they wish to continue with the deployment -// returns true if the user wishes to continue with the deployment and false otherwise -func ShowContractDiffPrompt(logger output.Logger) func([]byte, []byte) bool { - return func(newContract []byte, existingContract []byte) bool { - dmp := diffmatchpatch.New() - diffs := dmp.DiffMain(string(newContract), string(existingContract), false) - diffString := dmp.DiffPrettyText(diffs) - logger.Info(diffString) - - deployPrompt := promptui.Prompt{ - Label: "Do you wish to deploy this contract?", - IsConfirm: true, - } - - deploy, err := deployPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return strings.ToLower(deploy) == "y" - } -} - -type AccountData struct { - Name string - Address string - SigAlgo string - HashAlgo string - Key string - KeyIndex string -} - -func NewAccountPrompt() *AccountData { - var err error - account := &AccountData{ - Name: NamePrompt(), - Address: addressPrompt(), - } - - sigAlgoPrompt := promptui.Select{ - Label: "Choose signature algorithm", - Items: []string{"ECDSA_P256", "ECDSA_secp256k1"}, - } - _, account.SigAlgo, err = sigAlgoPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - hashAlgoPrompt := promptui.Select{ - Label: "Choose hashing algorithm", - Items: []string{"SHA3_256", "SHA2_256"}, - } - _, account.HashAlgo, err = hashAlgoPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - keyPrompt := promptui.Prompt{ - Label: "Enter private key", - Validate: func(s string) error { - _, err := crypto.DecodePrivateKeyHex(crypto.StringToSignatureAlgorithm(account.SigAlgo), s) - return err - }, - } - account.Key, err = keyPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - keyIndexPrompt := promptui.Prompt{ - Label: "Enter key index (Default: 0)", - Default: "0", - Validate: func(s string) error { - v, err := strconv.Atoi(s) - if err != nil { - return fmt.Errorf("invalid index, must be a number") - } - if v < 0 { - return fmt.Errorf("invalid index, must be positive") - } - return nil - }, - } - - account.KeyIndex, err = keyIndexPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return account -} - -type ContractData struct { - Name string - Source string - Emulator string - Testnet string - Mainnet string -} - -func NewContractPrompt() *ContractData { - contract := &ContractData{ - Name: NamePrompt(), - } - var err error - - sourcePrompt := promptui.Prompt{ - Label: "Enter contract file location", - Validate: func(s string) error { - if !config.Exists(s) { - return fmt.Errorf("contract file doesn't exist: %s", s) - } - - return nil - }, - } - contract.Source, err = sourcePrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - emulatorAliasPrompt := promptui.Prompt{ - Label: "Enter emulator alias, if exists", - Validate: func(s string) error { - if s != "" && flow.HexToAddress(s) == flow.EmptyAddress { - return fmt.Errorf("invalid alias address") - } - - return nil - }, - } - contract.Emulator, _ = emulatorAliasPrompt.Run() - - testnetAliasPrompt := promptui.Prompt{ - Label: "Enter testnet alias, if exists", - Validate: func(s string) error { - if s != "" && flow.HexToAddress(s) == flow.EmptyAddress { - return fmt.Errorf("invalid testnet address") - } - - return nil - }, - } - contract.Testnet, _ = testnetAliasPrompt.Run() - - mainnetAliasPrompt := promptui.Prompt{ - Label: "Enter mainnet alias, if exists", - Validate: func(s string) error { - if s != "" && flow.HexToAddress(s) == flow.EmptyAddress { - return fmt.Errorf("invalid mainnet address") - } - - return nil - }, - } - contract.Mainnet, _ = mainnetAliasPrompt.Run() - - return contract -} - -func NewNetworkPrompt() map[string]string { - networkData := make(map[string]string) - var err error - - networkData["name"] = NamePrompt() - - hostPrompt := promptui.Prompt{ - Label: "Enter host location", - Validate: func(s string) error { - return nil - }, - } - networkData["host"], err = hostPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - networkData["key"] = secureNetworkKeyPrompt() - - return networkData -} - -type DeploymentData struct { - Network string - Account string - Contracts []string -} - -func NewDeploymentPrompt( - networks config.Networks, - accounts config.Accounts, - contracts config.Contracts, -) *DeploymentData { - deploymentData := &DeploymentData{} - var err error - - networkNames := make([]string, 0) - for _, network := range networks { - networkNames = append(networkNames, network.Name) - } - - networkPrompt := promptui.Select{ - Label: "Choose network for deployment", - Items: networkNames, - } - _, deploymentData.Network, err = networkPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - accountNames := make([]string, 0) - for _, account := range accounts { - accountNames = append(accountNames, account.Name) - } - - accountPrompt := promptui.Select{ - Label: "Choose an account to deploy to", - Items: accountNames, - } - _, deploymentData.Account, err = accountPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - contractNames := make([]string, 0) - for _, contract := range contracts { - contractNames = append(contractNames, contract.Name) - } - - deploymentData.Contracts = make([]string, 0) - - contractName := contractPrompt(contractNames) - deploymentData.Contracts = append(deploymentData.Contracts, contractName) - contractNames = removeFromStringArray(contractNames, contractName) - - for addAnotherContractToDeploymentPrompt() { - contractName := contractPrompt(contractNames) - deploymentData.Contracts = append(deploymentData.Contracts, contractName) - contractNames = removeFromStringArray(contractNames, contractName) - - if len(contractNames) == 0 { - break - } - } - - return deploymentData -} - -func RemoveAccountPrompt(accounts config.Accounts) string { - accountNames := make([]string, 0) - - for _, account := range accounts { - accountNames = append(accountNames, account.Name) - } - - namePrompt := promptui.Select{ - Label: "Choose an account name you wish to remove", - Items: accountNames, - } - - _, name, err := namePrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return name -} - -func RemoveDeploymentPrompt(deployments config.Deployments) (account string, network string) { - deploymentNames := make([]string, 0) - - for _, deployment := range deployments { - contractNames := make([]string, 0) - for _, c := range deployment.Contracts { - contractNames = append(contractNames, c.Name) - } - - deploymentNames = append( - deploymentNames, - fmt.Sprintf( - "Account: %s, Network: %s, Contracts: %s", - deployment.Account, - deployment.Network, - contractNames, - ), - ) - } - - deployPrompt := promptui.Select{ - Label: "Choose deployment you wish to remove", - Items: deploymentNames, - } - - index, _, err := deployPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return deployments[index].Account, deployments[index].Network -} - -func RemoveContractPrompt(contracts config.Contracts) string { - contractNames := make([]string, 0) - - for _, contract := range contracts { - contractNames = append(contractNames, contract.Name) - } - - contractPrompt := promptui.Select{ - Label: "Choose contract you wish to remove", - Items: contractNames, - } - - _, name, err := contractPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return name -} - -func RemoveContractFromFlowJSONPrompt(contractName string) bool { - prompt := promptui.Select{ - Label: fmt.Sprintf("Do you want to remove %s from your flow.json deployments?", contractName), - Items: []string{"Yes", "No"}, - } - chosen, _, _ := prompt.Run() - - return chosen == 0 -} - -func RemoveNetworkPrompt(networks config.Networks) string { - networkNames := make([]string, 0) - - for _, network := range networks { - networkNames = append(networkNames, network.Name) - } - - networkPrompt := promptui.Select{ - Label: "Choose network you wish to remove", - Items: networkNames, - } - - _, name, err := networkPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return name -} - -func ReportCrash() bool { - prompt := promptui.Select{ - Label: "🙏 Please report the crash so we can improve the CLI. Do you want to report it?", - Items: []string{"Yes, report the crash", "No"}, - } - chosen, _, _ := prompt.Run() - - return chosen == 0 -} - -func CreateAccountNetworkPrompt() (string, config.Network) { - networkMap := map[string]config.Network{ - "Emulator": config.EmulatorNetwork, - "Testnet": config.TestnetNetwork, - "Mainnet": config.MainnetNetwork, - } - - networkPrompt := promptui.Select{ - Label: "Choose a network", - Items: maps.Keys(networkMap), - } - - _, selectedNetwork, err := networkPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - fmt.Println("") - - return selectedNetwork, networkMap[selectedNetwork] -} - -func WantToUseMainnetVersionPrompt() bool { - useMainnetVersionPrompt := promptui.Select{ - Label: "Do you wish to use Mainnet version instead? (y/n)", - Items: []string{"Yes", "No"}, - } - _, useMainnetVersion, err := useMainnetVersionPrompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return useMainnetVersion == "Yes" -} - -const CancelInstall = 1 - -const AlreadyInstalled = 2 - -func InstallPrompt() int { - prompt := promptui.Select{ - Label: "Do you wish to install it", - Items: []string{"Yes", "No", "I've already installed it"}, - } - index, _, err := prompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return index -} - -func InstallPathPrompt(defaultPath string) string { - prompt := promptui.Prompt{ - Label: "Install path", - Default: defaultPath, - Validate: func(s string) error { - if _, err := os.Stat(s); err == nil { - return nil - } - - // Attempt to create it - var d []byte - if err := os.WriteFile(s, d, 0644); err == nil { - os.Remove(s) // And delete it - return nil - } - - return fmt.Errorf("path is invalid") - }, - } - - install, err := prompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - - return filepath.Clean(install) -} - -type ScaffoldItem struct { - Index int - Title string - Category string - assignedIndex int -} - -func ScaffoldPrompt(logger output.Logger, scaffoldItems []ScaffoldItem) int { - const ( - general = "" - mobile = "mobile" - web = "web" - unity = "unity" - ) - outputType := map[string]string{ - general: "🔨 General Scaffolds", - mobile: "📱 Mobile Scaffolds", - web: "💻 Web Scaffolds", - unity: "🏀 Unity Scaffolds", - } - - index := 0 - outputCategory := func(category string, items []ScaffoldItem) { - logger.Info(output.Bold(output.Magenta(outputType[category]))) - for i := range items { - if items[i].Category == category { - index++ - logger.Info(fmt.Sprintf(" [%d] %s", index, items[i].Title)) - items[i].assignedIndex = index - } - } - logger.Info("") - } - - outputCategory(general, scaffoldItems) - outputCategory(web, scaffoldItems) - outputCategory(mobile, scaffoldItems) - outputCategory(unity, scaffoldItems) - - prompt := promptui.Prompt{ - Label: "Enter the scaffold number", - Validate: func(s string) error { - n, err := strconv.Atoi(s) - if err != nil { - return fmt.Errorf("input must be a number") - } - - if n < 0 && n > len(scaffoldItems) { - return fmt.Errorf("not a valid number") - } - return nil - }, - } - - input, err := prompt.Run() - if err == promptui.ErrInterrupt { - os.Exit(-1) - } - num, _ := strconv.Atoi(input) - - for _, item := range scaffoldItems { - if item.assignedIndex == num { - return item.Index - } - } - - return 0 -} - -func GenericBoolPrompt(msg string) bool { - prompt := promptui.Select{ - Label: msg, - Items: []string{"Yes", "No"}, - } - _, result, _ := prompt.Run() - - return result == "Yes" -} diff --git a/internal/util/test.go b/internal/util/test.go deleted file mode 100644 index 17e408c6b..000000000 --- a/internal/util/test.go +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package util - -import ( - "testing" - - "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - "github.com/stretchr/testify/require" - - "github.com/onflow/flow-cli/flowkit" - "github.com/onflow/flow-cli/flowkit/mocks" - "github.com/onflow/flow-cli/flowkit/output" - "github.com/onflow/flow-cli/flowkit/tests" -) - -var NoLogger = output.NewStdoutLogger(output.NoneLog) - -var TestID = flow.HexToID("24993fc99f81641c45c0afa307e683b4f08d407d90041aa9439f487acb33d633") - -// TestMocks creates mock flowkit services, an empty state and a mock reader writer -func TestMocks(t *testing.T) (*mocks.MockServices, *flowkit.State, flowkit.ReaderWriter) { - services := mocks.DefaultMockServices() - rw, _ := tests.ReaderWriter() - state, err := flowkit.Init(rw, crypto.ECDSA_P256, crypto.SHA3_256) - require.NoError(t, err) - - return services, state, rw -} diff --git a/internal/util/util.go b/internal/util/util.go deleted file mode 100644 index f928ded19..000000000 --- a/internal/util/util.go +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package util - -import ( - "bytes" - "encoding/hex" - "fmt" - "os" - "path/filepath" - "strings" - "text/tabwriter" - - flowsdk "github.com/onflow/flow-go-sdk" - "github.com/onflow/flow-go-sdk/crypto" - - "github.com/onflow/flow-cli/flowkit" -) - -const EnvPrefix = "FLOW" - -func Exit(code int, msg string) { - fmt.Fprintln(os.Stderr, msg) - os.Exit(code) -} - -// AddToGitIgnore adds a new line to the .gitignore if one doesn't exist it creates it. -func AddToGitIgnore(filename string, loader flowkit.ReaderWriter) error { - currentWd, err := os.Getwd() - if err != nil { - return err - } - gitIgnorePath := filepath.Join(currentWd, ".gitignore") - gitIgnoreFiles := "" - filePermissions := os.FileMode(0644) - - fileStat, err := os.Stat(gitIgnorePath) - if !os.IsNotExist(err) { // if gitignore exists - gitIgnoreFilesRaw, err := loader.ReadFile(gitIgnorePath) - if err != nil { - return err - } - gitIgnoreFiles = string(gitIgnoreFilesRaw) - filePermissions = fileStat.Mode().Perm() - } - return loader.WriteFile( - gitIgnorePath, - []byte(fmt.Sprintf("%s\n%s", gitIgnoreFiles, filename)), - filePermissions, - ) -} - -// GetAddressNetwork returns the chain ID for an address. -func GetAddressNetwork(address flowsdk.Address) (flowsdk.ChainID, error) { - networks := []flowsdk.ChainID{ - flowsdk.Mainnet, - flowsdk.Testnet, - flowsdk.Emulator, - } - for _, net := range networks { - if address.IsValid(net) { - return net, nil - } - } - - return "", fmt.Errorf("address not valid for any known chain: %s", address) -} - -func CreateTabWriter(b *bytes.Buffer) *tabwriter.Writer { - return tabwriter.NewWriter(b, 0, 8, 1, '\t', tabwriter.AlignRight) -} - -// ValidateECDSAP256Pub attempt to decode the hex string representation of a ECDSA P256 public key -func ValidateECDSAP256Pub(key string) error { - b, err := hex.DecodeString(strings.TrimPrefix(key, "0x")) - if err != nil { - return fmt.Errorf("failed to decode public key hex string: %w", err) - } - - _, err = crypto.DecodePublicKey(crypto.ECDSA_P256, b) - if err != nil { - return fmt.Errorf("failed to decode public key: %w", err) - } - - return nil -} - -func removeFromStringArray(s []string, el string) []string { - for i, v := range s { - if v == el { - s = append(s[:i], s[i+1:]...) - break - } - } - - return s -} diff --git a/internal/version/version.go b/internal/version/version.go deleted file mode 100644 index aab468f92..000000000 --- a/internal/version/version.go +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Flow CLI - * - * Copyright 2019 Dapper Labs, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package version - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/onflow/flow-cli/build" -) - -var Cmd = &cobra.Command{ - Use: "version", - Short: "View version and commit information", - Run: func(cmd *cobra.Command, args []string) { - semver := build.Semver() - commit := build.Commit() - - // Print version/commit strings if they are known - if build.IsDefined(semver) { - fmt.Printf("Version: %s\n", semver) - } - if build.IsDefined(commit) { - fmt.Printf("Commit: %s\n", commit) - } - // If no version info is known print a message to indicate this. - if !build.IsDefined(semver) && !build.IsDefined(commit) { - fmt.Printf("Version information unknown!\n") - } - }, -} diff --git a/flowkit/mocks/Services.go b/mocks/Services.go similarity index 100% rename from flowkit/mocks/Services.go rename to mocks/Services.go diff --git a/flowkit/mocks/services_mock.go b/mocks/services_mock.go similarity index 100% rename from flowkit/mocks/services_mock.go rename to mocks/services_mock.go diff --git a/flowkit/output/colors.go b/output/colors.go similarity index 100% rename from flowkit/output/colors.go rename to output/colors.go diff --git a/flowkit/output/emoji.go b/output/emoji.go similarity index 100% rename from flowkit/output/emoji.go rename to output/emoji.go diff --git a/flowkit/output/logger.go b/output/logger.go similarity index 100% rename from flowkit/output/logger.go rename to output/logger.go diff --git a/flowkit/output/spinner.go b/output/spinner.go similarity index 100% rename from flowkit/output/spinner.go rename to output/spinner.go diff --git a/flowkit/project/contract.go b/project/contract.go similarity index 100% rename from flowkit/project/contract.go rename to project/contract.go diff --git a/flowkit/project/contract_test.go b/project/contract_test.go similarity index 100% rename from flowkit/project/contract_test.go rename to project/contract_test.go diff --git a/flowkit/project/deployment.go b/project/deployment.go similarity index 100% rename from flowkit/project/deployment.go rename to project/deployment.go diff --git a/flowkit/project/deployment_test.go b/project/deployment_test.go similarity index 100% rename from flowkit/project/deployment_test.go rename to project/deployment_test.go diff --git a/flowkit/project/imports.go b/project/imports.go similarity index 100% rename from flowkit/project/imports.go rename to project/imports.go diff --git a/flowkit/project/imports_test.go b/project/imports_test.go similarity index 100% rename from flowkit/project/imports_test.go rename to project/imports_test.go diff --git a/flowkit/project/program.go b/project/program.go similarity index 100% rename from flowkit/project/program.go rename to project/program.go diff --git a/flowkit/project/program_test.go b/project/program_test.go similarity index 100% rename from flowkit/project/program_test.go rename to project/program_test.go diff --git a/scaffolds.json b/scaffolds.json deleted file mode 100644 index 6803d2b0e..000000000 --- a/scaffolds.json +++ /dev/null @@ -1,79 +0,0 @@ -[ - { - "name": "Empty Cadence Project", - "repo": "https://github.com/sideninja/flow-empty-scaffold", - "description": "Empty project containing only basic folder structure and flow.json configuration.", - "commit": "2ba41348c54c60ccc4e7c3a2d46deead17aab2e6" - }, - { - "name": "Simple Cadence Project", - "repo": "https://github.com/sideninja/flow-basic-scaffold.git", - "description": "Scaffold contains required folder structure as well as some example Cadence code.", - "commit": "5ea01c5f49a855bd0e91333bcae561d52a0de5ec" - }, - { - "name": "Cadence NFT Project", - "repo": "https://github.com/nvdtf/flow-nft-scaffold.git", - "description": "Scaffold contains the ExampleNFT sample NFT contract.", - "commit": "624ffd71bd2f86faf954d251f69d346ddff1446a" - }, - { - "name": "Hybrid Custody Project", - "repo": "https://github.com/onflow/hybrid-custody-scaffold", - "description": "Starter for exploring & implementing Hybrid Custody.", - "commit": "1e76638c7b1e37124b8222ccad3cc9dbe84731d5" - }, - { - "name": "FCL Web Dapp", - "repo": "https://github.com/chasefleming/fcl-next-scaffold.git", - "description": "Simple TypeScript web application using next.js, FCL, and Cadence.", - "commit": "3a5d4f87eef72cebf45f1c48c51c2b786b28f7b6", - "type": "web" - }, - { - "name": "Simple Unity", - "repo": "https://github.com/onflow/UnityFlowSDK.git", - "description": "Simple example demonstrating how to interact with the Flow network using Unity SDK.", - "commit": "d01a4b14a98383c18b4d57e87624cb8dba6d0946", - "folder": "Samples~/FlowControlQuickstartCodeSample", - "type": "unity" - }, - { - "name": "Mobile Unity Game", - "repo": "https://github.com/onflow/UnityFlowSDK.git", - "description": "Example words game built on Flow using the Unity SDK.", - "commit": "d01a4b14a98383c18b4d57e87624cb8dba6d0946", - "folder": "Samples~/FlowWords", - "type": "unity" - }, - { - "name": "Swift iOS simple example", - "repo": "https://github.com/Outblock/fcl-swift", - "description": "iOS example demonstrating usage of FCL and Flow interactions.", - "commit": "393783732f0eef171469b8239683536df73b7450", - "folder": "Example/FCLDemo", - "type": "mobile" - }, - { - "name": "Android simple example", - "repo": "https://github.com/Outblock/fcl-android", - "description": "Android example demonstrating usage of FCL and Flow interactions.", - "commit": "5c68d818e9bccf22409feb9759021e090c055e48", - "folder": "example", - "type": "mobile" - }, - { - "name": "FCL React Native Mobile Dapp", - "repo": "https://github.com/jribbink/fcl-react-native-scaffold", - "description": "React Native (Expo) mobile dapp example demonstrating FCL and Flow interactions.", - "commit": "b5c4b3c98d5733a23c0e93b269bb3383a1af2639", - "type": "mobile" - }, - { - "name": "FCL PWA", - "repo": "https://github.com/bshahid331/flow-pwa-scaffold", - "description": "Walletless Mobile PWA App demonstrating FCL and Flow interactions.", - "commit": "6796427a02b67340447a9c83dc8bdc2b3b06a8c8", - "type": "web" - } -] diff --git a/flowkit/schema.json b/schema.json similarity index 100% rename from flowkit/schema.json rename to schema.json diff --git a/flowkit/services.go b/services.go similarity index 100% rename from flowkit/services.go rename to services.go diff --git a/flowkit/state.go b/state.go similarity index 100% rename from flowkit/state.go rename to state.go diff --git a/flowkit/state_test.go b/state_test.go similarity index 100% rename from flowkit/state_test.go rename to state_test.go diff --git a/flowkit/tests/resources.go b/tests/resources.go similarity index 100% rename from flowkit/tests/resources.go rename to tests/resources.go diff --git a/flowkit/tests/testnet_test.go b/tests/testnet_test.go similarity index 100% rename from flowkit/tests/testnet_test.go rename to tests/testnet_test.go diff --git a/flowkit/transactions/transaction.go b/transactions/transaction.go similarity index 100% rename from flowkit/transactions/transaction.go rename to transactions/transaction.go diff --git a/flowkit/transactions/transaction_test.go b/transactions/transaction_test.go similarity index 100% rename from flowkit/transactions/transaction_test.go rename to transactions/transaction_test.go diff --git a/version.txt b/version.txt deleted file mode 100644 index 13a15bd96..000000000 --- a/version.txt +++ /dev/null @@ -1 +0,0 @@ -v1.12.0 \ No newline at end of file