ReDeployContractTransactionBuilder.java

  1. /*
  2.  * @copyright defined in LICENSE.txt
  3.  */

  4. package hera.spec.transaction;

  5. import static hera.util.ValidationUtils.assertNotNull;

  6. import hera.api.model.AccountAddress;
  7. import hera.api.model.ChainIdHash;
  8. import hera.api.model.ContractAddress;
  9. import hera.api.model.ContractDefinition;
  10. import hera.api.model.Fee;
  11. import hera.api.model.RawTransaction;
  12. import hera.api.model.Transaction.TxType;
  13. import hera.spec.resolver.PayloadResolver;
  14. import hera.spec.resolver.PayloadSpec.Type;
  15. import hera.spec.transaction.dsl.ReDeployContractTransaction;
  16. import hera.spec.transaction.dsl.ReDeployContractTransaction.WithChainIdHash;
  17. import hera.spec.transaction.dsl.ReDeployContractTransaction.WithChainIdHashAndCreator;
  18. import hera.spec.transaction.dsl.ReDeployContractTransaction.WithChainIdHashAndCreatorAndNonce;
  19. import hera.spec.transaction.dsl.ReDeployContractTransaction.WithChainIdHashAndCreatorAndNonceAndContractAddress;
  20. import hera.spec.transaction.dsl.ReDeployContractTransaction.WithReady;

  21. public class ReDeployContractTransactionBuilder implements
  22.     ReDeployContractTransaction.WithNothing,
  23.     ReDeployContractTransaction.WithChainIdHash,
  24.     ReDeployContractTransaction.WithChainIdHashAndCreator,
  25.     ReDeployContractTransaction.WithChainIdHashAndCreatorAndNonce,
  26.     ReDeployContractTransaction.WithChainIdHashAndCreatorAndNonceAndContractAddress,
  27.     ReDeployContractTransaction.WithReady {

  28.   protected ContractDefinition contractDefinition;

  29.   protected final PlainTransactionBuilder delegate = new PlainTransactionBuilder();

  30.   @Override
  31.   public WithChainIdHash chainIdHash(final ChainIdHash chainIdHash) {
  32.     this.delegate.chainIdHash(chainIdHash);
  33.     return this;
  34.   }

  35.   @Override
  36.   public WithChainIdHashAndCreator creator(final String creatorName) {
  37.     this.delegate.from(creatorName);
  38.     return this;
  39.   }

  40.   @Override
  41.   public WithChainIdHashAndCreator creator(final AccountAddress creator) {
  42.     this.delegate.from(creator);
  43.     return this;
  44.   }

  45.   @Override
  46.   public WithChainIdHashAndCreatorAndNonce nonce(final long nonce) {
  47.     this.delegate.nonce(nonce);
  48.     return this;
  49.   }

  50.   @Override
  51.   public WithChainIdHashAndCreatorAndNonceAndContractAddress contractAddress(
  52.       final ContractAddress contractAddress) {
  53.     this.delegate.to(contractAddress);
  54.     return this;
  55.   }

  56.   @Override
  57.   public WithReady definition(final ContractDefinition contractDefinition) {
  58.     assertNotNull(contractDefinition);
  59.     this.contractDefinition = contractDefinition;
  60.     return this;
  61.   }

  62.   @Override
  63.   public WithReady fee(final Fee fee) {
  64.     this.delegate.fee(fee);
  65.     return this;
  66.   }

  67.   @Override
  68.   public RawTransaction build() {
  69.     this.delegate.amount(contractDefinition.getAmount());
  70.     this.delegate.payload(PayloadResolver.resolve(Type.ContractDefinition, contractDefinition));
  71.     this.delegate.type(TxType.REDEPLOY);
  72.     return delegate.build();
  73.   }

  74. }