Merge pull request #574 from ethereum/fixAbi

Ensure "payable" and "stateMutability" have correct value if "constant" is true
pull/5370/head
yann300 4 years ago committed by GitHub
commit fa814fe307
  1. 17
      libs/remix-solidity/src/compiler/compiler.ts
  2. 6
      libs/remix-solidity/src/compiler/types.ts

@ -7,7 +7,8 @@ import EventManager from '../lib/eventManager'
import { default as txHelper } from './txHelper';
import { Source, SourceWithTarget, MessageFromWorker, CompilerState, CompilationResult,
visitContractsCallbackParam, visitContractsCallbackInterface, CompilationError,
gatherImportsCallbackInterface } from './types'
gatherImportsCallbackInterface,
isFunctionDescription } from './types'
/*
trigger compilationFinished, compilerLoaded, compilationStarted, compilationDuration
@ -335,8 +336,18 @@ export class Compiler {
'type': 'fallback'
})
}
if(data && data.contracts && this.state.currentVersion)
data.contracts[contract.file][contract.name].abi = update(this.truncateVersion(this.state.currentVersion), contract.object.abi)
if(data && data.contracts && this.state.currentVersion) {
const version = this.truncateVersion(this.state.currentVersion)
data.contracts[contract.file][contract.name].abi = update(version, contract.object.abi)
// if "constant" , payable must not be true and stateMutability must be view.
// see https://github.com/ethereum/solc-js/issues/500
for (const item of data.contracts[contract.file][contract.name].abi) {
if (isFunctionDescription(item) && item.constant) {
item.payable = false
item.stateMutability = 'view';
}
}
}
})
return data
}

@ -354,6 +354,12 @@ export interface CompilationResult {
/////////
export type ABIDescription = FunctionDescription | EventDescription
export const isFunctionDescription = (item: ABIDescription): item is FunctionDescription =>
(item as FunctionDescription).stateMutability !== undefined;
export const isEventDescription = (item: ABIDescription): item is EventDescription =>
(item as EventDescription).type === 'event';
export interface FunctionDescription {
/** Type of the method. default is 'function' */
type?: 'function' | 'constructor' | 'fallback' | 'receive'

Loading…
Cancel
Save