import { generateErc3448 } from '@tevm/voltaire/Proxy';
import { Address } from '@tevm/voltaire/Address';
import { keccak256 } from '@tevm/voltaire/crypto';
class MetaProxyFactory {
async createProxy(
implementation: string,
config: {
creator: string;
salt: string;
chainId: number;
}
) {
// Encode configuration as metadata
const metadata = new TextEncoder().encode(
JSON.stringify(config)
);
// Generate bytecode
const bytecode = generateErc3448(
Address.from(implementation),
metadata
);
// Calculate CREATE2 address
const factoryAddress = Address.from(this.address);
const saltBytes = keccak256(
new TextEncoder().encode(config.salt)
);
const proxyAddress = Address.calculateCreate2Address(
factoryAddress,
saltBytes,
bytecode
);
return {
bytecode,
address: proxyAddress.toHex(),
metadata: config
};
}
}