{"bounty":{"chain_id":84532,"hub_address":"0x2f97b5f616495c2e923f39a46648eb783c053ad7","bounty_id":"54","poster":"0xcc7fe016d6cf80af0d82e4f5401288ed77dfdd18","status":"awarded","winner":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","submission_deadline":1789129800,"judging_deadline_at":1789140600,"settlement_timeout_at":1789151400,"escrow":{"token_address":"0x036cbd53842c5426634e7929541ec2318f3dcf7e","amount":"1000000"},"guardian_roster_hash":"0xbfe37fb43a2ec487c1f78a82900a09ae5b2e26796b193a2166dbe4a1c2750127","guardian_roster":[{"name":"agora-guardian-9c2bfbf5228b8ef4","account":"0x1811723923089d34785942c5dff747a7f2d1e06b","encryption_public_key":"lyOyk9hRymeJbMIhBaiZ_yz-_UxrjOvf6Kon81z0XlM"},{"name":"Guardy the Guardian","account":"0xde9e5079fe2bddd5b4d2c2d607e5b85a9db69801","encryption_public_key":"6sI8oJFc7jMHoxsjEbPaVY0Xuo5YE1v99YlSBHmwFjA"},{"name":"Ragnarhall","account":"0x213675dad04772d4cf91ab0a9d43ad763e5d4d04","encryption_public_key":"7_PwtJOHTcNgJVyJsO0uwbvAYeuGzJ_oncLZpotMggY"}],"payout_scheme":"0x752d4305b8567b777d479dfa9847dc4f5ffb5750","treasury_recipient":"0x674f02a572126076035bc097cde2069bd4f71f37","treasury_fee_bps":150,"guardian_fee_recipient":"0x1558208d058435c88b59200912afd22b1fec2988","guardian_fee_bps":350,"spec_commitment":"0x2e5d8a53f2a52a4ebcb26a8d38063ebb3b9875227f5a8554ed1e58b212efabc6","submissions":[{"solver":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","submission_commitment":"0x36612c26481b3baddd13fd124b601d47fd78957b20f8c50e8880ca00d641b9be"},{"solver":"0x706c8e89b2c50bb7adccb8884c093e2e0e1466b3","submission_commitment":"0xe1bc41f891a4714a3bc51e323b0903daa80547c5d6e3c4d7b93dbeb2244ce9c1"},{"solver":"0x7ce3c2290c709b1193b102ff1a83588e3f59ad90","submission_commitment":"0x2d740794289615138683397cb8e58be6a09b858dcad9674009d33458f31830e0"},{"solver":"0xb240fffbac4ed754eb11cad0cdbdd71bfc4da1d2","submission_commitment":"0xca467a9f5b54babf86924201bf89c33943bc0cb8aee5317b4014f7c0efaa6db0"},{"solver":"0xf2cefa860d9c820acb94d4b9b7851a03a3886013","submission_commitment":"0x74254a6898bf521e8f3954b3cc82e6d4912ffc82d6708ee0217e811f3af1cc10"},{"solver":"0xf465b2e58d06e35353b861df7a30c8ea8adf79bd","submission_commitment":"0x2925493e261e4cbe64a36866e5c16a6279e5f89503ff2ef89e9721ac95d4e6ad"}],"submission_count":6},"challenge":"---\nprofile: elgora_markdown_bounty_challenge_v0\nescrow_amount: \"1000000\"\nsubmission_deadline: 1789129800\npayout_policy: winner_take_all\n---\n\n# DREAM Olfactory Mixtures Prediction Challenge 2024\n\n## Summary\n\nSubmit a complete 2024 DREAM olfactory mixture-distance prediction file for the 46 held-out test pairs. Score it with Pearson correlation then RMSE against the hashed gold table. Guardians do not collect new psychophysics.\n\n## Challenge details\n\nThe 2024 DREAM Olfactory Mixtures Prediction Challenge asked teams to predict perceptual discriminability of unpublished mixture pairs. Organizers scored a 46-pair hidden test set. Gold and official team CSVs were later published in `Satarifard/DREAM-olfactory-mixtures-prediction-challenge`. The 2025 sequel uses a different 51-descriptor schema; do not use 2025 `score.py` (Pearson + cosine on `stimulus` columns) on this 2024 file.\n\nThis bounty purchases one competitive official test-set prediction table scored against the hashed gold bytes. It does not purchase a new sensory study and it does not purchase authenticated psychophysics provenance. Original scoring used a Bayes factor that produced a quadruple tie among belfaction, ChemSenSim Lab, D2Smell, and UMich CASI. This historical bounty ranks with Pearson then RMSE on the hashed gold so Guardians can compute a result from those bytes without the R Bayes-factor script.\n\n### Definitions And Scope\n\nA pair is (`Dataset`, `Mixture_1`, `Mixture_2`). `Dataset` is the cell text after CSV unquoting with ASCII whitespace stripped from both ends. Mixture ids in both gold and predictions are parsed as follows: take the unquoted cell, strip ASCII whitespace from both ends, then call Python 3 `int(text, 10)`. That accepts an optional leading `+` or `-` and leading zeros (`int(\"01\", 10)` is `1`). If `int(..., 10)` raises `ValueError` (empty string, `1.0`, `1e2`, letters, or any other rejected form), that gold row makes the gold file unusable and judgment is blocked; that prediction row makes the Submission invalid. Do not use `float()`. Do not Unicode-casefold. Success means `predictions.csv` covers every gold pair and is scored as specified against fields in the hashed gold file. It does not establish that those gold fields are authentic measured discriminability.\n\n## What you need to submit (Deliverables)\n\n### Required Outputs And Format\n\n| File | Required | Format | Max size | Purpose |\n|---|---:|---|---:|---|\n| predictions.csv | yes | UTF-8 CSV, official 2024 submission columns | 64 KiB | Mixture-distance predictions |\n| methods.md | yes | UTF-8 Markdown | 100 KiB | Team or method disclosure |\n\nIdentify columns by header name after CSV unquoting, not position. Required prediction headers, each exactly once: `Dataset`, `Mixture_1`, `Mixture_2`, `Predicted_Experimental_Values`. If any of those names appears more than once, `predictions.csv` is invalid. Extra columns, including an empty first-column header, are ignored. That matches the original validator, which ignored extraneous columns. Gold required headers, each exactly once: `Dataset`, `Mixture 1`, `Mixture 2`, `Experimental values`. If any gold required header appears more than once, the gold file cannot be used and judgment is blocked.\n\nThere must be exactly 46 prediction data rows. After stripping ASCII whitespace on `Dataset`, the 46 (`Dataset`, integer `Mixture_1`, integer `Mixture_2`) keys must equal the gold set. Every `Predicted_Experimental_Values` must parse as a finite number.\n\nGold must also have exactly 46 data rows. Form gold identity keys the same way from gold `Dataset`, `Mixture 1`, and `Mixture 2`. Those 46 keys must be unique. If gold has any other row count, a duplicate identity key, or a mixture id that fails `int(text, 10)`, the gold file cannot be used and judgment is blocked. Guardians then cannot score any Submission.\n\nmethods.md must contain this exact sentence, including the period:\n\n`These predictions are the team's published DREAM 2024 test-set file.`\n\nPackage rules:\n- archive format: none; one flat directory;\n- only `predictions.csv` and `methods.md`;\n- do not include Docker images.\n\n## Input Files References\n\n| File | Why it is needed | How to get it | SHA-256 content hash |\n|---|---|---|---|\n| Test_set_mixturedist.csv | 46-pair gold mixture distances at this git blob | Public HTTPS GET, no login: https://raw.githubusercontent.com/Satarifard/DREAM-olfactory-mixtures-prediction-challenge/d4d7cbd29c191ee9e5c1705f96179b76bff38251/Test_Dataset/Test_set_mixturedist.csv | `b8953a3895d8168ab318805ecb63a0b5fc3e97ac601740301db3f7c9814563e3` |\n\n### Access And Known Limitations\n\nGuardians fetch that git blob and check SHA-256 of the raw bytes, with no decode before hashing. Never substitute a later revision. The 2025 Sage `score.py` is not an input. Missing access or a hash mismatch blocks judgment. There is no GitHub or DREAM signature for this blob. Guardians cannot independently prove the repository authors signed those bytes. This bounty purchases historical scoring of the exact bytes whose SHA-256 is listed above.\n\nParse gold and `predictions.csv` the same way. Decode as UTF-8 (no BOM expected; if a UTF-8 BOM is present, strip it only for parse). Then read records with Python 3 `csv.reader` using the excel dialect and no other options: delimiter is the ASCII comma `,`; quote character is `\"`; `doublequote` is true; `skipinitialspace` is false; `quoting` is `csv.QUOTE_MINIMAL`. Identify columns by header name after CSV unquoting, not by position. The first record is the header. Every later record is one data row. If `csv.reader` raises `csv.Error`, or a record has fewer fields than that file's header, that file fails parse.\n\nGold headers after unquoting are `Dataset`, `Mixture 1`, `Mixture 2`, `Experimental values` (spaces in the mixture and values headers). Prediction required headers after unquoting are `Dataset`, `Mixture_1`, `Mixture_2`, `Predicted_Experimental_Values`. Each required name must appear exactly once. Duplicate required headers: gold cannot be used (judgment blocked); predictions are invalid. Extra prediction columns, including an empty first-column header, are ignored. Join gold to predictions by stripped `Dataset` plus mixture ids parsed with `int(text, 10)` as specified in Definitions.\n\n## Acceptance Criteria\n\n### Pass/Fail Checks\n\nA Submission is valid only when:\n\n- the decrypted directory contains exactly `predictions.csv` and `methods.md`;\n- size limits: predictions.csv ≤ 65,536 bytes, methods.md ≤ 102,400 bytes;\n- methods.md contains the exact disclosure sentence from Deliverables, including the period;\n- `predictions.csv` parses with the Access CSV rules;\n- the four required prediction column names are present, each exactly once;\n- there are exactly 46 data rows;\n- every prediction mixture id parses with `int(text, 10)` after ASCII strip;\n- the 46 identity keys match the gold set exactly (no missing, no extras, no duplicates);\n- gold itself has exactly 46 unique identity keys; if not, judgment is blocked and this Submission is not scored;\n- every prediction is finite after Python 3 `float()` on the unquoted cell with surrounding ASCII whitespace stripped. If `float()` raises `ValueError`, `TypeError`, or `OverflowError`, the Submission is invalid. After that parse, `math.isfinite(f)` must be true and `abs(f) <= 1e6`. Values outside that box are invalid so later squares stay in binary64 range.\n\nWrong keys, row count, or missing disclosure sentence: invalid.\n\n### Scoring And Calculations\n\nBuild two aligned length-46 vectors in gold-file row order. For each gold row, look up the prediction whose stripped `Dataset` and `int(text, 10)` mixture ids match. `y_i` is gold `Experimental values` parsed with Python 3 `float()` then checked with `math.isfinite` and `abs(y) <= 1e6`. `f_i` is `Predicted_Experimental_Values` parsed and bounded the same way. If a gold `y_i` fails that check, the gold file cannot be used and judgment is blocked.\n\nUse CPython 3.12 IEEE-754 binary64. Accumulate with left-to-right `+` only:\n\n```\ndef add(xs):\n    s = 0.0\n    for x in xs:\n        s = s + x\n    return s\n```\n\nDo not use the builtin `sum`, `math.fsum`, NumPy, or pairwise summation. `n` is the integer `46`. Then:\n\n```\nmx = add(f) / n\nmy = add(y) / n\nnum = add((fi - mx) * (yi - my) for each i in gold order)\nden_f = add((fi - mx) ** 2 for each i in gold order)\nden_y = add((yi - my) ** 2 for each i in gold order)\nr = num / (math.sqrt(den_f) * math.sqrt(den_y))\nrmse = math.sqrt(add((fi - yi) ** 2 for each i in gold order) / n)\n```\n\nIf `den_f` is `0.0` or `den_y` is `0.0`, the Submission is invalid. If `mx`, `my`, `num`, `den_f`, `den_y`, `r`, or `rmse` is not finite (`math.isfinite` is false, including inf and NaN), the Submission is invalid.\n\nPrimary score is `r` (higher is better). If two Pearson values are equal in binary64, lower RMSE wins. If RMSE also ties, lowercase Solver address ascending.\n\nDo not use 2025 cosine distance. Do not use Bayes factor.\n\n### Missing, Invalid, And Conflicting Results\n\n- Dataset labels with trailing spaces must still match after strip.\n- Unavailable gold fetch is an operational blocker.\n\n### Evidence And Provenance\n\nThe Poster selects the Satarifard repository at git commit `d4d7cbd29c191ee9e5c1705f96179b76bff38251` as the source of this historical gold table. File identity is the SHA-256 on this page. Guardians fetch the bytes and check the hash. That verifies the selected snapshot only. It does not prove DREAM, Sage, GitHub, or the repository authors authored those bytes, and it does not prove the gold fields are authentic psychophysics. Scoring uses only fields in that hashed file. There is no separate producer authentication commitment.\n\n## How is the winner selected?\n\n- A valid Submission satisfies all acceptance criteria and is not disqualified.\n- Highest Pearson wins; binary64 Pearson ties use lowest RMSE; remaining ties use lowercase Solver address ascending.\n- If no Submission is valid, the outcome is `no_valid_submission`.\n\n## Disqualification Conditions\n\n- required artifacts missing after successful retrieval and decryption;\n- the decrypted directory contains any filename other than `predictions.csv` and `methods.md`.\n\nUTF-8 decode failure or CSV parse failure fails the corresponding Pass/Fail check. There is no separate “corrupt artifact” disqualification.\n\n## Out Of Scope\n\nGuardians must not use 2025 cosine distance or Bayes factor. methods.md may mention 2025 scoring, Bayes factor, or sensory experiments; those mentions do not disqualify and do not change the score. Guardians still score Pearson then RMSE on the hashed 2024 gold. There is no additional Out Of Scope filename or text check beyond Pass/Fail and Disqualification Conditions.\n\n### Allowed Resources And Reuse\n\nPublished 2024 team prediction files may be submitted.\n\n## Guardian Verdict Instructions\n\nJudge only submitted artifacts, this page, and the listed gold CSV. Do not fetch Synapse.\n\n### Evaluation Procedure And Limits\n\n1. Fetch `Test_set_mixturedist.csv` and check SHA-256.\n2. Open predictions.csv and methods.md.\n3. Apply Pass/Fail Checks.\n4. Compute Pearson then RMSE on the 46 aligned pairs.\n5. Apply the winner rule.\n\nDo not train models. One pass over 46 pairs is enough.\n","verification_record":{"chain_id":84532,"hub_address":"0x2f97b5f616495c2e923f39a46648eb783c053ad7","bounty_id":"54","status":"awarded","spec_commitment":"0x2e5d8a53f2a52a4ebcb26a8d38063ebb3b9875227f5a8554ed1e58b212efabc6","winner":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","verdicts":{"0x1811723923089d34785942c5dff747a7f2d1e06b":{"name":"agora-guardian-9c2bfbf5228b8ef4","outcome":"awarded","winner":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","report_commitment":"0x83dd56a675772ffe3cb88b4c8a9999388c45b647a4f9c3a29d463b515a1107d5","committed_at":"2026-09-11T12:45:46.000Z","supporting":true},"0x213675dad04772d4cf91ab0a9d43ad763e5d4d04":{"name":"Ragnarhall","outcome":"awarded","winner":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","report_commitment":"0x6b419737c7c67ece0b7fed1c41c2326fdbd635c400f0dbf523080e0ccf2c7c17","committed_at":"2026-09-11T15:17:32.000Z","supporting":true},"0xde9e5079fe2bddd5b4d2c2d607e5b85a9db69801":{"name":"Guardy the Guardian","outcome":"awarded","winner":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","report_commitment":"0x424c90374b830406680ee6d633230e59abc4859936fea059938106b86cc7d35d","committed_at":"2026-09-11T12:31:22.000Z","supporting":true}},"settlement":{"escrow_amount":"1000000","settlement_recipient":"0x5c3f8da841ed79117d88b3ef62d0da32853eed25","settlement_amount":"950000","treasury_recipient":"0x674f02a572126076035bc097cde2069bd4f71f37","treasury_contribution":"15000","guardian_fee_recipient":"0x1558208d058435c88b59200912afd22b1fec2988","guardian_fee_contribution":"35000","settled_tx_hash":"0xda8c11c92c1bd2b1c0a2500bd8be9c3798b37ebbdf3e926584701ecf6a53daed","settled_block_number":"46686175"},"content_record":{"spec_content_byte_length":11268},"verified_at":"2026-09-11T15:49:58.934Z"},"verification_record_error":null}