/// <summary>
        /// Endpoint: [POST] /api/transactions/built/transfers/amount
        /// </summary>
        /// <param name="transfers">Transaction transfers.</param>
        /// <param name="fees">Fees amount in particular asset to spend for the given transaction.</param>
        /// <param name="expiration">
        /// Optional.
        /// Transaction expiration options. Used if blockchain
        /// supports transaction expiration. If blockchain supports
        /// transaction expiration and the value is omitted,
        /// it should be interpreted as infinite expiration.
        /// If several expiration options are specified at once,
        /// and blockchain supports both of them, then transaction
        /// should be expired when earliest condition is met.
        /// </param>
        public BuildTransferAmountTransactionRequest(
            IReadOnlyCollection <Transfer> transfers,
            IReadOnlyCollection <Fee> fees,
            ExpirationOptions expiration = null)
        {
            if (fees == null)
            {
                throw RequestValidationException.ShouldBeNotNull(nameof(fees));
            }

            TransactionTransfersValidator.Validate(transfers);
            FeesValidator.ValidateFeesInRequest(fees);

            Transfers  = transfers;
            Fees       = fees;
            Expiration = expiration;
        }
        /// <summary>
        /// Endpoint: [POST] /api/transactions/estimated/transfers/amount
        /// </summary>
        /// <param name="transfers">Transaction transfers.</param>
        public EstimateTransferAmountTransactionRequest(IReadOnlyCollection <Transfer> transfers)
        {
            TransactionTransfersValidator.Validate(transfers);

            Transfers = transfers;
        }