mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-04-22 21:58:01 +00:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
import { readFileSync } from 'fs';
|
|
import { fileURLToPath } from 'url';
|
|
import path from 'path';
|
|
import vm from 'vm';
|
|
import { createRequire } from 'module';
|
|
const require = createRequire(import.meta.url);
|
|
|
|
// Import the Emscripten module
|
|
import ModuleFactory from './resolc.mjs';
|
|
|
|
async function initializeSolc() {
|
|
// Load soljson.js
|
|
const soljsonPath = path.join('./', 'soljson.js');
|
|
const soljsonCode = readFileSync(soljsonPath, 'utf8');
|
|
|
|
// Create a new VM context and run soljson.js in it
|
|
const soljsonContext = { Module: {} };
|
|
vm.createContext(soljsonContext); // Create a new context
|
|
vm.runInContext(soljsonCode, soljsonContext); // Execute soljson.js in the new context
|
|
|
|
// Return the initialized soljson module
|
|
return soljsonContext.Module;
|
|
}
|
|
|
|
async function runCompiler() {
|
|
const soljson = await initializeSolc();
|
|
const Module = await ModuleFactory();
|
|
|
|
// Expose soljson in the Module context
|
|
Module.soljson = soljson;
|
|
|
|
// Create input Solidity source code
|
|
const input = `
|
|
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8;
|
|
contract Baseline {
|
|
function baseline() public payable {}
|
|
}`;
|
|
|
|
// Write the input Solidity code to the Emscripten file system
|
|
Module.FS.writeFile('./input.sol', input);
|
|
|
|
// Compile the Solidity source code
|
|
Module.callMain(['./input.sol', '-O3','--bin']);
|
|
}
|
|
|
|
runCompiler().catch(err => {
|
|
console.error('Error:', err);
|
|
});
|