hts/apps/migrant/lib/functions/deploy-contract/compile-contract.ts

38 lines
891 B
TypeScript

const solc = require('solc')
export default async function compileContract({
standardJsonInput,
contractName
}: {
standardJsonInput: string
contractName: string
}) {
const fileName = contractName.replace(/[\/\\:*?"<>|.\s]+$/g, '_') + '.sol'
const output = JSON.parse(solc.compile(standardJsonInput))
if (output.errors) {
// Filter out warnings
const errors = output.errors.filter(
(error: { severity: string }) => error.severity === 'error'
)
if (errors.length > 0) {
const error = new Error(errors[0].formattedMessage)
throw error
}
}
const contract = output.contracts[fileName]
// Get the contract ABI and bytecode
const abi = contract[contractName].abi
let bytecode = contract[contractName].evm.bytecode.object
if (!bytecode.startsWith('0x')) {
bytecode = '0x' + bytecode
}
return {
abi,
bytecode
}
}