97 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {Web3Wrapper} from '@0xproject/web3-wrapper';
 | 
						|
import {BigNumber} from 'bignumber.js';
 | 
						|
import * as _ from 'lodash';
 | 
						|
import * as Web3 from 'web3';
 | 
						|
 | 
						|
import {Deployer} from './../src/deployer';
 | 
						|
import {constants} from './../src/utils/constants';
 | 
						|
import {Token} from './../src/utils/types';
 | 
						|
import {tokenInfo} from './config/token_info';
 | 
						|
 | 
						|
export const migrator = {
 | 
						|
    /**
 | 
						|
     * Custom migrations should be defined in this function. This will be called with the CLI 'migrate' command.
 | 
						|
     * Some operations might be completed in parallel, but we don't do that on purpose.
 | 
						|
     * That way the addresses are deterministic.
 | 
						|
     * @param deployer Deployer instance.
 | 
						|
     */
 | 
						|
    async runMigrationsAsync(deployer: Deployer): Promise<void> {
 | 
						|
        const web3Wrapper: Web3Wrapper = deployer.web3Wrapper;
 | 
						|
        const accounts: string[] = await web3Wrapper.getAvailableAddressesAsync();
 | 
						|
 | 
						|
        const tokenTransferProxy = await deployer.deployAndSaveAsync('TokenTransferProxy');
 | 
						|
        const zrxToken = await deployer.deployAndSaveAsync('ZRXToken');
 | 
						|
        const etherToken = await deployer.deployAndSaveAsync('EtherToken');
 | 
						|
        const tokenReg = await deployer.deployAndSaveAsync('TokenRegistry');
 | 
						|
 | 
						|
        const exchangeArgs = [zrxToken.address, tokenTransferProxy.address];
 | 
						|
        const owners = [accounts[0], accounts[1]];
 | 
						|
        const confirmationsRequired = new BigNumber(2);
 | 
						|
        const secondsRequired = new BigNumber(0);
 | 
						|
        const multiSigArgs = [owners, confirmationsRequired, secondsRequired, tokenTransferProxy.address];
 | 
						|
        const exchange = await deployer.deployAndSaveAsync('Exchange', exchangeArgs);
 | 
						|
        const multiSig = await deployer.deployAndSaveAsync(
 | 
						|
            'MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', multiSigArgs,
 | 
						|
        );
 | 
						|
 | 
						|
        const owner = accounts[0];
 | 
						|
        await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, {from: owner});
 | 
						|
        await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, {from: owner});
 | 
						|
        const addTokenGasEstimate = await tokenReg.addToken.estimateGasAsync(
 | 
						|
            zrxToken.address,
 | 
						|
            tokenInfo[0].name,
 | 
						|
            tokenInfo[0].symbol,
 | 
						|
            tokenInfo[0].decimals,
 | 
						|
            tokenInfo[0].ipfsHash,
 | 
						|
            tokenInfo[0].swarmHash,
 | 
						|
            {from: owner},
 | 
						|
        );
 | 
						|
        await tokenReg.addToken.sendTransactionAsync(
 | 
						|
            zrxToken.address,
 | 
						|
            '0x Protocol Token',
 | 
						|
            'ZRX',
 | 
						|
            18,
 | 
						|
            constants.NULL_BYTES,
 | 
						|
            constants.NULL_BYTES,
 | 
						|
            {
 | 
						|
                from: owner,
 | 
						|
                gas: addTokenGasEstimate,
 | 
						|
            },
 | 
						|
        );
 | 
						|
        await tokenReg.addToken.sendTransactionAsync(
 | 
						|
            etherToken.address,
 | 
						|
            'Ether Token',
 | 
						|
            'WETH',
 | 
						|
            18,
 | 
						|
            constants.NULL_BYTES,
 | 
						|
            constants.NULL_BYTES,
 | 
						|
            {
 | 
						|
                from: owner,
 | 
						|
                gas: addTokenGasEstimate,
 | 
						|
            },
 | 
						|
        );
 | 
						|
        for (const token of tokenInfo) {
 | 
						|
            const totalSupply = new BigNumber(0);
 | 
						|
            const args = [
 | 
						|
                token.name,
 | 
						|
                token.symbol,
 | 
						|
                token.decimals,
 | 
						|
                totalSupply,
 | 
						|
            ];
 | 
						|
            const dummyToken = await deployer.deployAsync('DummyToken', args);
 | 
						|
            await tokenReg.addToken.sendTransactionAsync(
 | 
						|
                dummyToken.address,
 | 
						|
                token.name,
 | 
						|
                token.symbol,
 | 
						|
                token.decimals,
 | 
						|
                token.ipfsHash,
 | 
						|
                token.swarmHash,
 | 
						|
                {
 | 
						|
                    from: owner,
 | 
						|
                    gas: addTokenGasEstimate,
 | 
						|
                },
 | 
						|
            );
 | 
						|
        }
 | 
						|
    },
 | 
						|
};
 |