{"id":24799616,"url":"https://github.com/jimstir/reserve-vault","last_synced_at":"2026-05-15T20:03:02.048Z","repository":{"id":184562890,"uuid":"672109842","full_name":"jimstir/Reserve-Vault","owner":"jimstir","description":"Reference implementation for EIP-7425","archived":false,"fork":false,"pushed_at":"2024-03-06T18:06:11.000Z","size":49,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-07T04:44:13.029Z","etag":null,"topics":["eip","ethereum","research","smart-contracts","solidity-contracts","vault"],"latest_commit_sha":null,"homepage":"https://ethereum-magicians.org/t/eip-7425-tokenized-reserve/15297/2","language":"Solidity","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/jimstir.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,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-07-29T00:49:33.000Z","updated_at":"2023-08-04T05:25:00.000Z","dependencies_parsed_at":"2025-08-07T04:44:13.761Z","dependency_job_id":null,"html_url":"https://github.com/jimstir/Reserve-Vault","commit_stats":{"total_commits":14,"total_committers":1,"mean_commits":14.0,"dds":0.0,"last_synced_commit":"73b12fcd4236f96fcdb0686cdfa80bb85592f39b"},"previous_names":["jimstir/reserve-vault"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jimstir/Reserve-Vault","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimstir%2FReserve-Vault","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimstir%2FReserve-Vault/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimstir%2FReserve-Vault/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimstir%2FReserve-Vault/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jimstir","download_url":"https://codeload.github.com/jimstir/Reserve-Vault/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jimstir%2FReserve-Vault/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269201172,"owners_count":24377450,"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-07T02:00:09.698Z","response_time":73,"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":["eip","ethereum","research","smart-contracts","solidity-contracts","vault"],"created_at":"2025-01-30T02:45:46.452Z","updated_at":"2026-05-15T20:02:57.003Z","avatar_url":"https://github.com/jimstir.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\neip: 7425\ntitle: Tokenized Reserve\ndescription: Reserve with user auditing\nauthor: Jimmy Debe (@jimstir)\ndiscussions-to: https://ethereum-magicians.org/t/eip-7425-tokenized-reserve/15297\nstatus: Draft\ntype: Standards Track\ncategory: ERC\ncreated: 2023-06-30\nrequires: 20, 4626\n---\n\n# Reserve-Vault\n\n## Description\nThis is a reference implementation of EIP 7425. There are getter functions, and intializled constructor parameters included. Continued development will include added testand other documentation.\n\n\n## Abstract\n\nA proposal for a tokenized reserve mechanism. The reserve allows an audit of on-chain actions of the owner. Using [ERC-4626](../EIPS/eip-4626.md), stakeholders can create shares to show support for actions in the reserve.\n\n## Motivation\n\nTokenized reserves are an extension of tokenized vaults. The goal is to create a reserve similar to a real world reserve an entity has as a backup incase regular funds run low. In the real world, an entity will have certain criteria to access reserve funds. In a decentralized environment, an entity can incorporate stakeholders into their criteria. Hopefully this will help entities who participate in decentralized environments to be transparent with stakeholders.\n\n## Specification\n\n### Definitions:\n\n  - owner: The creator of the reserve.\n  - user: Stakeholders of specific proposals\n  - reserve: The tokenized reserve contract\n  - proposal: Occurs when the owner wants a withdrawal from contract\n \n### Constructor:\n \n  - name: ERC-20 token name\n  - ticker: ERC-20 ticker\n  - asset: ERC-4626 underlying ERC-20 address\n  - rAuth: Primary authorized user\n  - rOwner: Owner of the Reserve\n\n# Getter Functions:\n\n#### whosOwner\n\u003e - Get the reserve owner\n  ```yaml\n  - name: whosOwner\n\t  type: function\n\t  stateMutability: view\n\n\tinputs: [ ]\n\n\toutputs:\n\t\t- name: _rOwner\n\t\t  type : address\n   \n  ```\n\n#### whosAuth\n\u003e - Get the reserve primary authorized user\n  ```yaml\n  - name: whosAuth\n\t  type: function\n\t  stateMutability: view\n\n\tinputs: [ ]\n\n\toutputs:\n\t\t- name: _rAuth\n\t\t  type : address\n   \n  ```\n\n#### proposalCheck\n\u003e - Check current total of opened proposals\n  ```yaml\n  - name: proposalCheck\n\t  type: function\n\t  stateMutability: view\n\n\tinputs: [ ]\n\n\toutputs:\n\t\t- name: _proposalNum\n\t\t  type : uint256\n\n  ```\n\n#### getAuth\n\u003e - Authorized users of the reserve\n  ```yaml\n  - name: getAuth\n\t  type: function\n\t  stateMutability: view\n\n\tinputs: [ ]\n\n\toutputs:\n\t\t- name: _authUsers\n\t\t  type : bool\n\n  ```\n\n#### accountCheck\n\u003e - Get number of deposits made to reserve by the owner\n\u003e - MUST BE deposits made by calling depositReserve function\n  ```yaml\n  - name: accountCheck\n\t  type: function\n\t  stateMutability: view\n\n\tinputs: [ ]\n\n\toutputs:\n\t\t- name: _ownerDeposits\n\t\t  type : uint256\n\n  ```\n\n#### depositTime\n\u003e - Get time of a deposit made to reserve by the owner\n  ```yaml\n  - name: depositTime\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: count\n\ttype: uint256\n\n\toutputs:\n\t\t- name: ownerBook.time\n\t\ttype : uint256\n\n  ```\n\n#### ownerDeposit\n\u003e - Get time of a deposit made to reserve by the owner\n  ```yaml\n  - name: ownerDeposit\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: count\n\ttype: uint256\n\n\toutputs:\n\t\t- name: ownerBook.deposit\n\t\ttype : uint256\n\n  ```\n\n#### tokenDeposit\n\u003e - Token type deposited to contract by the owner\n  ```yaml\n  - name: tokenDeposit\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: count\n\ttype: uint256\n\n\toutputs:\n\t\t- name: ownerBook.token\n\t\ttype : address\n\n  ```\n\n#### userDeposit\n\u003e - Token type deposited to contract by the owner\n\u003e - MUST be an ERC20 address\n  ```yaml\n  - name: userDeposit\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: user\n\ttype: address\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: userBook.deposit\n\t\ttype : uint256\n\n  ```\n\n#### userWithdrew\n\u003e - Amount withdrawn from given proposal by the user\n\u003e - MUST be an ERC20 address\n  ```yaml\n  - name: userWithdrew\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: user\n\ttype: address\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: userBook.withdrew\n\t\ttype : uint256\n\n  ```\n\n#### userNumOfProposal\n\u003e - The total number of proposals joined by the user\n  ```yaml\n  - name: userNumOfProposal\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: user\n\ttype: address\n\n\toutputs:\n\t\t- name: userBook.numOfProposals\n\t\ttype : uint256\n\n  ```\n\n#### userProposal\n\u003e - The proposal number from the specific proposal joined by the user\n\u003e - MUST NOT be zero\n  ```yaml\n  - name: userProposal\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: user\n\ttype: address\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: userBook.proposal\n\t\ttype : uint256\n\n  ```\n\n#### proposalToken\n\u003e - Token used for given proposal\n\u003e - MUST be ERC20 address\n  ```yaml\n  - name: proposalToken\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: proposalBook.token\n\t\ttype : uint256\n\n  ```\n\n#### proposalWithdrew\n\u003e - Amount withdrawn for given proposal\n  ```yaml\n  - name: proposalWithdrew\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: proposalBook.withdrew\n\t\ttype : uint256\n\n  ```\n\n#### proposalDeposit\n\u003e - Amount received for given proposal\n  ```yaml\n  - name: proposalDeposit\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: proposalBook.received\n\t\ttype : uint256\n\n  ```\n\n#### totalShares\n\u003e - Total shares issued for a given proposal\n  ```yaml\n  - name: totalShares\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: _totalShares\n\t\ttype : uint256\n\n  ```\n\n#### closedProposal\n\u003e - Check if proposal is closed\n  ```yaml\n  - name: closedProposal\n\t  type: function\n\t  stateMutability: view\n\n\tinputs:\n\t- name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: _closedProposal\n\t\ttype : uint256\n\n  ```\n\n#### addAuth\n\u003e - Add a new authorized user\n  ```yaml\n  - name: addAuth\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: author\n\ttype: address\n\n\toutputs:\n\t\t- []\n\n  ```\n# Core Functions\n\n#### proposalDeposit\n\u003e - Make a deposit to proposal creating new shares\n\u003e - MUST be open proposal\n\u003e - MUST NOT be opened proposal that was closed\n  ```yaml\n  - name: proposalDeposit\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: assets\n\ttype: uint256\n\t-name: receiver\n\ttype: address\n\t-name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: shares\n\t\ttype: uint256\n\n  ```\n\n#### proposalMint\n\u003e - Make a deposit to proposal creating new shares\n\u003e - MUST be open proposal\n\u003e - MUST NOT be opened proposal that was closed\n  ```yaml\n  - name: proposalMint\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: shares\n\ttype: uint256\n\t-name: receiver\n\ttype: address\n\t-name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: assets\n\t\ttype: uint256\n\n  ```\n\n#### proposalWithdraw\n\u003e - Burn shares, receive 1 to 1 value of assets\n\u003e - MUST have closed proposalNumber\n\u003e - MUST have userDeposit greater than or equal to userWithdrawal\n  ```yaml\n  - name: proposalWithdrawal\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: assets\n\ttype: uint256\n\t-name: receiver\n\ttype: address\n\t-name: owner\n\ttype: address\n\t-name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: shares\n\t\ttype: uint256\n\n  ```\n\n#### proposalRedeem\n\u003e - Burn shares, receive 1 to 1 value of assets\n\u003e - MUST have closed proposal number\n\u003e - MUST have userDeposit greater than or equal to userWithdrawal\n  ```yaml\n  - name: proposalRedeem\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: shares\n\ttype: uint256\n\t-name: receiver\n\ttype: address\n\t-name: owner\n\ttype: address\n\t-name: proposal\n\ttype: uint256\n\n\toutputs:\n\t\t- name: assets\n\t\ttype: uint256\n\n  ```\n\n#### proposalOpen\n\u003e - Issue new proposal\n\u003e - MUST create new proposal number\n\u003e - MUST account for amount withdrawn\n  ```yaml\n  - name: proposalOpen\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: token\n\ttype: address\n\t-name: amount\n\ttype: uint256\n\t-name: receiver\n\ttype: address\n\t-name: num\n\ttype: uint256\n\n\toutputs:\n\t\t- name: proposalNum\n\t\ttype: uint256\n\n  ```\n\n#### proposalClose\n\u003e - Close an opened proposal\n\u003e - MUST account for amount received\n\u003e - MUST be a proposal that is less than or equal to current proposal\n  ```yaml\n  - name: proposalClose\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: token\n\ttype: address\n\t-name: proposal\n\ttype: uint256\n\t-name: amount\n\ttype: uint256\n\t-name: num\n\ttype: uint256\n\n\toutputs:\n\t\t- name: close\n\t\ttype: bool\n\n  ```\n\n#### depositReserve\n\u003e - Optional accounting for tokens deposited by owner\n\u003e - MUST be reserve rOwner\n  ```yaml\n  - name: depositReserve\n\t  type: function\n\t  stateMutability: nonpayable\n\n\tinputs:\n\t- name: token\n\ttype: address\n\t-name: sender\n\ttype: address\n\t-name: amount\n\ttype: uint256\n\n\toutputs:\n\t\t- name: deposit\n\t\ttype: bool\n\n  ```\n\n# Events\n\n#### proposals\n  ```yaml\n\t- name: token\n\tindexed: true\n\ttype: address\n\t\n\t- name: proposalNum\n\tindexed: true\n\ttype: uint256\n\t\t\n\t- name: amount\n\tindexed: true\n\ttype: uint256\n\t\n\t- name: recipient\n\tindexed: false\n\ttype: address\n\n  ```\n\n#### depositR\n  ```yaml\n\t- name: token\n\tindexed: true\n\ttype: address\n\t\n\t- name: amount\n\tindexed: true\n\ttype: uint256\n\n\t-name: time\n\tindexed: true\n\ttype: uint256\n\n\t- name: count\n\tindexed: false\n\ttype: uint256\n\n  ```\n\nThe key words \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in this document are to be interpreted as described in RFC 2119 and RFC 8174.\n\n## Rationale\n\nThe reserve is designed to be a basic implementation of the reserve interface. Other non specified conditions should be addressed on case by case instances. Reserves use [ERC-20](../EIPS/eip-20.md) for shares and [ERC-4626](../EIPS/eip-4626.md) for creations of shares within proposals. All accounting measures are designed to enforce audit practices based on use case. \n\n## Backwards Compatibility\n\nTokenized reserves are made compatible with [ERC-20](../EIPS/eip-20.md) and [ERC-4626](../EIPS/eip-4626.md).\n\n## Security Considerations\n\nNeeds discussion.\n\n## Copyright\n\nCopyright and related rights waived via [CC0](../LICENSE.md).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjimstir%2Freserve-vault","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjimstir%2Freserve-vault","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjimstir%2Freserve-vault/lists"}