hsd
hsd copied to clipboard
namestate: improve "stats" object for transfers, expiry and revoke
Adds an expired state to the "stats" object, refactors the toStats() method in namestate.js.
"stats": {
"blocksSinceExpired": 21
}
coverage: 68.637% (+0.01%) from 68.623% when pulling 7da5443fd8246c40524abe99a9ff98711b0fcd28 on pinheadmz:expired1 into 4e87fb1db1bd99621f202eb93997be65aa7e8e23 on handshake-org:master.
Added ed85a06aa14290349923c272a01bf72a7900ac4e which checks for REVOKE first before expire. The stats field now progresses like below. I decided to keep some of the negative number outputs since I don't want to break the API and there might be applications that check for negative numbers to know when its "ok to finalize", etc.
before transfer:
{
renewalPeriodStart: 72,
renewalPeriodEnd: 5072,
blocksUntilExpire: 4975,
daysUntilExpire: 34.55
}
after transfer:
{
renewalPeriodStart: 72,
renewalPeriodEnd: 5072,
blocksUntilExpire: 4974,
daysUntilExpire: 34.54,
transferLockupStart: 98,
transferLockupEnd: 108,
blocksUntilValidFinalize: 10,
hoursUntilValidFinalize: 1.67
}
before expire:
{
renewalPeriodStart: 72,
renewalPeriodEnd: 5072,
blocksUntilExpire: 1,
daysUntilExpire: 0.01,
transferLockupStart: 98,
transferLockupEnd: 108,
blocksUntilValidFinalize: -4963,
hoursUntilValidFinalize: -827.17
}
after expire:
{ blocksSinceExpired: 0 }
after revoke before reopen:
{
revokePeriodStart: 109,
revokePeriodEnd: 174,
blocksUntilReopen: 65,
hoursUntilReopen: 10.83
}
after revoke after reopen:
{
revokePeriodStart: 109,
revokePeriodEnd: 174,
blocksUntilReopen: 0,
hoursUntilReopen: 0
}
after revoke after what would be expire:
{
revokePeriodStart: 109,
revokePeriodEnd: 174,
blocksUntilReopen: -4935,
hoursUntilReopen: -822.5
}
@nodech you're right on about negative blocksUntilExpire, I had a bug given that claimed names don't expire until the 4-year claim period is over. That is fixed in f82f783e394f06cf7fccbd6c7877ac583314b25e
I just realized hsd has never reported expiration date correctly for reserved names. A reserved name does not expire until AFTER the reserved name period if over (four years). The logic can be seen in namestate.isExpired():
https://github.com/handshake-org/hsd/blob/107ed2be9280bb4292d21330e7d1ace62da9a002/lib/covenants/namestate.js#L208-L218
(note the typo in the comment, line 212 should say "two years")
However, this API tells me that the reserved name torrentfreak will expire in less than two months:
# hsd-rpc getnameinfo torrentfreak
{
"start": {
"reserved": true,
"week": 17,
"start": 19152
},
"info": {
"name": "torrentfreak",
"nameHash": "ea821088b72047a89e1defa25f91194760493a6c2070a289fa8c9a73c6428861",
"state": "CLOSED",
"height": 5670,
"renewal": 15104,
"owner": {
"hash": "b2e9a0a48438ca58050a8b77cb1ebb6d8c1767c2de24135b33431501f46f3863",
"index": 0
},
"value": 0,
"highest": 0,
"data": "0001036e733103646e73046c6976650001036e7332c00601036e7333c00606011a723d68747470733a2f2f746f7272656e74667265616b2e636f6d0601316e61636c3d527774776f3750472b736b6233356d6c6d6f7a32756356457677355063304b495855434a594d5a6833766b3d",
"transfer": 0,
"revoked": 0,
"claimed": 1,
"renewals": 0,
"registered": true,
"expired": false,
"weak": true,
"stats": {
"renewalPeriodStart": 15104,
"renewalPeriodEnd": 120224,
"blocksUntilExpire": 8057,
"daysUntilExpire": 55.95
}
}
}
Fixed expire date as it needs to be: Max(claimPeriodEnd, normal end). If claimed name has been transferred or renewed, it wont expire on claim period end, instead when it should normally expire. But if it has not been transfer/renewed then it will expire on claimPeriod end.