Skip to content

Commit 153f984

Browse files
committed
Allow calls to external libraries
1 parent 938f1e9 commit 153f984

File tree

3 files changed

+5
-20
lines changed

3 files changed

+5
-20
lines changed

crates/evm/evm/src/inspectors/script.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ pub struct ScriptExecutionInspector {
1414
}
1515

1616
impl<DB: Database> Inspector<DB> for ScriptExecutionInspector {
17-
#[cold]
17+
#[inline]
1818
fn step(&mut self, interpreter: &mut Interpreter, _ecx: &mut EvmContext<DB>) {
19-
// Check for address(this) usage in the main script contract
19+
// Check if both target and bytecode address are the same as script contract address
20+
// (allow calling external libraries when bytecode address is different).
2021
if interpreter.current_opcode() == ADDRESS &&
21-
interpreter.contract.target_address == self.script_address
22+
interpreter.contract.target_address == self.script_address &&
23+
interpreter.contract.bytecode_address.unwrap_or_default() == self.script_address
2224
{
2325
// Log the reason for revert
2426
tracing::error!(

crates/evm/evm/src/inspectors/stack.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -789,16 +789,6 @@ impl Inspector<&mut dyn DatabaseExt> for InspectorStackRefMut<'_> {
789789
],
790790
|inspector| inspector.step(interpreter, ecx),
791791
);
792-
793-
// Check for address(this) usage in the main script contract, but ignore if it's within a DELEGATECALL context
794-
if let Some(script_addr) = self.inner.script_address {
795-
if interpreter.current_opcode() == opcode::ADDRESS &&
796-
interpreter.contract.address == script_addr &&
797-
interpreter.call_context().scheme != CallScheme::DelegateCall
798-
{
799-
tracing::warn!(target: "forge::script", script_address=%script_addr, "Usage of `address(this)` detected directly in script contract. Script contracts are ephemeral and their addresses should not be relied upon.");
800-
}
801-
}
802792
}
803793

804794
fn step_end(

testdata/default/cheats/Broadcast.t.sol

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ contract BroadcastTest is DSTest {
112112

113113
vm.stopBroadcast();
114114

115-
require(test.echoSender() == address(this));
116-
117115
vm.broadcast(ACCOUNT_B);
118116
Test tmptest2 = new Test();
119117

@@ -577,11 +575,6 @@ contract ScriptSign is DSTest {
577575
vm.startBroadcast();
578576
(uint8 v, bytes32 r, bytes32 s) = vm.sign(digest);
579577

580-
vm._expectCheatcodeRevert(
581-
bytes(string.concat("signer with address ", vm.toString(address(this)), " is not available"))
582-
);
583-
vm.sign(address(this), digest);
584-
585578
SignatureTester tester = new SignatureTester();
586579
(, address caller,) = vm.readCallers();
587580
assertEq(tester.owner(), caller);

0 commit comments

Comments
 (0)