F. Eugene Aumson bca8c5eccc
DevUtils.sol: Upgrade for v3 (#2161)
* Exhibit bug in getSimulatedOrderTransferResults

* Fix getSimulatedOrderTransferResults

* dev-utils/package.json: add quantify_bytecode cmd

* Fix typo in log message

* Reduce compiler optimization runs

In order to reduce the EVM bytecode object length of the DevUtils
contract to be under the EIP-170 limit of 24 KB.
2019-09-18 19:36:06 -04:00

55 lines
2.0 KiB
TypeScript

import { logUtils } from '@0x/utils';
import * as fs from 'fs';
import * as path from 'path';
import * as artifacts from './index';
const MONOREPO_ROOT = path.join(__dirname, '../../../..');
// HACK (xianny): can't import the root package.json normally because it is outside rootDir of this project
const pkgJson = JSON.parse(fs.readFileSync(path.join(MONOREPO_ROOT, 'package.json')).toString());
const pkgNames = pkgJson.config.contractsPackages.split(' ');
const artifactsToPublish = Object.keys(artifacts);
const contractsDirs = [];
for (const pkgName of pkgNames) {
if (!pkgName.startsWith('@0x/contracts-')) {
throw new Error(`Invalid package name: [${pkgName}]. Contracts packages must be prefixed with 'contracts-'`);
}
contractsDirs.push(pkgName.split('/contracts-')[1]);
}
const contractsPath = path.join(MONOREPO_ROOT, 'contracts');
const allArtifactPaths = [];
for (const dir of contractsDirs) {
const artifactsDir = path.join(contractsPath, dir, 'generated-artifacts');
if (!fs.existsSync(artifactsDir)) {
continue;
}
const artifactPaths: string[] = fs
.readdirSync(artifactsDir)
.filter(artifact => {
const artifactWithoutExt = artifact.split('.')[0];
return artifactsToPublish.includes(artifactWithoutExt);
})
.map(artifact => path.join(artifactsDir, artifact));
allArtifactPaths.push(...artifactPaths);
}
if (allArtifactPaths.length < pkgNames.length) {
throw new Error(
`Expected ${pkgNames.length} artifacts, found ${
allArtifactPaths.length
}. Please ensure artifacts are present in ${contractsPath}/**/generated-artifacts`,
);
}
for (const _path of allArtifactPaths) {
const fileName = _path.split('/').slice(-1)[0];
const targetPath = path.join(__dirname, '../../artifacts', fileName);
fs.copyFileSync(_path, targetPath);
logUtils.log(`Copied ${_path}`);
}
logUtils.log(`Finished copying contract-artifacts. Remember to transform artifacts before publishing or using abi-gen`);