code: async function callContractStatic ({ amount, callData, contract, abiVersion }) {
    return snakeToPascalObjKeys(await call(this, 'channels.dry_run.call_contract', {
      amount,
      call_data: callData,
      contract,
      abi_version: abiVersion
    }))
  }
docs: Call contract using dry-run
  
  In order to get the result of a potential contract call, one might need to
  dry-run a contract call. It takes the exact same arguments as a call would
  and returns the call object.
  
  The call is executed in the channel's state but it does not impact the state
  whatsoever. It uses as an environment the latest channel's state and the current
  top of the blockchain as seen by the node.
  
  @param {Object} options
  @param {String} [options.amount] - Amount the caller of the contract commits to it
  @param {String} [options.callData] - ABI encoded compiled AEVM call data for the code
  @param {Number} [options.contract] - Address of the contract to call
  @param {Number} [options.abiVersion] - Version of the ABI
  @return {Promise<Object>}
  @example channel.callContractStatic({
  contract: 'ct_9sRA9AVE4BYTAkh5RNfJYmwQe1NZ4MErasQLXZkFWG43TPBqa',
  callData: 'cb_1111111111111111...',
  amount: 0,
  abiVersion: 1
  }).then(({ returnValue, gasUsed }) => {
  console.log('Returned value:', returnValue)
  console.log('Gas used:', gasUsed)
  })