From 22daa08804d3742e6908cab0accb9eed3d38370a Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Fri, 2 Aug 2024 23:43:22 +0400 Subject: [PATCH 1/2] state overlay --- src/concrete/RainterpreterNPE2.sol | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/concrete/RainterpreterNPE2.sol b/src/concrete/RainterpreterNPE2.sol index e4e52c145..19adda422 100644 --- a/src/concrete/RainterpreterNPE2.sol +++ b/src/concrete/RainterpreterNPE2.sol @@ -5,7 +5,7 @@ import {ERC165} from "openzeppelin-contracts/contracts/utils/introspection/ERC16 import {LibPointer, Pointer} from "rain.solmem/lib/LibPointer.sol"; import {LibStackPointer} from "rain.solmem/lib/LibStackPointer.sol"; import {LibUint256Array} from "rain.solmem/lib/LibUint256Array.sol"; -import {LibMemoryKV, MemoryKV} from "rain.lib.memkv/lib/LibMemoryKV.sol"; +import {LibMemoryKV, MemoryKV, MemoryKVKey, MemoryKVVal} from "rain.lib.memkv/lib/LibMemoryKV.sol"; import {LibCast} from "rain.lib.typecast/LibCast.sol"; import {LibDataContract} from "rain.datacontract/lib/LibDataContract.sol"; @@ -32,6 +32,11 @@ contract RainterpreterNPE2 is IInterpreterV4, IOpcodeToolingV1, ERC165 { InterpreterStateNP memory state = eval.bytecode.unsafeDeserializeNP( SourceIndexV2.unwrap(eval.sourceIndex), eval.namespace, eval.store, eval.context, OPCODE_FUNCTION_POINTERS ); + for (uint256 i = 0; i < eval.stateOverlay.length; i += 2) { + LibMemoryKV.set( + state.stateKV, MemoryKVKey.wrap(eval.stateOverlay[i]), MemoryKVVal.wrap(eval.stateOverlay[i + 1]) + ); + } // We use the return by returning it. Slither false positive. //slither-disable-next-line unused-return return state.eval2(eval.inputs, type(uint256).max); From fb2c0186651995f358c93678cac773f928a3c791 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Sat, 3 Aug 2024 12:20:28 +0400 Subject: [PATCH 2/2] state overlay tests --- .gas-snapshot | 554 +++++++++--------- src/concrete/RainterpreterNPE2.sol | 2 +- src/generated/RainterpreterNPE2.pointers.sol | 4 +- .../RainterpreterNPE2.stateOverlay.t.sol | 69 +++ 4 files changed, 350 insertions(+), 279 deletions(-) create mode 100644 test/src/concrete/RainterpreterNPE2.stateOverlay.t.sol diff --git a/.gas-snapshot b/.gas-snapshot index e0c95cbf8..58b22c2a3 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -8,28 +8,28 @@ LibEvalNPFBoundsTest:testEvalNPFBoundsModConstant(uint256) (runs: 2051, μ: 5851 LibExternCodecTest:testLibExternCodecEncodeExternCall(uint256,uint256) (runs: 2051, μ: 5867, ~: 5746) LibExternCodecTest:testLibExternCodecEncodeExternDispatch(uint256,uint256) (runs: 2051, μ: 5697, ~: 5576) LibInterpreterStateNPStackTraceTest:testStackTraceCall(uint256,uint256,uint256[]) (runs: 2051, μ: 41313, ~: 41040) -LibOpAddTest:testOpAddEval2InputsHappy() (gas: 100057) -LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 53364) -LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 96020) -LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 98964) -LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 97969) -LibOpAddTest:testOpAddEval3InputsHappy() (gas: 320293) -LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 674963) +LibOpAddTest:testOpAddEval2InputsHappy() (gas: 100503) +LibOpAddTest:testOpAddEval2InputsHappyZero() (gas: 53587) +LibOpAddTest:testOpAddEval2InputsHappyZeroMax() (gas: 96466) +LibOpAddTest:testOpAddEval2InputsHappyZeroOne() (gas: 99410) +LibOpAddTest:testOpAddEval2InputsUnhappy() (gas: 98415) +LibOpAddTest:testOpAddEval3InputsHappy() (gas: 321631) +LibOpAddTest:testOpAddEval3InputsUnhappy() (gas: 677862) LibOpAddTest:testOpAddEvalOneInput() (gas: 35919) LibOpAddTest:testOpAddEvalOperandDisallowed() (gas: 93475) LibOpAddTest:testOpAddEvalTwoOutput() (gas: 42680) LibOpAddTest:testOpAddEvalZeroInputs() (gas: 30178) LibOpAddTest:testOpAddEvalZeroOutputs() (gas: 41679) -LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14751, ~: 14754) +LibOpAddTest:testOpAddIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14753, ~: 14754) LibOpAddTest:testOpAddIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10651, ~: 10498) LibOpAddTest:testOpAddIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10628, ~: 10475) -LibOpAddTest:testOpAddRun(uint256[]) (runs: 2049, μ: 15203, ~: 14823) -LibOpAnyNPTest:testOpAnyNPEval1FalseInput() (gas: 47855) -LibOpAnyNPTest:testOpAnyNPEval1TrueInput() (gas: 47840) -LibOpAnyNPTest:testOpAnyNPEval2FalseInputs() (gas: 53329) -LibOpAnyNPTest:testOpAnyNPEval2MixedInputs() (gas: 54097) -LibOpAnyNPTest:testOpAnyNPEval2MixedInputs2() (gas: 54201) -LibOpAnyNPTest:testOpAnyNPEval2TrueInputs() (gas: 54099) +LibOpAddTest:testOpAddRun(uint256[]) (runs: 2049, μ: 15219, ~: 14823) +LibOpAnyNPTest:testOpAnyNPEval1FalseInput() (gas: 48078) +LibOpAnyNPTest:testOpAnyNPEval1TrueInput() (gas: 48063) +LibOpAnyNPTest:testOpAnyNPEval2FalseInputs() (gas: 53552) +LibOpAnyNPTest:testOpAnyNPEval2MixedInputs() (gas: 54320) +LibOpAnyNPTest:testOpAnyNPEval2MixedInputs2() (gas: 54424) +LibOpAnyNPTest:testOpAnyNPEval2TrueInputs() (gas: 54322) LibOpAnyNPTest:testOpAnyNPEvalFail() (gas: 29691) LibOpAnyNPTest:testOpAnyNPIntegrityGas0() (gas: 3279) LibOpAnyNPTest:testOpAnyNPIntegrityHappy(uint8,uint16) (runs: 2051, μ: 5137, ~: 5264) @@ -38,15 +38,15 @@ LibOpAnyNPTest:testOpAnyNPRun(uint256[],uint16) (runs: 2049, μ: 13280, ~: 13272 LibOpAnyNPTest:testOpAnyNPRunGas0() (gas: 3382) LibOpAnyNPTest:testOpAnyNPTwoOutputs() (gas: 36001) LibOpAnyNPTest:testOpAnyNPZeroOutputs() (gas: 34974) -LibOpAvgTest:testOpAvgEval() (gas: 403556) +LibOpAvgTest:testOpAvgEval() (gas: 405563) LibOpAvgTest:testOpAvgEvalOneInput() (gas: 35336) LibOpAvgTest:testOpAvgEvalOperandDisallowed() (gas: 17776) LibOpAvgTest:testOpAvgEvalThreeInputs() (gas: 45473) LibOpAvgTest:testOpAvgEvalTwoOutputs() (gas: 41080) LibOpAvgTest:testOpAvgEvalZeroOutputs() (gas: 40035) LibOpAvgTest:testOpAvgIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10688, ~: 10658) -LibOpAvgTest:testOpAvgRun(uint256,uint256,uint16) (runs: 2051, μ: 13733, ~: 13445) -LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 728951) +LibOpAvgTest:testOpAvgRun(uint256,uint256,uint16) (runs: 2051, μ: 13742, ~: 13445) +LibOpBitwiseAndNPTest:testOpBitwiseAndNPEvalHappy() (gas: 732519) LibOpBitwiseAndNPTest:testOpBitwiseAndNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10688, ~: 10658) LibOpBitwiseAndNPTest:testOpBitwiseAndNPRun(uint256,uint256) (runs: 2051, μ: 8177, ~: 8177) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18444) @@ -55,7 +55,7 @@ LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 46111) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalTwoOutputs() (gas: 41761) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30759) LibOpBitwiseAndNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40716) -LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 727657) +LibOpBitwiseOrNPTest:testOpBitwiseORNPEval() (gas: 731225) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalBadOperand() (gas: 18363) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalOneInput() (gas: 35894) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalThreeInputs() (gas: 46052) @@ -64,110 +64,110 @@ LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroInputs() (gas: 30700) LibOpBitwiseOrNPTest:testOpBitwiseORNPEvalZeroOutputs() (gas: 40635) LibOpBitwiseOrNPTest:testOpBitwiseORNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10666, ~: 10636) LibOpBitwiseOrNPTest:testOpBitwiseORNPRun(uint256,uint256) (runs: 2051, μ: 8153, ~: 8153) -LibOpBlockNumberNPTest:testOpBlockNumberNPEval(uint256) (runs: 2051, μ: 49357, ~: 49225) +LibOpBlockNumberNPTest:testOpBlockNumberNPEval(uint256) (runs: 2051, μ: 49578, ~: 49448) LibOpBlockNumberNPTest:testOpBlockNumberNPEvalOneInput() (gas: 35094) LibOpBlockNumberNPTest:testOpBlockNumberNPEvalTwoOutputs() (gas: 31448) LibOpBlockNumberNPTest:testOpBlockNumberNPEvalZeroOutputs() (gas: 30464) -LibOpBlockNumberNPTest:testOpBlockNumberNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16246, ~: 16292) -LibOpBlockNumberNPTest:testOpBlockNumberNPRun(uint256,uint16) (runs: 2051, μ: 14304, ~: 14163) -LibOpCallNPTest:testCallTraceInnerOnly() (gas: 62741) -LibOpCallNPTest:testCallTraceOuterAndInner() (gas: 73600) -LibOpCallNPTest:testCallTraceOuterAndTwoInner() (gas: 113622) -LibOpCallNPTest:testCallTraceOuterOnly() (gas: 45355) -LibOpCallNPTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,uint256[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2050, μ: 38212, ~: 36658) -LibOpCallNPTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,uint256[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2051, μ: 37613, ~: 35704) -LibOpCallNPTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,uint256[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 35971, ~: 35775) +LibOpBlockNumberNPTest:testOpBlockNumberNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16256, ~: 16360) +LibOpBlockNumberNPTest:testOpBlockNumberNPRun(uint256,uint16) (runs: 2051, μ: 14303, ~: 14163) +LibOpCallNPTest:testCallTraceInnerOnly() (gas: 62964) +LibOpCallNPTest:testCallTraceOuterAndInner() (gas: 73823) +LibOpCallNPTest:testCallTraceOuterAndTwoInner() (gas: 113845) +LibOpCallNPTest:testCallTraceOuterOnly() (gas: 45578) +LibOpCallNPTest:testOpCallNPIntegrityIO((uint256,uint256,uint256,uint256[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2050, μ: 38221, ~: 36743) +LibOpCallNPTest:testOpCallNPIntegritySourceIndexOutOfBounds((uint256,uint256,uint256,uint256[],uint256,bytes),uint256,uint256,uint256,uint256,bytes32) (runs: 2051, μ: 37618, ~: 35737) +LibOpCallNPTest:testOpCallNPIntegrityTooManyOutputs((uint256,uint256,uint256,uint256[],uint256,bytes),uint256,uint256,uint8,bytes32) (runs: 2048, μ: 35942, ~: 35837) LibOpCallNPTest:testOpCallNPRunInputsMismatch() (gas: 73785) -LibOpCallNPTest:testOpCallNPRunNoIO() (gas: 690949) +LibOpCallNPTest:testOpCallNPRunNoIO() (gas: 693185) LibOpCallNPTest:testOpCallNPRunOutputsMismatch() (gas: 66503) -LibOpCallNPTest:testOpCallNPRunRecursive() (gas: 304314) +LibOpCallNPTest:testOpCallNPRunRecursive() (gas: 304983) LibOpCallNPTest:testOpCallNPRunSourceDoesNotExist() (gas: 351486) -LibOpCeilTest:testOpCeilEval() (gas: 200034) +LibOpCeilTest:testOpCeilEval() (gas: 201149) LibOpCeilTest:testOpCeilEvalOperandDisallowed() (gas: 17857) LibOpCeilTest:testOpCeilIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10666, ~: 10636) -LibOpCeilTest:testOpCeilRun(uint256,uint16) (runs: 2051, μ: 12029, ~: 12236) +LibOpCeilTest:testOpCeilRun(uint256,uint16) (runs: 2051, μ: 12026, ~: 12236) LibOpCeilTest:testOpCeilTwoInputs() (gas: 40475) LibOpCeilTest:testOpCeilTwoOutputs() (gas: 36085) LibOpCeilTest:testOpCeilZeroInputs() (gas: 30203) LibOpCeilTest:testOpCeilZeroOutputs() (gas: 35038) -LibOpChainIdNPTest:testOpChainIDNPEval(uint64) (runs: 2051, μ: 45486, ~: 45486) -LibOpChainIdNPTest:testOpChainIDNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16271, ~: 16356) +LibOpChainIdNPTest:testOpChainIDNPEval(uint64) (runs: 2051, μ: 45709, ~: 45709) +LibOpChainIdNPTest:testOpChainIDNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16272, ~: 16333) LibOpChainIdNPTest:testOpChainIdNPEvalFail() (gas: 34341) LibOpChainIdNPTest:testOpChainIdNPRun(uint64,uint16) (runs: 2051, μ: 10717, ~: 10717) LibOpChainIdNPTest:testOpChainIdNPTwoOutputs() (gas: 31173) LibOpChainIdNPTest:testOpChainIdNPZeroOutputs() (gas: 30103) -LibOpConditionsNPTest:testOpConditionsNPEval1FalseInput1TrueInput() (gas: 67934) -LibOpConditionsNPTest:testOpConditionsNPEval1FalseInputRevert() (gas: 55316) -LibOpConditionsNPTest:testOpConditionsNPEval1TrueInput1FalseInput() (gas: 67808) -LibOpConditionsNPTest:testOpConditionsNPEval1TrueInputZeroOutput() (gas: 54927) -LibOpConditionsNPTest:testOpConditionsNPEval2MixedInputs() (gas: 54929) -LibOpConditionsNPTest:testOpConditionsNPEval2TrueInputs() (gas: 67809) -LibOpConditionsNPTest:testOpConditionsNPEvalErrorCode() (gas: 67305) +LibOpConditionsNPTest:testOpConditionsNPEval1FalseInput1TrueInput() (gas: 68157) +LibOpConditionsNPTest:testOpConditionsNPEval1FalseInputRevert() (gas: 55539) +LibOpConditionsNPTest:testOpConditionsNPEval1TrueInput1FalseInput() (gas: 68031) +LibOpConditionsNPTest:testOpConditionsNPEval1TrueInputZeroOutput() (gas: 55150) +LibOpConditionsNPTest:testOpConditionsNPEval2MixedInputs() (gas: 55152) +LibOpConditionsNPTest:testOpConditionsNPEval2TrueInputs() (gas: 68032) +LibOpConditionsNPTest:testOpConditionsNPEvalErrorCode() (gas: 67528) LibOpConditionsNPTest:testOpConditionsNPEvalFail0Inputs() (gas: 30360) LibOpConditionsNPTest:testOpConditionsNPEvalFail1Inputs() (gas: 34639) LibOpConditionsNPTest:testOpConditionsNPEvalUnhappyOperand() (gas: 18305) -LibOpConditionsNPTest:testOpConditionsNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16501, ~: 16555) +LibOpConditionsNPTest:testOpConditionsNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16496, ~: 16545) LibOpConditionsNPTest:testOpConditionsNPRun(uint256[],uint256) (runs: 2049, μ: 13773, ~: 13876) LibOpConditionsNPTest:testOpConditionsNPRunNoConditionsMet(uint256[],string) (runs: 2048, μ: 23258, ~: 22988) LibOpConditionsNPTest:testOpConditionsNPTwoOutputs() (gas: 39888) LibOpConditionsNPTest:testOpConditionsNPZeroOutputs() (gas: 38867) -LibOpConstantNPTest:testOpConstantEvalNPE2E() (gas: 50423) +LibOpConstantNPTest:testOpConstantEvalNPE2E() (gas: 50646) LibOpConstantNPTest:testOpConstantEvalZeroConstants() (gas: 41484) LibOpConstantNPTest:testOpConstantNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 17923, ~: 17902) -LibOpConstantNPTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 18107, ~: 18108) +LibOpConstantNPTest:testOpConstantNPIntegrityOOBConstants((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 18101, ~: 18160) LibOpConstantNPTest:testOpConstantNPMultipleOutputErrorSugared() (gas: 31852) LibOpConstantNPTest:testOpConstantNPMultipleOutputErrorUnsugared() (gas: 41813) -LibOpConstantNPTest:testOpConstantNPRun(uint256[],uint16) (runs: 2051, μ: 47411, ~: 47447) +LibOpConstantNPTest:testOpConstantNPRun(uint256[],uint16) (runs: 2051, μ: 47408, ~: 47447) LibOpConstantNPTest:testOpConstantNPZeroOutputErrorSugared() (gas: 30474) LibOpConstantNPTest:testOpConstantNPZeroOutputErrorUnsugared() (gas: 40402) -LibOpContextNPTest:testOpContextNPEval00(uint256[][]) (runs: 2051, μ: 7242497, ~: 6131951) -LibOpContextNPTest:testOpContextNPEval01(uint256[][]) (runs: 2051, μ: 7236270, ~: 6120046) -LibOpContextNPTest:testOpContextNPEval10(uint256[][]) (runs: 2051, μ: 7281916, ~: 6195252) -LibOpContextNPTest:testOpContextNPEval11(uint256[][]) (runs: 2051, μ: 7278582, ~: 6205053) -LibOpContextNPTest:testOpContextNPEvalOOBi(uint256[]) (runs: 2051, μ: 77049, ~: 77130) -LibOpContextNPTest:testOpContextNPEvalOOBj(uint256) (runs: 2051, μ: 48036, ~: 48036) +LibOpContextNPTest:testOpContextNPEval00(uint256[][]) (runs: 2051, μ: 7242720, ~: 6132174) +LibOpContextNPTest:testOpContextNPEval01(uint256[][]) (runs: 2051, μ: 7236493, ~: 6120269) +LibOpContextNPTest:testOpContextNPEval10(uint256[][]) (runs: 2051, μ: 7282139, ~: 6195475) +LibOpContextNPTest:testOpContextNPEval11(uint256[][]) (runs: 2051, μ: 7278805, ~: 6205276) +LibOpContextNPTest:testOpContextNPEvalOOBi(uint256[]) (runs: 2051, μ: 77272, ~: 77353) +LibOpContextNPTest:testOpContextNPEvalOOBj(uint256) (runs: 2051, μ: 48259, ~: 48259) LibOpContextNPTest:testOpContextNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10737, ~: 10707) LibOpContextNPTest:testOpContextNPOneInput() (gas: 41828) -LibOpContextNPTest:testOpContextNPRun(uint256[][],uint256,uint256) (runs: 2051, μ: 10526868, ~: 8981864) -LibOpContextNPTest:testOpContextNPRunOOBi(uint256[][],uint256,uint256) (runs: 2051, μ: 5495322, ~: 4781340) -LibOpContextNPTest:testOpContextNPRunOOBj(uint256[][],uint256,uint256) (runs: 2051, μ: 5521518, ~: 4832713) +LibOpContextNPTest:testOpContextNPRun(uint256[][],uint256,uint256) (runs: 2051, μ: 10533010, ~: 8960843) +LibOpContextNPTest:testOpContextNPRunOOBi(uint256[][],uint256,uint256) (runs: 2051, μ: 5495321, ~: 4781340) +LibOpContextNPTest:testOpContextNPRunOOBj(uint256[][],uint256,uint256) (runs: 2051, μ: 5523508, ~: 4832713) LibOpContextNPTest:testOpContextNPTwoInputs() (gas: 46929) LibOpContextNPTest:testOpContextNPTwoOutputs() (gas: 37298) LibOpContextNPTest:testOpContextNPZeroOutputs() (gas: 36226) -LibOpCtPopNPTest:testOpCtPopNPEval(uint256) (runs: 2051, μ: 60465, ~: 57347) +LibOpCtPopNPTest:testOpCtPopNPEval(uint256) (runs: 2051, μ: 60973, ~: 57570) LibOpCtPopNPTest:testOpCtPopNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10709, ~: 10679) LibOpCtPopNPTest:testOpCtPopNPRun(uint256) (runs: 2051, μ: 8312, ~: 8313) LibOpCtPopNPTest:testOpCtPopNPTwoInputs() (gas: 41554) LibOpCtPopNPTest:testOpCtPopNPTwoOutputs() (gas: 37207) LibOpCtPopNPTest:testOpCtPopNPZeroInputs() (gas: 31258) LibOpCtPopNPTest:testOpCtPopNPZeroOutputs() (gas: 36159) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 813430) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalHappy() (gas: 817444) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoInputs() (gas: 47409) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalTwoOutputs() (gas: 43064) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroInputs() (gas: 37159) LibOpDecodeBitsNPTest:testOpDecodeBitsNPEvalZeroOutputs() (gas: 41992) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2051, μ: 18893, ~: 18934) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8) (runs: 2051, μ: 19414, ~: 19355) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint8,uint8) (runs: 2051, μ: 18893, ~: 19035) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFail((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8) (runs: 2051, μ: 19410, ~: 19302) LibOpDecodeBitsNPTest:testOpDecodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,uint256[],uint256,bytes),uint8) (runs: 2051, μ: 13873, ~: 13849) -LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(uint256,uint8,uint8) (runs: 2051, μ: 12482, ~: 12301) +LibOpDecodeBitsNPTest:testOpDecodeBitsNPRun(uint256,uint8,uint8) (runs: 2051, μ: 12480, ~: 12301) LibOpDivTest:testDebugOpDivRun() (gas: 9778) LibOpDivTest:testOpDivEvalOneInput() (gas: 126834) LibOpDivTest:testOpDivEvalOperandsDisallowed() (gas: 93429) -LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 360072) -LibOpDivTest:testOpDivEvalThreeInputsUnhappy() (gas: 210040) -LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 167053) -LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 317760) -LibOpDivTest:testOpDivEvalTwoInputsUnhappy() (gas: 142680) -LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 100822) +LibOpDivTest:testOpDivEvalThreeInputsHappy() (gas: 361633) +LibOpDivTest:testOpDivEvalThreeInputsUnhappy() (gas: 210932) +LibOpDivTest:testOpDivEvalThreeInputsUnhappyOverflow() (gas: 167722) +LibOpDivTest:testOpDivEvalTwoInputsHappy() (gas: 319321) +LibOpDivTest:testOpDivEvalTwoInputsUnhappy() (gas: 143349) +LibOpDivTest:testOpDivEvalTwoInputsUnhappyOverflow() (gas: 101268) LibOpDivTest:testOpDivEvalTwoOutputs() (gas: 41853) LibOpDivTest:testOpDivEvalZeroInputs() (gas: 30178) LibOpDivTest:testOpDivEvalZeroOutputs() (gas: 40808) -LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14803, ~: 14817) +LibOpDivTest:testOpDivIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14802, ~: 14805) LibOpDivTest:testOpDivIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10628, ~: 10475) LibOpDivTest:testOpDivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10586, ~: 10433) -LibOpDivTest:testOpDivRun(uint256[]) (runs: 2049, μ: 20142, ~: 18923) +LibOpDivTest:testOpDivRun(uint256[]) (runs: 2049, μ: 20272, ~: 18923) LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalFourInputs() (gas: 55719) -LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalHappy(uint256,uint8) (runs: 2051, μ: 69816, ~: 69874) +LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalHappy(uint256,uint8) (runs: 2051, μ: 70039, ~: 70097) LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalOneInput() (gas: 37065) LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalOperandDisallowed() (gas: 18791) LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalTwoInputs() (gas: 43543) @@ -175,27 +175,27 @@ LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalTwoOutputs() (gas: 50587) LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalZeroInputs() (gas: 31077) LibOpERC20AllowanceTest:testOpERC20AllowanceNPEvalZeroOutputs() (gas: 49498) LibOpERC20AllowanceTest:testOpERC20AllowanceNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10688, ~: 10658) -LibOpERC20AllowanceTest:testOpERC20AllowanceNPRun(address,address,address,uint256,uint8) (runs: 2051, μ: 21001, ~: 21047) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalHappy(uint256,uint8) (runs: 2050, μ: 63532, ~: 63447) +LibOpERC20AllowanceTest:testOpERC20AllowanceNPRun(address,address,address,uint256,uint8) (runs: 2051, μ: 20997, ~: 21047) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalHappy(uint256,uint8) (runs: 2050, μ: 63755, ~: 63670) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalOneInput() (gas: 37142) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalOperandDisallowed() (gas: 18872) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalOverflow(uint256,uint8) (runs: 2049, μ: 61153, ~: 61153) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalOverflow(uint256,uint8) (runs: 2049, μ: 61376, ~: 61376) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalThreeInputs() (gas: 49456) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalTwoOutputs() (gas: 44285) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalZeroInputs() (gas: 31175) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPEvalZeroOutputs() (gas: 43283) LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10708, ~: 10678) -LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPRun(address,address,uint256,uint16,uint8) (runs: 2051, μ: 21005, ~: 20928) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalHappy(uint256,uint8) (runs: 2050, μ: 56651, ~: 56571) +LibOpERC20BalanceOfTest:testOpERC20BalanceOfNPRun(address,address,uint256,uint16,uint8) (runs: 2051, μ: 21011, ~: 20928) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalHappy(uint256,uint8) (runs: 2050, μ: 56875, ~: 56794) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalOperandDisallowed() (gas: 19078) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalOverflow(uint256,uint8) (runs: 2049, μ: 54346, ~: 54346) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalOverflow(uint256,uint8) (runs: 2049, μ: 54569, ~: 54569) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalTwoInputs() (gas: 43760) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalTwoOutputs() (gas: 38151) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalZeroInputs() (gas: 31338) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalZeroOutputs() (gas: 37104) LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10688, ~: 10658) -LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2049, μ: 20286, ~: 20205) -LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalHappy() (gas: 53295) +LibOpERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16,uint8) (runs: 2049, μ: 20291, ~: 20205) +LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalHappy() (gas: 53518) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalOperandDisallowed() (gas: 18576) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoInputs() (gas: 43323) LibOpERC5313OwnerNPTest:testOpERC5313OwnerNPEvalTwoOutputs() (gas: 37600) @@ -207,7 +207,7 @@ LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail0() (gas: 30653) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail1() (gas: 34998) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFail3() (gas: 44395) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalFailOperand() (gas: 18431) -LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2051, μ: 94789, ~: 91178) +LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalHappy(address,uint256,address) (runs: 2051, μ: 95173, ~: 91479) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalOneInput() (gas: 35383) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalThreeInputs() (gas: 44856) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroInputs() (gas: 31072) @@ -215,73 +215,73 @@ LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPEvalZeroOutputs() (gas: 39683) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8) (runs: 2051, μ: 10691, ~: 10667) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPRun(address,uint256,address,uint16) (runs: 2051, μ: 17907, ~: 17907) LibOpERC721OwnerOfTest:testOpERC721OwnerOfNPTwoOutputs() (gas: 40748) -LibOpETest:testOpEEval() (gas: 40875) +LibOpETest:testOpEEval() (gas: 41098) LibOpETest:testOpEEvalOneInput() (gas: 34226) LibOpETest:testOpEEvalTwoOutputs() (gas: 30600) LibOpETest:testOpEEvalZeroOutputs() (gas: 29552) -LibOpETest:testOpEIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16293, ~: 16355) +LibOpETest:testOpEIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16305, ~: 16396) LibOpETest:testOpERun(uint16) (runs: 2051, μ: 7647, ~: 7647) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 818393) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalHappy() (gas: 821961) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalOneInput() (gas: 42290) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalThreeInputs() (gas: 52469) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalTwoOutputs() (gas: 48076) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroInputs() (gas: 37073) LibOpEncodeBitsNPTest:testOpEncodeBitsNPEvalZeroOutputs() (gas: 47053) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8) (runs: 2051, μ: 14990, ~: 14964) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8) (runs: 2051, μ: 19515, ~: 19461) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8) (runs: 2051, μ: 14998, ~: 15033) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFail((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8) (runs: 2051, μ: 19507, ~: 19442) LibOpEncodeBitsNPTest:testOpEncodeBitsNPIntegrityFailZeroLength((uint256,uint256,uint256,uint256[],uint256,bytes),uint8) (runs: 2051, μ: 14000, ~: 13976) -LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(uint256,uint256,uint8,uint8) (runs: 2051, μ: 12887, ~: 12702) +LibOpEncodeBitsNPTest:testOpEncodeBitsNPRun(uint256,uint256,uint8,uint8) (runs: 2051, μ: 12892, ~: 12702) LibOpEnsureNPTest:testOpEnsureNPEvalBadOutputs() (gas: 35214) LibOpEnsureNPTest:testOpEnsureNPEvalBadOutputs2() (gas: 34554) -LibOpEnsureNPTest:testOpEnsureNPEvalHappy() (gas: 162461) +LibOpEnsureNPTest:testOpEnsureNPEvalHappy() (gas: 163130) LibOpEnsureNPTest:testOpEnsureNPEvalOne() (gas: 34824) LibOpEnsureNPTest:testOpEnsureNPEvalThree() (gas: 46416) -LibOpEnsureNPTest:testOpEnsureNPEvalUnhappy() (gas: 112840) +LibOpEnsureNPTest:testOpEnsureNPEvalUnhappy() (gas: 113286) LibOpEnsureNPTest:testOpEnsureNPEvalUnhappyOperand() (gas: 17317) LibOpEnsureNPTest:testOpEnsureNPEvalZero() (gas: 29627) -LibOpEnsureNPTest:testOpEnsureNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16287, ~: 16363) +LibOpEnsureNPTest:testOpEnsureNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16294, ~: 16401) LibOpEnsureNPTest:testOpEnsureNPIntegrityUnhappy((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10551, ~: 10398) LibOpEnsureNPTest:testOpEnsureNPOneOutput() (gas: 39962) LibOpEnsureNPTest:testOpEnsureNPRun(uint256,string) (runs: 2050, μ: 11390, ~: 11418) -LibOpEqualToNPTest:testOpEqualToNPEval2InputsBothOne() (gas: 53488) -LibOpEqualToNPTest:testOpEqualToNPEval2InputsFirstOneSecondZero() (gas: 54416) -LibOpEqualToNPTest:testOpEqualToNPEval2InputsFirstZeroSecondOne() (gas: 54395) -LibOpEqualToNPTest:testOpEqualToNPEval2ZeroInputs() (gas: 53530) +LibOpEqualToNPTest:testOpEqualToNPEval2InputsBothOne() (gas: 53711) +LibOpEqualToNPTest:testOpEqualToNPEval2InputsFirstOneSecondZero() (gas: 54639) +LibOpEqualToNPTest:testOpEqualToNPEval2InputsFirstZeroSecondOne() (gas: 54618) +LibOpEqualToNPTest:testOpEqualToNPEval2ZeroInputs() (gas: 53753) LibOpEqualToNPTest:testOpEqualToNPEvalFail0Inputs() (gas: 30053) LibOpEqualToNPTest:testOpEqualToNPEvalFail1Input() (gas: 34352) LibOpEqualToNPTest:testOpEqualToNPEvalFail3Inputs() (gas: 42725) -LibOpEqualToNPTest:testOpEqualToNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16270, ~: 16356) +LibOpEqualToNPTest:testOpEqualToNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16271, ~: 16323) LibOpEqualToNPTest:testOpEqualToNPRun(uint256,uint256) (runs: 2051, μ: 8204, ~: 8205) LibOpEqualToNPTest:testOpEqualToNPTwoOutputs() (gas: 41423) LibOpEqualToNPTest:testOpEqualToNPZeroOutputs() (gas: 40424) LibOpEveryNPTest:testOpAnyNPEvalFail() (gas: 30560) -LibOpEveryNPTest:testOpEveryNPEval1FalseInput() (gas: 48681) -LibOpEveryNPTest:testOpEveryNPEval1TrueInput() (gas: 48742) -LibOpEveryNPTest:testOpEveryNPEval2FalseInputs() (gas: 54058) -LibOpEveryNPTest:testOpEveryNPEval2MixedInputs() (gas: 55041) -LibOpEveryNPTest:testOpEveryNPEval2MixedInputs2() (gas: 54942) -LibOpEveryNPTest:testOpEveryNPEval2TrueInputs() (gas: 55077) -LibOpEveryNPTest:testOpEveryNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16417, ~: 16514) +LibOpEveryNPTest:testOpEveryNPEval1FalseInput() (gas: 48904) +LibOpEveryNPTest:testOpEveryNPEval1TrueInput() (gas: 48965) +LibOpEveryNPTest:testOpEveryNPEval2FalseInputs() (gas: 54281) +LibOpEveryNPTest:testOpEveryNPEval2MixedInputs() (gas: 55264) +LibOpEveryNPTest:testOpEveryNPEval2MixedInputs2() (gas: 55165) +LibOpEveryNPTest:testOpEveryNPEval2TrueInputs() (gas: 55300) +LibOpEveryNPTest:testOpEveryNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16412, ~: 16490) LibOpEveryNPTest:testOpEveryNPIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10578, ~: 10425) LibOpEveryNPTest:testOpEveryNPRun(uint256[]) (runs: 2049, μ: 14612, ~: 14677) LibOpEveryNPTest:testOpEveryNPTwoOutputs() (gas: 36847) LibOpEveryNPTest:testOpEveryNPZeroOutputs() (gas: 35820) -LibOpExp2Test:testOpExp2Eval() (gas: 204622) +LibOpExp2Test:testOpExp2Eval() (gas: 205737) LibOpExp2Test:testOpExp2EvalBad() (gas: 67085) LibOpExp2Test:testOpExp2EvalOperandDisallowed() (gas: 18502) LibOpExp2Test:testOpExp2Integrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10643, ~: 10613) -LibOpExp2Test:testOpExp2Run(uint256,uint16) (runs: 2051, μ: 15632, ~: 16719) +LibOpExp2Test:testOpExp2Run(uint256,uint16) (runs: 2051, μ: 15681, ~: 16937) LibOpExp2Test:testOpExp2TwoOutputs() (gas: 36733) LibOpExp2Test:testOpExp2ZeroOutputs() (gas: 35727) -LibOpExpTest:testOpExpEval() (gas: 209604) +LibOpExpTest:testOpExpEval() (gas: 210719) LibOpExpTest:testOpExpEvalOperandDisallowed() (gas: 17752) LibOpExpTest:testOpExpEvalTwoInputs() (gas: 40394) LibOpExpTest:testOpExpEvalZeroInputs() (gas: 30121) LibOpExpTest:testOpExpIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10687, ~: 10657) -LibOpExpTest:testOpExpRun(uint256,uint16) (runs: 2051, μ: 15882, ~: 17166) +LibOpExpTest:testOpExpRun(uint256,uint16) (runs: 2051, μ: 15886, ~: 17166) LibOpExpTest:testOpExpTwoOutputs() (gas: 36028) LibOpExpTest:testOpExpZeroOutputs() (gas: 35000) -LibOpExponentialGrowthTest:testOpExponentialGrowthEval() (gas: 672862) +LibOpExponentialGrowthTest:testOpExponentialGrowthEval() (gas: 675538) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalFourInputs() (gas: 52560) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOneInput() (gas: 36542) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalOperandDisallowed() (gas: 18981) @@ -290,67 +290,67 @@ LibOpExponentialGrowthTest:testOpExponentialGrowthEvalTwoOutputs() (gas: 48074) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroInputs() (gas: 30917) LibOpExponentialGrowthTest:testOpExponentialGrowthEvalZeroOutputs() (gas: 47008) LibOpExponentialGrowthTest:testOpExponentialGrowthIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) -LibOpExponentialGrowthTest:testOpExponentialGrowthRun(uint256,uint256,uint256,uint16) (runs: 2051, μ: 30701, ~: 30889) -LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 96951) -LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 110552) -LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2051, μ: 32996, ~: 32800) -LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,uint256[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2051, μ: 52476, ~: 51940) -LibOpExternNPTest:testOpExternNPRunHappy(address,uint256[],uint16,uint256[],uint256[]) (runs: 2051, μ: 101747, ~: 101030) -LibOpFloorTest:testOpFloorEval() (gas: 237905) +LibOpExponentialGrowthTest:testOpExponentialGrowthRun(uint256,uint256,uint256,uint16) (runs: 2051, μ: 30715, ~: 30820) +LibOpExternNPTest:testOpExternNPEvalHappy() (gas: 97174) +LibOpExternNPTest:testOpExternNPEvalMultipleInputsOutputsHappy() (gas: 110775) +LibOpExternNPTest:testOpExternNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2051, μ: 33027, ~: 32871) +LibOpExternNPTest:testOpExternNPIntegrityNotAnExternContract((uint256,uint256,uint256,uint256[],uint256,bytes),address,uint16,uint8,uint8) (runs: 2051, μ: 52548, ~: 51994) +LibOpExternNPTest:testOpExternNPRunHappy(address,uint256[],uint16,uint256[],uint256[]) (runs: 2051, μ: 101710, ~: 100985) +LibOpFloorTest:testOpFloorEval() (gas: 239243) LibOpFloorTest:testOpFloorEvalOperandDisallowed() (gas: 17894) LibOpFloorTest:testOpFloorIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10709, ~: 10679) -LibOpFloorTest:testOpFloorRun(uint256,uint16) (runs: 2051, μ: 11873, ~: 12076) +LibOpFloorTest:testOpFloorRun(uint256,uint16) (runs: 2051, μ: 11871, ~: 12076) LibOpFloorTest:testOpFloorTwoInputs() (gas: 40600) LibOpFloorTest:testOpFloorTwoOutputs() (gas: 36167) LibOpFloorTest:testOpFloorZeroInputs() (gas: 30284) LibOpFloorTest:testOpFloorZeroOutputs() (gas: 35163) -LibOpFracTest:testOpFracEval() (gas: 237320) +LibOpFracTest:testOpFracEval() (gas: 238658) LibOpFracTest:testOpFracEvalOperandDisallowed() (gas: 17857) LibOpFracTest:testOpFracIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) -LibOpFracTest:testOpFracRun(uint256,uint16) (runs: 2051, μ: 11870, ~: 12080) +LibOpFracTest:testOpFracRun(uint256,uint16) (runs: 2051, μ: 11877, ~: 12080) LibOpFracTest:testOpFracTwoInputs() (gas: 40465) LibOpFracTest:testOpFracTwoOutputs() (gas: 36097) LibOpFracTest:testOpFracZeroInputs() (gas: 30191) LibOpFracTest:testOpFracZeroOutputs() (gas: 35070) -LibOpGetNPTest:testLibOpGetNPEvalKeyNotSet() (gas: 281871) +LibOpGetNPTest:testLibOpGetNPEvalKeyNotSet() (gas: 283251) LibOpGetNPTest:testLibOpGetNPEvalOperandDisallowed() (gas: 58601) -LibOpGetNPTest:testLibOpGetNPEvalSetThenGet() (gas: 487015) -LibOpGetNPTest:testLibOpGetNPEvalStoreAndSetAndGet() (gas: 239669) -LibOpGetNPTest:testLibOpGetNPEvalStoreThenGet() (gas: 444778) +LibOpGetNPTest:testLibOpGetNPEvalSetThenGet() (gas: 488654) +LibOpGetNPTest:testLibOpGetNPEvalStoreAndSetAndGet() (gas: 240368) +LibOpGetNPTest:testLibOpGetNPEvalStoreThenGet() (gas: 446610) LibOpGetNPTest:testLibOpGetNPEvalThreeInputs() (gas: 44966) LibOpGetNPTest:testLibOpGetNPEvalTwoInputs() (gas: 39739) LibOpGetNPTest:testLibOpGetNPEvalTwoOutputs() (gas: 35306) LibOpGetNPTest:testLibOpGetNPEvalZeroInputs() (gas: 29769) LibOpGetNPTest:testLibOpGetNPEvalZeroOutputs() (gas: 34212) -LibOpGetNPTest:testLibOpGetNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16508, ~: 16617) -LibOpGetNPTest:testLibOpGetNPRunState(uint256,uint256,uint16) (runs: 2051, μ: 7883, ~: 7888) +LibOpGetNPTest:testLibOpGetNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16511, ~: 16612) +LibOpGetNPTest:testLibOpGetNPRunState(uint256,uint256,uint16) (runs: 2051, μ: 7884, ~: 7888) LibOpGetNPTest:testLibOpGetNPRunStateAndStore(uint256,uint256,uint256,uint16) (runs: 2051, μ: 35689, ~: 35907) LibOpGetNPTest:testLibOpGetNPRunStore(uint256,uint256,uint16) (runs: 2051, μ: 37568, ~: 37776) LibOpGetNPTest:testLibOpGetNPRunStoreDifferentNamespace(uint256,uint256,uint16) (runs: 2051, μ: 39429, ~: 39637) LibOpGetNPTest:testLibOpGetNPRunUnset(uint256,uint16) (runs: 2051, μ: 13875, ~: 13880) -LibOpGmTest:testOpGmEval() (gas: 407887) +LibOpGmTest:testOpGmEval() (gas: 409894) LibOpGmTest:testOpGmEvalOperandDisallowed() (gas: 17672) LibOpGmTest:testOpGmIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) LibOpGmTest:testOpGmOneInput() (gas: 36097) -LibOpGmTest:testOpGmRun(uint256,uint256,uint16) (runs: 2051, μ: 15195, ~: 15103) +LibOpGmTest:testOpGmRun(uint256,uint256,uint16) (runs: 2051, μ: 15194, ~: 15103) LibOpGmTest:testOpGmThreeInputs() (gas: 45382) LibOpGmTest:testOpGmTwoOutputs() (gas: 41031) LibOpGmTest:testOpGmZeroOutputs() (gas: 39966) -LibOpGreaterThanNPTest:testOpGreaterThanNPEval2InputsBothOne() (gas: 53854) -LibOpGreaterThanNPTest:testOpGreaterThanNPEval2InputsFirstOneSecondZero() (gas: 54719) -LibOpGreaterThanNPTest:testOpGreaterThanNPEval2InputsFirstZeroSecondOne() (gas: 54718) -LibOpGreaterThanNPTest:testOpGreaterThanNPEval2ZeroInputs() (gas: 53831) +LibOpGreaterThanNPTest:testOpGreaterThanNPEval2InputsBothOne() (gas: 54077) +LibOpGreaterThanNPTest:testOpGreaterThanNPEval2InputsFirstOneSecondZero() (gas: 54942) +LibOpGreaterThanNPTest:testOpGreaterThanNPEval2InputsFirstZeroSecondOne() (gas: 54941) +LibOpGreaterThanNPTest:testOpGreaterThanNPEval2ZeroInputs() (gas: 54054) LibOpGreaterThanNPTest:testOpGreaterThanNPEvalFail0Inputs() (gas: 30388) LibOpGreaterThanNPTest:testOpGreaterThanNPEvalFail1Input() (gas: 34700) LibOpGreaterThanNPTest:testOpGreaterThanNPEvalFail3Inputs() (gas: 43020) -LibOpGreaterThanNPTest:testOpGreaterThanNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16253, ~: 16335) +LibOpGreaterThanNPTest:testOpGreaterThanNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16250, ~: 16312) LibOpGreaterThanNPTest:testOpGreaterThanNPRun(uint256,uint256) (runs: 2051, μ: 8222, ~: 8218) LibOpGreaterThanNPTest:testOpGreaterThanNPTwoOutputs() (gas: 42410) LibOpGreaterThanNPTest:testOpGreaterThanNPZeroOutputs() (gas: 41409) -LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2InputsBothOne() (gas: 54959) -LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2InputsFirstOneSecondZero() (gas: 55822) -LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2InputsFirstZeroSecondOne() (gas: 55844) -LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2ZeroInputs() (gas: 54939) +LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2InputsBothOne() (gas: 55182) +LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2InputsFirstOneSecondZero() (gas: 56045) +LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2InputsFirstZeroSecondOne() (gas: 56067) +LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEval2ZeroInputs() (gas: 55162) LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEvalFail0Inputs() (gas: 31371) LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEvalFail1Input() (gas: 35765) LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPEvalFail3Inputs() (gas: 44106) @@ -358,79 +358,79 @@ LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPIntegrityHappy((uint LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPRun(uint256,uint256) (runs: 2051, μ: 8207, ~: 8203) LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPTwoOutputs() (gas: 43581) LibOpGreaterThanOrEqualToNPTest:testOpGreaterThanOrEqualToNPZeroOutputs() (gas: 42357) -LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 42121) -LibOpHashNPTest:testOpHashNPEval1Input() (gas: 50671) -LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 58913) -LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 59606) -LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 74329) -LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16307, ~: 16391) +LibOpHashNPTest:testOpHashNPEval0Inputs() (gas: 42344) +LibOpHashNPTest:testOpHashNPEval1Input() (gas: 50894) +LibOpHashNPTest:testOpHashNPEval2Inputs() (gas: 59136) +LibOpHashNPTest:testOpHashNPEval2InputsDifferent() (gas: 59829) +LibOpHashNPTest:testOpHashNPEval2InputsOtherStack() (gas: 74552) +LibOpHashNPTest:testOpHashNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16311, ~: 16358) LibOpHashNPTest:testOpHashNPRun(uint256[]) (runs: 2049, μ: 13453, ~: 13562) LibOpHashNPTest:testOpHashNPTwoOutputs() (gas: 30856) LibOpHashNPTest:testOpHashNPZeroOutputs() (gas: 29423) -LibOpHeadroomTest:testOpHeadroomEval() (gas: 239165) +LibOpHeadroomTest:testOpHeadroomEval() (gas: 240503) LibOpHeadroomTest:testOpHeadroomEvalOperandDisallowed() (gas: 18158) LibOpHeadroomTest:testOpHeadroomIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) -LibOpHeadroomTest:testOpHeadroomRun(uint256,uint16) (runs: 2051, μ: 11910, ~: 12123) +LibOpHeadroomTest:testOpHeadroomRun(uint256,uint16) (runs: 2051, μ: 11920, ~: 12123) LibOpHeadroomTest:testOpHeadroomTwoInputs() (gas: 40822) LibOpHeadroomTest:testOpHeadroomTwoOutputs() (gas: 36454) LibOpHeadroomTest:testOpHeadroomZeroInputs() (gas: 30526) LibOpHeadroomTest:testOpHeadroomZeroOutputs() (gas: 35404) -LibOpIfNPTest:testOpIfNPEval3InputsFirstOneSecondTwoThirdThree() (gas: 60359) -LibOpIfNPTest:testOpIfNPEval3InputsFirstOneSecondZeroThirdThree() (gas: 60316) -LibOpIfNPTest:testOpIfNPEval3InputsFirstTwoSecondThreeThirdFour() (gas: 60315) -LibOpIfNPTest:testOpIfNPEval3InputsFirstTwoSecondZeroThirdFour() (gas: 60336) -LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondOneThirdTwo() (gas: 60358) -LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondOneThirdZero() (gas: 59406) -LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondZeroThirdOne() (gas: 59317) -LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondZeroThirdThree() (gas: 59339) -LibOpIfNPTest:testOpIfNPEvalEmptyStringTruthy() (gas: 59305) +LibOpIfNPTest:testOpIfNPEval3InputsFirstOneSecondTwoThirdThree() (gas: 60582) +LibOpIfNPTest:testOpIfNPEval3InputsFirstOneSecondZeroThirdThree() (gas: 60539) +LibOpIfNPTest:testOpIfNPEval3InputsFirstTwoSecondThreeThirdFour() (gas: 60538) +LibOpIfNPTest:testOpIfNPEval3InputsFirstTwoSecondZeroThirdFour() (gas: 60559) +LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondOneThirdTwo() (gas: 60581) +LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondOneThirdZero() (gas: 59629) +LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondZeroThirdOne() (gas: 59540) +LibOpIfNPTest:testOpIfNPEval3InputsFirstZeroSecondZeroThirdThree() (gas: 59562) +LibOpIfNPTest:testOpIfNPEvalEmptyStringTruthy() (gas: 59528) LibOpIfNPTest:testOpIfNPEvalFail0Inputs() (gas: 29547) LibOpIfNPTest:testOpIfNPEvalFail1Input() (gas: 33910) LibOpIfNPTest:testOpIfNPEvalFail2Inputs() (gas: 38088) LibOpIfNPTest:testOpIfNPEvalFail4Inputs() (gas: 46390) LibOpIfNPTest:testOpIfNPEvalTwoOutputs() (gas: 46706) LibOpIfNPTest:testOpIfNPEvalZeroOutputs() (gas: 45641) -LibOpIfNPTest:testOpIfNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16260, ~: 16328) +LibOpIfNPTest:testOpIfNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16257, ~: 16318) LibOpIfNPTest:testOpIfNPRun(uint256,uint256,uint256) (runs: 2051, μ: 8436, ~: 8436) LibOpInvTest:testOpExpEvalOperandDisallowed() (gas: 17774) -LibOpInvTest:testOpInvEval() (gas: 161251) +LibOpInvTest:testOpInvEval() (gas: 162143) LibOpInvTest:testOpInvIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) -LibOpInvTest:testOpInvRun(uint256,uint16) (runs: 2051, μ: 11950, ~: 12154) +LibOpInvTest:testOpInvRun(uint256,uint16) (runs: 2051, μ: 11947, ~: 12154) LibOpInvTest:testOpInvTwoInputs() (gas: 40438) LibOpInvTest:testOpInvTwoOutputs() (gas: 36027) LibOpInvTest:testOpInvZeroInputs() (gas: 30122) LibOpInvTest:testOpInvZeroOutputs() (gas: 34957) -LibOpIsZeroNPTest:testOpIsZeroNPEval1NonZeroInput() (gas: 48289) -LibOpIsZeroNPTest:testOpIsZeroNPEval1ZeroInput() (gas: 47985) +LibOpIsZeroNPTest:testOpIsZeroNPEval1NonZeroInput() (gas: 48512) +LibOpIsZeroNPTest:testOpIsZeroNPEval1ZeroInput() (gas: 48208) LibOpIsZeroNPTest:testOpIsZeroNPEvalFail0Inputs() (gas: 29960) LibOpIsZeroNPTest:testOpIsZeroNPEvalFail2Inputs() (gas: 38459) -LibOpIsZeroNPTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16354, ~: 16430) +LibOpIsZeroNPTest:testOpIsZeroNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16348, ~: 16449) LibOpIsZeroNPTest:testOpIsZeroNPRun(uint256) (runs: 2051, μ: 7878, ~: 7879) LibOpIsZeroNPTest:testOpIsZeroNPTwoOutputs() (gas: 36595) LibOpIsZeroNPTest:testOpIsZeroNPZeroOutputs() (gas: 35263) -LibOpLessThanNPTest:testOpLessThanNPEval2InputsBothOne() (gas: 52666) -LibOpLessThanNPTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 53550) -LibOpLessThanNPTest:testOpLessThanNPEval2InputsFirstZeroSecondOne() (gas: 53549) -LibOpLessThanNPTest:testOpLessThanNPEval2ZeroInputs() (gas: 52686) -LibOpLessThanNPTest:testOpLessThanNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16300, ~: 16361) +LibOpLessThanNPTest:testOpLessThanNPEval2InputsBothOne() (gas: 52889) +LibOpLessThanNPTest:testOpLessThanNPEval2InputsFirstOneSecondZero() (gas: 53773) +LibOpLessThanNPTest:testOpLessThanNPEval2InputsFirstZeroSecondOne() (gas: 53772) +LibOpLessThanNPTest:testOpLessThanNPEval2ZeroInputs() (gas: 52909) +LibOpLessThanNPTest:testOpLessThanNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16304, ~: 16371) LibOpLessThanNPTest:testOpLessThanNPRun(uint256,uint256) (runs: 2051, μ: 8186, ~: 8191) LibOpLessThanNPTest:testOpLessThanNPTwoOutputs() (gas: 42448) LibOpLessThanNPTest:testOpLessThanNPZeroOutputs() (gas: 40504) LibOpLessThanNPTest:testOpLessThanToNPEvalFail0Inputs() (gas: 30168) LibOpLessThanNPTest:testOpLessThanToNPEvalFail1Input() (gas: 34425) LibOpLessThanNPTest:testOpLessThanToNPEvalFail3Inputs() (gas: 42829) -LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2InputsBothOne() (gas: 53617) -LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2InputsFirstOneSecondZero() (gas: 54525) -LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2InputsFirstZeroSecondOne() (gas: 54526) -LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2ZeroInputs() (gas: 53661) +LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2InputsBothOne() (gas: 53840) +LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2InputsFirstOneSecondZero() (gas: 54748) +LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2InputsFirstZeroSecondOne() (gas: 54749) +LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEval2ZeroInputs() (gas: 53884) LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEvalFail0Inputs() (gas: 31139) LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEvalFail1Input() (gas: 35449) LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPEvalFail3Inputs() (gas: 43829) -LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16308, ~: 16373) -LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPRun(uint256,uint256) (runs: 2051, μ: 8214, ~: 8210) +LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16310, ~: 16363) +LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPRun(uint256,uint256) (runs: 2051, μ: 8215, ~: 8220) LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPTwoOutputs() (gas: 43181) LibOpLessThanOrEqualToNPTest:testOpLessThanOrEqualToNPZeroOutputs() (gas: 42094) -LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 630523) +LibOpLinearGrowthTest:testOpLinearGrowthEval() (gas: 633199) LibOpLinearGrowthTest:testOpLinearGrowthEvalFourInputs() (gas: 52188) LibOpLinearGrowthTest:testOpLinearGrowthEvalOneInput() (gas: 36169) LibOpLinearGrowthTest:testOpLinearGrowthEvalOperandDisallowed() (gas: 18562) @@ -439,212 +439,212 @@ LibOpLinearGrowthTest:testOpLinearGrowthEvalTwoOutputs() (gas: 47661) LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroInputs() (gas: 30524) LibOpLinearGrowthTest:testOpLinearGrowthEvalZeroOutputs() (gas: 46593) LibOpLinearGrowthTest:testOpLinearGrowthIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10667, ~: 10637) -LibOpLinearGrowthTest:testOpLinearGrowthRun(uint256,uint256,uint256,uint16) (runs: 2051, μ: 15329, ~: 15229) -LibOpLnTest:testOpLnEval() (gas: 222881) +LibOpLinearGrowthTest:testOpLinearGrowthRun(uint256,uint256,uint256,uint16) (runs: 2051, μ: 15326, ~: 15229) +LibOpLnTest:testOpLnEval() (gas: 223996) LibOpLnTest:testOpLnEvalOperandDisallowed() (gas: 17716) LibOpLnTest:testOpLnIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) -LibOpLnTest:testOpLnRun(uint256,uint16) (runs: 2051, μ: 24917, ~: 24935) +LibOpLnTest:testOpLnRun(uint256,uint16) (runs: 2051, μ: 24912, ~: 24935) LibOpLnTest:testOpLnTwoInputs() (gas: 40336) LibOpLnTest:testOpLnTwoOutputs() (gas: 35968) LibOpLnTest:testOpLnZeroInputs() (gas: 30042) LibOpLnTest:testOpLnZeroOutputs() (gas: 34876) -LibOpLog10Test:testOpLog10Eval() (gas: 271301) +LibOpLog10Test:testOpLog10Eval() (gas: 272639) LibOpLog10Test:testOpLog10EvalOperandDisallowed() (gas: 17937) LibOpLog10Test:testOpLog10Integrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10666, ~: 10636) -LibOpLog10Test:testOpLog10Run(uint256,uint16) (runs: 2051, μ: 28508, ~: 28532) +LibOpLog10Test:testOpLog10Run(uint256,uint16) (runs: 2051, μ: 28512, ~: 28532) LibOpLog10Test:testOpLog10TwoInputs() (gas: 40600) LibOpLog10Test:testOpLog10TwoOutputs() (gas: 36190) LibOpLog10Test:testOpLog10ZeroInputs() (gas: 30261) LibOpLog10Test:testOpLog10ZeroOutputs() (gas: 35118) -LibOpLog2Test:testOpLog2Eval() (gas: 261214) +LibOpLog2Test:testOpLog2Eval() (gas: 262552) LibOpLog2Test:testOpLog2EvalOperandDisallowed() (gas: 17856) LibOpLog2Test:testOpLog2Integrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10665, ~: 10635) -LibOpLog2Test:testOpLog2Run(uint256) (runs: 2051, μ: 24615, ~: 24646) +LibOpLog2Test:testOpLog2Run(uint256) (runs: 2051, μ: 24607, ~: 24646) LibOpLog2Test:testOpLog2TwoInputs() (gas: 40465) LibOpLog2Test:testOpLog2TwoOutputs() (gas: 36097) LibOpLog2Test:testOpLog2ZeroInputs() (gas: 30215) LibOpLog2Test:testOpLog2ZeroOutputs() (gas: 35091) -LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 534195) -LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 1822065) +LibOpMaxTest:testOpMaxEval2InputsHappy() (gas: 536871) +LibOpMaxTest:testOpMaxEval3InputsHappy() (gas: 1830093) LibOpMaxTest:testOpMaxEvalOneInput() (gas: 127927) LibOpMaxTest:testOpMaxEvalOperandDisallowed() (gas: 59987) LibOpMaxTest:testOpMaxEvalTwoOutputs() (gas: 41170) LibOpMaxTest:testOpMaxEvalZeroInputs() (gas: 30158) -LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14759, ~: 14762) +LibOpMaxTest:testOpMaxIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14760, ~: 14755) LibOpMaxTest:testOpMaxIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10609, ~: 10456) LibOpMaxTest:testOpMaxIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10629, ~: 10476) -LibOpMaxTest:testOpMaxRun(uint256[]) (runs: 2049, μ: 15010, ~: 15156) -LibOpMaxUint256NPTest:testOpMaxUint256NPEval() (gas: 42405) +LibOpMaxTest:testOpMaxRun(uint256[]) (runs: 2049, μ: 15008, ~: 15156) +LibOpMaxUint256NPTest:testOpMaxUint256NPEval() (gas: 42628) LibOpMaxUint256NPTest:testOpMaxUint256NPEvalFail() (gas: 34422) -LibOpMaxUint256NPTest:testOpMaxUint256NPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16297, ~: 16365) +LibOpMaxUint256NPTest:testOpMaxUint256NPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16292, ~: 16365) LibOpMaxUint256NPTest:testOpMaxUint256NPRun() (gas: 7498) LibOpMaxUint256NPTest:testOpMaxUint256NPTwoOutputs() (gas: 31254) LibOpMaxUint256NPTest:testOpMaxUint256NPZeroOutputs() (gas: 30140) -LibOpMinTest:testOpMinEval2InputsHappy() (gas: 534156) -LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3207745) +LibOpMinTest:testOpMinEval2InputsHappy() (gas: 536832) +LibOpMinTest:testOpMinEval3InputsHappy() (gas: 3222017) LibOpMinTest:testOpMinEvalOneInput() (gas: 127863) LibOpMinTest:testOpMinEvalOperandDisallowed() (gas: 59966) LibOpMinTest:testOpMinEvalZeroInputs() (gas: 30163) -LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14810, ~: 14807) +LibOpMinTest:testOpMinIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14814, ~: 14807) LibOpMinTest:testOpMinIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10606, ~: 10453) LibOpMinTest:testOpMinIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10607, ~: 10454) -LibOpMinTest:testOpMinRun(uint256[],uint16) (runs: 2049, μ: 15043, ~: 14896) -LibOpModTest:testOpModEval2InputsHappy() (gas: 764132) -LibOpModTest:testOpModEval2InputsUnhappy() (gas: 142403) -LibOpModTest:testOpModEval3InputsHappy() (gas: 1489570) -LibOpModTest:testOpModEval3InputsUnhappy() (gas: 469560) +LibOpMinTest:testOpMinRun(uint256[],uint16) (runs: 2049, μ: 15042, ~: 14896) +LibOpModTest:testOpModEval2InputsHappy() (gas: 767923) +LibOpModTest:testOpModEval2InputsUnhappy() (gas: 143072) +LibOpModTest:testOpModEval3InputsHappy() (gas: 1496037) +LibOpModTest:testOpModEval3InputsUnhappy() (gas: 471567) LibOpModTest:testOpModEvalOneInput() (gas: 127905) LibOpModTest:testOpModEvalOperandDisallowed() (gas: 60011) LibOpModTest:testOpModEvalTwoOutputs() (gas: 41146) LibOpModTest:testOpModEvalZeroInputs() (gas: 30156) LibOpModTest:testOpModEvalZeroOutputs() (gas: 40103) -LibOpModTest:testOpModIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14773, ~: 14778) +LibOpModTest:testOpModIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14774, ~: 14771) LibOpModTest:testOpModIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10608, ~: 10455) LibOpModTest:testOpModIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10586, ~: 10433) LibOpModTest:testOpModRun(uint256[]) (runs: 2049, μ: 15739, ~: 15777) LibOpMulTest:testOpDecimal18MulNPIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10630, ~: 10477) LibOpMulTest:testOpMulEvalOneInput() (gas: 126835) LibOpMulTest:testOpMulEvalOperandsDisallowed() (gas: 93451) -LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 711499) -LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 166924) -LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 497066) -LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 100627) +LibOpMulTest:testOpMulEvalThreeInputsHappy() (gas: 714621) +LibOpMulTest:testOpMulEvalThreeInputsUnhappyOverflow() (gas: 167593) +LibOpMulTest:testOpMulEvalTwoInputsHappy() (gas: 499519) +LibOpMulTest:testOpMulEvalTwoInputsUnhappyOverflow() (gas: 101073) LibOpMulTest:testOpMulEvalZeroInputs() (gas: 30179) -LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14757, ~: 14761) +LibOpMulTest:testOpMulIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14758, ~: 14765) LibOpMulTest:testOpMulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10629, ~: 10476) -LibOpMulTest:testOpMulRun(uint256[]) (runs: 2049, μ: 16921, ~: 14414) +LibOpMulTest:testOpMulRun(uint256[]) (runs: 2049, μ: 16841, ~: 14414) LibOpMulTest:testOpMulTwoOutputs() (gas: 41169) LibOpMulTest:testOpMulZeroOutputs() (gas: 40126) -LibOpPowTest:testOpPowEval() (gas: 409736) +LibOpPowTest:testOpPowEval() (gas: 411743) LibOpPowTest:testOpPowEvalOneInput() (gas: 35522) LibOpPowTest:testOpPowEvalOperandDisallowed() (gas: 17937) LibOpPowTest:testOpPowIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10709, ~: 10679) -LibOpPowTest:testOpPowRun(uint256,uint256) (runs: 2051, μ: 26944, ~: 28704) +LibOpPowTest:testOpPowRun(uint256,uint256) (runs: 2051, μ: 26880, ~: 28728) LibOpPowTest:testOpPowThreeInputs() (gas: 45657) LibOpPowTest:testOpPowTwoOutputs() (gas: 41220) LibOpPowTest:testOpPowZeroOutputs() (gas: 40196) -LibOpScale18DynamicTest:testOpScale18DynamicEval() (gas: 1622063) +LibOpScale18DynamicTest:testOpScale18DynamicEval() (gas: 1629199) LibOpScale18DynamicTest:testOpScale18DynamicEvalOneInput() (gas: 132052) LibOpScale18DynamicTest:testOpScale18DynamicEvalThreeInputs() (gas: 349692) LibOpScale18DynamicTest:testOpScale18DynamicEvalZeroInputs() (gas: 31437) -LibOpScale18DynamicTest:testOpScale18DynamicIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14730, ~: 14716) -LibOpScale18DynamicTest:testOpScale18DynamicRun(uint256,uint256,uint256,uint256) (runs: 2051, μ: 16244, ~: 16090) +LibOpScale18DynamicTest:testOpScale18DynamicIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14730, ~: 14726) +LibOpScale18DynamicTest:testOpScale18DynamicRun(uint256,uint256,uint256,uint256) (runs: 2051, μ: 16242, ~: 16090) LibOpScale18DynamicTest:testOpScale18DynamicTwoOutputs() (gas: 42373) LibOpScale18DynamicTest:testOpScale18DynamicZeroOutputs() (gas: 41371) -LibOpScale18Test:testOpScale18Eval() (gas: 1522942) +LibOpScale18Test:testOpScale18Eval() (gas: 1530078) LibOpScale18Test:testOpScale18EvalOneInput() (gas: 166669) LibOpScale18Test:testOpScale18EvalZeroInputs() (gas: 34595) -LibOpScale18Test:testOpScale18Integrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14697, ~: 14688) -LibOpScale18Test:testOpScale18Run(uint256,uint256,uint256,uint256) (runs: 2051, μ: 15863, ~: 15892) +LibOpScale18Test:testOpScale18Integrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14697, ~: 14670) +LibOpScale18Test:testOpScale18Run(uint256,uint256,uint256,uint256) (runs: 2051, μ: 15867, ~: 15892) LibOpScale18Test:testOpScale18TwoOutputs() (gas: 40458) LibOpScale18Test:testOpScale18ZeroOutputs() (gas: 39452) -LibOpScale18Test:testOpUint256ToDecimal18Eval() (gas: 170855) -LibOpScaleNDynamicTest:testOpScaleNDynamicEval() (gas: 1619732) +LibOpScale18Test:testOpUint256ToDecimal18Eval() (gas: 171747) +LibOpScaleNDynamicTest:testOpScaleNDynamicEval() (gas: 1626868) LibOpScaleNDynamicTest:testOpScaleNDynamicEvalOneInput() (gas: 131545) LibOpScaleNDynamicTest:testOpScaleNDynamicEvalThreeInputs() (gas: 348956) LibOpScaleNDynamicTest:testOpScaleNDynamicEvalZeroInputs() (gas: 31345) -LibOpScaleNDynamicTest:testOpScaleNDynamicIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14751, ~: 14758) -LibOpScaleNDynamicTest:testOpScaleNDynamicRun(uint256,uint256,uint256,uint256) (runs: 2051, μ: 16846, ~: 16908) +LibOpScaleNDynamicTest:testOpScaleNDynamicIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14756, ~: 14700) +LibOpScaleNDynamicTest:testOpScaleNDynamicRun(uint256,uint256,uint256,uint256) (runs: 2051, μ: 16836, ~: 16908) LibOpScaleNDynamicTest:testOpScaleNDynamicTwoOutputs() (gas: 42368) LibOpScaleNDynamicTest:testOpScaleNDynamicZeroOutputs() (gas: 41302) -LibOpScaleNTest:testOpDecimal18ToIntNPEval() (gas: 286915) -LibOpScaleNTest:testOpScaleNEval() (gas: 1499410) +LibOpScaleNTest:testOpDecimal18ToIntNPEval() (gas: 288476) +LibOpScaleNTest:testOpScaleNEval() (gas: 1506546) LibOpScaleNTest:testOpScaleNEvalOneInput() (gas: 163607) LibOpScaleNTest:testOpScaleNEvalZeroInputs() (gas: 33793) LibOpScaleNTest:testOpScaleNEvalZeroOutputs() (gas: 38715) -LibOpScaleNTest:testOpScaleNIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14701, ~: 14687) -LibOpScaleNTest:testOpScaleNRun(uint256,uint256,uint256,uint256) (runs: 2051, μ: 15984, ~: 15999) +LibOpScaleNTest:testOpScaleNIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14700, ~: 14674) +LibOpScaleNTest:testOpScaleNRun(uint256,uint256,uint256,uint256) (runs: 2051, μ: 15986, ~: 15994) LibOpScaleNTest:testOpScaleNTwoOutputs() (gas: 39741) LibOpSetNPTest:testLibOpSetNP(uint256,uint256) (runs: 2051, μ: 6936, ~: 6941) LibOpSetNPTest:testLibOpSetNPEvalOneInput() (gas: 34177) LibOpSetNPTest:testLibOpSetNPEvalOneOutput() (gas: 39732) LibOpSetNPTest:testLibOpSetNPEvalOperandsDisallowed() (gas: 57116) -LibOpSetNPTest:testLibOpSetNPEvalSetTwice() (gas: 71876) +LibOpSetNPTest:testLibOpSetNPEvalSetTwice() (gas: 72111) LibOpSetNPTest:testLibOpSetNPEvalThreeInputs() (gas: 44594) -LibOpSetNPTest:testLibOpSetNPEvalTwoInputs() (gas: 244204) +LibOpSetNPTest:testLibOpSetNPEvalTwoInputs() (gas: 245355) LibOpSetNPTest:testLibOpSetNPEvalTwoOutputs() (gas: 40392) LibOpSetNPTest:testLibOpSetNPEvalZeroInputs() (gas: 29416) -LibOpSetNPTest:testLibOpSetNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16397, ~: 16434) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 856953) +LibOpSetNPTest:testLibOpSetNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16395, ~: 16463) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPEval() (gas: 861413) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailBadShiftAmount() (gas: 128918) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoInputs() (gas: 44838) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailTwoOutputs() (gas: 40482) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroInputs() (gas: 34587) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityFailZeroOutputs() (gas: 39431) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint8) (runs: 2051, μ: 19245, ~: 19207) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint8) (runs: 2051, μ: 19312, ~: 19378) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityNoop((uint256,uint256,uint256,uint256[],uint256,bytes),uint8) (runs: 2051, μ: 14033, ~: 14009) -LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 19171, ~: 19187) +LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPIntegrityZero((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 19174, ~: 19116) LibOpShiftBitsLeftNPTest:testOpShiftBitsLeftNPRun(uint256,uint8) (runs: 2051, μ: 10830, ~: 10830) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1032080) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPEval() (gas: 1037432) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityFailBadShiftAmount() (gas: 129462) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint8) (runs: 2051, μ: 19272, ~: 19289) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint8) (runs: 2051, μ: 19307, ~: 19359) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityNoop((uint256,uint256,uint256,uint256[],uint256,bytes),uint8) (runs: 2051, μ: 14001, ~: 13977) -LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 17694, ~: 17677) +LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPIntegrityZero((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 17697, ~: 17677) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPRun(uint256,uint8) (runs: 2051, μ: 10855, ~: 10855) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoInputs() (gas: 44917) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPTwoOutputs() (gas: 40563) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroInputs() (gas: 34646) LibOpShiftBitsRightNPTest:testOpShiftBitsRightNPZeroOutputs() (gas: 39515) -LibOpSnapToUnitTest:testOpSnapToUnitEval() (gas: 600278) +LibOpSnapToUnitTest:testOpSnapToUnitEval() (gas: 603177) LibOpSnapToUnitTest:testOpSnapToUnitEvalBad() (gas: 103480) LibOpSnapToUnitTest:testOpSnapToUnitEvalOperandDisallowed() (gas: 18460) LibOpSnapToUnitTest:testOpSnapToUnitEvalTwoOutputs() (gas: 41819) LibOpSnapToUnitTest:testOpSnapToUnitEvalZeroOutputs() (gas: 40797) LibOpSnapToUnitTest:testOpSnapToUnitIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10686, ~: 10656) -LibOpSnapToUnitTest:testOpSnapToUnitRun(uint256,uint256) (runs: 2051, μ: 12286, ~: 11964) -LibOpSqrtTest:testOpSqrtEval() (gas: 203048) +LibOpSnapToUnitTest:testOpSnapToUnitRun(uint256,uint256) (runs: 2051, μ: 12281, ~: 11964) +LibOpSqrtTest:testOpSqrtEval() (gas: 204163) LibOpSqrtTest:testOpSqrtEvalBad() (gas: 65750) LibOpSqrtTest:testOpSqrtEvalOperandDisallowed() (gas: 17834) LibOpSqrtTest:testOpSqrtEvalTwoOutputs() (gas: 36108) LibOpSqrtTest:testOpSqrtEvalZeroOutputs() (gas: 35058) LibOpSqrtTest:testOpSqrtIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10688, ~: 10658) -LibOpSqrtTest:testOpSqrtRun(uint256) (runs: 2051, μ: 13309, ~: 13609) -LibOpStackNPTest:testOpStackEval() (gas: 52303) -LibOpStackNPTest:testOpStackEvalSeveral() (gas: 83851) -LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,uint256[],uint256) (runs: 2051, μ: 15516, ~: 15388) -LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,uint256[],uint16,uint256) (runs: 2051, μ: 19217, ~: 19208) +LibOpSqrtTest:testOpSqrtRun(uint256) (runs: 2051, μ: 13312, ~: 13609) +LibOpStackNPTest:testOpStackEval() (gas: 52525) +LibOpStackNPTest:testOpStackEvalSeveral() (gas: 84069) +LibOpStackNPTest:testOpStackNPIntegrity(bytes,uint256,uint256[],uint256) (runs: 2051, μ: 15521, ~: 15388) +LibOpStackNPTest:testOpStackNPIntegrityOOBStack(bytes,uint16,uint256[],uint16,uint256) (runs: 2051, μ: 19215, ~: 19230) LibOpStackNPTest:testOpStackNPMultipleOutputErrorSugared() (gas: 40192) LibOpStackNPTest:testOpStackNPMultipleOutputErrorUnsugared() (gas: 43193) -LibOpStackNPTest:testOpStackNPRun(uint256[][],uint256) (runs: 2051, μ: 2038483, ~: 1869043) +LibOpStackNPTest:testOpStackNPRun(uint256[][],uint256) (runs: 2051, μ: 2038485, ~: 1869043) LibOpStackNPTest:testOpStackNPZeroOutputErrorSugared() (gas: 38786) LibOpStackNPTest:testOpStackNPZeroOutputErrorUnsugared() (gas: 41709) -LibOpSubTest:testOpSubEval2InputsSaturatingUnderflow() (gas: 290850) -LibOpSubTest:testOpSubEval2InputsUnhappyUnderflow() (gas: 146451) -LibOpSubTest:testOpSubEval3InputsSaturatingUnderflow() (gas: 754897) -LibOpSubTest:testOpSubEval3InputsUnhappyUnderflow() (gas: 376552) +LibOpSubTest:testOpSubEval2InputsSaturatingUnderflow() (gas: 292188) +LibOpSubTest:testOpSubEval2InputsUnhappyUnderflow() (gas: 147120) +LibOpSubTest:testOpSubEval3InputsSaturatingUnderflow() (gas: 758019) +LibOpSubTest:testOpSubEval3InputsUnhappyUnderflow() (gas: 378113) LibOpSubTest:testOpSubEvalOneInput() (gas: 127814) LibOpSubTest:testOpSubEvalOneInputSaturating() (gas: 270688) -LibOpSubTest:testOpSubEvalThreeInputs() (gas: 212539) -LibOpSubTest:testOpSubEvalThreeInputsSaturating() (gas: 430691) -LibOpSubTest:testOpSubEvalTwoInputs() (gas: 316895) -LibOpSubTest:testOpSubEvalTwoInputsSaturating() (gas: 651678) +LibOpSubTest:testOpSubEvalThreeInputs() (gas: 213431) +LibOpSubTest:testOpSubEvalThreeInputsSaturating() (gas: 432475) +LibOpSubTest:testOpSubEvalTwoInputs() (gas: 318456) +LibOpSubTest:testOpSubEvalTwoInputsSaturating() (gas: 654800) LibOpSubTest:testOpSubEvalZeroInputs() (gas: 30130) LibOpSubTest:testOpSubEvalZeroInputsSaturating() (gas: 59323) LibOpSubTest:testOpSubIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14751, ~: 14755) LibOpSubTest:testOpSubIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10585, ~: 10432) LibOpSubTest:testOpSubIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10630, ~: 10477) -LibOpSubTest:testOpSubRun(uint256[]) (runs: 2049, μ: 13215, ~: 13163) +LibOpSubTest:testOpSubRun(uint256[]) (runs: 2049, μ: 13200, ~: 13163) LibOpTimestampNPTest:testOpBlockTimestampNPEvalFail() (gas: 65776) LibOpTimestampNPTest:testOpBlockTimestampNPTwoOutputs() (gas: 58664) LibOpTimestampNPTest:testOpBlockTimestampNPZeroOutputs() (gas: 56588) -LibOpTimestampNPTest:testOpTimestampNPEval(uint256) (runs: 2051, μ: 82669, ~: 82545) -LibOpTimestampNPTest:testOpTimestampNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16272, ~: 16394) -LibOpTimestampNPTest:testOpTimestampNPRun(uint256) (runs: 2051, μ: 14168, ~: 14044) -LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 775616) -LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 144347) -LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1459338) -LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 475519) +LibOpTimestampNPTest:testOpTimestampNPEval(uint256) (runs: 2051, μ: 83120, ~: 82991) +LibOpTimestampNPTest:testOpTimestampNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16267, ~: 16394) +LibOpTimestampNPTest:testOpTimestampNPRun(uint256) (runs: 2051, μ: 14173, ~: 14044) +LibOpUint256DivTest:testOpUint256DivEval2InputsHappy() (gas: 779407) +LibOpUint256DivTest:testOpUint256DivEval2InputsUnhappy() (gas: 145016) +LibOpUint256DivTest:testOpUint256DivEval3InputsHappy() (gas: 1465582) +LibOpUint256DivTest:testOpUint256DivEval3InputsUnhappy() (gas: 477526) LibOpUint256DivTest:testOpUint256DivEvalOneInput() (gas: 131000) LibOpUint256DivTest:testOpUint256DivEvalOperandDisallowed() (gas: 62603) LibOpUint256DivTest:testOpUint256DivEvalTwoOutputs() (gas: 41796) LibOpUint256DivTest:testOpUint256DivEvalZeroInputs() (gas: 30806) LibOpUint256DivTest:testOpUint256DivEvalZeroOutputs() (gas: 40774) -LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14773, ~: 14780) +LibOpUint256DivTest:testOpUint256DivIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14775, ~: 14786) LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10628, ~: 10475) LibOpUint256DivTest:testOpUint256DivIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10584, ~: 10431) LibOpUint256DivTest:testOpUint256DivRun(uint256[]) (runs: 2049, μ: 15720, ~: 15757) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalFourInputs() (gas: 56538) -LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalHappy(uint256) (runs: 2051, μ: 68284, ~: 68284) +LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalHappy(uint256) (runs: 2051, μ: 68507, ~: 68507) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalOneInput() (gas: 37856) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalOperandDisallowed() (gas: 19439) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalTwoInputs() (gas: 44187) @@ -653,7 +653,7 @@ LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalZeroInputs() (gas: 3176 LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPEvalZeroOutputs() (gas: 50164) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10666, ~: 10636) LibOpUint256ERC20AllowanceTest:testOpERC20AllowanceNPRun(address,address,address,uint256) (runs: 2051, μ: 18363, ~: 18363) -LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalHappy(uint256) (runs: 2051, μ: 61378, ~: 61378) +LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalHappy(uint256) (runs: 2051, μ: 61601, ~: 61601) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalOneInput() (gas: 37960) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalOperandDisallowed() (gas: 19520) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalThreeInputs() (gas: 50082) @@ -662,7 +662,7 @@ LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalZeroInputs() (gas: 3180 LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPEvalZeroOutputs() (gas: 43909) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10708, ~: 10678) LibOpUint256ERC20BalanceOfTest:testOpERC20BalanceOfNPRun(address,address,uint256,uint16) (runs: 2051, μ: 17848, ~: 17848) -LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalHappy(uint256) (runs: 2051, μ: 54512, ~: 54512) +LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalHappy(uint256) (runs: 2051, μ: 54735, ~: 54735) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalOperandDisallowed() (gas: 19726) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalTwoInputs() (gas: 44430) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalTwoOutputs() (gas: 38833) @@ -670,8 +670,8 @@ LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalZeroInputs() (gas: LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPEvalZeroOutputs() (gas: 37719) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint256) (runs: 2051, μ: 10710, ~: 10680) LibOpUint256ERC20TotalSupplyTest:testOpERC20TotalSupplyNPRun(address,uint256,uint16) (runs: 2051, μ: 17088, ~: 17088) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2051, μ: 102966, ~: 103124) -LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16260, ~: 16308) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfEvalHappy(address,address,uint256) (runs: 2051, μ: 103194, ~: 103347) +LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrity((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint8,uint16) (runs: 2051, μ: 16266, ~: 16298) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail0() (gas: 31441) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail1() (gas: 35815) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfIntegrityFail3() (gas: 45152) @@ -684,22 +684,22 @@ LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroInputs() (gas: 31869) LibOpUint256ERC721BalanceOfTest:testOpERC721BalanceOfZeroOutputs() (gas: 40649) LibOpUint256MulTest:testOpUint256MulEvalOneInput() (gas: 130541) LibOpUint256MulTest:testOpUint256MulEvalOperandsDisallowed() (gas: 97362) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 1030393) -LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 657339) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 412966) -LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 143345) +LibOpUint256MulTest:testOpUint256MulEvalThreeInputsHappy() (gas: 1034853) +LibOpUint256MulTest:testOpUint256MulEvalThreeInputsUnhappy() (gas: 660015) +LibOpUint256MulTest:testOpUint256MulEvalTwoInputsHappy() (gas: 414973) +LibOpUint256MulTest:testOpUint256MulEvalTwoInputsUnhappy() (gas: 144014) LibOpUint256MulTest:testOpUint256MulEvalTwoOutputs() (gas: 41784) LibOpUint256MulTest:testOpUint256MulEvalZeroInputs() (gas: 30815) LibOpUint256MulTest:testOpUint256MulEvalZeroOutputs() (gas: 40786) -LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14797, ~: 14797) +LibOpUint256MulTest:testOpUint256MulIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14801, ~: 14804) LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10584, ~: 10431) LibOpUint256MulTest:testOpUint256MulIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10630, ~: 10477) -LibOpUint256MulTest:testOpUint256MulRun(uint256[]) (runs: 2049, μ: 13649, ~: 13556) -LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14805, ~: 14805) -LibOpUint256PowTest:testOpUint256PowEval2InputsHappy() (gas: 869989) -LibOpUint256PowTest:testOpUint256PowEval2InputsUnhappy() (gas: 145301) -LibOpUint256PowTest:testOpUint256PowEval3InputsHappy() (gas: 2032700) -LibOpUint256PowTest:testOpUint256PowEval3InputsUnhappy() (gas: 644994) +LibOpUint256MulTest:testOpUint256MulRun(uint256[]) (runs: 2049, μ: 13606, ~: 13406) +LibOpUint256PowTest:testOpUint256ExpIntegrityHappy((uint256,uint256,uint256,uint256[],uint256,bytes),uint8,uint16) (runs: 2051, μ: 14809, ~: 14805) +LibOpUint256PowTest:testOpUint256PowEval2InputsHappy() (gas: 874226) +LibOpUint256PowTest:testOpUint256PowEval2InputsUnhappy() (gas: 145970) +LibOpUint256PowTest:testOpUint256PowEval3InputsHappy() (gas: 2041397) +LibOpUint256PowTest:testOpUint256PowEval3InputsUnhappy() (gas: 647670) LibOpUint256PowTest:testOpUint256PowEvalOneInput() (gas: 131211) LibOpUint256PowTest:testOpUint256PowEvalOperandDisallowed() (gas: 63205) LibOpUint256PowTest:testOpUint256PowEvalTwoOutputs() (gas: 41991) @@ -707,7 +707,7 @@ LibOpUint256PowTest:testOpUint256PowEvalZeroInputs() (gas: 30998) LibOpUint256PowTest:testOpUint256PowEvalZeroOutputs() (gas: 40904) LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyOneInput((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10608, ~: 10455) LibOpUint256PowTest:testOpUint256PowIntegrityUnhappyZeroInputs((uint256,uint256,uint256,uint256[],uint256,bytes)) (runs: 2051, μ: 10586, ~: 10433) -LibOpUint256PowTest:testOpUint256PowRun(uint256[]) (runs: 2049, μ: 15606, ~: 15146) +LibOpUint256PowTest:testOpUint256PowRun(uint256[]) (runs: 2049, μ: 15578, ~: 15063) LibParseCommentsTest:testParseCommentAfterSources() (gas: 65923) LibParseCommentsTest:testParseCommentBetweenSources() (gas: 66046) LibParseCommentsTest:testParseCommentInIgnoredLHS() (gas: 42114) @@ -1102,12 +1102,14 @@ LibParseUnexpectedRightParenTest:testParseUnexpectedRightParen() (gas: 41612) LibParseUnexpectedRightParenTest:testParseUnexpectedRightParenNested() (gas: 47284) LibSubParseSubParserExternTest:testLibSubParseSubParserExtern(address,uint8,uint8,uint8,uint16,uint8) (runs: 2051, μ: 7378, ~: 7310) LibSubParseSubParserExternTest:testLibSubParseSubParserExternConstantsHeightOverflow(address,uint256,uint8,uint8,uint16,uint8) (runs: 2051, μ: 7966, ~: 7709) -RainterpreterExpressionDeployerNPE2DeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 9685169) -RainterpreterExpressionDeployerNPE2DescribedByMetaV1Test:testRainterpreterExpressionDeployerNPE2DescribedByMetaV1Happy() (gas: 9698937) -RainterpreterExpressionDeployerNPE2IERC165Test:testRainterpreterExpressionDeployerNPE2IERC165(bytes4) (runs: 2051, μ: 9691985, ~: 9691985) +RainterpreterExpressionDeployerNPE2DeployCheckTest:testRainterpreterExpressionDeployerDeployNoEIP1820() (gas: 9715204) +RainterpreterExpressionDeployerNPE2DescribedByMetaV1Test:testRainterpreterExpressionDeployerNPE2DescribedByMetaV1Happy() (gas: 9728975) +RainterpreterExpressionDeployerNPE2IERC165Test:testRainterpreterExpressionDeployerNPE2IERC165(bytes4) (runs: 2051, μ: 9722020, ~: 9722020) RainterpreterExpressionDeployerNPE2MetaTest:testRainterpreterExpressionDeployerNPE2ExpectedConstructionMetaHash() (gas: 3338) -RainterpreterNPE2IERC165Test:testRainterpreterNPE2IERC165(bytes4) (runs: 2051, μ: 4162949, ~: 4162949) -RainterpreterNPE2PointersTest:testOpcodeFunctionPointers() (gas: 4195057) +RainterpreterNPE2IERC165Test:testRainterpreterNPE2IERC165(bytes4) (runs: 2051, μ: 4193017, ~: 4193017) +RainterpreterNPE2PointersTest:testOpcodeFunctionPointers() (gas: 4225125) +RainterpreterNPE2StateOverlayTest:testStateOverlayGet() (gas: 48062) +RainterpreterNPE2StateOverlayTest:testStateOverlaySet() (gas: 78847) RainterpreterNPE2Test:testRainterpreterNPE2OddFunctionPointersLength() (gas: 523) RainterpreterParserNPE2IERC165Test:testRainterpreterParserNPE2IERC165(bytes4) (runs: 2051, μ: 3792295, ~: 3792295) RainterpreterParserNPE2ParserPragma:testParsePragmaNoPragma() (gas: 18941619) @@ -1116,16 +1118,16 @@ RainterpreterParserNPE2ParserPragma:testParsePragmaWithInterstitial() (gas: 1141 RainterpreterParserNPE2PointersTest:testLiteralParserFunctionPointers() (gas: 3789194) RainterpreterParserNPE2PointersTest:testOperandHandlerFunctionPointers() (gas: 3823132) RainterpreterParserNPE2PointersTest:testParserParseMeta() (gas: 5548781) -RainterpreterReferenceExternNPE2ContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 1737282) -RainterpreterReferenceExternNPE2ContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 1736889) -RainterpreterReferenceExternNPE2ContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 1735585) +RainterpreterReferenceExternNPE2ContextRainlenTest:testRainterpreterReferenceExterNPE2ContextRainlenHappy() (gas: 1737505) +RainterpreterReferenceExternNPE2ContextSenderTest:testRainterpreterReferenceExterNPE2ContextContractHappy() (gas: 1737112) +RainterpreterReferenceExternNPE2ContextSenderTest:testRainterpreterReferenceExterNPE2ContextSenderHappy() (gas: 1735808) RainterpreterReferenceExternNPE2DescribedByMetaV1:testRainterpreterReferenceExternNPE2DescribedByMetaV1Happy() (gas: 1662362) RainterpreterReferenceExternNPE2IERC165Test:testRainterpreterReferenceExternNPE2IERC165(bytes4) (runs: 2051, μ: 1666203, ~: 1666203) -RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncHappySugared() (gas: 1757828) -RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncHappyUnsugared() (gas: 1750161) +RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncHappySugared() (gas: 1758051) +RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncHappyUnsugared() (gas: 1750384) RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncIntegrity(uint256,uint256,uint256) (runs: 2051, μ: 464, ~: 464) -RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncRun(uint256,uint256[]) (runs: 2050, μ: 129480, ~: 119433) -RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncSubParseKnownWord(uint16,bytes1) (runs: 2051, μ: 1671125, ~: 1671395) +RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncRun(uint256,uint256[]) (runs: 2050, μ: 129377, ~: 119433) +RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncSubParseKnownWord(uint16,bytes1) (runs: 2051, μ: 1671119, ~: 1671395) RainterpreterReferenceExternNPE2IntIncTest:testRainterpreterReferenceExternNPE2IntIncSubParseUnknownWord(uint16,bytes1,bytes) (runs: 2048, μ: 1672026, ~: 1671805) RainterpreterReferenceExternNPE2PointersTest:testIntegrityFunctionPointers() (gas: 1659872) RainterpreterReferenceExternNPE2PointersTest:testOpcodeFunctionPointers() (gas: 1659871) @@ -1133,8 +1135,8 @@ RainterpreterReferenceExternNPE2PointersTest:testSubParserFunctionPointers() (ga RainterpreterReferenceExternNPE2PointersTest:testSubParserLiteralParsers() (gas: 1659914) RainterpreterReferenceExternNPE2PointersTest:testSubParserOperandParsers() (gas: 1661811) RainterpreterReferenceExternNPE2PointersTest:testSubParserParseMeta() (gas: 28150) -RainterpreterReferenceExternNPE2RepeatTest:testRainterpreterReferenceExternNPE2RepeatHappy() (gas: 1787167) -RainterpreterReferenceExternNPE2StackOperandTest:testRainterpreterReferenceExternNPE2StackOperandSingle(uint256) (runs: 2051, μ: 1744557, ~: 1744957) +RainterpreterReferenceExternNPE2RepeatTest:testRainterpreterReferenceExternNPE2RepeatHappy() (gas: 1787613) +RainterpreterReferenceExternNPE2StackOperandTest:testRainterpreterReferenceExternNPE2StackOperandSingle(uint256) (runs: 2051, μ: 1744778, ~: 1745180) RainterpreterReferenceExternNPE2UnknownWordTest:testRainterpreterReferenceExternNPE2UnknownWord() (gas: 1710356) RainterpreterStoreNPE2IERC165Test:testRainterpreterStoreNPE2IERC165(bytes4) (runs: 2051, μ: 228974, ~: 228974) RainterpreterStoreNPE2Test:testRainterpreterStoreNPE2IERC165(uint32) (runs: 2051, μ: 229013, ~: 229013) diff --git a/src/concrete/RainterpreterNPE2.sol b/src/concrete/RainterpreterNPE2.sol index 19adda422..3ff6e4dab 100644 --- a/src/concrete/RainterpreterNPE2.sol +++ b/src/concrete/RainterpreterNPE2.sol @@ -33,7 +33,7 @@ contract RainterpreterNPE2 is IInterpreterV4, IOpcodeToolingV1, ERC165 { SourceIndexV2.unwrap(eval.sourceIndex), eval.namespace, eval.store, eval.context, OPCODE_FUNCTION_POINTERS ); for (uint256 i = 0; i < eval.stateOverlay.length; i += 2) { - LibMemoryKV.set( + state.stateKV = LibMemoryKV.set( state.stateKV, MemoryKVKey.wrap(eval.stateOverlay[i]), MemoryKVVal.wrap(eval.stateOverlay[i + 1]) ); } diff --git a/src/generated/RainterpreterNPE2.pointers.sol b/src/generated/RainterpreterNPE2.pointers.sol index e4f4601f9..7fe8879ae 100644 --- a/src/generated/RainterpreterNPE2.pointers.sol +++ b/src/generated/RainterpreterNPE2.pointers.sol @@ -9,11 +9,11 @@ pragma solidity =0.8.25; /// @dev Hash of the known bytecode. -bytes32 constant BYTECODE_HASH = bytes32(0xc151eb26749192999fc129c91cc2cfe0b4d7720f8d970fdf7de1c441258996f6); +bytes32 constant BYTECODE_HASH = bytes32(0xa6ac22dde262b0ef8fb037d7003ec2d9f3d1ec699c541c8f2b30101ea353e53d); /// @dev The function pointers known to the interpreter for dynamic dispatch. /// By setting these as a constant they can be inlined into the interpreter /// and loaded at eval time for very low gas (~100) due to the compiler /// optimising it to a single `codecopy` to build the in memory bytes array. bytes constant OPCODE_FUNCTION_POINTERS = - hex"078a07db081d09e90ad00ae20af40b170b590bab0bbc0bcd0c6f0cac0d6a0e1a0e9e0fe111080d6a120412a6131e1357139013df13df1418147d155115a415b816111625163a1654165f1673168816c016e7176717b5180318511869188218d0190719151923193e1953196b1984199219a019ae19bc1a0a1a581aa61af41b0c1b0c1b231b511b511b681b971bec1bfa1bfa1c9e1d85"; + hex"08b3090309450b110bf80c0a0c1c0c3f0c810cd30ce40cf50d970dd40e920f420fc6110912300e92132c13ce1446147f14b815071507154015a5167916cc16e01739174d1762177c1787179b17b017e8180f188f18dd192b1979199119aa19f81a2f1a3d1a4b1a661a7b1a931aac1aba1ac81ad61ae41b321b801bce1c1c1c341c341c4b1c791c791c901cbf1d141d221d221dc61ead"; diff --git a/test/src/concrete/RainterpreterNPE2.stateOverlay.t.sol b/test/src/concrete/RainterpreterNPE2.stateOverlay.t.sol new file mode 100644 index 000000000..abad6499a --- /dev/null +++ b/test/src/concrete/RainterpreterNPE2.stateOverlay.t.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: CAL +pragma solidity =0.8.25; + +import {RainterpreterExpressionDeployerNPE2DeploymentTest} from + "test/abstract/RainterpreterExpressionDeployerNPE2DeploymentTest.sol"; +import {FullyQualifiedNamespace, StateNamespace} from "rain.interpreter.interface/interface/IInterpreterStoreV2.sol"; +import {EvalV4, SourceIndexV2} from "rain.interpreter.interface/interface/unstable/IInterpreterV4.sol"; +import {LibNamespace} from "rain.interpreter.interface/lib/ns/LibNamespace.sol"; + +contract RainterpreterNPE2StateOverlayTest is RainterpreterExpressionDeployerNPE2DeploymentTest { + /// Show that state overlay can prewarm a get. + function testStateOverlayGet() external { + bytes memory bytecode = iDeployer.parse2("_: get(9);"); + + uint256 k = 9e18; + uint256 v = 42; + uint256[] memory stateOverlay = new uint256[](2); + stateOverlay[0] = k; + stateOverlay[1] = v; + + (uint256[] memory stack, uint256[] memory kvs) = iInterpreter.eval4( + EvalV4({ + store: iStore, + namespace: LibNamespace.qualifyNamespace(StateNamespace.wrap(0), address(this)), + bytecode: bytecode, + sourceIndex: SourceIndexV2.wrap(0), + context: new uint256[][](0), + inputs: new uint256[](0), + stateOverlay: stateOverlay + }) + ); + + assertEq(stack.length, 1); + assertEq(stack[0], v); + assertEq(kvs.length, 2); + assertEq(kvs[0], k); + assertEq(kvs[1], v); + } + + /// Show that state overlay can be overridden by a set in the bytecode. + function testStateOverlaySet() external { + bytes memory bytecode = iDeployer.parse2("_:get(9),:set(9 42),_:get(9);"); + + uint256 k = 9e18; + uint256 v = 43e18; + uint256[] memory stateOverlay = new uint256[](2); + stateOverlay[0] = k; + stateOverlay[1] = v; + + (uint256[] memory stack, uint256[] memory kvs) = iInterpreter.eval4( + EvalV4({ + store: iStore, + namespace: LibNamespace.qualifyNamespace(StateNamespace.wrap(0), address(this)), + bytecode: bytecode, + sourceIndex: SourceIndexV2.wrap(0), + context: new uint256[][](0), + inputs: new uint256[](0), + stateOverlay: stateOverlay + }) + ); + + assertEq(stack.length, 2); + assertEq(stack[0], 42e18); + assertEq(stack[1], v); + assertEq(kvs.length, 2); + assertEq(kvs[0], k); + assertEq(kvs[1], 42e18); + } +}