mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
c16b35c029
* Extend wallet_watchAsset to support ERC721 and ERC1155 tokens
91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
const { Web3Provider } = require('@ethersproject/providers');
|
|
const { ContractFactory } = require('@ethersproject/contracts');
|
|
|
|
const { SMART_CONTRACTS, contractConfiguration } = require('./smart-contracts');
|
|
const GanacheContractAddressRegistry = require('./ganache-contract-address-registry');
|
|
|
|
/*
|
|
* Ganache seeder is used to seed initial smart contract or set initial blockchain state.
|
|
*/
|
|
class GanacheSeeder {
|
|
constructor(ganacheProvider) {
|
|
this.smartContractRegistry = new GanacheContractAddressRegistry();
|
|
this.ganacheProvider = ganacheProvider;
|
|
}
|
|
|
|
/**
|
|
* Deploy initial smart contracts that can be used later within the e2e tests.
|
|
*
|
|
* @param contractName
|
|
*/
|
|
|
|
async deploySmartContract(contractName) {
|
|
const ethersProvider = new Web3Provider(this.ganacheProvider, 'any');
|
|
const signer = ethersProvider.getSigner();
|
|
const fromAddress = await signer.getAddress();
|
|
const contractFactory = new ContractFactory(
|
|
contractConfiguration[contractName].abi,
|
|
contractConfiguration[contractName].bytecode,
|
|
signer,
|
|
);
|
|
|
|
let contract;
|
|
|
|
if (contractName === SMART_CONTRACTS.HST) {
|
|
contract = await contractFactory.deploy(
|
|
contractConfiguration[SMART_CONTRACTS.HST].initialAmount,
|
|
contractConfiguration[SMART_CONTRACTS.HST].tokenName,
|
|
contractConfiguration[SMART_CONTRACTS.HST].decimalUnits,
|
|
contractConfiguration[SMART_CONTRACTS.HST].tokenSymbol,
|
|
);
|
|
} else {
|
|
contract = await contractFactory.deploy();
|
|
}
|
|
|
|
await contract.deployTransaction.wait();
|
|
|
|
if (contractName === SMART_CONTRACTS.NFTS) {
|
|
const transaction = await contract.mintNFTs(1, {
|
|
from: fromAddress,
|
|
});
|
|
await transaction.wait();
|
|
}
|
|
|
|
if (contractName === SMART_CONTRACTS.ERC1155) {
|
|
const transaction = await contract.mintBatch(
|
|
fromAddress,
|
|
[1, 2, 3],
|
|
[1, 1, 100000000000000],
|
|
'0x',
|
|
);
|
|
await transaction.wait();
|
|
}
|
|
this.storeSmartContractAddress(contractName, contract.address);
|
|
}
|
|
|
|
/**
|
|
* Store deployed smart contract address within the environment variables
|
|
* to make it available everywhere.
|
|
*
|
|
* @param contractName
|
|
* @param contractAddress
|
|
*/
|
|
storeSmartContractAddress(contractName, contractAddress) {
|
|
this.smartContractRegistry.storeNewContractAddress(
|
|
contractName,
|
|
contractAddress,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return an instance of the currently used smart contract registry.
|
|
*
|
|
* @returns GanacheContractAddressRegistry
|
|
*/
|
|
getContractRegistry() {
|
|
return this.smartContractRegistry;
|
|
}
|
|
}
|
|
|
|
module.exports = GanacheSeeder;
|