{"id":21374801,"url":"https://github.com/radrow/blockchain-toy","last_synced_at":"2025-03-16T09:20:48.115Z","repository":{"id":137636441,"uuid":"176297466","full_name":"radrow/blockchain-toy","owner":"radrow","description":"Simple blockchain implementation in Haskell","archived":false,"fork":false,"pushed_at":"2019-03-26T14:29:40.000Z","size":38,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-22T21:28:32.087Z","etag":null,"topics":["actor-model","blockchain","haskell"],"latest_commit_sha":null,"homepage":null,"language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/radrow.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-18T13:56:50.000Z","updated_at":"2019-05-25T16:07:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"4d11169f-7788-4c42-87db-c9585a4f3e80","html_url":"https://github.com/radrow/blockchain-toy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radrow%2Fblockchain-toy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radrow%2Fblockchain-toy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radrow%2Fblockchain-toy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/radrow%2Fblockchain-toy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/radrow","download_url":"https://codeload.github.com/radrow/blockchain-toy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243847971,"owners_count":20357472,"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":["actor-model","blockchain","haskell"],"created_at":"2024-11-22T08:45:29.516Z","updated_at":"2025-03-16T09:20:48.081Z","avatar_url":"https://github.com/radrow.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# blockchain\n\nSimple client-server blockchain implementation in Haskell. Features transaction signing, block validation, proof-of-work, reward management and wallet control. Uses [hactors](http://hackage.haskell.org/package/hactors-0.0.3.1) library for concurrent programming, [RSA](http://hackage.haskell.org/package/RSA-2.3.1) for security and [hashable-generics](https://hackage.haskell.org/package/hashable-generics-1.1.3) for generic hashing functions.\n\n## Setup\n\nFirst of all you will need to install `stack` tool. You may do it using your favourite package manager or by running `curl -sSL https://get.haskellstack.org/ | sh` (bad habit tho).\n\nNext, `cd` into project dir and run\n```\nstack build\n```\n\n## Testing\n\nAfter fighting off all dependency issues and reading all the warnings you may in the splendor of glory run\n```\nstack ghci\n```\nThe REPL should appear.\n\nCreate two users (their private\u0026public key pair):\n\n```\nradekkp \u003c- newKeyPair\n(_, michalpub) \u003c- newKeyPair\n```\n\nCreate server actor (the blockchain is not distributed yet, sorry :( ):\n```\nserv \u003c- runServer\n```\nCreate miner connected to the server that will use radek's key pair:\n```\nm \u003c- runMiner radekkp serv\n```\n...and watch it mine! The server and the client will log some events. To kill the party you may just shut down the `ghci`, or send `ServerStop` and `ClientStop` to the actors accordingly.\n\nYou may manually add new transactions. To make radek pay michal 30 radcoins do:\n```\nserv ! PushTransaction (makeTransaction radekkp michalpub 30)\n```\nNote that you may need to `import Control.Concurrent.Actor` to use `!` operator.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradrow%2Fblockchain-toy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fradrow%2Fblockchain-toy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fradrow%2Fblockchain-toy/lists"}