{"id":24551990,"url":"https://github.com/mlabs-haskell/plutus-specification-language","last_synced_at":"2025-04-15T22:20:47.646Z","repository":{"id":38297094,"uuid":"421132415","full_name":"mlabs-haskell/plutus-specification-language","owner":"mlabs-haskell","description":null,"archived":false,"fork":false,"pushed_at":"2023-05-01T08:20:10.000Z","size":256,"stargazers_count":4,"open_issues_count":17,"forks_count":1,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-03-29T02:04:21.359Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Haskell","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/mlabs-haskell.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}},"created_at":"2021-10-25T18:03:20.000Z","updated_at":"2023-08-25T06:04:38.000Z","dependencies_parsed_at":"2023-01-30T00:45:49.991Z","dependency_job_id":null,"html_url":"https://github.com/mlabs-haskell/plutus-specification-language","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/mlabs-haskell%2Fplutus-specification-language","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlabs-haskell%2Fplutus-specification-language/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlabs-haskell%2Fplutus-specification-language/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlabs-haskell%2Fplutus-specification-language/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mlabs-haskell","download_url":"https://codeload.github.com/mlabs-haskell/plutus-specification-language/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249162009,"owners_count":21222580,"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":"2025-01-23T01:19:39.630Z","updated_at":"2025-04-15T22:20:47.619Z","avatar_url":"https://github.com/mlabs-haskell.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plutus specification language\n\nA specification is a mathematical (unordered) set of diagrams (unrelated to category theory).\n\nThere are some core operations defined over diagrams, from the EPSL type class.\n\nDiagrams denote what transactions should be accepted.\nDiagrams are of a specific protocol `p`.\nDiagrams form a monoid.\nThe empty diagram matches no transactions.\nThe monoidal operation combines the predicates.\nAny inputs of `p` in the transaction should be in the diagram, and vice versa.\nAny mint of `p` in the transaction should be in the diagram, and vice versa.\n\nThe value of inputs and outputs must match exactly.\n\nGiven the properties of the specification language,\nwe have the property, that two transactions with the same validity range that only\ninteract with disjoint protocols, can be merged (if the signatures can be redone),\nsuch that the merged transaction has the same effect on the protocol state of all\ninvolved protocols.\n\n## Predicates\n\n### `requireInput`\n\nThe input (of another protocol) in question **must** be in the transaction.\n\n### `requireOwnInput`\n\nThe input (of `p`) in question **must** be in the transaction.\n\n### `createOwnOutput`\n\nThe output (of `p`) must exist.\n\n### `witnessOutput`\n\nThe output (of another protocol) must exist.\n\n### `createOutput`\n\nThe output (of another ptocol) must be created.\nAnother diagram of a different protocol can not share\nthe same created output with `createOutput`.\n\n### `mintOwn`\n\nThe token name (of `p`) and amount must be exactly present\nin the transaction.\nNo more or no less must be minted.\n\n### `witnessMint`\n\n\n# Contributing\n\n`nix run .#regen`\n`nix develop`\n`cabal repl --repl-options=-Wwarn`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlabs-haskell%2Fplutus-specification-language","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmlabs-haskell%2Fplutus-specification-language","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlabs-haskell%2Fplutus-specification-language/lists"}