chainlink icon indicating copy to clipboard operation
chainlink copied to clipboard

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

Open ijonas opened this issue 2 years ago • 2 comments

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

ijonas avatar Sep 05 '22 13:09 ijonas

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.

GainsNetwork avatar Sep 12 '22 08:09 GainsNetwork

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

ijonas avatar Sep 18 '22 08:09 ijonas