@dethcrypto/eth-sdk
Version:
🛠Generate type-safe, lightweight SDK for your Ethereum smart contracts
35 lines • 1.72 kB
JavaScript
;
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