parent
d089c5c1a5
commit
65a95c36e2
@ -1,4 +1,6 @@ |
|||||||
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' |
||||||
|
|
||||||
|
@ -0,0 +1,31 @@ |
|||||||
|
// SPDX-License-Identifier: GPL-3.0 |
||||||
|
|
||||||
|
pragma solidity ^0.5.9; |
||||||
|
|
||||||
|
import "@0x/contracts-erc20/contracts/src/ERC20Token.sol"; |
||||||
|
|
||||||
|
/** |
||||||
|
* @title SampleERC20 |
||||||
|
* @dev Create a sample ERC20 standard token |
||||||
|
*/ |
||||||
|
contract SampleERC20 is ERC20Token { |
||||||
|
|
||||||
|
string public name; |
||||||
|
string public symbol; |
||||||
|
uint256 public decimals; |
||||||
|
|
||||||
|
constructor ( |
||||||
|
string memory _name, |
||||||
|
string memory _symbol, |
||||||
|
uint256 _decimals, |
||||||
|
uint256 _totalSupply |
||||||
|
) |
||||||
|
public |
||||||
|
{ |
||||||
|
name = _name; |
||||||
|
symbol = _symbol; |
||||||
|
decimals = _decimals; |
||||||
|
_totalSupply = _totalSupply; |
||||||
|
balances[msg.sender] = _totalSupply; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,16 @@ |
|||||||
|
export default async () => { |
||||||
|
return { |
||||||
|
// @ts-ignore
|
||||||
|
'contracts/SampleERC20.sol': (await import('raw-loader!./contracts/SampleERC20.sol')).default, |
||||||
|
// @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.ts': (await import('!!raw-loader!./scripts/ethers.ts')).default, |
||||||
|
// @ts-ignore
|
||||||
|
'scripts/web3.ts': (await import('!!raw-loader!./scripts/web3.ts')).default, |
||||||
|
// @ts-ignore
|
||||||
|
'tests/SampleERC20_test.sol': (await import('raw-loader!./tests/SampleERC20_test.sol')).default |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
import { deploy } from './ethers' |
||||||
|
|
||||||
|
(async () => { |
||||||
|
try { |
||||||
|
const result = await deploy('SampleERC20', ["TestToken", "TST", 18, 1000]) |
||||||
|
console.log(`address: ${result.address}`) |
||||||
|
} catch (e) { |
||||||
|
console.log(e.message) |
||||||
|
} |
||||||
|
})() |
@ -0,0 +1,10 @@ |
|||||||
|
import { deploy } from './web3' |
||||||
|
|
||||||
|
(async () => { |
||||||
|
try { |
||||||
|
const result = await deploy('SampleERC20', ["TestToken", "TST", 18, 1000]) |
||||||
|
console.log(`address: ${result.address}`) |
||||||
|
} catch (e) { |
||||||
|
console.log(e.message) |
||||||
|
} |
||||||
|
})() |
@ -0,0 +1,24 @@ |
|||||||
|
export const deploy = async (contractName: string, args: Array<any>, from?: string): Promise<any> => {
|
||||||
|
|
||||||
|
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)) |
||||||
|
// 'web3Provider' is a remix global variable object
|
||||||
|
const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner() |
||||||
|
|
||||||
|
const factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer); |
||||||
|
|
||||||
|
let contract |
||||||
|
if (from) { |
||||||
|
contract = await factory.connect(from).deploy(...args); |
||||||
|
} else { |
||||||
|
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,24 @@ |
|||||||
|
export const deploy = async (contractName: string, args: Array<any>, from?: string, gas?: number): Promise<any> => { |
||||||
|
|
||||||
|
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() |
||||||
|
|
||||||
|
let contract = new web3.eth.Contract(metadata.abi) |
||||||
|
|
||||||
|
contract = contract.deploy({ |
||||||
|
data: metadata.data.bytecode.object, |
||||||
|
arguments: args |
||||||
|
}) |
||||||
|
|
||||||
|
const newContractInstance = await contract.send({ |
||||||
|
from: from || accounts[0], |
||||||
|
gas: gas || 1500000 |
||||||
|
}) |
||||||
|
return newContractInstance.options
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
// SPDX-License-Identifier: GPL-3.0 |
||||||
|
|
||||||
|
pragma solidity ^0.5.9; |
||||||
|
import "remix_tests.sol"; |
||||||
|
import "../contracts/SampleERC20.sol"; |
||||||
|
|
||||||
|
contract SampleERC20Test { |
||||||
|
|
||||||
|
SampleERC20 s; |
||||||
|
function beforeAll () public { |
||||||
|
s = new SampleERC20("TestToken", "TST", 18, 1000); |
||||||
|
} |
||||||
|
|
||||||
|
function testTokenNameAndSymbol () public { |
||||||
|
Assert.equal(s.name(), "TestToken", "token name did not match"); |
||||||
|
Assert.equal(s.symbol(), "TST", "token symbol did not match"); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue