-
Notifications
You must be signed in to change notification settings - Fork 14
Closed
Description
Seems like fl.prank doesn't work as expected
under direct vm.prank it resets sender after each call and prank itsefl has prank (return) -> increment (stop) opcodes
├─ [0] VM::prank(0x0000000000000000000000000000000000000004)
│ └─ ← [Return]
├─ [22340] Counter::increment()
│ └─ ← [Stop]
but when wrapping in fl.prank it does
prank (return) + (STOP) -> increment (stop).
As a result it doesn't reset the sender and throws an error
├─ [902] Fuzzlib::prank(0x0000000000000000000000000000000000000004)
│ ├─ [0] VM::prank(0x0000000000000000000000000000000000000004)
│ │ └─ ← [Return]
│ └─ ← [Stop]
├─ [22340] Counter::increment()
│ └─ ← [Stop]
logs for pure prank
[41862] CounterTest::test_Increment()
├─ [0] VM::readCallers()
│ └─ ← [Return] 0, DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]
├─ [0] console::log("sender", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [0] console::log("origin", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [0] VM::prank(0x0000000000000000000000000000000000000004)
│ └─ ← [Return]
├─ [22340] Counter::increment()
│ └─ ← [Stop]
├─ [0] VM::readCallers()
│ └─ ← [Return] 0, DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]
├─ [0] console::log("sender2", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [0] console::log("origin2", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [0] VM::prank(0x0000000000000000000000000000000000000004)
│ └─ ← [Return]
├─ [440] Counter::increment()
│ └─ ← [Stop]
├─ [283] Counter::number() [staticcall]
│ └─ ← [Return] 2
for fl.prank
[50693] CounterTest::test_Increment()
├─ [5617] Fuzzlib::readCallers()
│ ├─ [0] VM::readCallers()
│ │ └─ ← [Return] 0, DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]
│ └─ ← [Return] DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38], DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]
├─ [0] console::log("sender", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [0] console::log("origin", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [902] Fuzzlib::prank(0x0000000000000000000000000000000000000004)
│ ├─ [0] VM::prank(0x0000000000000000000000000000000000000004)
│ │ └─ ← [Return]
│ └─ ← [Stop]
├─ [22340] Counter::increment()
│ └─ ← [Stop]
├─ [1117] Fuzzlib::readCallers()
│ ├─ [0] VM::readCallers()
│ │ └─ ← [Return] 3, 0x0000000000000000000000000000000000000004, DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]
│ └─ ← [Return] 0x0000000000000000000000000000000000000004, DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]
├─ [0] console::log("sender2", 0x0000000000000000000000000000000000000004) [staticcall]
│ └─ ← [Stop]
├─ [0] console::log("origin2", DefaultSender: [0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38]) [staticcall]
│ └─ ← [Stop]
├─ [913] Fuzzlib::prank(0x0000000000000000000000000000000000000004)
│ ├─ [0] VM::prank(0x0000000000000000000000000000000000000004)
│ │ └─ ← [Revert] cannot overwrite a prank until it is applied at least once
│ └─ ← [Revert] cannot overwrite a prank until it is applied at least once
└─ ← [Revert] cannot overwrite a prank until it is applied at least once
In my maybe incorrect understanding, when funciton execution stops without usage like
prank(...) ... {
vm.prank..
}
it thinks that that prank was not used and pranked sender doesn't resets
Metadata
Metadata
Assignees
Labels
No labels