{"id":25249526,"url":"https://github.com/provable-things/steroids","last_synced_at":"2025-10-09T17:04:52.912Z","repository":{"id":45676109,"uuid":"282209768","full_name":"provable-things/steroids","owner":"provable-things","description":"An Aragon app that allows to lock for a customizable amount of time, a quantity of UniV2 tokens in exchange for organization's tokens.","archived":false,"fork":false,"pushed_at":"2020-08-07T15:51:44.000Z","size":657,"stargazers_count":0,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-05T21:43:46.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/provable-things.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":"2020-07-24T12:05:46.000Z","updated_at":"2023-10-07T11:00:51.000Z","dependencies_parsed_at":"2022-08-04T18:30:35.698Z","dependency_job_id":null,"html_url":"https://github.com/provable-things/steroids","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/provable-things/steroids","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/provable-things%2Fsteroids","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/provable-things%2Fsteroids/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/provable-things%2Fsteroids/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/provable-things%2Fsteroids/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/provable-things","download_url":"https://codeload.github.com/provable-things/steroids/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/provable-things%2Fsteroids/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001891,"owners_count":26083197,"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-10-09T02:00:07.460Z","response_time":59,"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-02-12T03:22:25.474Z","updated_at":"2025-10-09T17:04:52.881Z","avatar_url":"https://github.com/provable-things.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# :boom: steroids\n\nAn Aragon app that allows to lock for a customizable amount of time, a quantity of UniV2 tokens in exchange for organization's tokens.\n\n\u0026nbsp;\n\n***\n\n\u0026nbsp;\n\n## :arrow_down: How to install\n\n```\ndao install \u003cDAO address\u003e steroids.open.aragonpm.eth --app-init-args \u003ctoken manager\u003e \u003cvault\u003e \u003cuniv2 token address\u003e \u003cmin lock time\u003e \u003cmax locks\u003e --env aragon:rinkeby\n```\n\n\u0026nbsp;\n\n***\n\n\u0026nbsp;\n\n## :clipboard: How to run locally\n\n```\nyarn install\n```\n\n```\nyarn start\n```\n\n\u0026nbsp;\n\n***\n\n\u0026nbsp;\n\n## :guardsman: Test\n\n```\nyarn test\n```\n\n### Result\n\n```\n    initialize(address _tokenManager, address _vault, address _depositToken, _uint256 _minLockTime _uint256 maxLocks) fails\n      ✓ Should revert when passed non-contract address as token manager (53ms)\n      ✓ Should revert when passed non-contract address as vault\n      ✓ Should revert when passed non-contract address as deposit token\n    initialize(address _tokenManager, address _vault, address address _depositToken, _uint256 _minLockTime, _uint256 maxLocks)\n      ✓ Should set correct variables (39ms)\n      ✓ Should set able to set maxLocks and minLockTime and vault (186ms)\n      ✓ Should not be able to set maxLocks because of no permission (41ms)\n      ✓ Should not be able to set minLockTime because of no permission (46ms)\n      ✓ Should not be able to set a new Vault because of no permission (47ms)\n      ✓ Should not be able to adjust a balance because of no permission (43ms)\n      stake(uint256 _amount, uint256 _lockTime, address _receiver) \u0026 unstake(uint256 _amount)\n        ✓ Should not be able to stake without token approve\n        ✓ Should not be able to perform more stake than allowed (maxLocks) (1365ms)\n        ✓ Should not be able to set maxLocks because of of value too high (71ms)\n        ✓ Should not be able to stake more than you have approved\n        ✓ Should not be able to stake with a lock time less than the minimun one\n        ✓ Should get organization tokens in exchange for uniV2 and viceversa (224ms)\n        ✓ Should not be able to unstake more than you have (120ms)\n        ✓ Should not be able to unstake because it needs to wait the correct time (137ms)\n        ✓ Should not be able to unstake because it needs to wait the correct time (164ms)\n        ✓ Should be able to unstake with many unstaking txs and adjusting balance (385ms)\n        ✓ Should be able to unstake with different lock times (355ms)\n        ✓ Should be able to stake for a non sender address and unstake without adjusting (178ms)\n        ✓ Should not be able to stake for a non sender address and unstake to msg.sender (95ms)\n        ✓ Should be able to insert in an empty slot (6542ms)\n        ✓ Should be able to stake MAX_LOCKS times, unstake until staked locks array is empty and staking other MAX_LOCKS times (2801ms)\n        ✓ Should be able to stake MAX_LOCKS times and unstake in two times (1418ms)\n        ✓ Should be able to unstake from differents locks (1) (350ms)\n        ✓ Should be able to unstake from differents locks (2) (356ms)\n        ✓ Should be able to unstake from differents locks (3) (538ms)\n        ✓ Should be able to unstake from differents locks (4) (479ms)\n        ✓ Should be able to unstake after changing CHANGE_MAX_LOCKS_ROLE until MAX_LOCKS + 1 (1254ms)\n        ✓ Should not be able to stake zero tokens\n      adjustBalanceOf(address _owner)\n        ✓ Should adjust the balance when liquidity increases (142ms)\n        ✓ Should adjust the balance when liquidity decreases (174ms)\n\n\n  33 passing (41s)\n```\n\n\u0026nbsp;\n\n***\n\n\u0026nbsp;\n\n## :rocket: How to publish\n\nCreate an __`.env`__ file with the following format\n\n```\nRINKEBY_PRIVATE_KEY=\nMAINNET_PRIVATE_KEY=\nINFURA_KEY=\n```\n\nRun the local IPFS node:\n\n```\naragon ipfs start\n```\n\nand then publish.\n\n```\nnpx buidler publish \"version or patch/minor/major\" --network \"rinkeby or mainnet\"\n```\n\n\u0026nbsp;\n\n***\n\n\u0026nbsp;\n\n## :white_check_mark: How to verify\n\nAdd the following field to __`.env`__ file\n\n```\nETHERSCAN_API_KEY=\n```\n\nand then verify.\n\n```\nnpx buidler verify-contract --contract-name Steroids --address 'deployed contract address' \"constructor arguments\"\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprovable-things%2Fsteroids","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprovable-things%2Fsteroids","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprovable-things%2Fsteroids/lists"}