Source: validation/schemas/ETH.js

/**
 * @file Exposes validation schemas for ETH interface
 * @author Ivan Violentov <ivan.violentov@jibrel.network>
 */

import Joi from 'joi-browser'

import validationRules, { generalETHKeys } from '../validationRules'

const sendTransaction = Joi.object().keys({
  ...generalETHKeys,
  privateKey: validationRules.privateKey.required(),
  to: validationRules.address.required(),
  value: validationRules.value.required(),
  gasLimit: validationRules.gasLimit,
  gasPrice: validationRules.gasPrice,
  nonce: validationRules.nonce,
  data: validationRules.data,
})

const getBalance = Joi.object().keys({
  ...generalETHKeys,
  address: validationRules.address.required(),
  defaultBlock: validationRules.address,
})

const getCode = Joi.object().keys({
  ...generalETHKeys,
  address: validationRules.address.required(),
  defaultBlock: validationRules.address,
})

const getBlockNumber = Joi.object().keys({
  ...generalETHKeys,
})

const getBlock = Joi.object().keys({
  ...generalETHKeys,
  blockId: validationRules.blockId,
  returnTransactionObjects: validationRules.returnTransactionObjects,
})

const getTransaction = Joi.object().keys({
  ...generalETHKeys,
  transactionHash: validationRules.transactionHash.required(),
})

const getTransactionReceipt = Joi.object().keys({
  ...generalETHKeys,
  transactionHash: validationRules.transactionHash.required(),
})

const getLogsFilter = Joi.object().keys({
  ...generalETHKeys,
  options: validationRules.logsOptions,
})

const getPastLogs = Joi.object().keys({
  ...generalETHKeys,
  options: validationRules.logsOptions,
})

const estimateGas = Joi.object().keys({
  ...generalETHKeys,
  to: validationRules.address.required(),
  value: validationRules.value.required(),
  data: validationRules.data,
})

const getGasPrice = Joi.object().keys({
  ...generalETHKeys,
})

const getNonce = Joi.object().keys({
  ...generalETHKeys,
  address: validationRules.address.required(),
  defaultBlock: validationRules.blockId,
})

export default {
  getCode,
  getBlock,
  getNonce,
  getBalance,
  getPastLogs,
  estimateGas,
  getGasPrice,
  getLogsFilter,
  getBlockNumber,
  getTransaction,
  sendTransaction,
  getTransactionReceipt,
}