pull/2723/head
yann300 2 years ago
parent ca0ef137d2
commit 559a26c850
  1. 1
      apps/etherscan/src/app/components/HeaderWithSettings.tsx
  2. 5
      apps/etherscan/src/app/components/SubmitButton.tsx
  3. 2
      apps/etherscan/src/app/views/CaptureKeyView.tsx
  4. 4
      apps/etherscan/src/app/views/VerifyView.tsx
  5. 87
      apps/remix-ide-e2e/src/tests/etherscan_api.ts

@ -18,6 +18,7 @@ interface IconProps {
const HomeIcon: React.FC<IconProps> = ({ from, themeType }: IconProps) => { const HomeIcon: React.FC<IconProps> = ({ from, themeType }: IconProps) => {
return ( return (
<NavLink <NavLink
data-id="home"
data-toggle="tooltip" data-toggle="tooltip"
data-placement="top" data-placement="top"
title="Home" title="Home"

@ -3,14 +3,17 @@ import React from "react"
interface Props { interface Props {
text: string text: string
isSubmitting?: boolean isSubmitting?: boolean
dataId?: string
} }
export const SubmitButton: React.FC<Props> = ({ export const SubmitButton: React.FC<Props> = ({
text, text,
dataId,
isSubmitting = false, isSubmitting = false,
}) => { }) => {
return ( return (
<button <button
data-id={dataId}
style={{ padding: "0.25rem 0.4rem", marginRight: "0.5em" }} style={{ padding: "0.25rem 0.4rem", marginRight: "0.5em" }}
type="submit" type="submit"
className="btn btn-primary" className="btn btn-primary"
@ -26,7 +29,7 @@ export const SubmitButton: React.FC<Props> = ({
aria-hidden="true" aria-hidden="true"
style={{ marginRight: "0.3em" }} style={{ marginRight: "0.3em" }}
/> />
Verifying...Please wait Verifying... Please wait
</div> </div>
)} )}
</button> </button>

@ -48,7 +48,7 @@ export const CaptureKeyView: React.FC = () => {
</div> </div>
<div> <div>
<SubmitButton text="Save API key" /> <SubmitButton text="Save API key" dataId="save-api-key" />
</div> </div>
</form> </form>
)} )}

@ -284,12 +284,12 @@ export const VerifyView: React.FC<Props> = ({
/> />
</div> </div>
<SubmitButton text="Verify Contract" isSubmitting={isSubmitting} /> <SubmitButton dataId="verify-contract" text="Verify Contract" isSubmitting={isSubmitting} />
</form> </form>
)} )}
</Formik> </Formik>
<div <div data-id="verify-result"
style={{ marginTop: "2em", fontSize: "0.8em", textAlign: "center" }} style={{ marginTop: "2em", fontSize: "0.8em", textAlign: "center" }}
dangerouslySetInnerHTML={{ __html: results }} dangerouslySetInnerHTML={{ __html: results }}
/> />

@ -19,6 +19,89 @@ module.exports = {
.pause(5000) .pause(5000)
// @ts-ignore // @ts-ignore
.frame(0) .frame(0)
.waitForElementNotVisible('input[name="apiKey"]') .waitForElementVisible('input[name="apiKey"]')
} .setValue('input[name="apiKey"]', '2HKUX5ZVASZIKWJM8MIQVCRUVZ6JAWT531')
.click('[data-id="save-api-key"]')
},
'Should verify a contract (contract is already verified) #group1': function (browser: NightwatchBrowser) {
browser
.frameParent()
.clickLaunchIcon('udapp') // switch to Goerli
.switchEnvironment('External Http Provider')
.waitForElementPresent('[data-id="basic-http-provider-modal-footer-ok-react"]')
.execute(() => {
(document.querySelector('*[data-id="basic-http-providerModalDialogContainer-react"] input[data-id="modalDialogCustomPromp"]') as any).focus()
}, [], () => {})
.setValue('[data-id="modalDialogCustomPromp"]', 'https://remix-goerli.ethdevops.io')
.modalFooterOKClick('basic-http-provider')
.clickLaunchIcon('solidity') // compile
.testContracts('Owner_1.sol', { content: verifiedContract }, ['Owner'])
.clickLaunchIcon('etherscan') // start etherscan verification
// @ts-ignore
.frame(0)
.click('[data-id="home"]')
.setValue('select[name="contractName"]', 'Owner')
.setValue('*[name="contractAddress"]', '0x9981c9d00103da481c3c65b22a79582a3e3ff50b')
.click('[data-id="verify-contract"]')
.waitForElementVisible('[data-id="verify-result"]')
.waitForElementContainsText('[data-id="verify-result"]', 'Contract source code already verified')
}
} }
const verifiedContract = `
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
/**
* @title Owner
* @dev Set & change owner
*/
contract Owner {
address private owner;
// event for EVM logging
event OwnerSet(address indexed oldOwner, address indexed newOwner);
// modifier to check if caller is owner
modifier isOwner() {
// If the first argument of 'require' evaluates to 'false', execution terminates and all
// changes to the state and to Ether balances are reverted.
// This used to consume all gas in old EVM versions, but not anymore.
// It is often a good idea to use 'require' to check if functions are called correctly.
// As a second argument, you can also provide an explanation about what went wrong.
require(msg.sender == owner, "Caller is not owner");
_;
}
function getInt() public returns (uint) {
return 123498;
}
/**
* @dev Set contract deployer as owner
*/
constructor() {
owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
emit OwnerSet(address(0), owner);
}
/**
* @dev Change owner
* @param newOwner address of new owner
*/
function changeOwner(address newOwner) public isOwner {
emit OwnerSet(owner, newOwner);
owner = newOwner;
}
/**
* @dev Return owner address
* @return address of owner
*/
function getOwner() external view returns (address) {
return owner;
}
}`

Loading…
Cancel
Save