chainlink
chainlink copied to clipboard
[NODE] Basic Get>Uint256 request on Arbitrum Mainnet fails in Operator.sol due to hardcoded MINIMUM_CONSUMER_GAS_LIMIT
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
- Network: Abitrum Nitro Mainnet
- Operating System: Container-Optimized OS from Google
- Kubernetes Version: 1.22.10-gke.600
- Hosting Provider: GCP
- Startup Command: Kubernetes pod runnning smartcontract/chainlink:1.8.0-root ["local", "n", "-p", "/chainlink/.password", "-a", "/chainlink/.api"]
- Operator.sol failure line
- Verified Operator.sol on Arbiscan
- Transaction Record
- JobSpec
- Client Contract
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
- Deploy a 1.8.0 node to Arbitrum Nitro Mainnet
- Deploy operator.sol v0.7 to Arbitrum Nitro Mainnet
- Add a Get > Uint 256 jobspec to the node (link provided above)
- Execute Get > Uint 256 job - should run successfully
- Check Oracle contract on Arbiscan and you should see a failure
We confirm this behavior, and it is probably related to the Nitro upgrade: https://developer.offchainlabs.com/migration/dapp_migration#dapps
For the moment we simply removed the line in the Oracle contract that checked for the gasLeft() with the constant and it worked.
Thanks for tip @GainsNetwork The workaround of removing the require(...) from Operator.sol works for me.