Merge branch 'master' of https://github.com/ethereum/remix-project into optimizecircle
commit
47f282e329
@ -1,5 +1,7 @@ |
|||||||
export { default as remixDefault } from './templates/remixDefault' |
export { default as remixDefault } from './templates/remixDefault' |
||||||
export { default as blank } from './templates/blank' |
export { default as blank } from './templates/blank' |
||||||
export { default as ozerc20 } from './templates/ozerc20' |
export { default as ozerc20 } from './templates/ozerc20' |
||||||
export { default as zeroxErc20 } from './templates/zeroxErc20' |
|
||||||
export { default as ozerc721 } from './templates/ozerc721' |
export { default as ozerc721 } from './templates/ozerc721' |
||||||
|
export { default as ozerc1155 } from './templates/ozerc1155' |
||||||
|
export { default as zeroxErc20 } from './templates/zeroxErc20' |
||||||
|
|
||||||
|
@ -0,0 +1,20 @@ |
|||||||
|
import { erc1155 } from '@openzeppelin/wizard'; |
||||||
|
|
||||||
|
export default async (opts) => { |
||||||
|
const filesObj = { |
||||||
|
'contracts/MyToken.sol': erc1155.print({ ...erc1155.defaults, upgradeable: opts.upgradeable}), |
||||||
|
// @ts-ignore
|
||||||
|
'scripts/deploy_with_ethers.ts': (await import('!!raw-loader!./scripts/deploy_with_ethers.ts')).default, |
||||||
|
// @ts-ignore
|
||||||
|
'scripts/deploy_with_web3.ts': (await import('!!raw-loader!./scripts/deploy_with_web3.ts')).default, |
||||||
|
// @ts-ignore
|
||||||
|
'scripts/ethers-lib.ts': (await import('!!raw-loader!./scripts/ethers-lib.ts')).default, |
||||||
|
// @ts-ignore
|
||||||
|
'scripts/web3-lib.ts': (await import('!!raw-loader!./scripts/web3-lib.ts')).default |
||||||
|
} |
||||||
|
// If no options is selected, opts.upgradeable will be undefined
|
||||||
|
// We do not show test file for upgradeable contract
|
||||||
|
// @ts-ignore
|
||||||
|
if (opts.upgradeable === undefined || !opts.upgradeable) filesObj['tests/MyToken_test.sol'] = (await import('raw-loader!./tests/MyToken_test.sol')).default |
||||||
|
return filesObj |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
import { deploy } from './ethers-lib' |
||||||
|
|
||||||
|
(async () => { |
||||||
|
try { |
||||||
|
const result = await deploy('MyToken', []) |
||||||
|
console.log(`address: ${result.address}`) |
||||||
|
} catch (e) { |
||||||
|
console.log(e.message) |
||||||
|
} |
||||||
|
})() |
@ -0,0 +1,10 @@ |
|||||||
|
import { deploy } from './web3-lib' |
||||||
|
|
||||||
|
(async () => { |
||||||
|
try { |
||||||
|
const result = await deploy('MyToken', []) |
||||||
|
console.log(`address: ${result.address}`) |
||||||
|
} catch (e) { |
||||||
|
console.log(e.message) |
||||||
|
} |
||||||
|
})() |
@ -0,0 +1,29 @@ |
|||||||
|
import { ethers } from 'ethers' |
||||||
|
|
||||||
|
/** |
||||||
|
* Deploy the given contract |
||||||
|
* @param {string} contractName name of the contract to deploy |
||||||
|
* @param {Array<any>} args list of constructor' parameters |
||||||
|
* @param {Number} accountIndex account index from the exposed account |
||||||
|
* @return {Contract} deployed contract |
||||||
|
*/ |
||||||
|
export const deploy = async (contractName: string, args: Array<any>, accountIndex?: number): Promise<ethers.Contract> => {
|
||||||
|
|
||||||
|
console.log(`deploying ${contractName}`) |
||||||
|
// Note that the script needs the ABI which is generated from the compilation artifact.
|
||||||
|
// Make sure contract is compiled and artifacts are generated
|
||||||
|
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path
|
||||||
|
|
||||||
|
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) |
||||||
|
// 'web3Provider' is a remix global variable object
|
||||||
|
|
||||||
|
const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner(accountIndex) |
||||||
|
|
||||||
|
const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer) |
||||||
|
|
||||||
|
const contract = await factory.deploy(...args)
|
||||||
|
|
||||||
|
// The contract is NOT deployed yet; we must wait until it is mined
|
||||||
|
await contract.deployed() |
||||||
|
return contract |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
import Web3 from 'web3' |
||||||
|
import { Contract, ContractSendMethod, Options } from 'web3-eth-contract' |
||||||
|
|
||||||
|
/** |
||||||
|
* Deploy the given contract |
||||||
|
* @param {string} contractName name of the contract to deploy |
||||||
|
* @param {Array<any>} args list of constructor' parameters |
||||||
|
* @param {string} from account used to send the transaction |
||||||
|
* @param {number} gas gas limit |
||||||
|
* @return {Options} deployed contract |
||||||
|
*/ |
||||||
|
export const deploy = async (contractName: string, args: Array<any>, from?: string, gas?: number): Promise<Options> => { |
||||||
|
|
||||||
|
const web3 = new Web3(web3Provider) |
||||||
|
console.log(`deploying ${contractName}`) |
||||||
|
// Note that the script needs the ABI which is generated from the compilation artifact.
|
||||||
|
// Make sure contract is compiled and artifacts are generated
|
||||||
|
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` |
||||||
|
|
||||||
|
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) |
||||||
|
|
||||||
|
const accounts = await web3.eth.getAccounts() |
||||||
|
|
||||||
|
const contract: Contract = new web3.eth.Contract(metadata.abi) |
||||||
|
|
||||||
|
const contractSend: ContractSendMethod = contract.deploy({ |
||||||
|
data: metadata.data.bytecode.object, |
||||||
|
arguments: args |
||||||
|
}) |
||||||
|
|
||||||
|
const newContractInstance = await contractSend.send({ |
||||||
|
from: from || accounts[0], |
||||||
|
gas: gas || 3600000 |
||||||
|
}) |
||||||
|
return newContractInstance.options
|
||||||
|
} |
@ -0,0 +1,19 @@ |
|||||||
|
// SPDX-License-Identifier: GPL-3.0 |
||||||
|
|
||||||
|
pragma solidity >=0.7.0 <0.9.0; |
||||||
|
import "remix_tests.sol"; |
||||||
|
import "../contracts/MyToken.sol"; |
||||||
|
|
||||||
|
contract MyTokenTest { |
||||||
|
|
||||||
|
MyToken s; |
||||||
|
function beforeAll () public { |
||||||
|
s = new MyToken(); |
||||||
|
} |
||||||
|
|
||||||
|
function testSetURI () public { |
||||||
|
string memory uri = "https://testuri.io/token"; |
||||||
|
s.setURI(uri); |
||||||
|
Assert.equal(s.uri(1), uri, "uri did not match"); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue