class Builder {

    private String address;
    private String addressTag;
    private Date date;
    private Currency currency;
    private BigDecimal amount;
    private String internalId;
    private String blockchainTransactionHash;
    private String description;
    private Type type;
    private Status status;
    private BigDecimal balance;
    private BigDecimal fee;

    public static Builder from(FundingRecord record) {
      return new Builder()
          .setAddress(record.address)
          .setAddressTag(record.addressTag)
          .setBlockchainTransactionHash(record.blockchainTransactionHash)
          .setDate(record.date)
          .setCurrency(record.currency)
          .setAmount(record.amount)
          .setInternalId(record.internalId)
          .setDescription(record.description)
          .setType(record.type)
          .setStatus(record.status)
          .setBalance(record.balance)
          .setFee(record.fee);
    }

    public Builder setAddress(String address) {
      this.address = address;
      return this;
    }

    public Builder setAddressTag(String addressTag) {
      this.addressTag = addressTag;
      return this;
    }

    public Builder setDate(Date date) {
      this.date = date;
      return this;
    }

    public Builder setCurrency(Currency currency) {
      this.currency = currency;
      return this;
    }

    public Builder setAmount(BigDecimal amount) {
      this.amount = amount;
      return this;
    }

    public Builder setInternalId(String internalId) {
      this.internalId = internalId;
      return this;
    }

    public Builder setBlockchainTransactionHash(String blockchainTransactionHash) {
      this.blockchainTransactionHash = blockchainTransactionHash;
      return this;
    }

    public Builder setDescription(String description) {
      this.description = description;
      return this;
    }

    public Builder setType(Type type) {
      this.type = type;
      return this;
    }

    public Builder setStatus(Status status) {
      this.status = status;
      return this;
    }

    public Builder setBalance(BigDecimal balance) {
      this.balance = balance;
      return this;
    }

    public Builder setFee(BigDecimal fee) {
      this.fee = fee;
      return this;
    }

    public FundingRecord build() {<FILL_FUNCTION_BODY>}
  }

      return new FundingRecord(
          address,
          addressTag,
          date,
          currency,
          amount,
          internalId,
          blockchainTransactionHash,
          type,
          status,
          balance,
          fee,
          description);
    
<no_super_class>