{"id":22348410,"url":"https://github.com/arrangabriel/chop-up","last_synced_at":"2025-08-23T02:05:11.549Z","repository":{"id":197787003,"uuid":"699338532","full_name":"arrangabriel/chop-up","owner":"arrangabriel","description":"Micro-transactional compilation for deterministic concurrency","archived":false,"fork":false,"pushed_at":"2024-06-03T06:48:51.000Z","size":173,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-13T04:18:02.161Z","etag":null,"topics":["compiler","transaction-processing"],"latest_commit_sha":null,"homepage":"https://dcl.epfl.ch/site/","language":"Rust","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/arrangabriel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-10-02T12:46:40.000Z","updated_at":"2024-06-03T06:48:55.000Z","dependencies_parsed_at":"2023-12-01T23:31:04.397Z","dependency_job_id":"596a4f3e-d92f-4a3e-998c-1cb6d924d8e5","html_url":"https://github.com/arrangabriel/chop-up","commit_stats":null,"previous_names":["arrangabriel/dcl-project","arrangabriel/chop-up"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/arrangabriel/chop-up","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arrangabriel%2Fchop-up","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arrangabriel%2Fchop-up/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arrangabriel%2Fchop-up/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arrangabriel%2Fchop-up/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arrangabriel","download_url":"https://codeload.github.com/arrangabriel/chop-up/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arrangabriel%2Fchop-up/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271732346,"owners_count":24811309,"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","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"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":["compiler","transaction-processing"],"created_at":"2024-12-04T10:22:57.790Z","updated_at":"2025-08-23T02:05:11.488Z","avatar_url":"https://github.com/arrangabriel.png","language":"Rust","readme":"# chop-up\n\nThe function of this tool is to split up code representing `transactions` into so called `microtransactions`.\nA `transaction` on a high level is simply a procedure that operates on a global state, reading and/or writing to it.\nIn a system multiple transactions may be executing concurrently, and must therefore be scheduled so as appear serial in their execution.\nTo aid in scheduling it would be of great help to know exactly which addresses a transaction will operate on.\nIn some cases the addresses can be calculated a priori, but this is not possible if the address of one access is derived from the result of another. \nI.e. reading a value, interpreting it as an address and subsequently reading or writing to said address.\n\nTo solve this a `microtransactional` runtime has been proposed wherein a larger transaction in a sense is suspended at each memory access, \nyielding the address it intends to access to the runtime. \nWith this information the runtime can make informed scheduling decisions when interleaving the set of microtransactions.\nPerforming this yield is not a trivial task, as it requires transforming the code itself to conform to the syntax and semantics of such a system, \nwhile preserving the semantics of the original transaction.\nThis tool performs the transformation on transactions in the [WebAssembly text-format](https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format).\n\n# Usage\n\nBuild using cargo\n```shell\n$ cargo build\n```\n\nAlternatively build and run with single command\n```shell\n$ cargo run [subcommand] [opts...]\n```\n\nRun tests\n```shell\n$ cargo test\n```\n\n## Transformation\n\nRun on `.wat` file\n```shell\n$ chop_up split [input] [state size] [opts...] \u003e [output]\n```\n\nOptional flags:\n - `--skip-safe` - attempt to make optimized split decisions\n - `--explain` - add explanatory comments to output\n\n## Analysis\n\nRun on `.wat` file\n```shell\n$ chop_up analyze [input] [output format]\n```\n\n\u003e output format is one of: `standard` or `csv`\n\n# Build and run examples\n\nTo build the examples a [wasi-enabled](https://github.com/WebAssembly/wasi-sdk) compiler is needed.\n\n```shell\n$ cd wasm/runtime\n```\n\nRun without transformation\n```shell\n$ make check-{payment|auction}\n```\n\nRun with transformation\n```shell\n$ make check-{payment|auction}-split\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farrangabriel%2Fchop-up","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farrangabriel%2Fchop-up","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farrangabriel%2Fchop-up/lists"}