# src/const.ts

    export const zeroAddr = '0x0000000000000000000000000000000000000000'
    export const zeroHash =
        '0x0000000000000000000000000000000000000000000000000000000000000000'

    type EthNetConf = {
        indexContractName: string
        auxContract: string
        httpProvider: string
        delegationContractName: string
        ensResolver: string
        ens: string
        etherscanLink: string
        name: string
        archiveUrl: string
        archivePushUrl: string
        lookupAddress: string
        unsafeEd25519DelegationAddr: string
        svApiUrl: string
    }

    const _raw_networkVars: { [netName: string]: EthNetConf } = {
        kovan: {
            indexContractName: 'index.kov.sv',
            auxContract: '0x0d31706febd1b8177c722fe39432f3e47143ccd9',
            httpProvider: 'https://kovan.eth.secure.vote/tokenvote-dev',
            delegationContractName: 'delegation-2018-06-19.kov.sv',
            ensResolver: '0xc8c73829348cb15da4b0785a110017464fb8af51',
            ens: '0xd6F4f22eeC158c434b17d01f62f5dF33b108Ae93',
            etherscanLink: 'https://kovan.etherscan.io/',
            name: 'Kovan',
            archiveUrl: 'https://archive.test.secure.vote/',
            archivePushUrl: 'https://archive.test.push.secure.vote/',
            lookupAddress: '0x216265865e46D4c6FE506877EfAAE7dd7Ae2faCE',
            svApiUrl: 'https://dev.api.secure.vote',
            unsafeEd25519DelegationAddr:
                '0x005645072d7c244476e3099619a6089245b6a958'
        },
        mainnet: {
            indexContractName: 'index.tokenvote.eth',
            auxContract: '0xff553fe4183f27e2165299b3fc0ae8c3b5c07084',
            httpProvider: 'https://mainnet.eth.secure.vote/tokenvote',
            delegationContractName: 'delegate.secvote.eth',
            ensResolver: '0x5FfC014343cd971B7eb70732021E26C35B744cc4',
            ens: '0x314159265dd8dbb310642f98f50c066173c1259b',
            etherscanLink: 'https://etherscan.io/',
            name: 'Mainnet',
            archiveUrl: 'https://archive.secure.vote/',
            archivePushUrl: 'https://archive.push.secure.vote/',
            lookupAddress: '0x216265865e46D4c6FE506877EfAAE7dd7Ae2faCE',
            svApiUrl: '',
            unsafeEd25519DelegationAddr: ''
        },
        ropsten: {
            indexContractName: '',
            auxContract: '',
            httpProvider: 'https://ropsten.eth.secure.vote/tokenvote-dev',
            delegationContractName: '',
            ensResolver: '',
            ens: '',
            etherscanLink: 'https://ropsten.etherscan.io/',
            name: 'Ropsten',
            archiveUrl: 'https://archive.test.secure.vote/',
            archivePushUrl: 'https://archive.test.push.secure.vote/',
            lookupAddress: '',
            svApiUrl: '',
            unsafeEd25519DelegationAddr: ''
        },
        classic: {
            indexContractName: '',
            auxContract: '',
            httpProvider: 'https://classic.eth.secure.vote/tokenvote-dev',
            delegationContractName: '',
            ensResolver: '',
            ens: '',
            etherscanLink: 'https://gastracker.io/', // eth classic block explorer
            name: 'Classic',
            archiveUrl: 'https://archive.secure.vote/',
            archivePushUrl: 'https://archive.push.secure.vote/',
            lookupAddress: '',
            svApiUrl: '',
            unsafeEd25519DelegationAddr: ''
        }
    }

    export const networkVars = new Proxy(_raw_networkVars, {
        get: (obj, prop: string) => {
            console.warn(
                'Warning: const.networkVars is deprecated; please use const.getNetwork(..)'
            )
            return obj[prop]
        }
    })

    export const networkName = networkId => {
        console.warn(
            'Warning: const.networkName(..) is deprecated. Please use const.getNetwork(..).name'
        )

        switch (networkId) {
            case 1:
                return 'Mainnet'
            case 2:
                return 'Morden'
            case 3:
                return 'Ropsten'
            case 4:
                return 'Rinkeby'
            case 42:
                return 'Kovan'
            default:
                return 'Unknown'
        }
    }

    export const getNetwork = (networkId: number, chainId: number): EthNetConf => {
        switch (networkId) {
            case 1:
                if (chainId === 1) return _raw_networkVars.mainnet
                if (chainId === 61) return _raw_networkVars.classic
                break
            case 3:
                return _raw_networkVars.ropsten
            case 42:
                return _raw_networkVars.kovan
            default:
                break
        }
        throw Error(
            `Cannot find network with net_id ${networkId} and chainId ${chainId}`
        )
    }

    export const Ed25519DelegatePrefix = 'SV-ED-ETH'