TokenRevokeKycTransaction - Test specification
Description:
This test specification for TokenRevokeKycTransaction 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 TokenRevokeKycTransaction. 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 AccountBalanceQuery 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/disable-kyc-account-flag
TokenRevokeKyc protobufs:
https://github.com/hashgraph/hedera-protobufs/blob/main/services/token_revoke_kyc.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
revokeTokenKyc
Input Parameters
| Parameter Name | Type | Required/Optional | Description/Notes |
|---|---|---|---|
| tokenId | string | optional | The ID of the token of which to revoke KYC. |
| accountId | string | optional | The ID of the account to which to revoke KYC. |
| commonTransactionParams | json object | optional |
Output Parameters
| Parameter Name | Type | Description/Notes |
|---|---|---|
| status | string | The status of the submitted TokenRevokeKycTransaction (from a TransactionReceipt). |
Additional Notes
The tests contained in this specification will assume that a valid account has been granted KYC for a valid token. <CREATED_ACCOUNT_ID> will denote the ID of the account, and <CREATED_ACCOUNT_PRIVATE_KEY> will denote the private key of the created account as a DER-encoded hex string. <CREATED_TOKEN_ID> will denote the ID of the created token, <CREATED_TOKEN_KYC_KEY> will denote the KYC key of the token as a DER-encoded hex string, and <CREATED_TOKEN_ADMIN_KEY> will denote the admin key of the token as a DER-encoded hex string.
Property Tests
Token ID:
- The ID of the token of which to revoke KYC.
| Test no | Name | Input | Expected response | Implemented (Y/N) |
|---|---|---|---|---|
| 1 | Revokes KYC of a token to an account | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token revokes KYC to the account. | Y |
| 2 | Revokes KYC of a token that doesn't exist to an account | tokenId="123.456.789", accountId=<CREATED_ACCOUNT_ID> | The token KYC revoke fails with an INVALID_TOKEN_ID response code from the network. | Y |
| 3 | Revokes KYC of a token with an empty token ID to an account | tokenId="", accountId=<CREATED_ACCOUNT_ID> | The token KYC revoke fails with an SDK internal error. | Y |
| 4 | Revokes KYC of a token with no token ID to an account | accountId=<CREATED_ACCOUNT_ID> | The token KYC revoke fails with an INVALID_TOKEN_ID response code from the network. | Y |
| 5 | Revokes KYC of a deleted token to an account | tokenId=<DELETED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<DELETED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an TOKEN_WAS_DELETED response code from the network. | Y |
| 6 | Revokes KYC of a token to an account without signing with the token's KYC key | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID> | The token KYC revoke fails with an INVALID_SIGNATURE response code from the network. | Y |
| 7 | Revokes KYC of a token to an account but signs with the the token's admin key | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_ADMIN_KEY>] | The token KYC revoke fails with an INVALID_SIGNATURE response code from the network. | Y |
| 8 | Revokes KYC of a token to an account but signs with an incorrect private key | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<INCORRECT_VALID_PRIVATE_KEY>] | The token KYC revoke fails with an INVALID_SIGNATURE response code from the network. | Y |
| 9 | Revokes KYC of a token with no KYC key to an account | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID> | The token KYC revoke fails with an TOKEN_HAS_NO_KYC_KEY response code from the network. | Y |
| 10 | Revokes KYC of a token to an account that doesn't have KYC | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token revokes KYC to the account. | Y |
| 11 | Revokes KYC of a token to an account that is not associated with the token | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an TOKEN_NOT_ASSOCIATED_TO_ACCOUNT response code from the network. | Y |
| 12 | Revokes KYC of a paused token to an account | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an TOKEN_IS_PAUSED response code from the network. | Y |
| 13 | Revokes KYC of a token to a frozen account | tokenId=<CREATED_TOKEN_ID>, accountId=<CREATED_ACCOUNT_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an ACCOUNT_FROZEN_FOR_TOKEN response code from the network. | Y |
JSON Request Example
{
"jsonrpc": "2.0",
"id": 64362,
"method": "revokeTokenKyc",
"params": {
"tokenId": "0.0.15432",
"accountId": "0.0.53848",
"commonTransactionParams": {
"signers": [
"302E020100300506032B657004220420DE6788D0A09F20DED806F446C02FB929D8CD8D17022374AFB3739A1D50BA72C8"
]
}
}
}
JSON Response Example
{
"jsonrpc": "2.0",
"id": 64362,
"result": {
"status": "SUCCESS"
}
}
Account ID:
- The ID of the account to which to revoke KYC.
| Test no | Name | Input | Expected response | Implemented (Y/N) |
|---|---|---|---|---|
| 1 | Revokes KYC of a token to an account that doesn't exist | tokenId=<CREATED_TOKEN_ID>, accountId="123.456.789", commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an INVALID_ACCOUNT_ID response code from the network. | Y |
| 2 | Revokes KYC of a token to an empty account ID | tokenId=<CREATED_TOKEN_ID>, accountId="", commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an SDK internal error. | Y |
| 3 | Revokes KYC of a token to an account with no account ID | tokenId=<CREATED_TOKEN_ID>, commonTransactionParams.signers=[<CREATED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an INVALID_ACCOUNT_ID response code from the network. | Y |
| 4 | Revokes KYC of a token to a deleted account | tokenId=<CREATED_TOKEN_ID>, accountId=<DELETED_ACCOUNT_ID>, commonTransactionParams.signers=[<DELETED_TOKEN_KYC_KEY>] | The token KYC revoke fails with an ACCOUNT_DELETED response code from the network. | Y |
JSON Request Example
{
"jsonrpc": "2.0",
"id": 64362,
"method": "revokeTokenKyc",
"params": {
"tokenId": "0.0.15432",
"accountId": "0.0.53848",
"commonTransactionParams": {
"signers": [
"302E020100300506032B657004220420DE6788D0A09F20DED806F446C02FB929D8CD8D17022374AFB3739A1D50BA72C8"
]
}
}
}
JSON Response Example
{
"jsonrpc": "2.0",
"id": 64362,
"result": {
"status": "SUCCESS"
}
}