{"version":3,"sources":["jsdelivr-header.js","/npm/@reality.eth/contracts@3.2.22/index.js"],"names":[],"mappings":"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","file":"/npm/@reality.eth/contracts@3.2.22/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@reality.eth/contracts@3.2.22/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","let all_config = require('./generated/contracts.json');\nlet token_info = require('./generated/tokens.json');\nconst chain_info = require('./generated/chains.json');\nconst factory_config = require('./generated/factories.json');\n\nfunction populateImports(imported_contracts, chain_id) {\n    for(var ctr in imported_contracts) {\n        let to_imp = imported_contracts[ctr];\n        to_imp.realityETH= ctr; \n        const imp = tokenAndContractConfigFromFactory(to_imp, chain_id); \n        const token = imp.token.ticker;\n        if (!all_config[chain_id][token]) {\n            all_config[chain_id][token] = {};\n        }\n        const ver = imp.contract.version_number;\n        all_config[chain_id][token][ver] = imp.contract;\n\n        if (!token_info[token]) {\n            token_info[token] = imp.token;\n        }\n    }\n}\n\nfunction realityETHInstance(config) {\n    const abis = {\n        'RealityETH-2.0': require('./abi/solc-0.8.6/RealityETH-2.0.abi.json'), \n        'RealityETH-2.1': require('./abi/solc-0.8.6/RealityETH-2.1.abi.json'),\n        'RealityETH-2.1-rc1': require('./abi/solc-0.8.6/RealityETH-2.1.abi.json'),\n        'RealityETH-3.0': require('./abi/solc-0.8.6/RealityETH-3.0.abi.json'),\n        'RealityETH-3.2': require('./abi/solc-0.8.6/RealityETH-3.2.abi.json'),\n        'RealityETH_ERC20-2.0': require('./abi/solc-0.8.6/RealityETH_ERC20-2.0.abi.json'),\n        'RealityETH_ERC20-3.0': require('./abi/solc-0.8.6/RealityETH_ERC20-3.0.abi.json'),\n        'RealityETH_ERC20-3.2': require('./abi/solc-0.8.6/RealityETH_ERC20-3.2.abi.json')\n    }\n    return {\n        \"abi\": abis[config.contract_version],\n        \"contractName\": config.contract_name,\n        //\"bytecode\": bytecode,\n        \"address\": config.address,\n        \"chain_id\": config.chain_id\n    };\n    \n}\n\n// TODO: Rename to clarify that there's no address\nfunction arbitratorInstance(chain_id) {\n    const abi = require('./abi/solc-0.4.25/Arbitrator.abi.json');\n    return {\n        \"abi\": abi,\n        \"contractName\": 'Arbitrator',\n        \"chain_id\": chain_id\n    };\n}\n\nfunction erc20Instance(config) {\n    const abi = require('./abi/solc-0.4.25/ERC20.abi.json');\n    if (!config.token_address) {\n        // console.log('config', config);\n        throw new Error(\"token address for erc20 instance not found\");\n        return null;\n    }\n    return {\n        \"abi\": abi,\n        \"contractName\": 'ERC20',\n        \"address\": config.token_address,\n        \"chain_id\": config.chain_id\n    };\n}\n\nfunction chainTokenList(chain_id) {\n    let ret = {};\n    for (t in token_info) {\n        if (all_config[\"\"+chain_id] && all_config[\"\"+chain_id][t]) {\n            ret[t] = token_info[t];\n            ret[t].is_native = (token_info[t].native_chains && token_info[t].native_chains[\"\"+chain_id]);\n        }\n    }\n    return ret;\n}\n\nfunction tokenConfig(token, chain_id) {\n    const t = token_info[token];\n    if (!t) {\n        console.log('token not found in token_info');\n        return null;\n    }\n    if (t.native_chains && t.native_chains[chain_id+\"\"]) {\n        t.is_native = true;\n        return t;\n    }\n    if (t.erc20_chains && t.erc20_chains[chain_id+\"\"]) {\n        t.address = t.erc20_chains[chain_id+\"\"];\n        t.is_native = false;\n        return t;\n    }\n    console.log(\"Token config not found for chain\");\n    return null;\n}\n\nfunction realityETHConfig(chain_id, token, version) {\n    const versions = ['3.0', '3.2', '2.1', '2.1-rc1', '2.0'];\n    const token_info = chainTokenList(chain_id);\n    if (!token_info[token]) {\n        console.log(\"Token not found for chain\");\n        return null;\n        //throw new Error(\"Token not found for chain\");\n    }\n    const contract_name = token_info[token].is_native ? 'RealityETH' : 'RealityETH_ERC20';\n    // If no version specified, crawl for the latest\n    if (version == null) {\n        for (let i=0; i<versions.length; i++) {\n            if (all_config[\"\"+chain_id][token][contract_name + '-' + versions[i]]) {\n                version = versions[i];\n                break;\n            }\n        }\n        if (!version) {\n            throw new Error(\"Could not find any version for \"+chain_id + \"/\" + token + \"/\" + contract_name);\n        } \n    }\n    //const configf = './networks/'+chain_id+'/'+token+'/'+contract_name+'-'+version+'.json';\n    const contract_version = contract_name + '-' + version;\n    const config = all_config[\"\"+chain_id][token][contract_version];\n    if (!config) {\n        console.log(\"Could not find config for \"+chain_id + \"/\" + token + \"/\" + contract_version);\n        return null;\n        //throw new Error(\"Could not find config for \"+chain_id + \"/\" + token + \"/\" + contract_version);\n    }\n    if (!config.arbitrators) {\n        config.arbitrators = [];\n    }\n    config.version_number = version;\n    config.chain_id = chain_id;\n    config.contract_name = contract_name;\n    config.contract_version = contract_version;\n    config.token_ticker = token;\n    return config;\n}\n\nfunction realityETHConfigs(chain_id, token) {\n    let configs = {};\n    const versions = ['3.2', '3.0', '2.1', '2.1-rc1', '2.0'];\n    const token_info = chainTokenList(chain_id);\n    if (!token_info[token]) {\n        console.log(\"Token not found for network\");\n        return null;\n        //throw new Error(\"Token not found for network\");\n    }\n    const contract_name = token_info[token].is_native ? 'RealityETH' : 'RealityETH_ERC20';\n    // If no version specified, crawl for the latest\n    let is_latest_found = false;\n    for (let i=0; i<versions.length; i++) {\n        if (all_config[\"\"+chain_id][token][contract_name + '-' + versions[i]]) {\n            const version = versions[i];\n            //const configf = './networks/'+network_id+'/'+token+'/'+contract_name+'-'+version+'.json';\n            const contract_version = contract_name + '-' + version;\n            const config = all_config[\"\"+chain_id][token][contract_version];\n            if (!config) {\n                console.log(\"Could not find config for \"+chain_id+ \"/\" + token + \"/\" + contract_version);\n                return null;\n                //throw new Error(\"Could not find config for \"+network_id + \"/\" + token + \"/\" + contract_version);\n            }\n            if (!config.arbitrators) {\n                config.arbitrators = [];\n            }\n            config.version_number = version;\n            config.chain_id = chain_id;\n            config.contract_name = contract_name;\n            config.contract_version = contract_version;\n            config.is_latest = !is_latest_found;\n            configs[config.address] = config;\n            is_latest_found = true;\n        }\n    }\n    return configs;\n}\n\nfunction chainData(chain_id) {\n    return chain_info[\"\"+chain_id];\n}\n\nfunction isChainSupported(chain_id) {\n    return (\"\"+chain_id in chain_info);\n}\n\nfunction supportedChains(include_deprecated = false) {\n    let ret = {};\n    for (chain_id in chain_info) {\n        if (include_deprecated || !chain_info[\"\"+chain_id].deprecated) {\n            ret[\"\"+chain_id] = chain_info[\"\"+chain_id].chainName;\n        }\n    }\n    return ret;\n}\n\nfunction walletAddParameters(chain_id) {\n    var params = ['chainId', 'chainName', 'nativeCurrency', 'rpcUrls', 'blockExplorerUrls']\n    var ret = {};\n    // console.log('looking for config for chain', chain_id);\n    var config = chain_info[\"\"+chain_id];\n    for (var i=0; i<params.length; i++) {\n        var item = params[i];\n        ret[item] = config[item];\n    }\n    return ret; \n}\n\nfunction templateConfig(vernum) {\n    const old_templates = require('./config/templates.json');\n    const new_templates = require('./config/templates_3.2.json'); // This is also backported to 2.2\n    if (vernum == 2.2 || vernum < 3.2) {\n        return old_templates;\n    } else {\n        return new_templates;\n    }\n}\n\nfunction defaultTemplateIDForType(template_type, vernum) {\n    const tc = templateConfig(vernum);\n    return tc.base_ids[template_type];\n}\n\nfunction defaultTokenForChain(chain_id) {\n    // Use the native token if we have one\n    // If not, use the first one\n    const config = all_config[\"\"+chain_id];\n    var ret = null;\n    for (var token in config) {\n        var token_info = chainTokenList(chain_id);\n        if (!token_info) {\n            continue;\n        }\n        if (token_info[token].is_native) {\n            return token;\n        }\n        if (!ret) {\n            ret = token;\n        }\n    }\n    return ret;\n}\n\nfunction versionHasFeature(vernum, feature_name) {\n    vernum = \"\"+vernum;\n    if (feature_name == 'min-bond' || feature_name == 'reopen-question') {\n        const min_maj = 3;\n        const bits = vernum.split('.');\n        const maj = parseInt(bits[0]);\n        return (maj >= min_maj);\n    } else if (feature_name == 'description' || feature_name == 'hash-type') {\n        const min_min = 2;\n        const bits = vernum.split('.');\n        const min = parseInt(bits[1]);\n        return (min >= min_min);\n    } else if (feature_name == 'category') {\n        const min_min = 2;\n        const bits = vernum.split('.');\n        const min = parseInt(bits[1]);\n        return (min < min_min);\n    } else {\n        throw new Error('Feature not known: '+feature_name);\n    }\n}\n\nfunction factoryConfigForAddress(address, chain_id) {\n\n    for(var cid in factory_config) {\n        if (chain_id && cid != chain_id) {\n            continue;\n        }\n        for(var ver in factory_config[cid]) {\n            const config = factory_config[cid][ver];\n            if (address.toLowerCase() == config.address.toLowerCase()) {\n                return config;\n            }\n        }\n    }\n    return null;\n\n}\n\nfunction configForAddress(addr, chain_id) {\n    for(var cid in all_config) {\n        if (chain_id && cid != chain_id) {\n            continue;\n        }\n        for(var ticker in all_config[cid]) {\n            for(var ver in all_config[cid][ticker]) {\n                const config = all_config[cid][ticker][ver];\n                if (addr.toLowerCase() == config.address.toLowerCase()) {\n                    if (!config.arbitrators) {\n                        config.arbitrators = [];\n                    }\n                    const [contract_name, version_number] = ver.split('-');\n                    config.version_number = version_number;\n                    config.chain_id = cid;\n                    config.contract_name = contract_name;\n                    config.contract_version = ver;\n                    config.token_ticker = ticker;\n                    return config;\n                }\n            }\n        }\n    }\n    return null;\n\n}\n\nfunction factoryList(chain_id) {\n    if (!factory_config[chain_id]) {\n        return {};\n    }\n    return factory_config[chain_id];\n}\n\nfunction tokenAndContractConfigFromFactory(factory_data, chain_id) {\n    // Get the library for the factory\n    const factory_config = factoryConfigForAddress(factory_data.factory, chain_id);\n\n    const template_orig = configForAddress(factory_config.library_address, chain_id);\n    let template = {};\n    for (let k in template_orig) {\n      template[k] = template_orig[k];\n    }\n\n    if (!template) {\n        console.log('no template found for', factory_data, factory_config, chain_id);\n        return null;\n    }\n\n    template.address = factory_data.realityETH;\n    template.block = parseInt(factory_data.createdBlock);\n    template.token_address = factory_data.token_address;\n    template.token_ticker = factory_data.token_symbol;\n\n    const erc20_chains_val = {};\n    erc20_chains_val[chain_id] = factory_data.token_address;\n\n    return {\n        'token': {\n            'ticker': factory_data.token_symbol,\n            'decimals': factory_data.token_decimals,\n            'is_native': false,\n            'small_number': 1000000000000000000,\n            'erc20_chains': erc20_chains_val\n        },\n        'contract': template\n    }\n        \n}\n\n// An identifier for reality.eth use where we need a number for a chain...\n// ...but we don't have enough bits to use the normal Chain ID\n// This is intended for when we abuse atproto TIDs to make a unique rkey per question\n// The Chain ID will go in the \"clock identifier\" field which is only 10 bits\n// https://atproto.com/ja/specs/tid\nfunction realityETH10BitChainID(chain_id) {\n    // For any chain ID below 512 we'll use the chain ID as is\n    if (chain_id < 512) {\n        return chain_id;\n    }\n    // Above that we'll assign them manually starting at the max\n    // We'll only assign them if we need them, ie if we're making rkeys for that chain\n    const assigned_manually = {\n        \"11155111\": 1023\n    }\n    return assigned_manually[\"\"+chain_id];\n}\n\nfunction atProtoBotDid(chain_id) {\n    if (chain_info[\"\"+chain_id] && chain_info[\"\"+chain_id]['atprotoBot']) {\n        return chain_info[\"\"+chain_id]['atprotoBot']\n    }\n    return null;\n}\n\nfunction getChainLabel(chain_id) {\n    const c = chain_info[chain_id];\n    if (!c) {\n        return null;\n    }\n    return c['chainName'];\n}\n\nmodule.exports.realityETHConfig = realityETHConfig;\nmodule.exports.realityETHConfigs = realityETHConfigs;\nmodule.exports.realityETHInstance = realityETHInstance;\nmodule.exports.arbitratorInstance = arbitratorInstance;\nmodule.exports.erc20Instance = erc20Instance;\nmodule.exports.chainTokenList = chainTokenList;\nmodule.exports.tokenConfig = tokenConfig\nmodule.exports.chainData = chainData;\nmodule.exports.walletAddParameters = walletAddParameters;\nmodule.exports.templateConfig = templateConfig;\nmodule.exports.defaultTemplateIDForType = defaultTemplateIDForType;\nmodule.exports.defaultTokenForChain = defaultTokenForChain;\nmodule.exports.versionHasFeature = versionHasFeature;\nmodule.exports.isChainSupported = isChainSupported;\nmodule.exports.supportedChains = supportedChains;\nmodule.exports.factoryList = factoryList;\nmodule.exports.tokenAndContractConfigFromFactory = tokenAndContractConfigFromFactory;\nmodule.exports.configForAddress = configForAddress;\nmodule.exports.populateImports = populateImports;\nmodule.exports.getChainLabel = getChainLabel;\nmodule.exports.realityETH10BitChainID = realityETH10BitChainID;\nmodule.exports.atProtoBotDid = atProtoBotDid;\n"]}