Msg/Cancel
Credits can be cancelled by the owner:
- when the credit batch exists
- when the owner has a tradable credit balance greater than or equal to the amount to cancel
- when the decimal places in amount to cancel does not exceed credit type precision
- the owner credit balance is updated
- the batch supply is updated
The credit batch must exist
the credit batch exists
Given a credit batch with denom "C01-001-20200101-20210101-001"
And alice owns tradable credits with batch denom "C01-001-20200101-20210101-001"
When alice attempts to cancel credits with batch denom "C01-001-20200101-20210101-001"
Then expect no error.
the credit batch does not exist
When alice attempts to cancel credits with batch denom "C01-001-20200101-20210101-001"
Then expect the error "could not get batch with denom C01-001-20200101-20210101-001: not found: invalid request".
The owner must have a tradable credit balance greater that or equal to the amount to cancel
Background
Given a credit batch
And alice owns tradable credit amount "10".
tradable balance greater than or equal to amount to cancel
When alice attempts to cancel credit amount "[amount]"
Then expect no error.
Examples
description | amount |
---|---|
greater than | 5 |
equal to | 10 |
tradable balance less than amount to cancel
When alice attempts to cancel credit amount "15"
Then expect the error "tradable balance: 10, cancel amount 15: insufficient credit balance".
The decimal places in amount to cancel must not exceed credit type precision
Background
Given a credit type with abbreviation "C" and precision "6"
And a credit batch from credit class with credit type "C"
And alice owns tradable credit amount "10".
the decimal places in amount is less than or equal to credit type precision
When alice attempts to cancel credit amount "[amount]"
Then expect no error.
Examples
description | amount |
---|---|
less than | 9.12345 |
equal to | 9.123456 |
the decimal places in amount is greater than credit type precision
When alice attempts to cancel credit amount "9.1234567"
Then expect the error "9.1234567 exceeds maximum decimal places: 6: invalid request".
The owner balance is updated
the owner balance is updated
Given a credit batch
And alice has the batch balance
{
"retired_amount": "0",
"tradable_amount": "10",
"escrowed_amount": "0"
}
When alice attempts to cancel credit amount "10"
Then expect alice batch balance
{
"retired_amount": "0",
"tradable_amount": "0",
"escrowed_amount": "0"
}
The batch supply is updated
the batch supply is updated
Given a credit batch
And alice owns tradable credit amount "10"
And the batch supply
{
"retired_amount": "0",
"tradable_amount": "10",
"cancelled_amount": "0"
}
When alice attempts to cancel credit amount "10"
Then expect batch supply
{
"retired_amount": "0",
"tradable_amount": "0",
"cancelled_amount": "10"
}
Event is emitted
EventCancel is emitted
Given a credit batch with denom "C01-001-20200101-20210101-001"
And alice's address "regen15406g34dl5v9780tx2q3vtjdpkdgq4hhegdtm9"
And alice owns tradable credit amount "10"
And the batch supply
{
"retired_amount": "0",
"tradable_amount": "10",
"cancelled_amount": "0"
}
When alice attempts to cancel credit amount "10" with reason "transferring credits to another registry"
Then expect event with properties
{
"owner": "regen15406g34dl5v9780tx2q3vtjdpkdgq4hhegdtm9",
"batch_denom": "C01-001-20200101-20210101-001",
"amount": "10",
"reason": "transferring credits to another registry"
}