From 7749cfb04ccc6e96934d5e7423ac13dd22fd5dbf Mon Sep 17 00:00:00 2001 From: 8times4 <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:27:25 +0200 Subject: [PATCH 1/6] add foundry provider draft --- apps/remix-ide/src/app.js | 3 ++ .../src/app/tabs/foundry-provider.tsx | 33 +++++++++++++++++++ apps/remix-ide/src/app/udapp/run-tab.js | 14 ++++++++ 3 files changed, 50 insertions(+) create mode 100644 apps/remix-ide/src/app/tabs/foundry-provider.tsx diff --git a/apps/remix-ide/src/app.js b/apps/remix-ide/src/app.js index 30e653731d..4eb9423d38 100644 --- a/apps/remix-ide/src/app.js +++ b/apps/remix-ide/src/app.js @@ -27,6 +27,7 @@ import { NotificationPlugin } from './app/plugins/notification' import { Blockchain } from './blockchain/blockchain.js' import { HardhatProvider } from './app/tabs/hardhat-provider' import { GanacheProvider } from './app/tabs/ganache-provider' +import { FoundryProvider } from './app/tabs/foundry-provider' const isElectron = require('is-electron') @@ -177,6 +178,7 @@ class AppComponent { const web3Provider = new Web3ProviderModule(blockchain) const hardhatProvider = new HardhatProvider(blockchain) const ganacheProvider = new GanacheProvider(blockchain) + const foundryProvider = new FoundryProvider(blockchain) // ----------------- convert offset to line/column service ----------- const offsetToLineColumnConverter = new OffsetToLineColumnConverter() Registry.getInstance().put({ @@ -233,6 +235,7 @@ class AppComponent { storagePlugin, hardhatProvider, ganacheProvider, + foundryProvider, this.walkthroughService, search ]) diff --git a/apps/remix-ide/src/app/tabs/foundry-provider.tsx b/apps/remix-ide/src/app/tabs/foundry-provider.tsx new file mode 100644 index 0000000000..47e899865a --- /dev/null +++ b/apps/remix-ide/src/app/tabs/foundry-provider.tsx @@ -0,0 +1,33 @@ +import * as packageJson from '../../../../../package.json' +import { Plugin } from '@remixproject/engine' +import { AppModal, AlertModal, ModalTypes } from '@remix-ui/app' +import React from 'react' // eslint-disable-line +import { Blockchain } from '../../blockchain/blockchain' +import { ethers } from 'ethers' +import { AbstractProvider } from './abstract-provider' + +const profile = { + name: 'foundry-provider', + displayName: 'Foundry Provider', + kind: 'provider', + description: 'Anvil', + methods: ['sendAsync'], + version: packageJson.version +} + +export class FoundryProvider extends AbstractProvider { + constructor (blockchain) { + super(profile, blockchain, 'http://127.0.0.1:8545') + } + + body (): JSX.Element { + return ( +
Note: To run Anvil on your system, run +
curl -L https://foundry.paradigm.xyz | bash
+
anvil
+ For more info, visit: Foundry Documentation +
Anvil JSON-RPC Endpoint:
+
+ ) + } +} \ No newline at end of file diff --git a/apps/remix-ide/src/app/udapp/run-tab.js b/apps/remix-ide/src/app/udapp/run-tab.js index 0f59ddd962..020c2a34df 100644 --- a/apps/remix-ide/src/app/udapp/run-tab.js +++ b/apps/remix-ide/src/app/udapp/run-tab.js @@ -127,6 +127,20 @@ export class RunTab extends ViewPlugin { } }) + await this.call('blockchain', 'addProvider', { + name: 'Foundry Provider', + provider: { + async sendAsync (payload, callback) { + try { + const result = await udapp.call('foundry-provider', 'sendAsync', payload) + callback(null, result) + } catch (e) { + callback(e) + } + } + } + }) + await this.call('blockchain', 'addProvider', { name: 'Wallet Connect', provider: { From a0ad00821442d3ab823b68fe5ddb4537c7e8ae03 Mon Sep 17 00:00:00 2001 From: 8times4 <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 14:56:03 +0200 Subject: [PATCH 2/6] add provider test for foundry --- .../remix-ide-e2e/src/tests/providers.test.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 8bbfa7636b..83f69d699b 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -29,5 +29,26 @@ module.exports = { .waitForElementVisible('*[data-id="ganache-providerModalDialogModalBody-react"]') .modalFooterOKClick('ganache-provider') .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') + }, + 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { + browser.click('*[data-id="Foundry Provider"]') + .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .execute(() => { + (document.querySelector('*[data-id="foundry-providerModalDialogModalBody-react"] input') as any).focus() + }, [], () => {}) + .clearValue('*[data-id="foundry-providerModalDialogModalBody-react"] input') + .setValue('*[data-id="foundry-providerModalDialogModalBody-react"] input', 'http://127.0.0.1:8084') + .modalFooterOKClick('foundry-provider') + .waitForElementContainsText('*[data-id="foundry-providerModalDialogModalBody-react"]', 'Error while connecting to the provider') + .modalFooterOKClick('foundry-provider') + .waitForElementNotVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .pause(1000) + +}, + 'Should switch to foundry provider, use the default foundry URL and succeed to connect': function (browser: NightwatchBrowser) { + browser.click('*[data-id="Foundry Provider"]') + .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .modalFooterOKClick('foundry-provider') + .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') } } From 79b668b8218279cd19c24987577d62f4ea80d249 Mon Sep 17 00:00:00 2001 From: M <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 22:30:05 +0200 Subject: [PATCH 3/6] add new line --- apps/remix-ide-e2e/src/tests/providers.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 83f69d699b..486b75ab73 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -30,6 +30,7 @@ module.exports = { .modalFooterOKClick('ganache-provider') .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') }, + 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { browser.click('*[data-id="Foundry Provider"]') .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') From a0035979d8bca31d46717844cbee828d380de02e Mon Sep 17 00:00:00 2001 From: 8times4 <46720448+8times4@users.noreply.github.com> Date: Wed, 8 Jun 2022 23:28:23 +0200 Subject: [PATCH 4/6] fix provider test --- apps/remix-ide-e2e/src/tests/providers.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 486b75ab73..630706c509 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -30,9 +30,11 @@ module.exports = { .modalFooterOKClick('ganache-provider') .waitForElementContainsText('*[data-id="settingsNetworkEnv"]', 'Custom (') }, - + 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { - browser.click('*[data-id="Foundry Provider"]') + browser.waitForElementVisible('div[data-id="remixIdeIconPanel"]', 10000) + .clickLaunchIcon('udapp') + .click('*[data-id="Foundry Provider"]') .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') .execute(() => { (document.querySelector('*[data-id="foundry-providerModalDialogModalBody-react"] input') as any).focus() From 065df4a7f2969e675992f7415ceee6af4e13a224 Mon Sep 17 00:00:00 2001 From: 8x4 <46720448+8times4@users.noreply.github.com> Date: Thu, 9 Jun 2022 00:13:58 +0200 Subject: [PATCH 5/6] fix testing --- apps/remix-ide-e2e/src/tests/providers.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide-e2e/src/tests/providers.test.ts b/apps/remix-ide-e2e/src/tests/providers.test.ts index 630706c509..b2c883fd53 100644 --- a/apps/remix-ide-e2e/src/tests/providers.test.ts +++ b/apps/remix-ide-e2e/src/tests/providers.test.ts @@ -33,7 +33,6 @@ module.exports = { 'Should switch to foundry provider, set a custom URL and fail to connect': function (browser: NightwatchBrowser) { browser.waitForElementVisible('div[data-id="remixIdeIconPanel"]', 10000) - .clickLaunchIcon('udapp') .click('*[data-id="Foundry Provider"]') .waitForElementVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') .execute(() => { @@ -45,6 +44,9 @@ module.exports = { .waitForElementContainsText('*[data-id="foundry-providerModalDialogModalBody-react"]', 'Error while connecting to the provider') .modalFooterOKClick('foundry-provider') .waitForElementNotVisible('*[data-id="foundry-providerModalDialogModalBody-react"]') + .waitForElementVisible('*[data-id="PermissionHandler-modal-footer-ok-react"]') + .click('*[data-id="PermissionHandler-modal-footer-ok-react"]') + .waitForElementNotVisible('*[data-id="PermissionHandler-modal-footer-ok-react"]') .pause(1000) }, From f537386bbf2244e67f1ab69810e9faa9f7a7a63c Mon Sep 17 00:00:00 2001 From: lianahus Date: Thu, 9 Jun 2022 11:51:53 +0200 Subject: [PATCH 6/6] fixing udapp deployed item layout --- .../run-tab/src/lib/components/instanceContainerUI.tsx | 2 +- libs/remix-ui/run-tab/src/lib/components/universalDappUI.tsx | 4 ++-- libs/remix-ui/run-tab/src/lib/css/run-tab.css | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx index afc97b9dac..84faf56661 100644 --- a/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/instanceContainerUI.tsx @@ -12,7 +12,7 @@ export function InstanceContainerUI (props: InstanceContainerProps) { return (
-