{"id":16189968,"url":"https://github.com/brson/treasuretree","last_synced_at":"2026-03-01T07:34:21.198Z","repository":{"id":66303391,"uuid":"349319172","full_name":"brson/treasuretree","owner":"brson","description":"A real-world treasure hunt game where the treasures are represented as QR codes in the physical world, and NFTs in the virtual.","archived":false,"fork":false,"pushed_at":"2021-06-30T23:41:36.000Z","size":38092,"stargazers_count":53,"open_issues_count":0,"forks_count":10,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-11T23:06:47.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://treasuretree.org","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/brson.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":"2021-03-19T06:08:24.000Z","updated_at":"2025-10-06T05:14:42.000Z","dependencies_parsed_at":"2023-02-20T21:00:57.290Z","dependency_job_id":null,"html_url":"https://github.com/brson/treasuretree","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brson/treasuretree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brson%2Ftreasuretree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brson%2Ftreasuretree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brson%2Ftreasuretree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brson%2Ftreasuretree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brson","download_url":"https://codeload.github.com/brson/treasuretree/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brson%2Ftreasuretree/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29964178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T06:55:38.174Z","status":"ssl_error","status_checked_at":"2026-03-01T06:53:04.810Z","response_time":124,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-10T07:37:49.612Z","updated_at":"2026-03-01T07:34:21.177Z","avatar_url":"https://github.com/brson.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![logo](images/treasure-tree-medium-white.png)\n\n# TreasureTree\n\nA real-world treasure hunt game where the treasures are\nrepresented as QR codes in the physical world,\nand NFTs in the virtual.\n\nThere are only two actions in the game,\nperformed by two roles:\n\n- treasure _planters_ physically _plant_ QR codes containing secret keys,\n- treasure _claimers_ find and scan those QR codes to _claim_ them on the network, as NFTs.\n\nEach treasure is unique,\nand once claimed may not be claimed again.\n\nEach treasure is associated with a picture,\nwhich is intended to be a photograph taken from a phone.\nFrom the photo are extracted the geographic coordinates of the treasure,\nsuch that treasure hunters can view new treasures on the website\nand use the coordinates to hunt for them.\n\nThis was created as part of the [Solana Season Hackathon][ssh].\nSee a [demo video here][vid] showing how it is intended to be played,\nand the [blog about our experience][blog].\n\n[ssh]: https://github.com/solana-labs/solana-season\n[vid]: https://youtu.be/uc2MUdDo4xs\n[blog]: https://brson.github.io/2021/06/08/rust-on-solana\n\nSee it live at [treasuretree.org],\nbut note that\n**this is prototype-quality software,\nand works just enough to demo**.\nIt runs only against a Solana devnet,\nnot a live network.\n\n[treasuretree.org]: https://treasuretree.org\n\n\n## About the software\n\nTreasureTree is architected as a typical server-based web application,\nbut with a simple data model that is trivially mirrored to the blockchain.\nIt has this dual centralized/blockchain architecture for two reasons:\n\n- We wanted a responsive and simple user experience that requires no knowledge\n  of blockchains or \u0026mdash; especially \u0026mdash; blockchain wallets.\n- We wanted to prototype the app quickly without dealing with blockchain programming,\n- We wanted to be able to experiment with multiple blockchains while keeping the blockchain\n  components isolated from the main logic of the app.\n\nIt is written mostly in Rust and consists of several crates:\n\n- [`geonft_web`]: a [Rocket] web server, serving static pages, a JSON-based API,\n  and a WASM blob for use by the client.\n- [`geonft_wasm`]: Rust code used by the web app.\n- [`geonft_solana`]: a Solana program that implements a similar API\n  to the web API.\n- [`geonft_sync`]: a bot that synchronizes state between the backend of\n  the web app and the blockchain.\n- [`geonft_request`]: no-std data types used in both Rocket and Solana APIs,\n  these define the basic actions in the game.\n- [`geonft_nostd`]: no-std code shared between crates, mostly crypto.\n- [`geonft_shared`]: std code shared between crates, mostly I/O.\n\n(The original name of this project was \"geonft\").\n\n[Rocket]: https://rocket.rs\n[`geonft_web`]: src/geonft_web\n[`geonft_wasm`]: src/geonft_wasm\n[`geonft_solana`]: src/geonft_solana\n[`geonft_sync`]: src/geonft_sync\n[`geonft_request`]: src/geonft_request\n[`geonft_nostd`]: src/geonft_nostd\n[`geonft_shared`]: src/geonft_shared\n\n\n## Limitations and future work\n\nThe code is full of quick hacks and missing cases,\nand is in a frankly embarassing shape.\n\nThe Solana integration is the barest prototype.\nDuring the hackathon we had to overcome the learning curve,\nand ran into problems with several of our\narchitectural assumptions which have not been fixed yet.\n\nIn particular,\nthe Solana program doesn't actually verify the signatures\nnecessary to validate the transactions it is executing.\nIt'll accept most any garbage.\nThis is because we couldn't do the signature verification\nwithin the on-chain CPU budget.\nFixing this requires some architectural changes.\n\nGeographic coordinates of treasures are not yet displayed on the web app.\n\nAccess control for planters is not implemented\nin an economically viable way for on-chain activity \u0026mdash;\nit would be expensive if many people began planting treasures.\n\nImages are stored on a central server,\nbut should be pinned to IPFS.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrson%2Ftreasuretree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrson%2Ftreasuretree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrson%2Ftreasuretree/lists"}