-
Notifications
You must be signed in to change notification settings - Fork 217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Temporarily blacklist bad actors when fetching pools metadata #1801
Conversation
This is sort of temporary, until we get SMASH doing this for us. The solution isn't 100% ideal as we are keeping an every growing map in memory, but it should remain within reasonable bounds until we get this deferred to the aggregation server.
Turns out that, despite what's mentioned in the documentation, put doesn't really 'put', but does actually 'insert' and throws when the primary key already exists..
…d 'ignored hashes'
fetchMetadata url hash >>= \case | ||
Left msg -> Nothing <$ do | ||
traceWith tr $ MsgFetchPoolMetadataFailure hash msg | ||
modifyIORef rebels (Map.insertWith (+) hash 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about adding a MsgWillStartIgnoringMetadata Url
trace for when the new value is >= 3
?
Even if we have SMASH, won't we still still need to deal with failing metadata requests? I don't know what the final API will be, but metadata requests would surely result in one of the following:
For any registered stake pools, we would need to record the failures in the db, so that they can be appropriately retried at the right time (exponential backoff) -- or not retried in the case of permanent failure. |
It's sort of hard to consider something as "permanently failed" in this context though. Because a metadata is invalid or has a wrong hash, doesn't mean it'll still be invalid tomorrow. My original intent was to retry, up to a certain number of times per hour or so. I went for now for a "staightforward" way. Something more complex would require indeed storing some state in the database. As for the SMASH API see: https://redocly.github.io/redoc/?url=https://gist.githubusercontent.com/KtorZ/4ee1bf8136c91f2d4c36ed850023cab6/raw/0dece6cd60dc13a7a523f99b7efe95beafad6a90/metadata.yaml |
…erface We'll simply store the time a metadata was last fetched. If it was too recent, we'll ignore it and it'll eventually be retried.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- We don't build an ever-growing map in memory
- It's URL-centric (instead of hash-centric, so that the same hash will be retried if fetched from another URL)
- It retry every hour, and not on every restart, so the system doesn't need to restart to operate correctly
- Also somewhat easier to understand / follow conceptually
sounds good
Couldn't we just as well use a retry_at
instead of lastFetchedAt
and be able to have exponential backoff that way?
, "(" | ||
, "SELECT", metadataUrl | ||
, "FROM", fetchAttempts | ||
, "WHERE", lastFetchedAt, ">=", "datetime('now', '-1 hours')" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👌
@@ -275,9 +288,20 @@ newDBLayer trace fp = do | |||
|
|||
rights . fmap safeCast <$> rawSql query [] | |||
|
|||
, putFetchAttempt = \(url, hash) -> do | |||
-- NOTE | |||
-- assuming SQLite has the same notion of "now" that the host system. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I certainly hope they can't use different timezones, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well, since they're both (the database and the server) on the same host system, I'd assume they both have the same clock.
bors r+ |
1801: Temporarily blacklist bad actors when fetching pools metadata r=KtorZ a=KtorZ # Issue Number <!-- Put here a reference to the issue this PR relates to and which requirements it tackles --> #1794 (sort of.. fixed while fixing other stuff on this issue) # Overview <!-- Detail in a few bullet points the work accomplished in this PR --> - 8085f82b7352cf2912f41812af422e543ef0a9c9 :round_pushpin: **add a non-null key deposit to genesis, and account for it for launching pools** - 8240a15c825fab379b5fe3baaee259b3803bddc6 :round_pushpin: **account for key deposit when registering a stake key** This is.. tricky, because the deposit is sort of implicit but, because of the dual support with Jörmungandr, we have to treat it as a fee. So, there's a bit of weird logic / work-around when creating the actual transaction. - 285d0275c0459bb3012bdc213f700ddc7484a7b5 :round_pushpin: **fix fee calculation for Shelley** - using 28-byte hash length for key hashes - adding certificate witnesses to the estimation - a77fa02a4ff89623771d20f50b0df51624602bbd :round_pushpin: **give deposit back when de-registing a stake key** - 0784356986b4df2b4fa46a87d087ae9fe0d6fb75 :round_pushpin: **adjust test scenarios according to recent API changes** # Comments <!-- Additional comments or screenshots to attach if any --> Latest sync from the Shelley testnet: <details> <summary>expand stake-pools.json</summary> ```json [ { "metrics": { "saturation": 0.5481998791974432, "non_myopic_member_rewards": { "quantity": 6178, "unit": "lovelace" }, "produced_blocks": { "quantity": 41, "unit": "block" }, "relative_stake": { "quantity": 1.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "d4beb3a9d58e73610f483722bb62080555c7e9bc16f115dde17e7394" }, { "metrics": { "saturation": 1.0968040458177348, "non_myopic_member_rewards": { "quantity": 5554, "unit": "lovelace" }, "produced_blocks": { "quantity": 73, "unit": "block" }, "relative_stake": { "quantity": 2.19, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 4.2, "unit": "percent" }, "id": "1fd1450ad92fc024235e2bf908a9b178a6e13f2e653ff0dec5414c46" }, { "metrics": { "saturation": 1.1977134940469978, "non_myopic_member_rewards": { "quantity": 5487, "unit": "lovelace" }, "produced_blocks": { "quantity": 35, "unit": "block" }, "relative_stake": { "quantity": 2.4, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "a26e7dda3b8ac6d528153d4af0252b1ee08448baeef73a2e23fb7351" }, { "metrics": { "saturation": 0.49563844883411096, "non_myopic_member_rewards": { "quantity": 2282, "unit": "lovelace" }, "produced_blocks": { "quantity": 34, "unit": "block" }, "relative_stake": { "quantity": 0.99, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 7.5, "unit": "percent" }, "id": "0f05b8ed9cde67aaf2515b0e4d3868bdbc30c838c2e5e7295f40910f" }, { "metrics": { "saturation": 0.14984397131257626, "non_myopic_member_rewards": { "quantity": 1784, "unit": "lovelace" }, "produced_blocks": { "quantity": 32, "unit": "block" }, "relative_stake": { "quantity": 0.3, "unit": "percent" } }, "cost": { "quantity": 314159265, "unit": "lovelace" }, "margin": { "quantity": 4.2, "unit": "percent" }, "metadata": { "homepage": "https://smaug.pool.pm", "name": "Smaug", "ticker": "SM₳UG", "description": "Smaug's Mighty Ada Under Guard" }, "id": "31d6318b3a718528a8139c3ce3b827062dc119e7d8d420d0696070d2" }, { "metrics": { "saturation": 0.15134210461596592, "non_myopic_member_rewards": { "quantity": 1445, "unit": "lovelace" }, "produced_blocks": { "quantity": 18, "unit": "block" }, "relative_stake": { "quantity": 0.3, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "9183b00e91f840fd7c3f197625fb88bcc54b6ce515c185d592f0db1e" }, { "metrics": { "saturation": 0.176765320004422, "non_myopic_member_rewards": { "quantity": 1433, "unit": "lovelace" }, "produced_blocks": { "quantity": 15, "unit": "block" }, "relative_stake": { "quantity": 0.35, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 2.5, "unit": "percent" }, "id": "18ee43eab865d88a249590d9910a205d4f728e6dc1cf41d832c388c3" }, { "metrics": { "saturation": 5.0610631320784916e-2, "non_myopic_member_rewards": { "quantity": 1374, "unit": "lovelace" }, "produced_blocks": { "quantity": 2, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 100000, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "56586e20994d9f54945faa6a345459143bca41dd55fefdd458504de5" }, { "metrics": { "saturation": 0.997018528424682, "non_myopic_member_rewards": { "quantity": 1148, "unit": "lovelace" }, "produced_blocks": { "quantity": 49, "unit": "block" }, "relative_stake": { "quantity": 1.99, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 80, "unit": "percent" }, "id": "b986299e73d1402d6feb795fceb9f95bd368779ed8bd129ab9a71228" }, { "metrics": { "saturation": 0.9970135596530818, "non_myopic_member_rewards": { "quantity": 825, "unit": "lovelace" }, "produced_blocks": { "quantity": 3, "unit": "block" }, "relative_stake": { "quantity": 1.99, "unit": "percent" } }, "cost": { "quantity": 3000000, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "2ed21c71130613456da4494ca533b3dbcd300ae9d2789320fae13369" }, { "metrics": { "saturation": 0.29896553910174944, "non_myopic_member_rewards": { "quantity": 639, "unit": "lovelace" }, "produced_blocks": { "quantity": 64, "unit": "block" }, "relative_stake": { "quantity": 0.6, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "3e5af6a9aa2d8b397249ccc6b87f9a2308fc51285ef2039d605c391c" }, { "metrics": { "saturation": 9.947885016467178e-2, "non_myopic_member_rewards": { "quantity": 589, "unit": "lovelace" }, "produced_blocks": { "quantity": 13, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 34, "unit": "percent" }, "id": "5c744c8d9695ced9ed65a8c5f9b4562f2521302f2c512098a5a227d0" }, { "metrics": { "saturation": 5.111791053609486e-2, "non_myopic_member_rewards": { "quantity": 573, "unit": "lovelace" }, "produced_blocks": { "quantity": 23, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "f2d15ec99cdf9c431be770e03c51055c61f21d2865e5c5ba48b3e10b" }, { "metrics": { "saturation": 0.14792764926421256, "non_myopic_member_rewards": { "quantity": 550, "unit": "lovelace" }, "produced_blocks": { "quantity": 10, "unit": "block" }, "relative_stake": { "quantity": 0.3, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 4.2, "unit": "percent" }, "id": "6dcfbb0990f8af1624281d02f495e7a551cdf27ce5ae8607e3af12f1" }, { "metrics": { "saturation": 0.797559287094798, "non_myopic_member_rewards": { "quantity": 546, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1.6, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "2c7f23f41eeb1cb6bc0ed87709b7ae3e0e8f843829bd5f30fbb9a40f" }, { "metrics": { "saturation": 4.9615925874727004e-2, "non_myopic_member_rewards": { "quantity": 522, "unit": "lovelace" }, "produced_blocks": { "quantity": 6, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 7.9, "unit": "percent" }, "id": "54154152c7b813b4c38aa04dc3905b0edfe36e979503b51e2934aa80" }, { "metrics": { "saturation": 0.24957519788191773, "non_myopic_member_rewards": { "quantity": 521, "unit": "lovelace" }, "produced_blocks": { "quantity": 24, "unit": "block" }, "relative_stake": { "quantity": 0.5, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "ecf6b04b8ae5a4aea4b852dc2176ffbcf085f4ac2baed44ab7a3a12f" }, { "metrics": { "saturation": 9.947202300464533e-2, "non_myopic_member_rewards": { "quantity": 520, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 6.4, "unit": "percent" }, "id": "1c074aeb933fa0d2f9c2cc1b2b07fd951ee4f301e1576e1ac3389749" }, { "metrics": { "saturation": 9.947622246122445e-2, "non_myopic_member_rewards": { "quantity": 513, "unit": "lovelace" }, "produced_blocks": { "quantity": 11, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 7, "unit": "percent" }, "id": "4110f904afadefcd6473060b29a3c41e046e87899f4f5e7c42a31364" }, { "metrics": { "saturation": 4.9613179424195526e-2, "non_myopic_member_rewards": { "quantity": 509, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "7aaeaff44f679606fdae5de8af690637388702a3d0974686071c235e" }, { "metrics": { "saturation": 4.961501030661537e-2, "non_myopic_member_rewards": { "quantity": 507, "unit": "lovelace" }, "produced_blocks": { "quantity": 11, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 3, "unit": "percent" }, "id": "381ddf958482db38225a678e7ade4809890be4b57d584777024965b0" }, { "metrics": { "saturation": 4.961345084474871e-2, "non_myopic_member_rewards": { "quantity": 504, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "f68fdaf68a5b82b950f856ebcfa304e5f13ebf9a74148a3b0a93ee54" }, { "metrics": { "saturation": 9.947160808195128e-2, "non_myopic_member_rewards": { "quantity": 500, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "5484d568b19781393ffaca0bfb679d624d3ca6e93336ca51b5af7a71" }, { "metrics": { "saturation": 4.961345084474871e-2, "non_myopic_member_rewards": { "quantity": 493, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "fa942b04004930190d19dd09b04228a417745061a6e231a21ebb22bb" }, { "metrics": { "saturation": 9.997552819971423e-2, "non_myopic_member_rewards": { "quantity": 489, "unit": "lovelace" }, "produced_blocks": { "quantity": 5, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "fa278a3295ddaf540b4bba061fd8e08aa7f96bc98fa55b1b8bead314" }, { "metrics": { "saturation": 0.24906676468235833, "non_myopic_member_rewards": { "quantity": 482, "unit": "lovelace" }, "produced_blocks": { "quantity": 18, "unit": "block" }, "relative_stake": { "quantity": 0.5, "unit": "percent" } }, "cost": { "quantity": 111, "unit": "lovelace" }, "margin": { "quantity": 19, "unit": "percent" }, "id": "0c9cad9269275e0653bd8a3e9c398c088e05617c99def2bc07abd906" }, { "metrics": { "saturation": 0.2854502919363371, "non_myopic_member_rewards": { "quantity": 449, "unit": "lovelace" }, "produced_blocks": { "quantity": 41, "unit": "block" }, "relative_stake": { "quantity": 0.57, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "60b481b4fb5d84ce201e91e27b54311ba368420f43361179466e95e9" }, { "metrics": { "saturation": 0, "non_myopic_member_rewards": { "quantity": 279, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 0, "unit": "percent" }, "id": "b0d189a147ed237930375a105ee36ef98b818c418db0c4b9e019304a" }, { "metrics": { "saturation": 4.9613452226955075e-2, "non_myopic_member_rewards": { "quantity": 276, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 2000, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "238fc609ff28afb78001e3a7acc97f8bef66c16bcd704ed8bd0ac264" }, { "metrics": { "saturation": 5.011615717340393e-2, "non_myopic_member_rewards": { "quantity": 275, "unit": "lovelace" }, "produced_blocks": { "quantity": 9, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 10000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "b66d6a913f5c720a9a36fd02d6e30031ff801325c281cd129015ed45" }, { "metrics": { "saturation": 2.488475261073726e-4, "non_myopic_member_rewards": { "quantity": 273, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 100, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "7abbbdf99b2c0b7d589f40fa2fbf08a4c0973082f0196a3a76ee0d12" }, { "metrics": { "saturation": 0.2021936987344572, "non_myopic_member_rewards": { "quantity": 265, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.4, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "423216e0ca0468497b822d21821d0edf86e98da9d3040389014374be" }, { "metrics": { "saturation": 4.9115208353547046e-2, "non_myopic_member_rewards": { "quantity": 170, "unit": "lovelace" }, "produced_blocks": { "quantity": 3, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 1000000, "unit": "lovelace" }, "margin": { "quantity": 50, "unit": "percent" }, "id": "97d4fc7f7fccced6c537cc671eda263eb881618476c961d5c9116809" }, { "metrics": { "saturation": 0.5238115445191317, "non_myopic_member_rewards": { "quantity": 163, "unit": "lovelace" }, "produced_blocks": { "quantity": 15, "unit": "block" }, "relative_stake": { "quantity": 1.05, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "14438e3f7685b483eccf738bd63eafd84877f86f22ca004c2bf2e047" }, { "metrics": { "saturation": 0.9586294870368987, "non_myopic_member_rewards": { "quantity": 52, "unit": "lovelace" }, "produced_blocks": { "quantity": 73, "unit": "block" }, "relative_stake": { "quantity": 1.92, "unit": "percent" } }, "cost": { "quantity": 1000000, "unit": "lovelace" }, "margin": { "quantity": 3, "unit": "percent" }, "id": "d2b16b82a5fb539b4face319dc032a0fcc06bfb42c288b0e4b0ee020" }, { "metrics": { "saturation": 2.4893739993768146e-4, "non_myopic_member_rewards": { "quantity": 5, "unit": "lovelace" }, "produced_blocks": { "quantity": 5, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 3, "unit": "percent" }, "id": "50c7178cf5e9aee1e44484daa6a89b11c3a8a753e663e4cf9716c480" }, { "metrics": { "saturation": 0.2989314038336569, "non_myopic_member_rewards": { "quantity": 4, "unit": "lovelace" }, "produced_blocks": { "quantity": 16, "unit": "block" }, "relative_stake": { "quantity": 0.6, "unit": "percent" } }, "cost": { "quantity": 1000000, "unit": "lovelace" }, "margin": { "quantity": 9.5, "unit": "percent" }, "id": "1a0835ed04ccf4a9473ef1f9ac10f1016b231eb3d6523288e95cb888" }, { "metrics": { "saturation": 0.1249068002501742, "non_myopic_member_rewards": { "quantity": 4, "unit": "lovelace" }, "produced_blocks": { "quantity": 7, "unit": "block" }, "relative_stake": { "quantity": 0.25, "unit": "percent" } }, "cost": { "quantity": 1000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "9e4f46887b74bcb1200271089dc6a0804ce53658bfe20db46328f38e" }, { "metrics": { "saturation": 5.011243460444855e-2, "non_myopic_member_rewards": { "quantity": 2, "unit": "lovelace" }, "produced_blocks": { "quantity": 2, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "4d608b151af37a3ee5ad43fb9b460f7ee3dddd50e1bb16b5258c7180" }, { "metrics": { "saturation": 0.7481961070198906, "non_myopic_member_rewards": { "quantity": 2, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1.5, "unit": "percent" } }, "cost": { "quantity": 100, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "fc1c7e72330681e4316e775463b6c9324674b708372216ac3849ec7d" }, { "metrics": { "saturation": 0.14642839136242042, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 6, "unit": "block" }, "relative_stake": { "quantity": 0.29, "unit": "percent" } }, "cost": { "quantity": 12000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "042abb85ebdee8ddd436dca5057659c6a986c7e76402636160c96582" }, { "metrics": { "saturation": 4.7366226443260355e-3, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1.0e-2, "unit": "percent" } }, "cost": { "quantity": 99000000, "unit": "lovelace" }, "margin": { "quantity": 50, "unit": "percent" }, "id": "069ebd7a90e5b6c6b0710581eb356c52a8b3b932a01e458bbb658d06" }, { "metrics": { "saturation": 4.961399277585268e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 3, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 10000000, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "0c3a268fe42f00f85ca99b051f93efb6c0206d6c944cf584cdc1ca2a" }, { "metrics": { "saturation": 0.49863144517004754, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 308, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 50000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "metadata": { "homepage": "https://iohk.io", "name": "IOHK3", "ticker": "IOHK3", "description": "IOHK Pool" }, "id": "0e26f399908cbb0b65d534f97616ce1106e0244307dae03e887995ce" }, { "metrics": { "saturation": 0, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 100000000, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "0f4ee3f646ac463fe5d8dc309b9401f460d9366370dd78710b5efe32" }, { "metrics": { "saturation": 0, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 500000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "0f7257ade61de1512e25f5d9c7b75f62cec16c28b94540a0a3308c7e" }, { "metrics": { "saturation": 0.498431443750841, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 104, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 1000000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "1237216a3841be67e9d836fad7cfdc5be8a0966031f0472ce50b1be3" }, { "metrics": { "saturation": 9.806026771027256e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 14, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 100000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "14c0f516daea6e5f0dee7955242b095869aa61e9e6f5c902815a1cf9" }, { "metrics": { "saturation": 4.9613180806401896e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 200000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "16c07caeaca737e112994a289b6e3b3e8560c854ebf5efe74faa5629" }, { "metrics": { "saturation": 1.744905620162212e-3, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 6, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 50000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "179bc984d6ea8d75a4a67aa86fbbb3009b569a021aab05b23b5ca520" }, { "metrics": { "saturation": 0.14892273879460416, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 7, "unit": "block" }, "relative_stake": { "quantity": 0.3, "unit": "percent" } }, "cost": { "quantity": 10000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "1a0895397b9e3faa89f06ef75f3cf4e6437ff634c049a0a4904623d5" }, { "metrics": { "saturation": 0.10047480139153231, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 9, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 100000000, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "1a9642541fb668797cd5b8a7d132eb31e571ed90ec4e75c6c234e5d6" }, { "metrics": { "saturation": 0.498390105599939, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 45, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 50000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "1bc2ecdfe36d9a89670b4635fbc4e6b401151b9891a8228471ccaf3a" }, { "metrics": { "saturation": 0.7481996169773841, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 40, "unit": "block" }, "relative_stake": { "quantity": 1.5, "unit": "percent" } }, "cost": { "quantity": 500000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "1c039cb3bf66657f463459bcbfe56a9f5fb6e1083ad199c0d03a6171" }, { "metrics": { "saturation": 0.17452136618342648, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 10, "unit": "block" }, "relative_stake": { "quantity": 0.35, "unit": "percent" } }, "cost": { "quantity": 10000000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "1d29ebcc107cca0205becc83b032efdd0cc4e48346c42c3f34418c1d" }, { "metrics": { "saturation": 4.736622205530364e-3, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1.0e-2, "unit": "percent" } }, "cost": { "quantity": 1000000, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "1d3463cfc3e2e076b3b5459642bf76a690ad321f80bf20b7133093d9" }, { "metrics": { "saturation": 2.492893285267366e-4, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 3, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 256000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "1e3e93af114b6db640ea6eec2150301308383002226d34f6fe62d121" }, { "metrics": { "saturation": 0.5881576015938329, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 97, "unit": "block" }, "relative_stake": { "quantity": 1.18, "unit": "percent" } }, "cost": { "quantity": 256000000, "unit": "lovelace" }, "margin": { "quantity": 7.5, "unit": "percent" }, "id": "20de7bb17dc89e0f66c4ca1a2aa96caa40618d773107120cbf725c4c" }, { "metrics": { "saturation": 0.49912623335002776, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 15, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 0, "unit": "lovelace" }, "margin": { "quantity": 3, "unit": "percent" }, "id": "22359e1651f6362e0f7a5afc3f951f2a0bdf317a6ab5ec2c949488c2" }, { "metrics": { "saturation": 0.5981103490881864, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 24, "unit": "block" }, "relative_stake": { "quantity": 1.2, "unit": "percent" } }, "cost": { "quantity": 256000000, "unit": "lovelace" }, "margin": { "quantity": 3, "unit": "percent" }, "id": "2604a4ee8b19c70c3d7d4bc0383b67a0d93dba4972d6c8d11bbbb1b7" }, { "metrics": { "saturation": 9.947596944515792e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 5, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 2000000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "2607deb1747cde5d7e3765375ca787dbb579e0a3fa92ee9323e04083" }, { "metrics": { "saturation": 0.548254045482466, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 27, "unit": "block" }, "relative_stake": { "quantity": 1.1, "unit": "percent" } }, "cost": { "quantity": 5000000000, "unit": "lovelace" }, "margin": { "quantity": 8, "unit": "percent" }, "id": "272ef8dabdb06edf91423dd1c45d6c44ef75e77fa8245114877ffdee" }, { "metrics": { "saturation": 4.961345227083464e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 500000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "27e33e8d814c427177adf84855e9e872dbf7e38184babe3a6378080d" }, { "metrics": { "saturation": 9.946795537176001e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 15, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 10000000, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "283c5e0753a731b1259a85c66b03e87bc1c237f314507e5060f2f562" }, { "metrics": { "saturation": 9.947596944515792e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 4, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 2000000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "28f7fb487a2aab55451fc80a30b527fee101566fa5fe39b1dc07a286" }, { "metrics": { "saturation": 4.9613450032976715e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 10000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "2a707b045765f6657b362ff33112d3d35ad6c7190938333195892f22" }, { "metrics": { "saturation": 0.6512926544348854, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 40, "unit": "block" }, "relative_stake": { "quantity": 1.3, "unit": "percent" } }, "cost": { "quantity": 23000000, "unit": "lovelace" }, "margin": { "quantity": 2.14, "unit": "percent" }, "id": "2a941801997a8a8a3d57b94a3778172d4754591abe74882cd0d8856c" }, { "metrics": { "saturation": 3.7392733685812215e-3, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1.0e-2, "unit": "percent" } }, "cost": { "quantity": 500000000, "unit": "lovelace" }, "margin": { "quantity": 6.5, "unit": "percent" }, "id": "2b709a1cf3947ac40e2fd4f92c2ba0a346271773cd06d1e09c5029de" }, { "metrics": { "saturation": 2.4893777291400246e-4, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 8000000, "unit": "lovelace" }, "margin": { "quantity": 7.77, "unit": "percent" }, "id": "32f752d1334a0079bedf8bd460e3c748f9e42e0b1c9625b674bb91d5" }, { "metrics": { "saturation": 2.489391112408013e-4, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 100000000, "unit": "lovelace" }, "margin": { "quantity": 4, "unit": "percent" }, "id": "338b7169ef359957459d6c9a0e4fc0fe8aa5dd833b12207b052bd1d8" }, { "metrics": { "saturation": 4.73612214799926e-3, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1.0e-2, "unit": "percent" } }, "cost": { "quantity": 3000000, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "3398304972aa5b23d0a0590cb6c1574c5eb458b576e8420fbda3c902" }, { "metrics": { "saturation": 0, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 650000000, "unit": "lovelace" }, "margin": { "quantity": 6.5, "unit": "percent" }, "id": "349bb20b78246c867f86645f285d326c3c5b1d814a55ffdc18cbd68c" }, { "metrics": { "saturation": 4.9613266906589425e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 200000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "34ca9c5bdca38d9a325951cd0c09b96334f2363622324d589a883501" }, { "metrics": { "saturation": 5.559583349027959e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.11, "unit": "percent" } }, "cost": { "quantity": 256000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "35e508fcbd6abbfa2d6db5545a8e82d2274bb0a279db52823a129367" }, { "metrics": { "saturation": 9.947659527399433e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 3, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 125000000, "unit": "lovelace" }, "margin": { "quantity": 2, "unit": "percent" }, "id": "378d05a084baec4c642671cf5cec5b3dd330138e55e31d8a4b63c193" }, { "metrics": { "saturation": 0, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0, "unit": "percent" } }, "cost": { "quantity": 256000000, "unit": "lovelace" }, "margin": { "quantity": 3, "unit": "percent" }, "id": "389741d3fcc48abb4193a801b122d8532d2479592a948894f3212463" }, { "metrics": { "saturation": 0.12490816001712791, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 10, "unit": "block" }, "relative_stake": { "quantity": 0.25, "unit": "percent" } }, "cost": { "quantity": 250000000, "unit": "lovelace" }, "margin": { "quantity": 8, "unit": "percent" }, "id": "3c47156edf22aace11df364ff6354508c64f92ba2740d43f431333b9" }, { "metrics": { "saturation": 0.49863144517004754, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 97, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 200000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "3d51d7f3cf8934955707118bca55820c08c78e40ef5f27bb635cb2b9" }, { "metrics": { "saturation": 0.47997992154994595, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 114, "unit": "block" }, "relative_stake": { "quantity": 0.96, "unit": "percent" } }, "cost": { "quantity": 369000000, "unit": "lovelace" }, "margin": { "quantity": 4.2, "unit": "percent" }, "id": "3ec4d782898c75eb57b0ba7df4c58daefa100867e92d0b6257801b60" }, { "metrics": { "saturation": 0.49838175130033346, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 4040000000, "unit": "lovelace" }, "margin": { "quantity": 4.04, "unit": "percent" }, "id": "428c170a4752f4e95d4a48ae540dc30cf0b2d115bb80c02464ad1c5c" }, { "metrics": { "saturation": 0.4983816682497758, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 10000000, "unit": "lovelace" }, "margin": { "quantity": 6, "unit": "percent" }, "id": "42f7e99cb1f8e77b9d98711cbcebc09b52a2fa963db13e5a3fe193fe" }, { "metrics": { "saturation": 9.947650272351043e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.2, "unit": "percent" } }, "cost": { "quantity": 27000000, "unit": "lovelace" }, "margin": { "quantity": 1, "unit": "percent" }, "id": "45ad7b9732626515ae8b8d3c04f2a37b1d2c59eaadb409f415ffaec0" }, { "metrics": { "saturation": 0.4539988606525415, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.91, "unit": "percent" } }, "cost": { "quantity": 125000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "46024a31764ef46c72662f519ef6870cd4dd241a9075356689f147a5" }, { "metrics": { "saturation": 0.998026636103178, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 83, "unit": "block" }, "relative_stake": { "quantity": 2, "unit": "percent" } }, "cost": { "quantity": 100000000, "unit": "lovelace" }, "margin": { "quantity": 5, "unit": "percent" }, "id": "4941965da314df9bfd36bf096bc57694db822695add66249f39178b2" }, { "metrics": { "saturation": 0.4983784158578622, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 15000000, "unit": "lovelace" }, "margin": { "quantity": 6, "unit": "percent" }, "id": "49c7cfa5ef81fd85485350597ffe3081487bc13483533526eff45d63" }, { "metrics": { "saturation": 4.961757202017999e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 8, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 128000000, "unit": "lovelace" }, "margin": { "quantity": 8, "unit": "percent" }, "id": "4b43cd783b119faf7302b0b7d6f4f093e15728b042fc2470084cabd6" }, { "metrics": { "saturation": 5.0111255944923404e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 0, "unit": "block" }, "relative_stake": { "quantity": 0.1, "unit": "percent" } }, "cost": { "quantity": 8000000000, "unit": "lovelace" }, "margin": { "quantity": 8, "unit": "percent" }, "id": "4b6bdd63b12a5fa5af11066b07cc364d907a7390ad94673ddd9f104f" }, { "metrics": { "saturation": 0.49938052881659795, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 19, "unit": "block" }, "relative_stake": { "quantity": 1, "unit": "percent" } }, "cost": { "quantity": 500000000, "unit": "lovelace" }, "margin": { "quantity": 10, "unit": "percent" }, "id": "4cc5ec56bd7aeb654f71090b934c521b31f321b2556d354463d9f0b8" }, { "metrics": { "saturation": 9.94828936642938e-2, "non_myopic_member_rewards": { "quantity": 0, "unit": "lovelace" }, "produced_blocks": { "quantity": 12, "unit": "block" …
bors r- |
Canceled |
bors r+ |
Build succeeded |
Issue Number
#1794 (sort of.. fixed while fixing other stuff on this issue)
Overview
8085f82
📍 add a non-null key deposit to genesis, and account for it for launching pools
8240a15
📍 account for key deposit when registering a stake key
This is.. tricky, because the deposit is sort of implicit but, because of the dual support with Jörmungandr, we have to treat it as a fee. So, there's a bit of weird logic / work-around when creating the actual transaction.
285d027
📍 fix fee calculation for Shelley
adding certificate witnesses to the estimation
a77fa02
📍 give deposit back when de-registing a stake key
0784356
📍 adjust test scenarios according to recent API changes
Comments
Latest sync from the Shelley testnet:
expand stake-pools.json