TokenFeeScheduleUpdateTransaction - Test specification
Description:
This test specification for TokenFeeScheduleUpdateTransaction is to be one of many for testing the functionality of the Hedera SDKs. The SDK under test will use the language specific JSON-RPC server return responses back to the test driver.
Design:
Each test within the test specification is linked to one of the properties within TokenFeeScheduleUpdateTransaction. Each property is tested with a mix of boundaries. The inputs for each test are a range of valid, minimum, maximum, negative and invalid values for the method. The expected response of a passed test can be a correct error response code or seen as the result of node queries. A successful transaction (the transaction reached consensus and was applied to state) can be determined by getting a TransactionReceipt
or TransactionRecord
, or can be determined by using queries such as TokenInfoQuery
or TokenBalanceQuery
and investigating for the required changes (creations, updates, etc.). The mirror node can also be used to determine if a transaction was successful via its rest API. Error codes are obtained from the response code proto files.
Transaction properties:
https://docs.hedera.com/hedera/sdks-and-apis/sdks/token-service/update-a-fee-schedule
TokenFeeScheduleUpdate protobufs:
https://github.com/hashgraph/hedera-protobufs/blob/main/services/token_fee_schedule_update.proto
Response codes:
https://github.com/hashgraph/hedera-protobufs/blob/main/services/response_code.proto
Mirror Node APIs:
https://docs.hedera.com/hedera/sdks-and-apis/rest-api
JSON-RPC API Endpoint Documentation
Method Name
updateTokenFeeSchedule
Input Parameters
Parameter Name | Type | Required/Optional | Description/Notes |
---|---|---|---|
tokenId | string | optional | The ID of the token whose fee schedule shall be updated. |
customFees | list<json object> | optional | The new fees to be assessed during a transfer of the token. |
commonTransactionParams | json object | optional |
Output Parameters
Parameter Name | Type | Description/Notes |
---|---|---|
status | string | The status of the submitted TokenFeeScheduleUpdateTransaction (from a TransactionReceipt ). |
Additional Notes
The tests contained in this specification will assume that two valid tokens have already been successfully created. The tokens will be an immutable fungible token, and an immutable NFT with values of name="testname", symbol="testsymbol", treasuryAccountId=<OPERATOR_ACCOUNT_ID>, and feeScheduleKey=<VALID_KEY> (and tokenType="ft" or tokenType="nft", depending on the token. The NFT will also need supplyKey=<VALID_KEY>). The fungible token should also be created with a custom fixed fee with feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, and amount="10". Any <CREATED_FUNGIBLE_TOKEN_ID> tag is the ID of the first token, any <CREATED_NON_FUNGIBLE_TOKEN_ID> tag is the ID of the NFT. Any <CREATED_FUNGIBLE_TOKEN_KEY> tag is be the DER-encoded hex string of the fee schedule key of the fungible token, and any <CREATED_NON_FUNGIBLE_TOKEN_KEY> tag is the DER-encoded hex string of the fee schedule key of the NFT. Any <CREATED_NFT_SUPPLY_KEY> will be the supply key of the NFT.
Property Tests
Token ID:
- The ID of the token whose fee schedule shall be updated.
Test no | Name | Input | Expected response | Implemented (Y/N) |
---|---|---|---|---|
1 | Updates a token's fee schedule to be empty | tokenId=<CREATED_FUNGIBLE_TOKEN_ID> | The token fee schedule update succeeds and the token no longer has any custom fees. | Y |
2 | Updates a token's fee schedule to be empty when it is already empty | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID> | The token fee schedule update fails with an CUSTOM_SCHEDULE_ALREADY_HAS_NO_FEES response code from the network. | Y |
3 | Updates a token's fee schedule with a token ID that doesn't exist | tokenId="123.456.789" | The token fee schedule update fails with an INVALID_TOKEN_ID response code from the network. | Y |
4 | Updates a token's fee schedule with a token ID that isn't set | tokenId="" | The token fee schedule update fails with an SDK internal error. | Y |
5 | Updates a token's fee schedule with a token ID that is deleted | tokenId=<DELETED_TOKEN_ID> | The token fee schedule update fails with an TOKEN_WAS_DELETED response code from the network. | Y |
6 | Updates a token's fee schedule with no token ID | The token fee schedule update fails with an INVALID_TOKEN_ID response code from the network. | Y |
JSON Request Example
{
"jsonrpc": "2.0",
"id": 99232,
"method": "updateTokenFeeSchedule",
"params": {
"tokenId": "0.0.5088"
}
}
JSON Response Example
{
"jsonrpc": "2.0",
"id": 99232,
"result": {
"status": "SUCCESS"
}
}
Custom Fees:
- The new fees to be assessed during a transfer of the token.
Test no | Name | Input | Expected response | Implemented (Y/N) |
---|---|---|---|---|
1 | Updates a token's fee schedule with a fixed fee with an amount of 0 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="0"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
2 | Updates a token's fee schedule with a fixed fee with an amount of -1 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="-1"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
3 | Updates a token's fee schedule with a fixed fee with an amount of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="9223372036854775807"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fixed fee with an amount of 9,223,372,036,854,775,807. | Y |
4 | Updates a token's fee schedule with a fixed fee with an amount of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="9223372036854775806"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fixed fee with an amount of 9,223,372,036,854,775,806. | Y |
5 | Updates a token's fee schedule with a fixed fee with an amount of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="-9223372036854775808"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
6 | Updates a token's fee schedule with a fixed fee with an amount of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="-9223372036854775807"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
7 | Updates a token's fee schedule with a fractional fee with a numerator of 0 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="0", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
8 | Updates a token's fee schedule with a fractional fee with a numerator of -1 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="-1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
9 | Updates a token's fee schedule with a fractional fee with a numerator of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="9223372036854775807", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with an amount of 9,223,372,036,854,775,807 / 10. | Y |
10 | Updates a token's fee schedule with a fractional fee with a numerator of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="9223372036854775806", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with an amount of 9,223,372,036,854,775,806 / 10. | Y |
11 | Updates a token's fee schedule with a fractional fee with a numerator of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="-9223372036854775808", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
12 | Updates a token's fee schedule with a fractional fee with a numerator of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="-9223372036854775807", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
13 | Updates a token's fee schedule with a fractional fee with a denominator of 0 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="0", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a FRACTION_DIVIDES_BY_ZERO response code from the network. | Y |
14 | Updates a token's fee schedule with a fractional fee with a denominator of -1 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="-1", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
15 | Updates a token's fee schedule with a fractional fee with a denominator of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="9223372036854775807", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with an amount of 1 / 9,223,372,036,854,775,807. | Y |
16 | Updates a token's fee schedule with a fractional fee with a denominator of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="9223372036854775806", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with an amount of 1 / 9,223,372,036,854,775,806. | Y |
17 | Updates a token's fee schedule with a fractional fee with a denominator of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="-9223372036854775808", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
18 | Updates a token's fee schedule with a fractional fee with a denominator of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="-9223372036854775807", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
19 | Updates a token's fee schedule with a fractional fee with a minimum amount of 0 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="0", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with a minimum amount of 0. | Y |
20 | Updates a token's fee schedule with a fractional fee with a minimum amount of -1 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="-1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
21 | Updates a token's fee schedule with a fractional fee with a minimum amount of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="9223372036854775807", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a FRACTIONAL_FEE_MAX_AMOUNT_LESS_THAN_MIN_AMOUNT response code from the network. | Y |
22 | Updates a token's fee schedule with a fractional fee with a minimum amount of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="9223372036854775806", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a FRACTIONAL_FEE_MAX_AMOUNT_LESS_THAN_MIN_AMOUNT response code from the network. | Y |
23 | Updates a token's fee schedule with a fractional fee with a minimum amount of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="-9223372036854775808", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
24 | Updates a token's fee schedule with a fractional fee with a minimum amount of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="-9223372036854775807", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
25 | Updates a token's fee schedule with a fractional fee with a maximum amount of 0 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="0", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with a maximum amount of 0 (unlimited). | Y |
26 | Updates a token's fee schedule with a fractional fee with a maximum amount of -1 | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="-1", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
27 | Updates a token's fee schedule with a fractional fee with a maximum amount of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="9223372036854775807", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with a maximum amount of 9,223,372,036,854,775,807. | Y |
28 | Updates a token's fee schedule with a fractional fee with a maximum amount of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="9223372036854775806", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee with a maximum amount of 9,223,372,036,854,775,806. | Y |
29 | Updates a token's fee schedule with a fractional fee with a maximum amount of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="-9223372036854775808", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
30 | Updates a token's fee schedule with a fractional fee with a maximum amount of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="-9223372036854775807", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
31 | Updates a NFT's fee schedule with a royalty fee with a numerator of 0 | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="0", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
32 | Updates a NFT's fee schedule with a royalty fee with a numerator of -1 | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="-1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
33 | Updates a NFT's fee schedule with a royalty fee with a numerator of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="9223372036854775807", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a ROYALTY_FRACTION_CANNOT_EXCEED_ONE response code from the network. | Y |
34 | Updates a NFT's fee schedule with a royalty fee with a numerator of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="9223372036854775806", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a ROYALTY_FRACTION_CANNOT_EXCEED_ONE response code from the network. | Y |
35 | Updates a NFT's fee schedule with a royalty fee with a numerator of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="-9223372036854775808", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
36 | Updates a NFT's fee schedule with a royalty fee with a numerator of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="-9223372036854775807", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
37 | Updates a NFT's fee schedule with a royalty fee with a denominator of 0 | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="0", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a FRACTION_DIVIDES_BY_ZERO response code from the network. | Y |
38 | Updates a NFT's fee schedule with a royalty fee with a denominator of -1 | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="-1", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
39 | Updates a NFT's fee schedule with a royalty fee with a denominator of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="9223372036854775807", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom royalty fee with an amount of 1 / 9,223,372,036,854,775,807. | Y |
40 | Updates a NFT's fee schedule with a royalty fee with a denominator of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="9223372036854775806", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom royalty fee with an amount of 1 / 9,223,372,036,854,775,806. | Y |
41 | Updates a NFT's fee schedule with a royalty fee with a denominator of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="-9223372036854775808", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
42 | Updates a NFT's fee schedule with a royalty fee with a denominator of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="-9223372036854775807", royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
43 | Updates a NFT's fee schedule with a royalty fee with a fallback fee with an amount of 0 | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="0"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
44 | Updates a NFT's fee schedule with a royalty fee with a fallback fee with an amount of -1 | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="-1"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
45 | Updates a NFT's fee schedule with a royalty fee with a fallback fee with an amount of 9,223,372,036,854,775,807 (int64 max) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="9223372036854775807"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom royalty fee with a fallback fee with an amount of 9,223,372,036,854,775,807. | Y |
46 | Updates a NFT's fee schedule with a royalty fee with a fallback fee with an amount of 9,223,372,036,854,775,806 (int64 max - 1) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="9223372036854775806"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom royalty fee with a fallback fee with an amount of 9,223,372,036,854,775,806. | Y |
47 | Updates a NFT's fee schedule with a royalty fee with a fallback fee with an amount of -9,223,372,036,854,775,808 (int64 min) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="-9223372036854775808"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
48 | Updates a NFT's fee schedule with a royalty fee with a fallback fee with an amount of -9,223,372,036,854,775,807 (int64 min + 1) | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.amount="-9223372036854775807"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEE_MUST_BE_POSITIVE response code from the network. | Y |
49 | Updates a token's fee schedule with a fixed fee with a fee collector account that doesn't exist | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId="123.456.789", feeCollectorsExempt=false, fixedFee.amount="10"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an INVALID_CUSTOM_FEE_COLLECTOR response code from the network. | Y |
50 | Updates a token's fee schedule with a fractional with a fee collector account that doesn't exist | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId="123.456.789", feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an INVALID_CUSTOM_FEE_COLLECTOR response code from the network. | Y |
51 | Updates a NFT's fee schedule with a royalty fee with a fee collector account that doesn't exist | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId="123.456.789", feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, royaltyFee.fallbackFee.feeCollectorsExempt=false, royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an INVALID_CUSTOM_FEE_COLLECTOR response code from the network. | Y |
52 | Updates a token's fee schedule with a fixed fee with an empty fee collector account | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId="", feeCollectorsExempt=false, fixedFee.amount="10"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an SDK internal error. | Y |
53 | Updates a token's fee schedule with a fractional with an empty fee collector account | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId="", feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an SDK internal error. | Y |
54 | Updates a NFT's fee schedule with a royalty fee with an empty fee collector account | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId="", feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, royaltyFee.fallbackFee.feeCollectorsExempt=false, royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an SDK internal error. | Y |
55 | Updates a token's fee schedule with a fixed fee with a deleted fee collector account | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<DELETED_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="10"}], commonTransactionParams.signers=[<DELETED_ACCOUNT_PRIVATE_KEY>] | The token fee schedule update fails with a INVALID_CUSTOM_FEE_COLLECTOR response code from the network. | Y |
56 | Updates a token's fee schedule with a fractional fee with a deleted fee collector account | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<DELETED_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<DELETED_ACCOUNT_PRIVATE_KEY>] | The token fee schedule update fails with a INVALID_CUSTOM_FEE_COLLECTOR response code from the network. | Y |
57 | Updates a NFT's fee schedule with a royalty fee with a deleted fee collector account | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<DELETED_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, royaltyFee.fallbackFee.feeCollectorsExempt=false, royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>, <DELETED_ACCOUNT_PRIVATE_KEY>] | The token fee schedule update fails with a INVALID_CUSTOM_FEE_COLLECTOR response code from the network. | Y |
58 | Updates a token's fee schedule with a fixed fee that is assessed with a token that doesn't exist | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="10", fixedFee.denominatingTokenId="123.456.789"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a INVALID_TOKEN_ID_IN_CUSTOM_FEES response code from the network. | Y |
59 | Updates a token's fee schedule with a fixed fee that is assessed with an empty token | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="10", fixedFee.denominatingTokenId=""}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with an SDK internal error. | Y |
60 | Updates a token's fee schedule with a fixed fee that is assessed with a deleted token | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="10", fixedFee.denominatingTokenId=<DELETED_TOKEN_ID>}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a INVALID_TOKEN_ID_IN_CUSTOM_FEES response code from the network. | Y |
61 | Updates a token's fee schedule with a fractional fee that is assessed to the receiver | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="exclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update succeeds and the token has the custom fractional fee that is assessed to the receiver. | Y |
62 | Updates a fungible token's fee schedule with a royalty fee | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, royaltyFee.numerator="1", royaltyFee.denominator="10", royaltyFee.fallbackFee.feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, royaltyFee.fallbackFee.feeCollectorsExempt=false, royaltyFee.fallbackFee.amount="10"}], commonTransactionParams.signers=[<CREATED_NON_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_ROYALTY_FEE_ONLY_ALLOWED_FOR_NON_FUNGIBLE_UNIQUE response code from the network. | Y |
63 | Updates a NFT's fee schedule with a fractional fee | tokenId=<CREATED_NON_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fractionalFee.numerator="1", fractionalFee.denominator="10", fractionalFee.minimumAmount="1", fractionalFee.maximumAmount="10", fractionalFee.assessmentMethod="inclusive"}], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FRACTIONAL_FEE_ONLY_ALLOWED_FOR_FUNGIBLE_COMMON response code from the network. | Y |
64 | Updates a token's fee schedule with more than the maximum amount of fees allowed | tokenId=<CREATED_FUNGIBLE_TOKEN_ID>, customFees=[{feeCollectorAccountId=<OPERATOR_ACCOUNT_ID>, feeCollectorsExempt=false, fixedFee.amount="10"} ... (x11)], commonTransactionParams.signers=[<CREATED_FUNGIBLE_TOKEN_KEY>] | The token fee schedule update fails with a CUSTOM_FEES_LIST_TOO_LONG response code from the network. | Y |
JSON Request Example
{
"jsonrpc": "2.0",
"id": 12,
"method": "updateTokenFeeSchedule",
"params": {
"tokenId": "0.0.982",
"customFees": [
{
"feeCollectorAccountId": "0.0.2",
"feeCollectorsExempt": false,
"fee": {
"amount": "10",
"denominatingTokenId": "0.0.10"
}
}
]
}
}
JSON Response Example
{
"jsonrpc": "2.0",
"id": 12,
"result": {
"tokenId": "0.0.541",
"status": "SUCCESS"
}
}