DeployHeader.java

  1. package com.syntifi.casper.sdk.model.deploy;

  2. import com.fasterxml.jackson.annotation.JsonFormat;
  3. import com.fasterxml.jackson.annotation.JsonProperty;
  4. import com.syntifi.casper.sdk.exception.CLValueEncodeException;
  5. import com.syntifi.casper.sdk.exception.DynamicInstanceException;
  6. import com.syntifi.casper.sdk.exception.NoSuchTypeException;
  7. import com.syntifi.casper.sdk.model.clvalue.encdec.CLValueEncoder;
  8. import com.syntifi.casper.sdk.model.clvalue.encdec.interfaces.EncodableValue;
  9. import com.syntifi.casper.sdk.model.common.Digest;
  10. import com.syntifi.casper.sdk.model.common.Ttl;
  11. import com.syntifi.casper.sdk.model.key.PublicKey;
  12. import lombok.AllArgsConstructor;
  13. import lombok.Builder;
  14. import lombok.Getter;
  15. import lombok.NoArgsConstructor;
  16. import lombok.Setter;

  17. import java.io.IOException;
  18. import java.util.Date;
  19. import java.util.List;

  20. /**
  21.  * The header portion of a [`Deploy`](struct.Deploy.html).
  22.  *
  23.  * @author Alexandre Carvalho
  24.  * @author Andre Bertolace
  25.  * @since 0.0.1
  26.  */
  27. @Getter
  28. @Setter
  29. @Builder
  30. @AllArgsConstructor
  31. @NoArgsConstructor
  32. public class DeployHeader implements EncodableValue {

  33.     /**
  34.      * @see PublicKey
  35.      */
  36.     private PublicKey account;

  37.     /**
  38.      * Body hash
  39.      */
  40.     @JsonProperty("body_hash")
  41.     private Digest bodyHash;

  42.     /**
  43.      * Chain name
  44.      */
  45.     @JsonProperty("chain_name")
  46.     private String chainName;

  47.     /**
  48.      * Dependencies
  49.      */
  50.     private List<Digest> dependencies;

  51.     /**
  52.      * Gas price
  53.      */
  54.     @JsonProperty("gas_price")
  55.     private Long gasPrice;

  56.     /**
  57.      * Timestamp formatted as per RFC 3339
  58.      */
  59.     @JsonProperty("timestamp")
  60.     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
  61.     private Date timeStamp;

  62.     /**
  63.      * Human-readable duration
  64.      */
  65.     private Ttl ttl;

  66.     /**
  67.      * Implements DeployHearder encoder
  68.      */
  69.     @Override
  70.     public void encode(CLValueEncoder clve, boolean encodeType) throws IOException, CLValueEncodeException, DynamicInstanceException, NoSuchTypeException {
  71.         account.encode(clve, encodeType);
  72.         clve.writeLong(timeStamp.getTime());
  73.         ttl.encode(clve, encodeType);
  74.         clve.writeLong(gasPrice);
  75.         bodyHash.encode(clve, encodeType);
  76.         if (dependencies != null) {
  77.             clve.writeInt(dependencies.size());
  78.             for (Digest dependency : dependencies) {
  79.                 clve.write(dependency.getDigest());
  80.             }
  81.         }
  82.         clve.writeString(chainName);
  83.     }
  84. }