{"id":27337759,"url":"https://github.com/themulanfiles/exodus","last_synced_at":"2025-09-01T04:41:00.666Z","repository":{"id":108145035,"uuid":"257488907","full_name":"themulanfiles/Exodus","owner":"themulanfiles","description":"A Mass Migration into Web3 as we venture to the age of decentralization","archived":false,"fork":false,"pushed_at":"2020-05-02T03:49:59.000Z","size":973,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-12T15:18:52.930Z","etag":null,"topics":["dapp-example","dapps","ethereum-contract","ganache-cli","react","react-hooks","solidity-contracts"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"RedEtherProject/Exodus","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/themulanfiles.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":"2020-04-21T05:24:59.000Z","updated_at":"2023-08-30T01:23:38.000Z","dependencies_parsed_at":"2025-04-02T22:11:47.383Z","dependency_job_id":"0c948eb6-3a00-4bc8-88b9-8900f10de12a","html_url":"https://github.com/themulanfiles/Exodus","commit_stats":null,"previous_names":["themulanfiles/exodus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/themulanfiles/Exodus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FExodus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FExodus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FExodus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FExodus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/themulanfiles","download_url":"https://codeload.github.com/themulanfiles/Exodus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FExodus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273075774,"owners_count":25041246,"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-09-01T02:00:09.058Z","response_time":120,"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":["dapp-example","dapps","ethereum-contract","ganache-cli","react","react-hooks","solidity-contracts"],"created_at":"2025-04-12T15:18:52.215Z","updated_at":"2025-09-01T04:41:00.601Z","avatar_url":"https://github.com/themulanfiles.png","language":"TypeScript","readme":"# Exodus\nA Mass Migration into Web3 as we venture to the age of decentralization\n\nGoals of Building a Decentralized React MVP:\n1. Reading and Writing Data from a block chain\n2. Business Logic to run application purpose\n\n\nNote: create-react-app is no longer global, if it is in your global directory, use:\n\u003e npm install -g create-react-app\n\nThen: \n\u003e npx create-react-app exodus --template typescript \ntsconfig has already been added\n\nIt is recommended to use a type system as smart contracts on the blockchain are immutable. \n\nIf you decide to use prop-types with Javascript, just remember that prop-types will show errors during runtime while typescript types will not pass compile time. \n\n\nDifferent Types of Networks on Ether:\n1. Local Network: Ganache \n2. Testnet(ropsten, rinkeby, goerli, kovan)\n3. Mainnet(Requires ETH)\n\nWe will be developing on the local Ganache Network, \nDownload https://www.trufflesuite.com/ganache\n\nInstall a wallet like MetaMask for the browser to interact with the Ether Blockchain. \nAdd to Chrome: https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?hl=en\n\nCreate a metamask account and be sure to store the credentials, since it is on the blockchain, if lost, you cannot retrieve it again. This is the tradeoff of the inherent annonymity of the Ether.  \nMetamask does this by injecting the scope of Ethereum Blockchain into the browser once it is configured through through. \n\n\u003e npm install -g truffle@5.0.2\n\nSwitch to top Folder in order to create a \"Server\" Folder\n\u003e truffle init\nCreates a contracts and migrations folder\n\u003e touch package.json\nInstall dependencies in root folder\n\u003e npm install -g ethereumjs-testrpc\n\n\nNecessary:\n\n\u003e Solidy Contracts\n\u003e Ganache(A Truffle IDE)\n\u003e Metamask-\n\u003e A version of Web3, Web3js, \n\n\nIn the Migrations.sol folder in contracts, \nMake Sure the version is exact\n\u003e pragma solidity ^0.5.0;\n\nMigrations are essentially action triggers, or dispatched actions, as the entire blockchain can only have a single state in a moment in time. \n\u003e change the contract name to the purpose of the business logic of the applciation, eg \"ToDontList\"\n\n\u003e truffle compile\n\n\nIn order to run the contract on a personal blockchain their config must match ganache defaults, so change the truffle-config by uncommenting the following sections:\n- truffle-config.js\nmodule.exports = {\n  networks: {\n    development: {\n      host: \"127.0.0.1\",\n      port: 7545,\n      network_id: \"*\" // Match any network id\n    }\n  },\n  solc: {\n    optimizer: {\n      enabled: true,\n      runs: 200\n    }\n  }\n}\n\n\nIn the root folder:\n\u003e touch migrations/2_deploy_contracts.js\n\nEach time a new smart contract is created programmtically updates the state through a migration. \n\nCreate the migration file:\nconst Exodus = artifacts.require(\"Migrations\");\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Exodus);\n};\n\n\n- 2_deploy_contracts.js:\n\nmodule.exports = function(deployer) {\n  deployer.deploy(Exodus);\n};\n\n\n\nWith ganache open:\n\u003e truffle migrate\n\n\u003e truffle console\nIn the cconsole:\n\u003e exodus = await Migrations.deployed()\n\n\nadd functionality to the contract, and reset the migrate\n\u003e truffle migrate --reset\n\n\u003e truffle console\n\u003e exodus = await Exodus.deployed()\nMapped as getting all\n\n\u003e exodus = await Exodus.deployed(1)\nThe Id \n\n\n\nImportant React Dependencies:\n\u003e npm install react reactdom typescript \n\u003e npm install web3\n\u003e npm install truffle\n\n\n\n- to reset a contract(since they are immutable)\n\u003e truffle migrate --reset\n\n\u003e truffle compile\n\n\u003e truffle migrate\n\nGet new abi and address\n\n\nThe ABI File:\nThe ABI is the application binary interface\n- The smart contract ABI describes indexing and behavior. \n- contains the address of the smart contract\n\n\n\nTO DO:\n- MORE SOLIDITY DEV TOOLS, \n\n\nGreat TypeChain Dev Tool For Typescript/Solidity Web3 Interactions:\nhttps://github.com/ethereum-ts/TypeChain","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemulanfiles%2Fexodus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthemulanfiles%2Fexodus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemulanfiles%2Fexodus/lists"}