mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #8747 from ethereum/smt_chc_docs_internal_calls
Add internal function calls to CHC docs
This commit is contained in:
		
						commit
						393f922081
					
				| @ -491,7 +491,8 @@ Horn clauses, where the lifecycle of the contract is represented by a loop | |||||||
| that can visit every public/external function non-deterministically. This way, | that can visit every public/external function non-deterministically. This way, | ||||||
| the behavior of the entire contract over an unbounded number of transactions | the behavior of the entire contract over an unbounded number of transactions | ||||||
| is taken into account when analyzing any function. Loops are fully supported | is taken into account when analyzing any function. Loops are fully supported | ||||||
| by this engine. Function calls are currently unsupported. | by this engine. Internal function calls are supported, but external function | ||||||
|  | calls are currently unsupported. | ||||||
| 
 | 
 | ||||||
| The CHC engine is much more powerful than BMC in terms of what it can prove, | The CHC engine is much more powerful than BMC in terms of what it can prove, | ||||||
| and might require more computing resources. | and might require more computing resources. | ||||||
| @ -505,10 +506,16 @@ erasing knowledge or using a non-precise type). If it determines that a | |||||||
| verification target is safe, it is indeed safe, that is, there are no false | verification target is safe, it is indeed safe, that is, there are no false | ||||||
| negatives (unless there is a bug in the SMTChecker). | negatives (unless there is a bug in the SMTChecker). | ||||||
| 
 | 
 | ||||||
| Function calls to the same contract (or base contracts) are inlined when | In the BMC engine, function calls to the same contract (or base contracts) are | ||||||
| possible, that is, when their implementation is available. | inlined when possible, that is, when their implementation is available.  Calls | ||||||
| Calls to functions in other contracts are not inlined even if their code is | to functions in other contracts are not inlined even if their code is | ||||||
| available, since we cannot guarantee that the actual deployed code is the same. | available, since we cannot guarantee that the actual deployed code is the same. | ||||||
|  | 
 | ||||||
|  | The CHC engine creates nonlinear Horn clauses that use summaries of the called | ||||||
|  | functions to support internal function calls. The same approach can and will be | ||||||
|  | used for external function calls, but the latter requires more work regarding | ||||||
|  | the entire state of the blockchain and is still unimplemented. | ||||||
|  | 
 | ||||||
| Complex pure functions are abstracted by an uninterpreted function (UF) over | Complex pure functions are abstracted by an uninterpreted function (UF) over | ||||||
| the arguments. | the arguments. | ||||||
| 
 | 
 | ||||||
| @ -519,11 +526,14 @@ the arguments. | |||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
| |``require``                        |Assumption                            | | |``require``                        |Assumption                            | | ||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
| |internal                           |Inline function call                  | | |internal                           |BMC: Inline function call             | | ||||||
|  | |                                   |CHC: Function summaries               | | ||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
| |external                           |Inline function call                  | | |external                           |BMC: Inline function call or          | | ||||||
| |                                   |Erase knowledge about state variables | | |                                   |erase knowledge about state variables | | ||||||
| |                                   |and local storage references          | | |                                   |and local storage references.         | | ||||||
|  | |                                   |CHC: Function summaries and erase     | | ||||||
|  | |                                   |state knowledge.                      | | ||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
| |``gasleft``, ``blockhash``,        |Abstracted with UF                    | | |``gasleft``, ``blockhash``,        |Abstracted with UF                    | | ||||||
| |``keccak256``, ``ecrecover``       |                                      | | |``keccak256``, ``ecrecover``       |                                      | | ||||||
| @ -534,8 +544,8 @@ the arguments. | |||||||
| |implementation (external or        |                                      | | |implementation (external or        |                                      | | ||||||
| |complex)                           |                                      | | |complex)                           |                                      | | ||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
| |external functions without         |Unsupported                           | | |external functions without         |BMC: Unsupported                      | | ||||||
| |implementation                     |                                      | | |implementation                     |CHC: Nondeterministic summary         | | ||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
| |others                             |Currently unsupported                 | | |others                             |Currently unsupported                 | | ||||||
| +-----------------------------------+--------------------------------------+ | +-----------------------------------+--------------------------------------+ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user