@@ -374,13 +374,14 @@ value. If not specified, the default value for an `includedCount` is 0.
374374
375375#### Free and node/network-exempt operations
376376
377- The ` free ` field applies to both transactions and queries. If ` free ` is ` true ` , the operation has no node, network, or
378- service fee; ` baseFee ` and ` extras ` are ignored.
377+ The ` free ` field applies to both transactions and queries, but only controls the service fee component. If ` free ` is
378+ ` true ` , the service ` baseFee ` and ` extras ` are ignored. The node and network fee components still apply unless
379+ ` nodeNetworkFeeExempt ` is also ` true ` .
379380
380381Some operations are paid through another mechanism or are privileged system operations. A service fee definition can
381382set ` nodeNetworkFeeExempt ` to ` true ` for these operations. In this case the node and network components are not charged,
382- but the configured service component still applies. If both ` free ` and ` nodeNetworkFeeExempt ` are ` true ` , ` free ` takes
383- precedence and the entire operation is free .
383+ but the configured service component still applies. An operation is entirely free only when both ` free ` and
384+ ` nodeNetworkFeeExempt ` are ` true ` .
384385
385386
386387### Unreadable Transactions
@@ -397,12 +398,13 @@ network owners to determine the appropriate price.
397398
398399### Queries
399400
400- The configuration for a query includes the ` free ` boolean field to indicate whether the query is free. If true, then no
401- fees are paid at all. If false, then the * node* , * network* , and * service* fees are defined as with transactions to
402- compute the cost of the query. A compliant implementation will create a ` CryptoTransfer ` transaction to submit to the
403- network to pay for the required fees. The ` node ` and ` network ` components are not listed in the transfer list, but they
404- are included in the ` transactionFee ` since they will be paid by the payer. The ` service ` fee will be included in a
405- transfer list to pay the node for whatever work was required for this query.
401+ The configuration for a query includes the ` free ` boolean field to indicate whether its service fee is waived. If true,
402+ the service ` baseFee ` and ` extras ` are ignored, but node and network fees still apply unless ` nodeNetworkFeeExempt ` is
403+ also true. Otherwise, the * node* , * network* , and * service* fees are defined as with transactions to compute the cost of
404+ the query. A compliant implementation will create a ` CryptoTransfer ` transaction to submit to the network to pay for
405+ the required fees. The ` node ` and ` network ` components are not listed in the transfer list, but they are included in the
406+ ` transactionFee ` since they will be paid by the payer. The ` service ` fee will be included in a transfer list to pay the
407+ node for whatever work was required for this query.
406408
407409``` json
408410{
@@ -456,11 +458,12 @@ The validation process checks the following, in any order:
456458 within a single list of extras.
4574598 . ** Service Definitions** : Each service in the ` services ` list must have a non-empty ` schedule ` list (at least one
458460 transaction or query defined).
459- 9 . ** Free Queries and Transactions** : If a transaction or query sets ` free ` to true, its ` baseFee ` and ` extras ` are
460- ignored during fee calculation, but they must still comply with all other validation rules if present (e.g., valid
461- types, non-negative values, valid references).
462- 10 . ** Node and Network Fee Exemption** : If ` nodeNetworkFeeExempt ` is true, only the service fee is charged. If ` free ` is
463- also true, ` free ` takes precedence.
461+ 9 . ** Free Queries and Transactions** : If a transaction or query sets ` free ` to true, its service ` baseFee ` and ` extras `
462+ are ignored, but node and network fees still apply. Any ignored fields must still comply with all other validation
463+ rules if present (e.g., valid types, non-negative values, valid references).
464+ 10 . ** Node and Network Fee Exemption** : If ` nodeNetworkFeeExempt ` is true, only the service fee is charged. The entire
465+ operation is free only when both ` free ` and ` nodeNetworkFeeExempt ` are true.
466+
464467### Schema
465468
466469The schema is defined in Protobuf. The wire format is JSON.
@@ -646,12 +649,15 @@ message ServiceFeeDefinition {
646649 */
647650 repeated ExtraFeeReference extras = 3;
648651 /**
649- * If true, then `base_fee` and `extras` are ignored, and the transaction or query
650- * will be free .
652+ * If true, then the service `base_fee` and `extras` are ignored. Node and network
653+ * fees still apply unless `node_network_fee_exempt` is also true .
651654 */
652655 bool free = 4;
653656
654- /** If true, omit node and network components but continue to charge the service component. */
657+ /**
658+ * If true, omit node and network components but continue to charge the service component.
659+ * If `free` is also true, the entire operation is free.
660+ */
655661 bool node_network_fee_exempt = 6;
656662}
657663
0 commit comments