{"id":21082778,"url":"https://github.com/renproject/interoperability-examples","last_synced_at":"2025-05-16T09:32:10.473Z","repository":{"id":52240673,"uuid":"231682182","full_name":"renproject/interoperability-examples","owner":"renproject","description":null,"archived":false,"fork":false,"pushed_at":"2020-11-15T23:44:51.000Z","size":52985,"stargazers_count":4,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-14T02:52:02.475Z","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/renproject.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-01-03T23:32:35.000Z","updated_at":"2021-10-05T23:06:33.000Z","dependencies_parsed_at":"2022-08-26T06:10:17.379Z","dependency_job_id":null,"html_url":"https://github.com/renproject/interoperability-examples","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/renproject%2Finteroperability-examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renproject%2Finteroperability-examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renproject%2Finteroperability-examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renproject%2Finteroperability-examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renproject","download_url":"https://codeload.github.com/renproject/interoperability-examples/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254504936,"owners_count":22082116,"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-19T20:15:17.477Z","updated_at":"2025-05-16T09:32:08.568Z","avatar_url":"https://github.com/renproject.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Using GaaS and CaaS for better UX\n\nDevelopers integrating with RenVM can implement a few different strategies to enhance user experience and create truly interoperable cryptocurrency applications.\n\nCheck out a hosted version of the app [here](https://examples.renproject.io/).\n\n### GaaS: remove the need for users to have ETH\n\nWhen building smart contracts that interact with RenVM, you can use patterns to enable methods to be called via the OpenZeppelin [Gas Station Network (GSN)](https://gsn.openzeppelin.com/). The GSN is a decentralized solution for solving user onboarding to Ethereum applications. It allows dapps to pay for their users' transactions in a secure way, so users don’t need to hold ETH to pay for their gas or even set up an account.\n\n### CaaS: accelerate the time to complete transactions\n\nOne thing that developers can do to improve cross-chain user experience is to help users complete actions faster by using funds that have already been shifted. These funds can be accessed in a variety of trustful and trustless ways, however the goal is the same - facilitate a cross-chain transaction in a shorter time that it would take the user to first fully shift in an asset and then complete an action.\n\n### 1. Deploy adapter\n\nDeploy one of the adapter contracts in the `/contracts` directory using the same owner address parameter as the wallet you plan fill transactions with.\n\n### 2. Deposit shifted tokens and fund GSN RelayHub\n\nDeposit shifted tokens to the adapter address through the `deposit()` method. The adapter will use these funds to complete swaps faster when selected by the user via the UI. Please note: you'll need to approve the adapter contract on the shifted token contract before depositing.\n\n[justsmartcontracts.dev](https://justsmartcontracts.dev/) is an easy way to interact with smart contracts using just the contract address and ABI.\n\nThe adapter contract will also need to maintain an ETH balance with the GSN RelayHub. Gas fees paid by relay nodes will be refunded from this balance. To deposit funds, use the [GSN dapp tool](https://gsn.openzeppelin.com/recipients).\n\n### 3) Set environment variables\n\nCreate a `.env` file at the root directory with the following variables and their real world values:\n\n```\nWALLET_ADDRESS=\"\"\nWALLET_KEY=\"\"\nADAPTER_ADDRESS=\"\"\n```\n\n### 4) Install dependencies and run\n\nIn main terminal window run\n`npm install \u0026\u0026 npm start`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenproject%2Finteroperability-examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenproject%2Finteroperability-examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenproject%2Finteroperability-examples/lists"}