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 (
-