{"id":23636610,"url":"https://github.com/0xscratch/unore-uno-dao","last_synced_at":"2026-01-24T05:33:04.185Z","repository":{"id":215108456,"uuid":"738140180","full_name":"0xScratch/unore-uno-dao","owner":"0xScratch","description":null,"archived":false,"fork":false,"pushed_at":"2024-01-02T14:40:32.000Z","size":659,"stargazers_count":0,"open_issues_count":0,"forks_count":3,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-05-19T05:37:45.883Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"Uno-Re/unore-uno-dao","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/0xScratch.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,"governance":null,"roadmap":null,"authors":null}},"created_at":"2024-01-02T14:18:51.000Z","updated_at":"2024-01-02T14:18:51.000Z","dependencies_parsed_at":"2024-01-21T18:53:35.373Z","dependency_job_id":null,"html_url":"https://github.com/0xScratch/unore-uno-dao","commit_stats":null,"previous_names":["aryan9592/unore-uno-dao","0xscratch/unore-uno-dao"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/0xScratch/unore-uno-dao","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xScratch%2Funore-uno-dao","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xScratch%2Funore-uno-dao/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xScratch%2Funore-uno-dao/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xScratch%2Funore-uno-dao/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/0xScratch","download_url":"https://codeload.github.com/0xScratch/unore-uno-dao/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/0xScratch%2Funore-uno-dao/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28713388,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T05:28:26.568Z","status":"ssl_error","status_checked_at":"2026-01-24T05:28:10.840Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-12-28T06:14:11.403Z","updated_at":"2026-01-24T05:33:04.167Z","avatar_url":"https://github.com/0xScratch.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Docs for UNO DAO Contracts \n\n### Vote Escrow Contract \n\nUsers deposit Uno tokens in this contract and get voting power on the basis of deposit amount and lock period. Uno token depositors in voting escrow can yield reward from VeUnoYielDistributor. \nReference: \nhttps://github.com/curvefi/curve-dao-contracts/blob/master/contracts/VotingEscrow.vy\n\n\n### veUNO Yield Distributor\n\nThe purpose of the contract is to provide inflationary token rewards to our community members for token locks upto 4 years. The rationale behind this implementation is that the insurance premium/fees generated by the protocol is being used to buyback and burn $UNO tokens over time in regular intevals. \n\n- Import latest version contract from openzepplin\n- Update state, function and its parameters naming convention\n- Remove SafeMath, and update operations according to solidity pragma - - - version \u003e 0.8.0\n- Update implementation of function where emitted_token_address variable is used\n- Use Openzepplin's SafeTransfer library for secure transfer of ERC20\n- Take _user param in notifyRewardAmount function, and update logic accordingly\n- Remove assignment of public state variables to default values\n- Update state, mapping from private to public\n- Implement Owned contract instead of using Openzepplin's Ownable library similar to Ownable2Step\n- Add checker function in Resolver to notifyAmount to  yieldDistributor instead of execNotifyReward for Gelato automation\n  \n### IVeUnoDaoYieldDistributor\nInterface to interact with VeUnoDaoYielDistributor, add lastUpdateTime function\n\n\n### Resolver \n\nIts primarily a contract which allows us to allow epoch renewals for our existing veUNO holders providing a consistent state of returns in the form of APY. Even though this APY calculation is not very straightforward due to the decay implementation its a close enough approximation.\n\nFor each contracts try to write some basic invariant conditions which needs to be held true:\nThis can include function-level invariants that must hold with respect to the execution of the function (e.g., addition is commutative) or system-level invariants (e.g., the balance of a user cannot be greater than the total supply). We will specify the invariants in English and identify their pre-conditions (e.g., a parameter is within a given bound).\n\n\n### Gnosis Safe Contracts \n\nUsed as a multisig, multiple EOA account sign proposal to execute transaction\nUsed in SSIP-SSRP to kill and pause pool, which deprecates functions.\nUsed as timelock address in VeUnoDaoYieldDistributor contract to\n- Recover ERC20 token \n- Set yieldDuration \n- Toggle Greylist\n- Toggle RewardNotifier\n- Set pause \n- Set yield rate\n- Set time lock \nversion of contracts  \u003e=0.7.0 \u003c0.9.0;\n\nReference:\ndoc: https://app.safe.global/welcome\nGithub: https://github.com/safe-global/safe-contracts/tree/main/contracts\n\n### Owned contract\nImplement Owned contract instead of using Openzepplin's Ownable library similar to Ownable2Step\nUsed for security in contract to check caller is owner, change nominate new owner and accept ownership\nUsed in VeUnoDaoYieldDistributor and Resolver contract\n\n\n#### Running a test coverage\n[solidity-coverage](https://hardhat.org/plugins/solidity-coverage.html) from Hardhat external plugin is included.\nconfiguration file is ['.solcover'].solcover.js)\n```\nnpx hardhat coverage\n```\n\n\n## Contracts in scope (commit: 2332f79670f67530f71dbdad2f54949893c1fb0d)\n\n| Type | File   | Logic Contracts | Interfaces | Lines | nLines | nSLOC | Comment Lines | Complex. Score | Capabilities |\n| ---- | ------ | --------------- | ---------- | ----- | ------ | ----- | ------------- | -------------- | ------------ | \n| 📝 | ./access/Owned.sol | 1 | **** | 33 | 33 | 26 | 1 | 17 | **** |\n| 📚 | ./libraries/TransferHelper.sol | 1 | **** | 28 | 28 | 19 | 5 | 26 | **** |\n| 📝 | ./SmartWalletChecker.sol | 1 | **** | 13 | 13 | 10 | 1 | 9 | **\u003cabbr title='Uses Assembly'\u003e�\u003c/abbr\u003e** |\n| 📝 | ./apps/VeUnoDaoYieldDistributor.sol | 1 | **** | 344 | 324 | 228 | 46 | 119 | **** |\n|  | ./misc/Helpers.sol | **** | **** | 23 | 23 | 16 | 5 | 10 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e** |\n| 📝 | ./Ownership.sol | 1 | **** | 67 | 63 | 35 | 17 | 21 | **** |\n| 📝 | ./automation/Resolver.sol | 1 | **** | 78 | 74 | 61 | 2 | 31 | **\u003cabbr title='Uses Hash-Functions'\u003e🧮\u003c/abbr\u003e** |\n| 📝📚🔍 | **Totals** | **6** | **0** | **586**  | **558** | **395** | **77** | **233** | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e\u003cabbr title='Initiates ETH Value Transfer'\u003e📤\u003c/abbr\u003e\u003cabbr title='DelegateCall'\u003e👥\u003c/abbr\u003e\u003cabbr title='Uses Hash-Functions'\u003e🧮\u003c/abbr\u003e\u003cabbr title='Handles Signatures: ecrecover'\u003e🔖\u003c/abbr\u003e\u003cabbr title='Unchecked Blocks'\u003eΣ\u003c/abbr\u003e** |\n\n\n## Contracts not in scope for audit (commit: 2332f79670f67530f71dbdad2f54949893c1fb0d)\n\n| Type | File   | Logic Contracts | Interfaces | Lines | nLines | nSLOC | Comment Lines | Complex. Score | Capabilities |\n| ---- | ------ | --------------- | ---------- | ----- | ------ | ----- | ------------- | -------------- | ------------ | \n| 📝 | ./VotingEscrow.sol | 1 | **** | 855 | 813 | 514 | 221 | 211 | **\u003cabbr title='Initiates ETH Value Transfer'\u003e📤\u003c/abbr\u003e\u003cabbr title='Unchecked Blocks'\u003eΣ\u003c/abbr\u003e** |\n| 📝 | ./safe/GnosisSafe.sol | 1 | **** | 422 | 360 | 201 | 135 | 189 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e\u003cabbr title='Initiates ETH Value Transfer'\u003e📤\u003c/abbr\u003e\u003cabbr title='Uses Hash-Functions'\u003e🧮\u003c/abbr\u003e\u003cabbr title='Handles Signatures: ecrecover'\u003e🔖\u003c/abbr\u003e** |\n| 📝 | ./safe/base/ModuleManager.sol | 1 | **** | 133 | 123 | 65 | 47 | 100 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e** |\n| 📝 | ./safe/base/Executor.sol | 1 | **** | 27 | 21 | 15 | 5 | 36 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e\u003cabbr title='DelegateCall'\u003e👥\u003c/abbr\u003e** |\n| 📝🔍 | ./safe/base/GuardManager.sol | 1 | 1 | 50 | 31 | 21 | 8 | 27 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e** |\n| 📝 | ./safe/base/FallbackManager.sol | 1 | **** | 53 | 53 | 33 | 14 | 73 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e** |\n| 📝 | ./safe/base/OwnerManager.sol | 1 | **** | 149 | 141 | 80 | 49 | 83 | **** |\n| 📝 | ./safe/GnosisSafeL2.sol | 1 | **** | 86 | 70 | 42 | 23 | 15 | **\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e** |\n| 📝 | ./safe/common/SecuredTokenTransfer.sol | 1 | **** | 35 | 31 | 19 | 11 | 42 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e** |\n| 📝 | ./safe/common/SelfAuthorized.sol | 1 | **** | 16 | 16 | 10 | 4 | 4 | **** |\n| 📝 | ./safe/common/Singleton.sol | 1 | **** | 11 | 11 | 4 | 6 | 2 | **** |\n| 📝 | ./safe/common/EtherPaymentFallback.sol | 1 | **** | 13 | 13 | 7 | 4 | 7 | **\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e** |\n| 📝 | ./safe/common/SignatureDecoder.sol | 1 | **** | 36 | 28 | 11 | 16 | 39 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e** |\n| 📝 | ./safe/common/StorageAccessible.sol | 1 | **** | 47 | 47 | 22 | 22 | 79 | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e\u003cabbr title='DelegateCall'\u003e👥\u003c/abbr\u003e** |\n| 📝 | ./safe/common/Enum.sol | 1 | **** | 8 | 8 | 4 | 3 | 1 | **** |\n| 📚 | ./safe/external/GnosisSafeMath.sol | 1 | **** | 54 | 54 | 24 | 22 | 6 | **** |\n| 📝 | ./governance/GovernanceStrategy.sol | 1 | **** | 93 | 79 | 30 | 41 | 22 | **** |\n| 📝 | ./governance/Governance.sol | 1 | **** | 495 | 454 | 244 | 109 | 173 | **\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e\u003cabbr title='Uses Hash-Functions'\u003e🧮\u003c/abbr\u003e\u003cabbr title='Handles Signatures: ecrecover'\u003e🔖\u003c/abbr\u003e** |\n| 📝 | ./governance/ProposalValidator.sol | 1 | **** | 192 | 155 | 70 | 72 | 42 | **** |\n| 📝 | ./governance/Executor.sol | 1 | **** | 29 | 29 | 19 | 8 | 7 | **** |\n| 📝 | ./governance/ExecutorWithTimelock.sol | 1 | **** | 283 | 245 | 107 | 83 | 86 | **\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e\u003cabbr title='DelegateCall'\u003e👥\u003c/abbr\u003e\u003cabbr title='Uses Hash-Functions'\u003e🧮\u003c/abbr\u003e** |\n| 📝📚🔍 | **Totals** | **21** | **1** | **3088**  | **2782** | **1542** | **903** | **1244** | **\u003cabbr title='Uses Assembly'\u003e🖥\u003c/abbr\u003e\u003cabbr title='Payable Functions'\u003e💰\u003c/abbr\u003e\u003cabbr title='Initiates ETH Value Transfer'\u003e📤\u003c/abbr\u003e\u003cabbr title='DelegateCall'\u003e👥\u003c/abbr\u003e\u003cabbr title='Uses Hash-Functions'\u003e🧮\u003c/abbr\u003e\u003cabbr title='Handles Signatures: ecrecover'\u003e🔖\u003c/abbr\u003e\u003cabbr title='Unchecked Blocks'\u003eΣ\u003c/abbr\u003e** |\n\n\nThese are already audited smart contracts and we are keeping it out of scope of current audit.\n\nAave governance 2\n- Repository: https://github.com/aave/governance-v2/tree/master/contracts/governance \n- Audit report: https://github.com/aave/governance-v2/blob/master/audits/PeckShield-Audit-AaveGovernance2-final.pdf \n\nGnosis Safe\n- Repository: https://github.com/safe-global/safe-contracts \n- Audit report: https://github.com/safe-global/safe-contracts/blob/main/docs/Safe_Audit_Report_1_4_0.pdf \n\nVotingEscrow\n- Repository: https://github.com/curvefi/curve-dao-contracts/blob/master/contracts/VotingEscrow.vy \n- Audit report: https://github.com/mixbytes/audits_public/blob/master/Curve%20Finance/DAO%20Voting/Curve%20Finance%20DAO%20Voting%20Security%20Audit%20Report.pdf \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xscratch%2Funore-uno-dao","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F0xscratch%2Funore-uno-dao","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F0xscratch%2Funore-uno-dao/lists"}