Stake pool is not shown in Daedalus
Problem:
Stake pool is not shown in Daedalus
Possible causes:
- SPO changed metadata
- Pool has set margin to 100% so it is filtered out.
- Pool has been retired.
- Pool has been delisted from SMASH
- Problems with metadata.json file.
If the SPO changed the pool's metadata:
Assuming pool's metadata hash is correct, after the re-registration certificate is submitted to the blockchain, it may take a few hours for SMASH to cache the new metadata and for Daedalus to fetch the updated metadata from SMASH. This is expected behavior. Please be patient.
Check if your pool is delisted:
$ curl --silent "https://smash.cardano-mainnet.iohk.io/api/v1/delisted" | grep -o <HEX POOL ID>
Check if your pool is retired:
$ curl --silent "https://smash.cardano-mainnet.iohk.io/api/v1/retired" | grep -o <HEX POOL ID>
Check the errors endpoint to see if there are metadata errors:
Daedalus fetches stake-pools' metadata from the Stake pool Metadata Aggregation Server (SMASH); SMASH verifies that the metadata registered on the blockchain (pool registration certificate) matches with the hash of the file it gets from your metadata.json URL. If hashes don't match, it flags it with an error and the pool is not loaded in Daedalus.
A quick way to investigate if there is a problem with your metadata is to query the errors endpoint in SMASH:
$ curl "https://smash.cardano-mainnet.iohk.io/api/v1/errors/<HEX_POOL_ID>"
If there is a problem with your metadata, you will get a response like:
[{"time":"01.12.2020. 13:12:22","retryCount":11,"poolHash":"<METADATA_HASH>","cause":
"Hash mismatch from poolId '<HEX_POOL_ID>' when fetching metadata from 'https://poolmetadata.json'.
Expected <METADATA_HASH> but got <METADATA_HASH>","poolId":"<HEX_POOL_ID>",
"utcTime":"1606828342.497326s"}]
where EXPECTED is the hash registered in the blockchain, and GOT is what SMASH gets from computing the hash from the file at url https://poolmetadata.json.
This shows all the errors for the pool from a day ago. However, you can filter just the ones you want by using a date you want to filter from, like this (using DD.MM.YYYY):
$ curl "https://smash.cardano-mainnet.iohk.io/api/v1/errors/<HEX_POOL_ID>?fromDate=DD.MM.YYYY"
To ensure that you register with the correct metadata hash, first upload your file to its final url, then hash it:
$ wget https://poolmetadata.json
> --2020-12-01 20:47:17-- https://poolmetadata.json.
> Resolving ...
> Connecting to... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 247 [application/json]
> Saving to: ‘poolmetadata.json’
> poolmetadata.json 100%[==================================
> ================================================================>] 247--.-KB/s in 0s
> 2020-12-01 20:47:17 (32.2 MB/s) - ‘poolmetadata.json’ saved [247/247]
$ cardano-cli shelley stake-pool metadata-hash --pool-metadata-file poolmetadata.json
> POOL_METADATA_HASH
The above is opposed to first hashing the file and then uploading it. This is more relevant if you are using some json storage service like jsonbin.io, npoint.io, etc.. These services reformat your file, removing spaces and line breaks, with the consequence of changing the hash of the file without you noticing it.
After you have hashed the file at its URL, submit a new registration certificate for your pool using the correct metadata hash as shown here: Register a stake pool with metadata