UNPKG

@dethcrypto/eth-sdk

Version:

🛠 Generate type-safe, lightweight SDK for your Ethereum smart contracts

35 lines • 1.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAbiFromSourcify = void 0; const makeError_1 = require("../../utils/makeError"); const networks_1 = require("./../networks"); /** * given networkSymbol and address we fetch from Sourcify HTTP endpoint GET /files/:chain/:address */ const getAbiFromSourcify = async (networkSymbol, address, userNetworkIds, fetch) => { const networkId = (0, networks_1.isUserProvidedNetwork)(networkSymbol, userNetworkIds) ? userNetworkIds[networkSymbol] : networks_1.symbolToNetworkId[networkSymbol]; if (networkId == null) { throw new Error(`Network ID for "${networkSymbol}" was not found. Please add it to "networkIds" object in the config.`); } const body = await fetch(`https://sourcify.dev/server/files/${networkId}/${address}`); try { if (Array.isArray(body)) { const metadata = body.find((file) => file.name === 'metadata.json'); if (!metadata) { throw new Error('No metadata.json found in\n' + JSON.stringify(body, null, 2)); } const content = JSON.parse(metadata.content); // @todo We'd probably prefer to save whole output to get tsdoc comments // from NatSpec (already supported by TypeChain) return content.output.abi; } throw new Error('Response from Sourcify is not array of files\n' + JSON.stringify(body, null, 2)); } catch (err) { throw new Error('Failed to fetch abi from https://sourcify.dev\n' + (0, makeError_1.makeError)(err).message); } }; exports.getAbiFromSourcify = getAbiFromSourcify; //# sourceMappingURL=getAbiFromSourcify.js.map