smartcontractkit / chainlink

node of the decentralized oracle network, bridging on and off-chain computation
https://chain.link
Other
6.95k stars 1.68k forks source link

[NODE] Basic Get>Uint256 request on Arbitrum Mainnet fails in Operator.sol due to hardcoded MINIMUM_CONSUMER_GAS_LIMIT #7365

Open ijonas opened 2 years ago

ijonas commented 2 years ago

Description I have a Chainlink Node running version 1.8.0 on Arbitrum. I have just over 0.5ETH sitting in the node's wallet, so plenty to pay for gas. I send a basic "Get > Uint256" request to the node. The node successfully walks through all the necessary steps and completes the job in UI (all green). However the transaction inside Operator.sol fails on gasleft() < MINIMUM_CONSUMER_GAS_LIMIT.

The error reported in the Arbiscan block explorer is: Fail with error 'Must provide consumer enough gas'

I have not configured/overriden any gas settings on the node, choosing to use the default Arbitrum settings that shipped with the 1.8.0 release.

Should the MINIMUM_CONSUMER_GAS_LIMIT inside Operator.sol be lowered for Arbitrum Mainnet or are there Arbitrum-specific gas settings I can configure on the node to get past this blocker?

Basic Information

Environment Variables

ADVISORY_LOCK_CHECK_INTERVAL    1s
ADVISORY_LOCK_ID    1027321974924625846
ALLOW_ORIGINS   *
BLOCK_BACKFILL_DEPTH    10
BLOCK_HISTORY_ESTIMATOR_BLOCK_DELAY 0
BLOCK_HISTORY_ESTIMATOR_BLOCK_HISTORY_SIZE  0
BLOCK_HISTORY_ESTIMATOR_TRANSACTION_PERCENTILE  0
BRIDGE_RESPONSE_URL 
CHAINLINK_DEV   false
CHAINLINK_PORT  6688
CHAINLINK_TLS_HOST  
CHAINLINK_TLS_PORT  0
CHAINLINK_TLS_REDIRECT  false
CHAIN_TYPE  
DATABASE_BACKUP_FREQUENCY   1h0m0s
DATABASE_BACKUP_MODE    none
DATABASE_BACKUP_ON_VERSION_UPGRADE  true
DATABASE_LOCKING_MODE   lease
DEFAULT_HTTP_LIMIT  32768
DEFAULT_HTTP_TIMEOUT    15s
ETH_CHAIN_ID    42161
ETH_HTTP_URL    
ETH_SECONDARY_URLS  [https://arb-mainnet.g.alchemy.com/v2/xxx]
ETH_URL wss://arb-mainnet.g.alchemy.com/v2/xxx
EVM_RPC_ENABLED true
EXPLORER_URL    
FEATURE_EXTERNAL_INITIATORS false
FEATURE_OFFCHAIN_REPORTING  false
FLAGS_CONTRACT_ADDRESS  
FM_DEFAULT_TRANSACTION_QUEUE_DEPTH  1
GAS_ESTIMATOR_MODE  
INSECURE_FAST_SCRYPT    false
JOB_PIPELINE_REAPER_INTERVAL    1h0m0s
JOB_PIPELINE_REAPER_THRESHOLD   24h0m0s
JSON_CONSOLE    true
KEEPER_BASE_FEE_BUFFER_PERCENT  20
KEEPER_CHECK_UPKEEP_GAS_PRICE_FEATURE_ENABLED   false
KEEPER_DEFAULT_TRANSACTION_QUEUE_DEPTH  1
KEEPER_GAS_PRICE_BUFFER_PERCENT 20
KEEPER_GAS_TIP_CAP_BUFFER_PERCENT   20
KEEPER_MAXIMUM_GRACE_PERIOD 100
KEEPER_REGISTRY_CHECK_GAS_OVERHEAD  200000
KEEPER_REGISTRY_PERFORM_GAS_OVERHEAD    150000
KEEPER_REGISTRY_SYNC_INTERVAL   30m0s
KEEPER_REGISTRY_SYNC_UPKEEP_QUEUE_SIZE  10
KEEPER_TURN_FLAG_ENABLED    false
KEEPER_TURN_LOOK_BACK   1000
LEASE_LOCK_DURATION 10s
LEASE_LOCK_REFRESH_INTERVAL 1s
LINK_CONTRACT_ADDRESS   
LOG_FILE_DIR    /chainlink
LOG_FILE_MAX_AGE    0
LOG_FILE_MAX_BACKUPS    1
LOG_FILE_MAX_SIZE   1.02gb
LOG_LEVEL   debug
LOG_SQL false
OCR_DEFAULT_TRANSACTION_QUEUE_DEPTH 1
OCR_TRACE_LOGGING   false
P2PV2_ANNOUNCE_ADDRESSES    []
P2PV2_BOOTSTRAPPERS []
P2PV2_DELTA_DIAL    15s
P2PV2_DELTA_RECONCILE   1m0s
P2PV2_LISTEN_ADDRESSES  []
P2P_BOOTSTRAP_CHECK_INTERVAL    20s
P2P_BOOTSTRAP_PEERS []
P2P_DHT_LOOKUP_INTERVAL 10
P2P_INCOMING_MESSAGE_BUFFER_SIZE    10
P2P_LISTEN_IP   0.0.0.0
P2P_LISTEN_PORT 
P2P_NETWORKING_STACK    V1
P2P_NEW_STREAM_TIMEOUT  10s
P2P_OUTGOING_MESSAGE_BUFFER_SIZE    10
P2P_PEER_ID 
REAPER_EXPIRATION   240h0m0s
ROOT    /chainlink
SECURE_COOKIES  false
SESSION_TIMEOUT 15m0s
SHUTDOWN_GRACE_PERIOD   5s
TELEMETRY_INGRESS_LOGGING   false
TELEMETRY_INGRESS_SERVER_PUB_KEY    
TELEMETRY_INGRESS_URL   
TRIGGER_FALLBACK_DB_POLL_INTERVAL   30s

Steps to Reproduce

  1. Deploy a 1.8.0 node to Arbitrum Nitro Mainnet
  2. Deploy operator.sol v0.7 to Arbitrum Nitro Mainnet
  3. Add a Get > Uint 256 jobspec to the node (link provided above)
  4. Execute Get > Uint 256 job - should run successfully
  5. Check Oracle contract on Arbiscan and you should see a failure
GainsNetwork commented 2 years ago

We confirm this behavior, and it is probably related to the Nitro upgrade: https://developer.offchainlabs.com/migration/dapp_migration#dapps

image

For the moment we simply removed the line in the Oracle contract that checked for the gasLeft() with the constant and it worked.

ijonas commented 1 year ago

Thanks for tip @GainsNetwork The workaround of removing the require(...) from Operator.sol works for me.