{"id":24746639,"url":"https://github.com/samuelmarks/dag1","last_synced_at":"2026-04-27T12:35:42.987Z","repository":{"id":72350006,"uuid":"185931249","full_name":"SamuelMarks/dag1","owner":"SamuelMarks","description":"Novel aBFT consensus. Fork of Fantom Foundation's, made for experimentation.","archived":false,"fork":false,"pushed_at":"2019-05-30T06:17:58.000Z","size":31793,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-23T01:27:47.224Z","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":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SamuelMarks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-10T06:28:23.000Z","updated_at":"2022-07-13T03:01:42.000Z","dependencies_parsed_at":"2023-02-28T08:01:14.580Z","dependency_job_id":null,"html_url":"https://github.com/SamuelMarks/dag1","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SamuelMarks/dag1","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fdag1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fdag1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fdag1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fdag1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SamuelMarks","download_url":"https://codeload.github.com/SamuelMarks/dag1/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SamuelMarks%2Fdag1/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32337274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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":"2025-01-28T04:29:45.304Z","updated_at":"2026-04-27T12:35:42.968Z","avatar_url":"https://github.com/SamuelMarks.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DAG1\n\nNovel aBFT consensus\n\n  \n# Features\n- [x] k-node selection\n- [x] k-parent EventBlock\n- [x] EventBlock merge\n- [ ] DAG1 consensus\n    - [x] Dominators\n    - [x] Self Dominators\n    - [x] Atropos\n    - [x] Clotho\n    - [x] Frame\n    - [x] Frame Received\n    - [x] Dominated\n    - [x] Lamport Timestamp\n    - [x] Atropos Consensus Time\n    - [x] Consensus Timestamp\n    - [x] Ordering on same Consensus Timestamp (Lamport Timestamp)\n    - [ ] Ordering on same Lamport Timestamp (Flag Table)\n    - [x] Ordering on same Flag Table (Signature XOR)\n    - [x] Transaction submit\n    - [x] Consensus Transaction output\n    - [ ] Dynamic participants\n        - [ ] Peer add\n        - [ ] Peer Remove\n- [x] Caching for performances\n- [x] Sync\n- [x] Event Signature\n- [ ] Transaction validation\n- [ ] Optimum Network pruning\n\n## Dev\n\n### Docker\n\nCreate an 3 node dag1 cluster with:\n\n    n=3 BUILD_DIR=\"$PWD\" ./scripts/docker/scale.bash\n\n### Dependencies\n\n  - [Docker](https://www.docker.com/get-started)\n  - [jq](https://stedolan.github.io/jq)\n  - [Bash](https://www.gnu.org/software/bash)\n  - [git](https://git-scm.com)\n  - [Go](https://golang.org)\n  - [Glide](https://glide.sh)\n  - [batch-ethkey](https://github.com/SamuelMarks/batch-ethkey) with: `go get -v github.com/SamuelMarks/batch-ethkey`\n  - [protocol buffers 3](https://github.com/protocolbuffers/protobuf), with: installation of [a release]([here](https://github.com/protocolbuffers/protobuf/releases)) \u0026 `go get -u github.com/golang/protobuf/protoc-gen-go`\n\n### Protobuffer 3\n\nThis project uses protobuffer 3 for the communication between posets.\nTo use it, you have to install both `protoc` and the plugin for go code\ngeneration.\n\nOnce the stack is setup, you can compile the proto messages by\nrunning this command:\n\n```bash\nmake proto\n```\n\n### DAG1 and dependencies\nClone the [repository](https://github.com/SamuelMarks/dag1) in the appropriate\nGOPATH subdirectory:\n\n```bash\n$ d=\"$GOPATH/src/github.com/SamuelMarks\"\n$ mkdir -p \"$d\"\n$ git clone https://github.com/SamuelMarks/dag1.git \"$d\"\n```\nDAG1 uses [Glide](http://github.com/Masterminds/glide) to manage dependencies.\n\n```bash\n$ curl https://glide.sh/get | sh\n$ cd \"$GOPATH/src/github.com/SamuelMarks\" \u0026\u0026 glide install\n```\nThis will download all dependencies and put them in the **vendor** folder.\n\n### Other requirements\n\nBash scripts used in this project assume the use of GNU versions of coreutils.\nPlease ensure you have GNU versions of these programs installed:-\n\nexample for macos:\n```\n# --with-default-names makes the `sed` and `awk` commands default to gnu sed and gnu awk respectively.\nbrew install gnu-sed gawk --with-default-names\n```\n\n### Testing\n\nDAG1 has extensive unit-testing. Use the Go tool to run tests:\n```bash\n[...]/dag1$ make test\n```\n\nIf everything goes well, it should output something along these lines:\n```\n?   \tgithub.com/SamuelMarks/dag1/cmd/dummy\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/cmd/dummy/commands\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/cmd/dummy_client\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/cmd/dag1\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/cmd/dag1/commands\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/tester\t[no test files]\nok  \tgithub.com/SamuelMarks/dag1/src/common\t(cached)\nok  \tgithub.com/SamuelMarks/dag1/src/crypto\t(cached)\nok  \tgithub.com/SamuelMarks/dag1/src/difftool\t(cached)\nok  \tgithub.com/SamuelMarks/dag1/src/dummy\t0.522s\n?   \tgithub.com/SamuelMarks/dag1/src/dag1\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/src/log\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/src/mobile\t[no test files]\nok  \tgithub.com/SamuelMarks/dag1/src/net\t(cached)\nok  \tgithub.com/SamuelMarks/dag1/src/node\t9.832s\n?   \tgithub.com/SamuelMarks/dag1/src/pb\t[no test files]\nok  \tgithub.com/SamuelMarks/dag1/src/peers\t(cached)\nok  \tgithub.com/SamuelMarks/dag1/src/poset\t9.627s\nok  \tgithub.com/SamuelMarks/dag1/src/proxy\t1.019s\n?   \tgithub.com/SamuelMarks/dag1/src/proxy/internal\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/src/proxy/proto\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/src/service\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/src/utils\t[no test files]\n?   \tgithub.com/SamuelMarks/dag1/src/version\t[no test files]\n```\n\n## Cross-build from source\n\nThe easiest way to build binaries is to do so in a hermetic Docker container.\nUse this simple command:\n\n```bash\n[...]/dag1$ make dist\n```\nThis will launch the build in a Docker container and write all the artifacts in\nthe build/ folder.\n\n```bash\n[...]/dag1$ tree --charset=nwildner build\nbuild\n|-- dist\n|   |-- dag1_0.4.3_SHA256SUMS\n|   |-- dag1_0.4.3_darwin_386.zip\n|   |-- dag1_0.4.3_darwin_amd64.zip\n|   |-- dag1_0.4.3_freebsd_386.zip\n|   |-- dag1_0.4.3_freebsd_arm.zip\n|   |-- dag1_0.4.3_linux_386.zip\n|   |-- dag1_0.4.3_linux_amd64.zip\n|   |-- dag1_0.4.3_linux_arm.zip\n|   |-- dag1_0.4.3_windows_386.zip\n|   `-- dag1_0.4.3_windows_amd64.zip\n|-- dag1\n`-- pkg\n    |-- darwin_386\n    |   `-- dag1\n    |-- darwin_386.zip\n    |-- darwin_amd64\n    |   `-- dag1\n    |-- darwin_amd64.zip\n    |-- freebsd_386\n    |   `-- dag1\n    |-- freebsd_386.zip\n    |-- freebsd_arm\n    |   `-- dag1\n    |-- freebsd_arm.zip\n    |-- linux_386\n    |   `-- dag1\n    |-- linux_386.zip\n    |-- linux_amd64\n    |   `-- dag1\n    |-- linux_amd64.zip\n    |-- linux_arm\n    |   `-- dag1\n    |-- linux_arm.zip\n    |-- windows_386\n    |   `-- dag1.exe\n    |-- windows_386.zip\n    |-- windows_amd64\n    |   `-- dag1.exe\n    `-- windows_amd64.zip\n\n11 directories, 29 files\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelmarks%2Fdag1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamuelmarks%2Fdag1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamuelmarks%2Fdag1/lists"}