38 lines
891 B
TypeScript
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
|
|
}
|
|
}
|