{"id":18487522,"url":"https://github.com/RequestNetwork/RequestTokenSale","last_synced_at":"2025-04-08T20:31:23.824Z","repository":{"id":71763299,"uuid":"104262563","full_name":"RequestNetwork/RequestTokenSale","owner":"RequestNetwork","description":null,"archived":false,"fork":false,"pushed_at":"2018-02-05T04:52:33.000Z","size":816,"stargazers_count":64,"open_issues_count":0,"forks_count":20,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-11-06T12:59:58.715Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/RequestNetwork.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}},"created_at":"2017-09-20T20:07:44.000Z","updated_at":"2024-04-02T10:12:10.000Z","dependencies_parsed_at":"2023-03-02T06:45:13.081Z","dependency_job_id":null,"html_url":"https://github.com/RequestNetwork/RequestTokenSale","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/RequestNetwork%2FRequestTokenSale","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RequestNetwork%2FRequestTokenSale/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RequestNetwork%2FRequestTokenSale/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RequestNetwork%2FRequestTokenSale/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RequestNetwork","download_url":"https://codeload.github.com/RequestNetwork/RequestTokenSale/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247922927,"owners_count":21018893,"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":"2024-11-06T12:50:31.586Z","updated_at":"2025-04-08T20:31:23.812Z","avatar_url":"https://github.com/RequestNetwork.png","language":"JavaScript","readme":"# Request Network Token Sale\nIn this document, we describe the token sale specification and implementation,\nand give an overview over the smart contracts structure.\n\nThe code has been audited by [Quantstamp](https://quantstamp.com/) (Vajih Montaghami, Ed Zulkoski and Steven Stewart), [Clement Lesaege](https://www.linkedin.com/in/cl%C3%A9ment-lesaege-a326b9ab/?ppe=1), CTO at Kleros and [Iexec](http://iex.ec) (François Branciard and\nGilles Fedak)\n\n\n\n\n\n## Informal Specification\nThe token sale is open only to registered users.\nEvery user has the same individual cap for the amount of Ether he can contribute.\nIn the sale, a capped number of tokens is offered (e.g. there is a hard cap for raised Ether).\n\nIn the first 24 hours user contribution is limited by the individual cap.\nIn the second 24 hours, the individual cap doubles.\nIn the 24 hours thereafter, the individual cap doubles again etc.. until token supply is depleted.\n\nPreminted tokens are allocated to 4 different addresses.\n* 500000000 REQ (50%) are sent to the token sale contract\n* 150000000 REQ (15%) are sent to the team vesting contract\n* 150000000 REQ (15%) are sent to the foundation multisig wallet\n* 200000000 REQ (20%) are sent to the early investors multisig wallet\n\n\n\n## Detailed description\n\n### Overview of the flow\nThe start time of the token sale is denoted by T.\n\n1. On T - 5 days, we deploy `RequestTokenSale.sol` which will deploy also `Requestoken.sol`. Then, we list users for the whitelist.\nThe listing is done by us with a standard private key.\nUpon deployment, preminted tokens are already distributed to 4 different addresses.\nWe manually verify that preminted tokens were assigned to the correct addresses.\nToken transfers are enabled only for the early investors multisig wallet, the foundation multisig wallet and the token sale contract,\nWe start to give the token to the early investor via the early investors multisig wallet.\n\n2. On T - 3, we compute the individual cap and set it up on the blockchain thanks to the entry \"RequestTokenSale/setBaseEthCapPerAddress()\"\n\n3. On T-1, baseEthCapPerAddress and whitelist are not modifiable anymore. \nWe check the cap and the whitelist.\n\n4. On T, the sale starts. At this point users can participate according to the individual cap.\nIt is possible to buy several times, as long as cap is not exceeded.\n5. On T+1, the sale continues but the individual cap is doubled.\n6. On T+2, the sale continues if the hard cap is not reached with the individual cap being doubled again.\n7. On T+3, the sale continues if the hard cap is not reached with the individual cap being doubled again.\n\n8. On T+4, token sale is over. \nWe transfer the tokens that are not sold to the foundation multisig wallet with the entry RequestTokenSale.drainRemainingToken()\n\n9. On T+7, tokens are tradable for everyone.\n\n\n\n### Per module description\nThe system has 2 modules : the token sale (RequestTokenSale.sol) and the token (RequestToken.sol)\n\n#### The token sale (RequestTokenSale.sol)\nImplemented in `RequestTokenSale.sol`. \n\nIt inherits from `StandardCrowdsale.sol` by Open Zeppelin with small changes (see REQUEST-NOTE in comments) providing the basic check for the token sale\n\nIt inherits from `CappedCrowdsale.sol` by Open Zeppelin providing the hard cap\n\nIt inherits from `ProgressiveIndividualCappedCrowdsale.sol` developped by Request, providing the progressive individual cap.\n\nIt inherits from `WhitelistedCrowdsale.sol` developped by Request, providing the White list mechanism\n\nIt uses `SafeMath.sol` by Open Zeppelin\n\nOwner can list and delist users until the last 24h before the token sale.\nOwner can modify the individual base cap until the last 24h before the token sale.\n\nBecause we expect \u003e 10k users, we must start uploading the users before we have a full list.\nFor this reason we also have an optimized version of listing which can take an array as input.\n\n#### The token (RequestToken.sol)\nImplemented in `RequestToken.sol`. \nIt inherits from `StandardToken.sol` by Open Zeppelin (ERC20 standard token)\nIt inherits from `Ownable.sol` by Open Zeppelin\nIt uses `SafeMath.sol` by Open Zeppelin\n\nThe token is fully compatible with ERC20 standard, with the next two additions:\n1. The tokens become transferable 7 days after the token sale start.\nTo be more precise, only the token sale contract, the early investors multisig wallet and foundation multisig wallet are allowed to transfer tokens before.\n\n2. A draining function (for ERC20 tokens), in case of.\n\n### Use of zeppelin code\nWe use open-zeppling code for `SafeMath`, `Ownable` and `StandardToken` logic (and as base code : `StandardCrowdsale.sol`).\n\n# Testrpc commandline\ntestrpc \n--account=\"0xad34324f7371dbe4504d3a10239dc1b539839a40ab5ce5938027b1c9dc3430bd,10000000000000000000000000000000000000000000000000000000000000000000000000000\" \n--account=\"0x1ba414a85acdd19339dacd7febb40893458433bee01201b7ae8ca3d6f4e90994,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0x48b97a730734725f3e7cc91cdee82a59c93c1f976c811a4a8b790602e7fd619f,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0xb383a09e0c750bcbfe094b9e17ee31c6a9bb4f2fcdc821d97a34cf3e5b7f5429,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0x5f1859eee362d44b90d4f3cdd14a8775f682e08d34ff7cdca7e903d7ee956b6a,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0x311b38806f4fe591edee839fc7240cd4cf136a81dc69444fcf3c4ce8aba20e0c,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0x3b1b8f928630142d62878e521161780a873961d70002c4d7dabd8e4eea35982f,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0xaea22713416604d48ef525a7c65aea87a638227fb6e42f22e9f412fa99151ec4,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0x69ce511e39c01aabc46bf6280ed0454f83f174a70448b2496e294f359af9d484,10000000000000000000000000000000000000000000000000000000000000000000000000000\"\n--account=\"0x97292cc6c00ec2cb8be515be4d6af2ed15e5466587408f57cb2ff46a57c8b5a2,10000000000000000000000000000000000000000000000000000000000000000000000000000\" \n","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRequestNetwork%2FRequestTokenSale","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRequestNetwork%2FRequestTokenSale","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRequestNetwork%2FRequestTokenSale/lists"}