All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cardanofoundation.conversions.domain.ByronGenesis Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
package org.cardanofoundation.conversions.domain;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
import java.io.InputStream;
import java.time.Duration;
import lombok.Data;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.cardanofoundation.conversions.ConversionRuntimeException;

@Data
@ToString
@Slf4j
public class ByronGenesis {

  public static final String ATTR_START_TIME = "startTime";
  public static final String ATTR_BLOCK_VERSION_DATA = "blockVersionData";
  public static final String ATTR_SLOT_DURATION = "slotDuration";
  public static final String ATTR_PROTOCOL_CONSTS = "protocolConsts";
  public static final String ATTR_PROTOCOL_MAGIC = "protocolMagic";

  private final ObjectMapper objectMapper;

  private long startTime;
  private long byronSlotLength;
  private long protocolMagic;

  public ByronGenesis(InputStream is, ObjectMapper objectMapper) {
    this.objectMapper = objectMapper;
    parseByronGenesisFile(is);
  }

  public Duration getByronSlotLength() {
    return Duration.ofSeconds(byronSlotLength);
  }

  private void parseByronGenesisFile(InputStream is) {
    ObjectNode byronJsonNode = parseJson(is);
    startTime = byronJsonNode.get(ATTR_START_TIME).asLong();
    byronSlotLength =
        byronJsonNode.get(ATTR_BLOCK_VERSION_DATA).get(ATTR_SLOT_DURATION).asLong()
            / 1000; // in second

    protocolMagic = byronJsonNode.get(ATTR_PROTOCOL_CONSTS).get(ATTR_PROTOCOL_MAGIC).asLong();

    log.debug("startTime: {}", startTime);
    log.debug("byronSlotLength: {}", byronSlotLength);
    log.debug("protocolMagic: {}", protocolMagic);
  }

  private ObjectNode parseJson(InputStream is) {
    ObjectNode jsonNode;
    try {
      jsonNode = (ObjectNode) objectMapper.readTree(is);
    } catch (IOException e) {
      throw new ConversionRuntimeException("Error parsing byron genesis file", e);
    }

    return jsonNode;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy