Skip to main content

Step 4: Ensuring Security

Integrating with external data and calls requires additional security measures.

1. Protect Against Reentrancy Attacks

If your function interacts with external contracts or transfers ETH/tokens, use the nonReentrant modifier (from OpenZeppelin ReentrancyGuard).

import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

contract YourContract is ReentrancyGuard {
function someRestrictedFunction(address _to, bytes calldata _purefidata) external nonReentrant {
verifier.validatePayload(_purefidata);
// Logic involving transfers
}
}

2. Validate Input Data

Add checks for minimum values or parameter correctness to prevent spam or errors.

function someRestrictedFunction(address _to, bytes calldata _purefidata) external payable nonReentrant {
require(msg.value >= 0.01 ether, "Minimum 0.01 ETH required");
verifier.validatePayload(_purefidata);
// Logic
}

3. Restrict Access

Use modifiers to limit access to critical functions (e.g., onlyOwner).