{"id":19079247,"url":"https://github.com/weavevm/blobvm-core","last_synced_at":"2026-06-18T03:33:52.742Z","repository":{"id":233498065,"uuid":"781713377","full_name":"weaveVM/blobvm-core","owner":"weaveVM","description":"ERC-7689 state machine implementation","archived":false,"fork":false,"pushed_at":"2024-04-26T12:47:29.000Z","size":258,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-11T07:22:19.012Z","etag":null,"topics":["erc-7689","smart-blobs"],"latest_commit_sha":null,"homepage":"https://docs.wvm.dev","language":"JavaScript","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/weaveVM.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2024-04-03T22:34:39.000Z","updated_at":"2024-04-26T12:49:33.000Z","dependencies_parsed_at":"2024-04-26T10:38:01.201Z","dependency_job_id":"40398251-496e-4db4-b33e-d5d11033990b","html_url":"https://github.com/weaveVM/blobvm-core","commit_stats":null,"previous_names":["weavevm/blobvm-core"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/weaveVM/blobvm-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveVM%2Fblobvm-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveVM%2Fblobvm-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveVM%2Fblobvm-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveVM%2Fblobvm-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weaveVM","download_url":"https://codeload.github.com/weaveVM/blobvm-core/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weaveVM%2Fblobvm-core/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34475375,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","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":["erc-7689","smart-blobs"],"created_at":"2024-11-09T02:13:59.765Z","updated_at":"2026-06-18T03:33:52.722Z","avatar_url":"https://github.com/weaveVM.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://wvm.dev\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/weaveVM/.github/main/profile/bg.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## About\nBlobVM is a computing protocol that implements the [ERC-7689](https://ethereum-magicians.org/t/erc-7689-smart-blobs/19672). This implementation of the ERC follow its specifications for the State Computing Machine, and the Sequencer. For data computation, a [MEM node](https://docs.mem.tech) is used.\n\n## Build locally\n\n```bash\ngit clone https://github.com/weavevm/blobvm-core.git\n\ncd blobvm-core\n\nnpm install . \u0026\u0026 npm link\n```\n\n## Install the CLI\n\n```bash\nnpm i -g blobvm\n```\n\n##  CLI Commands\n\n### Deploy a contract\n\n```bash\nblobvm deploy --pk YOUR_WALLET_PK --src $PATH_TO_CONTRACT_SRC --state $PATH_TO_INIT_STATE_JSON\n```\n\n### Post an interaction\n\n```bash\nblobvm write --pk YOUR_WALLET_PK --contract CONTRACT_ADDRESS --input INPUT_JSON_STRINGIFIED\n```\n\n\n### blobVM Terminology:\n\n- **bvm**: Short for blobVM.\n- **smart blob**: A smart contract deployed on blobVM.\n\n\n## blobVM Architecture\n\n### Protocol design\n\nThe design of the blobVM protocol is both simple and straightforward ***computation protocol***. State transitions (transactions) are posted as EIP-4844 transactions by the user on the EVM network and then submitted by the user or DApp to the sequencer. The sequencer captures the EVM on-chain transaction, decodes the transaction data, performs the corresponding off-chain execution, and then indexes the state changes in the cloud (cache) after transmitting the blob data to Arweave.\n\n### blobVM transactions\n\nOn the protocol level, blobVM distinguishes between 2 types of transactions:\n\n- `type 1` : contract deployments\n- `type 2` : contract calls\n\nTransactions data structure should be as follow:\n\n```json\n// contract deployment\n{\n  \"type\": 1,\n  \"sc\": [],\n  \"state\":[]\n}\n```\n\n```json\n// contract call\n{\n  \"type\": 2,\n  \"inputs\": [],\n}\n```\n\n**Data encoding**\n\nThe properties `sc`, `state`, and `inputs` are initialized as listed below. They are then encoded according to the function `encodeBvmData()`\n\n- `sc` : UTF-8 representation of the source code\n- `state` : initial state as stringified JSON \n- `inputs` : stringified JSON of the contract's function call object\n\n```ts\nfunction encodeBvmData(data: string): number[] {\n  const encodedData = data.split(\"\").map((char) =\u003e char.charCodeAt(0));\n  return encodeBvmData;\n}\n```\n\n**Additional information about Transactions:**\n- Regardless of the type, the transaction ***total size** should be less than or equal to 128 KiB.\n- The EIP-4844 transaction (on-chain) should contain strictly one operation only.\n- blobVM transaction fees are outlined in the section below.\n\n### Data Archiving Transactions\n\nThis section outlines the format used by the blobVM sequencer to push data to Arweave. The sequencer interfaces with Arweave using [Irys](https://irys.xyz). When indexing blob data from blobVM into Arweave, the following JSON format is utilized to construct the tx data:\n\n```json\n{\n  \"TxId\": \"L1_txid\",\n  \"Type\": \"1 or 2\",\n  \"Caller\": \"tx_caller\",\n  \"VersionedHash\": \"blob_id\",\n  \"Proof\": \"blob_proof\",\n  \"Commitments\": \"blob_kzg_commitment\",\n  \"Data\": \"blob_data\"\n}\n```\n\nTransactions are posted to Arweave with the following tags:\n\n- `Content-Type`: `application/json`\n- `Protocol`: `blobvm-testnet`\n- `Type`: `1` or `2`\n\n\n## blobVM gaseconomics\n\nA blobVM transaction consists of two factors affecting the gas calculation: gas paid for the EVM layer 1 (L1) and gas paid to the blobVM sequencer (Sequencer):\n\n- **Gas Paid for L1**: This is the gas paid by a transaction that implements [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) and [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) standards.\n\n- **Gas Paid to the Sequencer**: This occurs within the same transaction. It involves transferring a sufficient amount of gas fee to the sequencer's address under the `to` (destination) field.\n\nThe gas cost of a blobVM transaction (types `1` and `2`) is calculated as follows:\n\n```plaintext\ntx_gas = l1_gas_fees + (262604 * winston_byte_price * 1e-12 * ar_usd_price / eth_usd_price) * bvm_multiplier\n```\n\n### Equation Terms Breakdown:\n\n- `l1_gas_fees`: The gas paid to post the transaction to the EVM network.\n- `262604`: The total byte size of an EIP-4844 transaction when archiving on Arweave. This includes data, KZG commitments, and proof. [Example](https://arweave.net/P8cN1AK78zRKQytgy3NPsopcNVWgUk_rD93ypk_pOWM)\n- `winston_byte_price`: The cost price per byte on Arweave. This is dynamic and can be checked at `https://arweave.net/price/262604`.\n- `1e-12 * ar_usd_price`: The conversion of `winston_byte_price` from winstons to AR and then to USD.\n- `bvm_multiplier` (\u003e= 1): The total Arweave cost, converted to ETH, is then multiplied by the sequencer premium multiplier.\n\n\n## blobVM Context\n\nThe blobVM context is injected by the sequencer during the lazy evaluation of a transaction. It provides a suite of useful APIs that are accessible during execution and the retroactive lazy evaluation:\n\n| method  | description | status |\n| :-------------: |:-------------:|:-------------:|\n| `blobvm.msg.sender` | return the transaction sender (EOA)     |  supported       |\n| `blobvm.tx.id`      | return the call's transaction id     |  supported       |\n\n## Examples\n\n#### Contract source code\n```js\nexport async function handle(state, action) {\n  const input = action.input;\n\n  if (input.function === \"increment\") {\n    state.counter += 1;\n    state.users.push(blobvm.msg.sender);\n    return { state };\n  }\n}\n```\n\n#### Contract initial state\n```json\n{\n  \"counter\": 0,\n  \"users\": []\n}\n```\n## blobVM Sequencer\nThe blobVM sequencer source code can be found [here](https://github.com/weavevm/blobvm-sequencer)\n\n## MEM \u0026 blobVM\n\n\n### Differences from MEM:\n- **Caller Authentication**: Unlike MEM, blobVM includes native caller authentication under `blobvm.msg.sender`.\n- **Size Limits**: The combined size of the contract and state is limited to 128KB.\n- **Transaction Bundling**: No bundled (batched) transactions are supported by default.\n- **TPS**: Lower TPS compared to MEM.\n- **Data Availability**: Provides a ~14-day data availability (DA) on EVM networks (WVM/anyEVM).\n- **Format**: Different transaction and contract data formats compared to MEM, particularly at the data structure level.\n\n### Similarities to MEM:\n- **Contract Syntax**: The same contract syntax is used; any MEM function is backward compatible with a blobVM contract.\n- **Data Archiving**: Both protocols post data to Arweave to ensure a sovereignly archived state.\n- **Evaluation Method**: Both utilize lazy evaluation for state transitions.\n- **Contract Features**: Supports stateful contracts, REST APIs, and utilizes an optimistic cache.\n\n\n## License\nThis repository is licensed under the [MIT License](./LICENSE)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweavevm%2Fblobvm-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweavevm%2Fblobvm-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweavevm%2Fblobvm-core/lists"}