| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- ---
- title: Set Custom Gas Limits
- description: How to set custom gas limits for Entropy callbacks
- ---
- # Set Custom Gas Limits
- By default, Pyth Entropy uses a predefined gas limit for callback functions. However, you may need to adjust this limit based on the complexity of your callback implementation.
- ## When to Use Custom Gas Limits
- ### Use Higher Gas Limits When:
- - Your callback function performs complex calculations
- - You need to update multiple storage variables
- - Your callback interacts with other contracts
- - You're implementing complex game logic
- ### Use Lower Gas Limits When:
- - Your callback function is simple (e.g., just stores a single value)
- - You want to optimize for cost
- - You want to prevent potential gas griefing
- ## Implementation
- ### Using EntropyV2 Interface
- ```solidity
- import "@pythnetwork/entropy-sdk-solidity/IEntropyV2.sol";
- contract MyContract is IEntropyConsumer {
- IEntropyV2 entropy;
- function requestWithCustomGas() external payable {
- uint32 customGasLimit = 200000; // Adjust based on your needs
- // Get fee for custom gas limit
- uint256 fee = entropy.getFeeV2(customGasLimit);
- require(msg.value >= fee, "Insufficient fee");
- // Request with custom gas limit
- uint64 sequenceNumber = entropy.requestV2{value: fee}(customGasLimit);
- }
- }
- ```
- ### Full Control Request
- ```solidity
- function requestWithFullControl() external payable {
- address provider = entropy.getDefaultProvider();
- uint32 gasLimit = 150000;
- bytes32 userRandomNumber = keccak256(abi.encode(block.timestamp, msg.sender));
- uint256 fee = entropy.getFeeV2(provider, gasLimit);
- require(msg.value >= fee, "Insufficient fee");
- uint64 sequenceNumber = entropy.requestV2{value: fee}(
- provider,
- gasLimit,
- userRandomNumber
- );
- }
- ```
- ## Gas Limit Constraints
- Each network has different gas limit constraints:
- | Network | Min Gas Limit | Max Gas Limit | Default |
- | --------- | ------------- | ------------- | ------- |
- | Ethereum | 50,000 | 100,000 | 100,000 |
- | Arbitrum | 50,000 | 100,000 | 100,000 |
- | Avalanche | 50,000 | 100,000 | 100,000 |
- | Base | 50,000 | 100,000 | 100,000 |
- | BNB Chain | 50,000 | 100,000 | 100,000 |
- | Optimism | 50,000 | 100,000 | 100,000 |
- | Polygon | 50,000 | 100,000 | 100,000 |
- ## Best Practices
- 1. **Test your callback function** to estimate gas usage before setting custom limits
- 2. **Add a buffer** of 10-20% to your estimated gas usage for safety
- 3. **Use the minimum necessary** gas limit to reduce costs
- 4. **Consider network differences** - some networks may have different gas costs for similar operations
|