mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Remove assert for now.
This commit is contained in:
		
							parent
							
								
									811bb770c5
								
							
						
					
					
						commit
						4b1e8111cc
					
				| @ -400,11 +400,7 @@ While a user-provided exception is generated in the following situations: | ||||
| #. Calling ``throw``. | ||||
| 
 | ||||
| Internally, Solidity performs a revert operation (instruction ``0xfd``) when a user-provided exception is thrown. In contrast, it performs an invalid operation | ||||
| (instruction ``0xfe``) if a runtime exception is encountered or the condition of an ``assert`` call is not met. In both cases, this causes | ||||
| (instruction ``0xfe``) if a runtime exception is encountered. In both cases, this causes | ||||
| the EVM to revert all changes made to the state. The reason for this is that there is no safe way to continue execution, because an expected effect | ||||
| did not occur. Because we want to retain the atomicity of transactions, the safest thing to do is to revert all changes and make the whole transaction | ||||
| (or at least call) without effect. | ||||
| 
 | ||||
| If contracts are written so that ``assert`` is only used to test internal conditions and ``throw`` or | ||||
| ``revert`` is used in case of malformed input, a formal analysis tool that verifies that the invalid | ||||
| opcode can never be reached can be used to check for the absence of errors assuming valid inputs. | ||||
|  | ||||
| @ -435,7 +435,7 @@ The following is the order of precedence for operators, listed in order of evalu | ||||
| | *16*       | Comma operator                      | ``,``                                      | | ||||
| +------------+-------------------------------------+--------------------------------------------+ | ||||
| 
 | ||||
| .. index:: block, coinbase, difficulty, number, block;number, timestamp, block;timestamp, msg, data, gas, sender, value, now, gas price, origin, assert, revert, keccak256, ripemd160, sha256, ecrecover, addmod, mulmod, cryptography, this, super, selfdestruct, balance, send | ||||
| .. index:: block, coinbase, difficulty, number, block;number, timestamp, block;timestamp, msg, data, gas, sender, value, now, gas price, origin, revert, keccak256, ripemd160, sha256, ecrecover, addmod, mulmod, cryptography, this, super, selfdestruct, balance, send | ||||
| 
 | ||||
| Global Variables | ||||
| ================ | ||||
| @ -461,7 +461,6 @@ Global Variables | ||||
| - ``ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address)``: recover address associated with the public key from elliptic curve signature, return zero on error | ||||
| - ``addmod(uint x, uint y, uint k) returns (uint)``: compute ``(x + y) % k`` where the addition is performed with arbitrary precision and does not wrap around at ``2**256`` | ||||
| - ``mulmod(uint x, uint y, uint k) returns (uint)``: compute ``(x * y) % k`` where the multiplication is performed with arbitrary precision and does not wrap around at ``2**256`` | ||||
| - ``assert(bool condition)``: throws if the condition is false (using an invalid opcode) | ||||
| - ``this`` (current contract's type): the current contract, explicitly convertible to ``address`` | ||||
| - ``super``: the contract one level higher in the inheritance hierarchy | ||||
| - ``selfdestruct(address recipient)``: destroy the current contract, sending its funds to the given address | ||||
|  | ||||
| @ -66,8 +66,9 @@ m_magicVariables(vector<shared_ptr<MagicVariableDeclaration const>>{make_shared< | ||||
| 							make_shared<FunctionType>(strings{"bytes32", "uint8", "bytes32", "bytes32"}, strings{"address"}, FunctionType::Location::ECRecover)), | ||||
| 					make_shared<MagicVariableDeclaration>("ripemd160", | ||||
| 							make_shared<FunctionType>(strings(), strings{"bytes20"}, FunctionType::Location::RIPEMD160, true)), | ||||
| 					make_shared<MagicVariableDeclaration>("assert", | ||||
| 							make_shared<FunctionType>(strings{"bool"}, strings{}, FunctionType::Location::Assert)), | ||||
| // Disabled until decision about semantics of assert is made.
 | ||||
| //					make_shared<MagicVariableDeclaration>("assert",
 | ||||
| //							make_shared<FunctionType>(strings{"bool"}, strings{}, FunctionType::Location::Assert)),
 | ||||
| 					make_shared<MagicVariableDeclaration>("revert", | ||||
| 							make_shared<FunctionType>(strings(), strings(), FunctionType::Location::Revert))}) | ||||
| { | ||||
|  | ||||
| @ -9083,24 +9083,24 @@ BOOST_AUTO_TEST_CASE(invalid_instruction) | ||||
| 	BOOST_CHECK(callContractFunction("f()") == encodeArgs()); | ||||
| } | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(assert) | ||||
| { | ||||
| 	char const* sourceCode = R"( | ||||
| 		contract C { | ||||
| 			function f() { | ||||
| 				assert(false); | ||||
| 			} | ||||
| 			function g(bool val) returns (bool) { | ||||
| 				assert(val == true); | ||||
| 				return true; | ||||
| 			} | ||||
| 		} | ||||
| 	)"; | ||||
| 	compileAndRun(sourceCode, 0, "C"); | ||||
| 	BOOST_CHECK(callContractFunction("f()") == encodeArgs()); | ||||
| 	BOOST_CHECK(callContractFunction("g(bool)", false) == encodeArgs()); | ||||
| 	BOOST_CHECK(callContractFunction("g(bool)", true) == encodeArgs(true)); | ||||
| } | ||||
| //BOOST_AUTO_TEST_CASE(assert)
 | ||||
| //{
 | ||||
| //	char const* sourceCode = R"(
 | ||||
| //		contract C {
 | ||||
| //			function f() {
 | ||||
| //				assert(false);
 | ||||
| //			}
 | ||||
| //			function g(bool val) returns (bool) {
 | ||||
| //				assert(val == true);
 | ||||
| //				return true;
 | ||||
| //			}
 | ||||
| //		}
 | ||||
| //	)";
 | ||||
| //	compileAndRun(sourceCode, 0, "C");
 | ||||
| //	BOOST_CHECK(callContractFunction("f()") == encodeArgs());
 | ||||
| //	BOOST_CHECK(callContractFunction("g(bool)", false) == encodeArgs());
 | ||||
| //	BOOST_CHECK(callContractFunction("g(bool)", true) == encodeArgs(true));
 | ||||
| //}
 | ||||
| 
 | ||||
| BOOST_AUTO_TEST_CASE(revert) | ||||
| { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user