/*
 * Copyright (c) Robert Bosch GmbH. All rights reserved.
 */
package org.eclipse.blockchain.core;

import org.web3j.evm.Configuration;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.admin.Admin;

/**
 * @author ADG5COB
 */
public class EmbeddedEVMObject {

  private Configuration config;
  private Web3j web3j;
  private Admin admin;

  /**
   * @param config - The evm configuration
   * @param web3j - The web3j instance
   */
  public EmbeddedEVMObject(final Configuration config, final Web3j web3j, final Admin admin) {
    this.config = config;
    this.web3j = web3j;
    this.admin = admin;
  }

  /**
   * @return the admin
   */
  public Admin getAdmin() {
    return this.admin;
  }


  /**
   * @param admin the admin to set
   */
  public void setAdmin(final Admin admin) {
    this.admin = admin;
  }

  /**
   * @return the config
   */
  public Configuration getConfig() {
    return this.config;
  }

  /**
   * @param config the config to set
   */
  public void setConfig(final Configuration config) {
    this.config = config;
  }

  /**
   * @return the web3j
   */
  public Web3j getWeb3j() {
    return this.web3j;
  }

  /**
   * @param web3j the web3j to set
   */
  public void setWeb3j(final Web3j web3j) {
    this.web3j = web3j;
  }


}
