{"id":27337771,"url":"https://github.com/themulanfiles/aire","last_synced_at":"2026-04-14T10:33:23.158Z","repository":{"id":108144474,"uuid":"258394903","full_name":"themulanfiles/AIRE","owner":"themulanfiles","description":"A decentralized Application to Mock Twitter: Be Free To Say Your Thoughts Without Censorship by central authorities. Hack back your freedom of Speech into the Ether, and go on AIRE. ","archived":false,"fork":false,"pushed_at":"2020-05-02T20:43:17.000Z","size":903,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-26T22:47:53.048Z","etag":null,"topics":["apollo","apollo-client","dapp","decentralization","decentralized","decentralized-application","graphql","react","react-redux","reactjs","redux","solidity","solidity-contracts","thegraphprotocol","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"RedEtherProject/AIRE","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":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":"redetherproject","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2020-04-24T03:27:29.000Z","updated_at":"2023-08-30T01:23:37.000Z","dependencies_parsed_at":"2025-04-02T22:21:51.142Z","dependency_job_id":null,"html_url":"https://github.com/themulanfiles/AIRE","commit_stats":null,"previous_names":["themulanfiles/aire"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/themulanfiles/AIRE","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FAIRE","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FAIRE/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FAIRE/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FAIRE/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/themulanfiles","download_url":"https://codeload.github.com/themulanfiles/AIRE/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/themulanfiles%2FAIRE/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31793216,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: 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":["apollo","apollo-client","dapp","decentralization","decentralized","decentralized-application","graphql","react","react-redux","reactjs","redux","solidity","solidity-contracts","thegraphprotocol","typescript"],"created_at":"2025-04-12T15:18:53.705Z","updated_at":"2026-04-14T10:33:23.143Z","avatar_url":"https://github.com/themulanfiles.png","language":"TypeScript","readme":"Welcome to AIRE\n\nA decentralized Application to Mock Twitter: Be Free To Say Your Thoughts Without Censorship by central authorities. \n\nHack back your freedom of Speech into the Ether, and go on AIRE. \n\nFor Free Thinkers who recognize the new Englightenment we are about to enter!\n\n- Run by Solidity transactions on the Ethereum Blockchain\n\n- to AIRE is to HUMAN; Freedom of Speech is a human right!\n- POST functionality : AIRE your message into the Ether\n  - non-blocking, non-censorship, nobody can get blocked off or reported by the platform, \n  - but there is a limit to how much you are allowed to AIRE for free every day, AIRE more than the limit and you can pay in ETH!\n  - Followers can ECHO (analogous to a retweet) an AIRE, \n  - Follwers can MIST (analogous to like or \"hear\")\n  - By the way, everyone is everyone's followers... \nFunctionalities: See the Wiki\n\n\n\n\nServing on An Ethereum Serverless platform for tracking smart contracts:\n\u003e npm -g install embark\n\n\n\n\u003e npm install -g ethereumjs-testrpc\n\n\n\u003e testrpc\n\n\u003e truffle migrate\n\n\n\u003e npm run dev\n\n\n\u003e truffle test\n\n\n\u003e npm run build\n\nConfigs:\n\n\nWhat is The Graph Protocol is a way of indexing data on decentralized Blockchains. \n-You can create your own subgraph to meet the requirements of you dApp\n\n\nSet Up Graph Protocal Cli https://thegraph.com/docs/define-a-subgraph#install-the-graph-cli\n\n -if you aren't interested in the theory behind this and simply want to create a subgraph for you smart contract, simply go to quickstart\n\n Quick Start:\n  1. set up Ganache CLI \n    \u003e npm install -g truffle ganache-cli\n    \u003e ganache-cli -h 0.0.0.0, by default, Ganache will bind to 127.0.0.1\n      the -h is necessary for Docker image\n  2. start local Node Graph\n    \u003e git clone https://github.com/graphprotocol/graph-node/\n      clone a graph node\n    \u003e cd graph-node/docker\n\n    If you are using Linux, I'm sorry. \n    https://thegraph.com/docs/quick-start#local-development\n\n    Open Docker Desktop\n    \u003e docker-compose up\n    Notice the Graph Protocol uses Postgres for it's underlying database\n    You should get a confirm message that the database is ready to accept connections\n\n\n\n    a. Because it has recently become more difficult recently to work with a local ether net, it is better to just start using a testnet.\n    infura: \n\n\n  3. initialize new subgraph instance\n    \u003e npm install -g @graphprotocol/graph-cli\n\n    Create the instance in the root of the project:\n    \u003e graph init --from-example \u003cGITHUB_USERNAME\u003e/\u003cSUBGRAPH_NAME\u003e [\u003cDIRECTORY\u003e]\n      graph init --from-example angiechangpagne/aire\n\n\n      graph init angiechangpagne/subgraph-aire\n  4. deploy example smart contract to \n    \n    write the contract - .sol\n    \u003e cd aire\n    \u003e truffle compile\n    \u003e truffle migrate\n\n    Translate mirror the backend HTTP requests with SOlidity functions, even handlers. \n\n    If there is a migration issue, check that truffle.js config file matches the settings on Local Ethereum Net(Ganache). Switch from port 7545 to 8545\n\n    Copy the account address from the Migration, this is the public address of the Contract: 0x0061Bd8aC3bE503b4422da5db980043839328588\n\n    Deploys a GravatarRegistry smart contract to ganache\n    Sets up sample data for protocol to index on\n\n  5. Deploy Contract to Ganache(written in Solidity or Rust)\n    Move to root dir \n    \u003e sed -i -e \\\n    's/0x2E645469f354BB4F5c8a05B3b30A929361cf77eC/0x0061Bd8aC3bE503b4422da5db980043839328588/g' \\\n    subgraph.yaml\n    \n    \u003e sed -i -e \\\n    's/0x2E645469f354BB4F5c8a05B3b30A929361cf77eC/0x0061Bd8aC3bE503b4422da5db980043839328588/g' \\ subgraph.yaml\n\nsed -i -e \\\n    's/0x2E645469f354BB4F5c8a05B3b30A929361cf77eC/\u003cCONTRACT_ADDRESS\u003e/g' \\\n    subgraph.yaml\n\nsed -i -e \\'s/0x2E645469f354BB4F5c8a05B3b30A929361cf77eC/0x0061Bd8aC3bE503b4422da5db980043839328588/g' \\\n    subgraph.yaml\n  6. use subgraph in React dApp Client\n\nI. Defining your own Subgraph\n\nCreating a subgraph will create a custom scheme definition on which data to index from Ethereum and how it will be stored. After you deploy a subgraph, it will be permanently part of the global graph of blockchain data. \n- subgraph.yaml: Contains the subgraph manifest which determines the indexing\n- schema.graphql: GraphQL schema that defines what data is stored and the shape of queries\n- mapping.ts -AssemblyScript Mappings: AssemblyScript translates event data on Ether to graphQL fields in the schema with typescript.\n\n\n\n\n\u003e truffle init\n\n\nII. Write Mappings\nspecVersion: 0.0.1\ndescription: Gravatar for Ethereum\nrepository: https://github.com/graphprotocol/example-subgraph\nschema:\n  file: ./schema.graphql\ndataSources:\n  - kind: ethereum/contract\n    name: Gravity\n    network: mainnet\n    source:\n      address: '0x2E645469f354BB4F5c8a05B3b30A929361cf77eC'\n      abi: Gravity\n      startBlock: 6175244\n    mapping:\n      kind: ethereum/events\n      apiVersion: 0.0.1\n      language: wasm/assemblyscript\n      entities:\n        - Gravatar\n      abis:\n        - name: Gravity\n          file: ./abis/Gravity.json\n      eventHandlers:\n        - event: NewGravatar(uint256,address,string,string)\n          handler: handleNewGravatar\n        - event: UpdatedGravatar(uint256,address,string,string)\n          handler: handleUpdatedGravatar\n      callHandlers:\n        - function: createGravatar(string,string)\n          handler: handleCreateGravatar\n      blockHandlers:\n        - function: handleBlock\n        - function: handleBlockWithCall\n          filter:\n            kind: call\n      file: ./src/mapping.ts\n\nGraphQL Schema:\n\nDefine Entities:\n\n\n\n\n\nPotential Other Networks\n1. local testnet: Ganache\n2. closure scope for injecting Web3: Metamask\n3. Ethereum testnets: Ropsten, Rinkeby, Kovan \n3. Production: mainnet(require ETH)\n\nWriting Contracts:\n1. Which language?\n  a. Solidity(.sol)\n  b. Rust(.rs)\n2. Contracts\n  a. fields-uint\n  b. Solidity Structures\n    i. constructor\n    ii. struct\n  c. mappings(arrays)\n  d. events and calls\n    i. CRUD functions\n    ii. handlers for CRUD functions\nMigrations\n1. Analogy to Redux - Since the blockchain data structure is immutablem, after handling an event to check for validity(proof if work mechanism) between public keys and transactions it processes the state by creating a new block, a migration(this is not a mutation, but a shift of a state)\n\n\n\n\n\nFolder Structure:\n- AIRE\n  - Subgraph\n  - AIREA(Client from npm create-react-app airea --typescript)\n  - Contracts\n  - Migrations\n\n\n\n  Communicating Client Side to Smart Contracts\n  - graphql\n    Queries will be translated from GraphQL using the Graph Node's endpoint and translated over through its internal indexing protocol. A great way of testing the queries is with this tool: https://chrome.google.com/webstore/detail/project-artemis/gpncgocimlpojfgbphndpjgkkhdjhnpb\n\n  - Assembly Script(lower level language)\n\n\n\nClient Side: Now Create the Client Side React App\n\u003e npx create-react-app aire-ether --typescript\n\nApollo GraphQL Schema and Apollo Server\naire-ether-apollo \n\n\n\nAPI Design:\n1. AIRE = POST a tweet   api/AIRE\n2. ECHO = POST a retweet \n3. VACUUM = DELETE and AIRE api/delete/?id\n4. ETHER = GET ALL news Feed api/get\n5. PROFILE = get user profile api/get/?id\n6. MIST = Like an \"AIRE\", equvalent to \"heart\" , \"like\"\n\nAire.sol\nECHO-\n  increment echoCount to a specific aireId, \n  while also appending the aireId's address to the entity's airePosts [] array\n  entityId does not matter\n\n  How is the Data Stored with Postgres on the Blockchain?\n  - Use of IPFS(Interplanetary File Transfer) is peer to peer hosted, in the blockchain we are all each other's database. We will store each other's \"AIREs\" and everytime we post an \"ECHO\"(as in retweet) we re-reference the public hash address of that storage node. \n\n  - Because of the structure of the Blockchain, it is very difficult to tamper the truth of the data, as you need a majority of 51% to alter the true state. \n\n\n\n\n\n  “Let us advance on Chaos and the Dark”\n― Ralph Waldo Emerson, Self-Reliance\n\n\n\n\nEtherscan.io: https://etherscan.io/","funding_links":["https://patreon.com/redetherproject"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemulanfiles%2Faire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthemulanfiles%2Faire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthemulanfiles%2Faire/lists"}