{"id":18842603,"url":"https://github.com/tendermint/merkleeyes","last_synced_at":"2025-06-14T11:38:38.546Z","repository":{"id":57482997,"uuid":"49682375","full_name":"tendermint/merkleeyes","owner":"tendermint","description":"DEPRECATED: Merkle-ized data store","archived":false,"fork":false,"pushed_at":"2019-05-24T23:16:22.000Z","size":431,"stargazers_count":46,"open_issues_count":13,"forks_count":17,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-04-14T07:47:09.231Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tendermint.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-14T23:33:46.000Z","updated_at":"2023-04-04T08:44:29.000Z","dependencies_parsed_at":"2022-08-27T20:02:42.438Z","dependency_job_id":null,"html_url":"https://github.com/tendermint/merkleeyes","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/tendermint/merkleeyes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendermint%2Fmerkleeyes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendermint%2Fmerkleeyes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendermint%2Fmerkleeyes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendermint%2Fmerkleeyes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tendermint","download_url":"https://codeload.github.com/tendermint/merkleeyes/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tendermint%2Fmerkleeyes/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259810442,"owners_count":22915093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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-11-08T02:55:14.534Z","updated_at":"2025-06-14T11:38:38.525Z","avatar_url":"https://github.com/tendermint.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# merkleeyes\n\n[![CircleCI](https://circleci.com/gh/tendermint/merkleeyes.svg?style=svg)](https://circleci.com/gh/tendermint/merkleeyes)\n\nA simple [ABCI application](http://github.com/tendermint/abci) serving a [merkle-tree key-value store](http://github.com/tendermint/merkleeyes/iavl) \n\n# Use\n\nMerkleeyes allows inserts and removes by key, and queries by key or index.\nInserts and removes happen through the `DeliverTx` message, while queries happen through the `Query` message.\n`CheckTx` simply mirrors `DeliverTx`.\n\n# Formatting\n\n## Byte arrays\n\nByte-array `B` is serialized to `Encode(B)` as follows:\n\n```\nLen(B) := Big-Endian encoded length of B\nEncode(B) = Len(Len(B)) | Len(B) | B\n```\n\nSo if `B = \"eric\"`, then `Encode(B) = 0x010465726963`\n\n## Transactions\n\nThere are four types of transaction, each associated with a type-byte and a list of arguments:\n\n```\nSet\t\t\t0x01\t\tKey, Value\nRemove\t\t\t0x02\t\tKey\nGet\t\t\t0x03\t\tKey\nCompare and Set\t\t0x04\t\tKey, Compare Value, Set Value\nValidator Set Change    0x05\t\tPubKey, Power (uint64)\nValidator Set Read      0x06\t\t\nValidator Set CAS       0x07\t\tVersion (uint64), PubKey, Power (uint64)\t\n```\n\nA transaction consists of a 12-byte random nonce, the type-byte, and the encoded arguments.\n\nFor instance, to insert a key-value pair, you would submit a transaction that looked like `NONCE | 01 | Encode(key) | Encode(value)`,\nwhere `|` denotes concatenation.\nThus, a transaction inserting the key-value pair `(eric, clapton)` would look like:\n\n```\n0xF4FCDC5BF26E227B66A1BA90010104657269630107636c6170746f6e\n```\n\nThe first 12-bytes, `F4FCDC5BF26E227B66A1BA90`, are the nonce. The next byte, `01`, is the transaction type.\nFollowing that are the encodings of `eric` and `clapton`.\n\n\nHere's a session from the [abci-cli](https://tendermint.com/intro/getting-started/first-abci):\n\n```\n# SET (\"eric\", \"clapton\")\n\u003e deliver_tx 0xF4FCDC5BF26E227B66A1BA90010104657269630107636c6170746f6e\n\n# GET (\"eric\")\n\u003e deliver_tx 0xB980403FF73E79A3A2D90A1E03010465726963\n-\u003e data: clapton\n-\u003e data.hex: 636C6170746F6E\n\n# CAS (\"eric\", \"clapton\", \"ericson\")\n\u003e deliver_tx 0x18D892B6D62773E6AA8804CF040104657269630107636C6170746F6E010765726963736f6e\n\n# GET (\"eric\")\n\u003e deliver_tx 0x4FB9DAB513493E602FF085C603010465726963\n-\u003e data: ericson\n-\u003e data.hex: 65726963736F6E\n\n# COMMIT\n\u003e commit\n-\u003e data: ���Ώ�R�Ng�=HK}��7�\n-\u003e data.hex: BAEDE5CE8F9A52B64E67873D484B7DABF69537DA\n\n# QUERY (\"eric\")\n\u003e query 0x65726963\n-\u003e height: 2\n-\u003e key: eric\n-\u003e key.hex: 65726963\n-\u003e value: ericson\n-\u003e value.hex: 65726963736F6E\n```\n\n\n# Poem\n\nTo the tune of Eric Clapton's \"My Father's Eyes\"\n\n```\nwriting down, my checksum\nwaiting for the, data to come\nno need to pray for integrity\nthats cuz I use, a merkle tree\n\ngrab the root, with a quick hash run\nif the hash works out,\nit must have been done\n\ntheres no need, for trust to arise\nthanks to the crypto\nnow that I can merkleyes\n\ntake that data, merklize\nye, I merklize ...\n\nthen the truth, begins to shine\nthe inverse of a hash, you will never find\nand as I watch, the dataset grow\nproducing a proof, is never slow\n\nWhere do I find, the will to hash\nHow do I teach it?\nIt doesn't pay in cash\nBitcoin, here, I've realized\nThats what I need now,\ncuz real currencies merklize\n-EB\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftendermint%2Fmerkleeyes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftendermint%2Fmerkleeyes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftendermint%2Fmerkleeyes/lists"}