@0x/sol-compiler: Strip receive functions from 0.6 ABI output

This commit is contained in:
Lawrence Forman 2020-04-07 23:12:01 -04:00
parent 1017707475
commit 3e9309c003
3 changed files with 29 additions and 13 deletions

View File

@ -5,6 +5,10 @@
{
"note": "Refactor + add solidity 0.6 support",
"pr": 2532
},
{
"note": "Filter `receive` functions from 0.6 ABIs",
"pr": 2540
}
]
},

View File

@ -32,18 +32,6 @@ export const DEFAULT_COMPILER_SETTINGS: solc.CompilerSettings = {
export class SolcWrapperV05 extends SolcWrapper {
protected readonly _compilerSettings: solc.CompilerSettings;
public static normalizeOutput(output: StandardOutput): StandardOutput {
const _output = _.cloneDeep(output);
// tslint:disable-next-line forin
for (const contractPath in _output.contracts) {
// tslint:disable-next-line forin
for (const contract of Object.values(_output.contracts[contractPath])) {
addHexPrefixToContractBytecode(contract);
}
}
return _output;
}
constructor(protected readonly _solcVersion: string, protected readonly _opts: CompilerOptions) {
super();
this._compilerSettings = {
@ -88,7 +76,7 @@ export class SolcWrapperV05 extends SolcWrapper {
}
return {
input,
output: SolcWrapperV05.normalizeOutput(output),
output: this._normalizeOutput(output),
};
}
@ -99,4 +87,17 @@ export class SolcWrapperV05 extends SolcWrapper {
const solcInstance = await getSolcJSAsync(this.solidityVersion, !!this._opts.isOfflineMode);
return compileSolcJSAsync(solcInstance, input);
}
// tslint:disable-next-line: prefer-function-over-method
protected _normalizeOutput(output: StandardOutput): StandardOutput {
const _output = _.cloneDeep(output);
// tslint:disable-next-line forin
for (const contractPath in _output.contracts) {
// tslint:disable-next-line forin
for (const contract of Object.values(_output.contracts[contractPath])) {
addHexPrefixToContractBytecode(contract);
}
}
return _output;
}
}

View File

@ -22,4 +22,15 @@ export class SolcWrapperV06 extends SolcWrapperV05 {
solcInstance.compileStandardWrapper = solcInstance.compile;
return compileSolcJSAsync(solcInstance, input);
}
protected _normalizeOutput(output: StandardOutput): StandardOutput {
const _output = super._normalizeOutput(output);
// Filter out 'receive' ABI item types until ethers supports it.
for (const contracts of Object.values(_output.contracts)) {
for (const contract of Object.values(contracts)) {
contract.abi = contract.abi.filter(v => v.type !== 'receive');
}
}
return _output;
}
}