minaVRFpy is the python adaptation of the batch-check-wittness
step from zkvalidator's mina-vrf-rs. This is VERY much work in progress and made available to the mina community for experimental reasons!
Please refer to mina-vrf-rs for the overall approach. Typically the wittness data is generated by the block producer and shared, then the delegator can run the check (via mina-vrf-rs):
cat witnesses | cargo run --release -- batch-patch-witness --pub B62qpge4uMq4Vv5Rvc8Gw9qSquUYd6xoW1pz7HQkMSHm6h1o7pvLPAN --epoch 5 > patches
cat patches | mina advanced vrf batch-check-witness | sed 's/Using password from environment variable CODA_PRIVKEY_PASS//g' > check
cat check | cargo run --release -- batch-check-witness --pub B62qpge4uMq4Vv5Rvc8Gw9qSquUYd6xoW1pz7HQkMSHm6h1o7pvLPAN --epoch 5
This python script offers an alternative to the batch-check-witness
part in order to e.g. gather the data over multiple epochs or to further examine and enrich the data via e.g. jupyter notebooks. See the demos provided.
clone and install via pip install .
. The script relies also on https://github.com/bakebrain/coda-python-client/tree/query-sgqlc-refactoring - an https://github.com/profusion/sgqlc version of the python-coda-client - currently also not "officially" made available. An examples is e.g. https://github.com/bakebrain/coda-python-client/blob/query-sgqlc-refactoring/examples/mina_explorer.ipynb
this file needs to be edited, inparticular LEDGER_PATH
and VRF_CHECKED_PATH
need to be created/setup.
MINA_EXPLORER_ENDPOINT
- minaexplorer enpoint
LEDGER_PATH
- path to a folder where the ledgers are stored, e.g. '/home/user/minavrfpy/data/legers/'.
LEDGER_DOWNLOAD_SOURCE
- url of a ledger repo to download unavailable ledgers from, the default is https://raw.githubusercontent.com/zkvalidator/mina-graphql-rs/master/data/epochs
VRF_CHECKED_PATH
- path to folder where the "checked" data is stored, e.g. '/home/user/minavrfpy/data/vrf_checked/'. Inside this folder there should be another folder name after the key of the block producer. The checked data should reside inside this folder. In order to deal with mutiple epoch data simultaneously the final data's naming convention is e.g. check-epoch-{epoch_number}, An example structure could be like this:
❯ tree data
data
├── ledgers
│ ├── jwAAZcXndLYxb8w4LTU2d4K1qT3dL8Ck2jKzVEf9t9GAyXweQRG.json
│ ├── jwAXd4GZgxE3YCwqs99g4MpLNiEV2ZfZPstyah4jxo753AVgL6R.json
│ ├── jwJXdYzAikMHnTsw2kYyS1WQxJrGQsy1FKT5c18eHP2wGANafKf.json
│ ├── jwPwVsSPZ2tmmGbp8UrWGmDgFDrrzTPpYcjpWosckmcVZV2kcW7.json
│ ├── jwe63YTTUcc2b4sFdP54ehCZ3Dp9sZKshwCmtoVP3bidzfPfcxw.json
│ ├── jwq7sAxDuN9MrdLjAQULoyrY5hWa6g52SVq8EmajBeBY38zamgz.json
│ ├── jx2XUFjvsvtTKB4HPAzih5boAtuoR34kxjEoU1RUhfXTATyx8tw.json
│ ├── jx4itrnmDkG3ptAiwhitJHt9K8stgFFoenrkZrm2prbtaS54xQU.json
│ ├── jx7buQVWFLsXTtzRgSxbYcT8EYLS8KCZbLrfDcJxMtyy4thw2Ee.json
│ ├── jxBBSjakhQRKLbUM7z99KXNnMke2GbdcJyqpD9gyRoJJybsMRqh.json
│ ├── jxPj7F7aRew1zvpW9JaGSgt9xmJitenrRSM6YGKnuhe5HXqyZtZ.json
│ ├── jxQgtuyHp8nA2P6F9CSRrLcVeHi8Ap7wVHeNnH2UbSX15izcSHK.json
│ ├── jxRySSfk8kJZVj46zveaToDUJUC2GtprmeK7poqWymEzB6d2Tun.json
│ ├── jxVF5YbC3B5Rk6ibfsL97WaqojfxrgWtEqMJST9pb4X8s3kRD2T.json
│ ├── jxVLvFcBbRCDSM8MHLam6UPVPo2KDegbzJN6MTZWyhTvDrPcjYk.json
│ ├── jxct9rteQ7wjhQVf7h4mGQmGZprJMkjbzEWgU7VvV6HEq2DN5yA.json
│ ├── jxhjiLBeMR7pgtV8ogcJvqXdr6asoNrC3g6hoUzEDLBSnZoxUDJ.json
│ └── jxn15ATGoe4WGgYpbssxJH9XW8NXRDy22WvSsBqvMqcnLPgPAwN.json
└── vrf_checked
├── B62qob1tGxx1BhychEzzah7yvdbRH3E7SNSTrEtkuSZzR2UBezMChg2
│ ├── check-epoch-18
│ ├── check-epoch-19
│ └── check-epoch-20
└── B62qpge4uMq4Vv5Rvc8Gw9qSquUYd6xoW1pz7HQkMSHm6h1o7pvLPAN
├── check-epoch-0
├── check-epoch-1
├── check-epoch-10
├── check-epoch-11
├── check-epoch-12
├── check-epoch-13
├── check-epoch-14
├── check-epoch-15
├── check-epoch-16
├── check-epoch-17
├── check-epoch-2
├── check-epoch-3
├── check-epoch-4
├── check-epoch-5
├── check-epoch-6
├── check-epoch-7
├── check-epoch-8
└── check-epoch-9
4 directories, 39 files
See more in the notebook demos.