{"id":18019343,"url":"https://github.com/devlyn37/navigator","last_synced_at":"2026-06-15T21:31:37.306Z","repository":{"id":65373445,"uuid":"541242457","full_name":"devlyn37/navigator","owner":"devlyn37","description":"Utility CLI for EVM things","archived":false,"fork":false,"pushed_at":"2023-01-21T18:35:29.000Z","size":45,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T16:38:58.669Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devlyn37.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-25T16:51:26.000Z","updated_at":"2023-01-21T18:16:18.000Z","dependencies_parsed_at":"2023-02-12T12:01:58.952Z","dependency_job_id":null,"html_url":"https://github.com/devlyn37/navigator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devlyn37/navigator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlyn37%2Fnavigator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlyn37%2Fnavigator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlyn37%2Fnavigator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlyn37%2Fnavigator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devlyn37","download_url":"https://codeload.github.com/devlyn37/navigator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlyn37%2Fnavigator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34381759,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-30T05:10:03.925Z","updated_at":"2026-06-15T21:31:37.285Z","avatar_url":"https://github.com/devlyn37.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Navigator\n\nA CLI for things I find myself doing often in EVM land.\n\nThis is a WIP and implemented in Rust for fun\n\n## Decode Command\n\nI often parse through logs like this:\n\n```\ncode: 'SERVER_ERROR',\n    body: '{\"jsonrpc\":\"2.0\",\"id\":44,\"error\":{\"code\":3,\"message\":\"execution reverted\",\"data\":\"0xc373e55d\"}}',\n    error: {\n      code: 3,\n      data: '0xc373e55d'\n\trequestBody: '{\"method\":\"eth_estimateGas\",\"params\":[{\"value\":\u003cVALUE\u003e,\"from\":\u003cFROM\u003e,\"to\":\u003cCONTRACT\u003e,\"data\":\"0x493610a600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000cc5060f9674aff5d32122b29d4c52373558f0fca\"}],\"id\":44,\"jsonrpc\":\"2.0\"}',\n    requestMethod: \u003cMETHOD\u003e,\n    url: \u003cURL\u003e\n  }\n},\n```\n\nthis happens when contracts revert with custom errors (ex. shown in solidity below) are thrown\n\n```\nerror InsufficientBalance(uint256 available, uint256 required);\n```\n\nIt's difficult to grok what's going on from the error logs, the `decode` command decodes the hex data for errors and functions like they're provided in the example above.\n\nIt does so by:\n\n- fetching the abi\n- matching the function or error signature with the data\n- decoding the parameters according to that matched function or error\n\n### Usage\n\n```\nUsage: navigator decode --kind=\u003cKIND\u003e \u003cCHAIN\u003e \u003cCONTRACT\u003e \u003cETHERSCAN_KEY\u003e \u003cDATA\u003e\n\nArguments:\n  \u003cCHAIN\u003e          the chain the contract is deployed to\n  \u003cCONTRACT\u003e       the contract the data is related to\n  \u003cETHERSCAN_KEY\u003e  an api key for etherscan\n  \u003cDATA\u003e           the hex encoded data\n\nOptions:\n      --kind=\u003cKIND\u003e  [possible values: function, error]\n  -h, --help         Print help information\n```\n\n### Examples\n\ndecoding function data\n\n```\ncargo run decode mainnet 0x1d9317911cf1003b42a965574c29f18a87a2858c \u003cKEY\u003e 0x0209c6b7000000000000000000000000292f9d08efcf1a3a988959190d44f48a53577f100000000000000000000000000000000000000000000000000000000000000001 --kind=function\n```\n\noutput:\n\n```\nfunction name: mintSeasonPassNFT, arguments: [Address(0x292f9d08efcf1a3a988959190d44f48a53577f10), Uint(1)]`\n```\n\ndecoding error data\n\n```\ncargo run decode goerli 0x98AA442ceFCAF0A7277D10889d07d04E90B37eA5 \u003cKEY\u003e 0xd2ade556 --kind=error\n```\n\noutput:\n\n```\nIncorrectValue, arguments: []\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlyn37%2Fnavigator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevlyn37%2Fnavigator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlyn37%2Fnavigator/lists"}