{"id":16392011,"url":"https://github.com/mikeshultz/k2v","last_synced_at":"2026-06-19T15:32:03.183Z","repository":{"id":147876726,"uuid":"213278675","full_name":"mikeshultz/k2v","owner":"mikeshultz","description":"Test project using libp2p","archived":false,"fork":false,"pushed_at":"2019-10-07T05:27:44.000Z","size":17,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-22T22:27:50.475Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/mikeshultz.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-07T02:20:34.000Z","updated_at":"2019-10-07T05:28:38.000Z","dependencies_parsed_at":"2023-05-27T18:45:16.854Z","dependency_job_id":null,"html_url":"https://github.com/mikeshultz/k2v","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mikeshultz/k2v","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeshultz%2Fk2v","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeshultz%2Fk2v/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeshultz%2Fk2v/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeshultz%2Fk2v/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mikeshultz","download_url":"https://codeload.github.com/mikeshultz/k2v/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikeshultz%2Fk2v/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34538169,"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-19T02:00:06.005Z","response_time":61,"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-11T04:48:10.403Z","updated_at":"2026-06-19T15:32:03.163Z","avatar_url":"https://github.com/mikeshultz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# libp2p test project\n\n**This is an incomplete experimental prototype.**  There's nothing to see here...\n\n## Proposal 0 (stupid)\n\n- every node accepts sets for all keys\n- node responds if it has a value for a key and if not, broadcasts and returns the first response\n\n### Issues\n\n- What happens if QmAlice responds with value for Key1(v1) before QmBruce can respond with Key1(v2)?\n- should everyone be allowed to write?\n- overwriting a key might be considered an attack vector\n\n## Proposal 1 (unworkable)\n\n### Overview\n\n- each node becomes an authority for a key\n- nodes will periodically broadcast their keys to their peers?\n- if a request comes in for an unknown key, broadcast for it?\n- timestamp is set with the value.  newest wins\n\n### Issues\n\n- overwrite attack - a key can be overwritten by anyone with anything\n\n## Proposal 2 (undecided)\n\n### Overview\n\n- set requests are sent via signed requests\n- key is stored with the public key for the signer for verification\n- only the signer can alter the value\n- if a key is requested and the node doesn't have the value, the node broadcasts and if it gets a response, stores values for requested keys\n- if there's a collision, lowest UTC timestamp wins\n\n### Issues\n\n- fraudulent timestamps provided by nodes - possibly mitigated by signature including timestamp?\n\n## Proposal 3 (doable)\n\n### Overview\n\n- set requests are sent via signed requests\n- key is stored with the public key for the signer\n- requests must be accompanied with a public key to fetch (keys are actually [pubkey+key])\n\n### Issues\n\n- Limited use cases.  Requester must know pubkey before making the request\n\n## Proposal 4 (meh)\n\n### Overview\n\n- keys are set per node and use a multiaddr for a fully qualified key e.g /ip4/0.0.0.0/tcp/7755/QmXB5qhDpfHdYcySFL9YDBUrv1aA9y7mA5w93vZbuzhPXb/k2v/Key1\n- setters must be authenticatedand authorized per node, each one has permissioned writers\n\n### Issues\n\n- Limited use cases.  Requester must know what node the key is set on\n- Mildly Centralized.  If a node is known, why not just ask the node directly?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeshultz%2Fk2v","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikeshultz%2Fk2v","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikeshultz%2Fk2v/lists"}