hsd icon indicating copy to clipboard operation
hsd copied to clipboard

namestate: improve "stats" object for transfers, expiry and revoke

Open pinheadmz opened this issue 4 years ago • 4 comments

Adds an expired state to the "stats" object, refactors the toStats() method in namestate.js.

    "stats": {
      "blocksSinceExpired": 21
    }

pinheadmz avatar Feb 09 '21 00:02 pinheadmz

Coverage Status

coverage: 68.637% (+0.01%) from 68.623% when pulling 7da5443fd8246c40524abe99a9ff98711b0fcd28 on pinheadmz:expired1 into 4e87fb1db1bd99621f202eb93997be65aa7e8e23 on handshake-org:master.

coveralls avatar Feb 09 '21 01:02 coveralls

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
}

pinheadmz avatar Mar 26 '21 15:03 pinheadmz

@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

pinheadmz avatar Jun 11 '21 18:06 pinheadmz

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
    }
  }
}

pinheadmz avatar Mar 20 '22 18:03 pinheadmz

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.

nodech avatar Sep 26 '23 10:09 nodech