Skip to main content

Chik vdf verification (wraps C++)

Project description

Chik VDF

Build PyPI PyPI - Format GitHub

CodeQL

Building a wheel

Compiling chikvdf requires cmake, boost and GMP/MPIR.

python3 -m venv venv
source venv/bin/activate

pip install wheel setuptools_scm pybind11
pip wheel .

The primary build process for this repository is to use GitHub Actions to build binary wheels for MacOS, Linux (x64 and aarch64), and Windows and publish them with a source wheel on PyPi. See .github/workflows/build.yml. CMake uses FetchContent to download pybind11. Building is then managed by cibuildwheel. Further installation is then available via pip install chikvdf e.g.

Building Timelord and related binaries

In addition to building the required binary and source wheels for Windows, MacOS and Linux, chikvdf can be used to compile vdf_client and vdf_bench. vdf_client is the core VDF process that completes the Proof of Time submitted to it by the Timelord. The repo also includes a benchmarking tool to get a sense of the iterations per second of a given CPU called vdf_bench. Try ./vdf_bench square_asm 250000 for an ips estimate.

To build vdf_client set the environment variable BUILD_VDF_CLIENT to "Y". export BUILD_VDF_CLIENT=Y.

Similarly, to build vdf_bench set the environment variable BUILD_VDF_BENCH to "Y". export BUILD_VDF_BENCH=Y.

This is currently automated via pip in the install-timelord.sh script in the chik-blockchain repository which depends on this repository.

If you're running a timelord, the following tests are available, depending of which type of timelord you are running:

./1weso_test, in case you're running in sanitizer_mode.

./2weso_test, in case you're running a timelord that extends the chain and you're running the slow algorithm.

./prover_test, in case you're running a timelord that extends the chain and you're running the fast algorithm.

Those tests will simulate the vdf_client and verify for correctness the produced proofs.

Contributing and workflow

Contributions are welcome and more details are available in chik-blockchain's CONTRIBUTING.md.

The master branch is the currently released latest version on PyPI. Note that at times chikvdf will be ahead of the release version that chik-blockchain requires in it's master/release version in preparation for a new chik-blockchain release. Please branch or fork master and then create a pull request to the master branch. Linear merging is enforced on master and merging requires a completed review. PRs will kick off a ci build and analysis of chikvdf at lgtm.com. Please make sure your build is passing and that it does not increase alerts at lgtm.

Background from prior VDF competitions

Copyright 2018 Ilya Gorodetskov generic@sundersoft.com

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Our VDF construction is described in classgroup.pdf. The implementation details about squaring and proving phrases are described below.

Main VDF Loop

The main VDF loop produces repeated squarings of the generator form (i.e. calculates y(n) = g^(2^n)) as fast as possible, until the program is interrupted. Sundersoft's entry from Chik's 2nd VDF contest is used, together with the fast reducer used in Pulmark's entry. This approach is described below:

The NUDUPL algorithm is used. The equations are based on cryptoslava's equations from the 1st contest. They were modified slightly to increase the level of parallelism.

The GCD is a custom implementation with scalar integers. There are two base cases: one uses a lookup table with continued fractions and the other uses the euclidean algorithm with a division table. The division table algorithm is slightly faster even though it has about 2x as many iterations.

After the base case, there is a 128 bit GCD that generates 64 bit cofactor matrices with Lehmer's algorithm. This is required to make the long integer multiplications efficient (Flint's implementation doesn't do this).

The GCD also implements Flint's partial xgcd function, but the output is slightly different. This implementation will always return an A value which is > the threshold and a B value which is <= the threshold. For a normal GCD, the threshold is 0, B is 0, and A is the GCD. Also the interfaces are slightly different.

Scalar integers are used for the GCD. I don't expect any speedup for the SIMD integers that were used in the last implementation since the GCD only uses 64x1024 multiplications, which are too small and have too high of a carry overhead for the SIMD version to be faster. In either case, most of the time seems to be spent in the base case so it shouldn't matter too much.

If SIMD integers are used with AVX-512, doubles have to be used because the multiplier sizes for doubles are significantly larger than for integers. There is an AVX-512 extension to support larger integer multiplications but no processor implements it yet. It should be possible to do a 50 bit multiply-add into a 100 bit accumulator with 4 fused multiply-adds if the accumulators have a special nonzero initial value and the inputs are scaled before the multiplication. This would make AVX-512 about 2.5x faster than scalar code for 1024x1024 integer multiplications (assuming the scalar code is unrolled and uses ADOX/ADCX/MULX properly, and the CPU can execute this at 1 cycle per iteration which it probably can't).

The GCD is parallelized by calculating the cofactors in a separate slave thread. The master thread will calculate the cofactor matrices and send them to the slave thread. Other calculations are also parallelized.

The VDF implementation from the first contest is still used as a fallback and is called about once every 5000 iterations. The GCD will encounter large quotients about this often and these are not implemented. This has a negligible effect on performance. Also, the NUDUPL case where A<=L is not implemented; it will fall back to the old implementation in this case (this never happens outside of the first 20 or so iterations).

There is also corruption detection by calculating C with a non-exact division and making sure the remainder is 0. This detected all injected random corruptions that I tested. No corruptions caused by bugs were observed during testing. This cannot correct for the sign of B being wrong.

GCD continued fraction lookup table

The is implemented in gcd_base_continued_fractions.h and asm_gcd_base_continued_fractions.h. The division table implementation is the same as the previous entry and was discussed there. Currently the division table is only used if AVX2 is enabled but it could be ported to SSE or scalar code easily. Both implementations have about the same performance.

The initial quotient sequence of gcd(a,b) is the same as the initial quotient sequence of gcd(a*2^n/b, 2^n) for any n. This is because the GCD quotients are the same as the continued fraction quotients of a/b, and the initial continued fraction quotients only depend on the initial bits of a/b. This makes it feasible to have a lookup table since it now only has one input.

a*2^n/b is calculated by doing a double precision division of a/b, and then truncating the lower bits. Some of the exponent bits are used in the table in addition to the fraction bits; this makes each slot of the table vary in size depending on what the exponent is. If the result is outside the table bounds, then the division result is floored to fall back to the euclidean algorithm (this is very rare).

The table is calculated by iterating all of the possible continued fractions that have a certain initial quotient sequence. Iteration ends when all of these fractions are either outside the table or they don't fully contain at least one slot of the table. Each slot that is fully contained by such a fraction is updated so that its quotient sequence equals the fraction's initial quotient sequence. Once this is complete, the cofactor matricies are calculated from the quotient sequences. Each cofactor matrix is 4 doubles.

The resulting code seems to have too many instructions so it doesn't perform very well. There might be some way to optimize it. It was written for SSE so that it would run on both processors.

This might work better on an FPGA possibly with low latency DRAM or SRAM (compared to the euclidean algorithm with a division table). There is no limit to the size of the table but doubling the latency would require the number of bits in the table to also be doubled to have the same performance.

Other GCD code

The gcd_128 function calculates a 128 bit GCD using Lehmer's algorithm. It is pretty straightforward and uses only unsigned arithmetic. Each cofactor matrix can only have two possible signs: [+ -; - +] or [- +; + -]. The gcd_unsigned function uses unsigned arithmetic and a jump table to apply the 64-bit cofactor matricies to the A and B values. It uses ADOX/ADCX/MULX if they are available and falls back to ADC/MUL otherwise. It will track the last known size of A to speed up the bit shifts required to get the top 128 bits of A.

No attempt was made to try to do the A and B long integer multiplications on a separate thread; I wouldn't expect any performance improvement from this.

Threads

There is a master thread and a slave thread. The slave thread only exists for each batch of 5000 or so squarings and is then destroyed and recreated for the next batch (this has no measurable overhead). If the original VDF is used as a fallback, the batch ends and the slave thread is destroyed.

Each thread has a 64-bit counter that only it can write to. Also, during a squaring iteration, it will not overwrite any value that it has previously written and transmitted to the other thread. Each squaring is split up into phases. Each thread will update its counter at the start of the phase (the counter can only be increased, not decreased). It can then wait on the other thread's counter to reach a certain value as part of a spin loop. If the spin loop takes too long, an error condition is raised and the batch ends; this should prevent any deadlocks from happening.

No CPU fences or atomics are required since each value can only be written to by one thread and since x86 enforces acquire/release ordering on all memory operations. Compiler memory fences are still required to prevent the compiler from caching or reordering memory operations.

The GCD master thread will increment the counter when a new cofactor matrix has been outputted. The slave thread will spin on this counter and then apply the cofactor matrix to the U or V vector to get a new U or V vector.

It was attempted to use modular arithmetic to calculate k directly but this slowed down the program due to GMP's modulo or integer multiply operations not having enough performance. This also makes the integer multiplications bigger.

The speedup isn't very high since most of the time is spent in the GCD base case and these can't be parallelized.

Generating proofs

The nested wesolowski proofs (n-wesolowski) are used to check the correctness of a VDF result. (Simple) Wesolowski proofs are described in A Survey of Two Verifiable Delay Functions. In order to prove h = g^(2^T), a n-wesolowski proof uses n intermediate simple wesolowski proofs. Given h, g, T, t1, t2, ..., tn, h1, h2, ..., hn, a correct n-wesolowski proof will verify the following:

h1 = g^(2^t1)
h2 = h1^(2^t2)
h3 = h2^(2^t3)
...
hn = h(n-1)^(2^tn)

Additionally, we must have:

t1 + t2 + ... + tn = T
hn = h

The algorithm will generate at most 64-wesolowski proofs. Some intermediates wesolowski proofs are stored in parallel with the main VDF loop. The goal is to have a n-wesolowski proof almost ready as soon as the main VDF loop finishes computing h = g^(2^T), for a T that we're interested in. We'll call a segment a tuple (y, x, T) for which we're interested in a simple wesolowski proof that y = x^(2^T). We'll call a segment finished when we've finished computing its proof.

Segmenets stored

We'll store finished segments of length 2^x for x being multiples of 2 greater than or equal to 16. The current implementation limits the maximum segment size to 2^30, but this can be increased if needed. Let P = 16+2*l. After each 2^P steps calculated by the main VDF loop, we'll store a segment proving that we've correctly done the 2^P steps. Formally, let x be the form after k*2^P steps, y be the form after (k+1)*2^P steps, for each k >= 0, for each P = 16+2*l. Then, we'll store a segment (y, x, 2^P), together with a simple wesolowski proof.

Segment threads

In order to finish a segment of length T=2^P, the number of iterations to run for is T/k + l*2^(k+1) and the intermediate storage required is T/(k*l), for some parameters k and l, as described in the paper. The squarings used to finish a segment are about 2 times as slow as the ones used by the main VDF loop. Even so, finishing a segment is much faster than producing its y value by the main VDF loop. This allows, by the time the main VDF loop finishes 2^16 more steps, to perform work on finishing multiple segments.

The parameters used in finishing segments, for T=2^16, are k=10 and l=1. Above that, parameters are k=12 and l=2^(P-18). Note that, for P >= 18, the intermediate storage needed for a segment is constant (i.e. 2^18/12 forms stored in memory).

Prover class is responsible to finish a segment. It implements pause/resume functionality, so its work can be paused, and later resumed from the point it stopped. For each unfinished segment generated by the main VDF loop, a Prover instance is created, which will eventually finish the segment.

Segment threads are responsible for deciding which Prover instance is currently running. In the current implementation, there are 3 segment threads (however the number is configurable), so at most 3 Prover instances will run at once, at different threads (other Provers will be paused). The segment threads will always pick the segments with the shortest length to run. In case of a tie, the segments received the earliest will have priority. Every time a new segment arrives, or a segment gets finished, some pausing/resuming of Provers is done, if needed. Pausing is done to have at most 3 Provers running at any time, whilst resuming is done if less than 3 Provers are working, but some Provers are paused.

All the segments of lengths 2^16, 2^18 and 2^20 will be finished relatively soon after the main VDF worker produced them, while the segments of length 2^22 and upwards will lag behind the main VDF worker a little. Eventually, all the higher size segments will be finished, the work on them being done repeatedly via pausing (when a smaller size segment arrives) and resuming (when all smaller size segments are finished).

Currently, 4 more segment threads are added after the main VDF loop finishes 500 million iterations (after about 1 hour of running). This is done to be completely sure even the very big sized segments will be finished. This optimisation is only allowed on machines supporting at least 16 concurrent threads.

Generating n-wesolowski proof

Let T an iteration we are interested in. Firstly, the main VDF Loop will need to calculate at least T iterations. Then, in order to get fast a n-wesolowski proof, we'll concatenate finished segments. We want the proof to be as short as possible, so we'll always pick finished segments of the maximum length possible. If such segments aren't finished, we'll choose lower length segments. A segment of length 2^(16 + 2*p) can always be replaced with 4 segments of length 2^(16 + 2*p - 2). The proof will be created shortly after the main VDF loop produced the result, as the 2^16 length segments will always be up to date with the main VDF loop (and, at worst case, we can always concatenate 2^16 length segments, if bigger sizes are not finished yet). It's possible after the concatenation that we'll still need to prove up to 2^16 iterations (no segment is able to cover anything less than 2^16). This last work is done in parallel with the main VDF loop, as an optimisation.

The program limits the proof size to 64-wesolowski. If number of iterations is very large, it's possible the concatenation won't fit into this. In this case, the program will attempt again to prove every minute, until there are enough large segments to fit the 64-wesolowski limit. However, almost in all cases, the concatenation will fit the 64-wesolowski limit in the first try.

Since the maximum segment size is 2^30 and we can use at most 64 segments in a concatenation, the program will prove at most 2^36 iterations. This can be increased if needed.

Intermediates storage

In order to finish segments, some intermediate values need to be stored for each segment. For each different possible segment length, we use a sliding window of length 20 to store those. Hence, for each segment length, we'll store only the intermediates values needed for the last 20 segments produced by the main VDF loop. Since finishing segments is faster than producing them by the main VDF loop, we assume the segment threads won't be behind by more than 20 segments from the main VDF loop, for each segment length. Thanks to the sliding window technique, the memory used will always be constant.

Generally, the main VDF loop performs all the storing, after computing a form we're interested in. However, since storing is very frequent and expensive (GMP operations), this will slow down the main VDF loop.

For the machines having at least 16 concurrent threads, an optimization is provided: the main VDF loop does only repeated squaring, without storing any form. After each 2^15 steps are performed, a new thread starts redoing the work for 2^15 more steps, this time storing the intermediate values as well. All the intermediate threads and the main VDF loop will work in parallel. The only purpose of the main VDF loop becomes now to produce the starting values for the intermediate threads, as fast as possible. The squarings used in the intermediates threads will be 2 times slower than the ones used in the main VDF loop. It's expected the intermediates will only lag behind the main VDF loop by 2^15 iterations, at any point: after 2^16 iterations are done by the main VDF loop, the first thread doing the first 2^15 intermediate values is already finished. Also, at that point, half of the work of the second thread doing the last 2^15 intermediates values should be already done.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chikvdf-1.1.14.tar.gz (805.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

chikvdf-1.1.14-cp314-cp314-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.14Windows x86-64

chikvdf-1.1.14-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (458.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

chikvdf-1.1.14-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (374.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

chikvdf-1.1.14-cp314-cp314-macosx_13_0_x86_64.whl (366.1 kB view details)

Uploaded CPython 3.14macOS 13.0+ x86-64

chikvdf-1.1.14-cp314-cp314-macosx_13_0_arm64.whl (324.9 kB view details)

Uploaded CPython 3.14macOS 13.0+ ARM64

chikvdf-1.1.14-cp313-cp313-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.13Windows x86-64

chikvdf-1.1.14-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (458.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

chikvdf-1.1.14-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (374.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

chikvdf-1.1.14-cp313-cp313-macosx_13_0_x86_64.whl (366.1 kB view details)

Uploaded CPython 3.13macOS 13.0+ x86-64

chikvdf-1.1.14-cp313-cp313-macosx_13_0_arm64.whl (324.6 kB view details)

Uploaded CPython 3.13macOS 13.0+ ARM64

chikvdf-1.1.14-cp312-cp312-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.12Windows x86-64

chikvdf-1.1.14-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (458.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

chikvdf-1.1.14-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (374.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

chikvdf-1.1.14-cp312-cp312-macosx_13_0_x86_64.whl (366.1 kB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

chikvdf-1.1.14-cp312-cp312-macosx_13_0_arm64.whl (324.6 kB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

chikvdf-1.1.14-cp311-cp311-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.11Windows x86-64

chikvdf-1.1.14-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (459.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

chikvdf-1.1.14-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (374.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

chikvdf-1.1.14-cp311-cp311-macosx_13_0_x86_64.whl (366.6 kB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

chikvdf-1.1.14-cp311-cp311-macosx_13_0_arm64.whl (325.2 kB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

chikvdf-1.1.14-cp310-cp310-win_amd64.whl (2.1 MB view details)

Uploaded CPython 3.10Windows x86-64

chikvdf-1.1.14-cp310-cp310-manylinux_2_28_x86_64.whl (457.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

chikvdf-1.1.14-cp310-cp310-manylinux_2_28_aarch64.whl (373.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

chikvdf-1.1.14-cp310-cp310-macosx_13_0_x86_64.whl (365.1 kB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

chikvdf-1.1.14-cp310-cp310-macosx_13_0_arm64.whl (323.8 kB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

File details

Details for the file chikvdf-1.1.14.tar.gz.

File metadata

  • Download URL: chikvdf-1.1.14.tar.gz
  • Upload date:
  • Size: 805.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chikvdf-1.1.14.tar.gz
Algorithm Hash digest
SHA256 87ed6225e5cec60184fbad066dd772956c9bee9e5e19f6d20954b091490eed93
MD5 e7e2b94e88ed857c5fdb344eeb436cb0
BLAKE2b-256 7f74867d8c3e004ba4ac1b752f0a90b2278e145cf0661e521ce6023ea4b8aa12

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14.tar.gz:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: chikvdf-1.1.14-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chikvdf-1.1.14-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e1d215d84f723fd8cf763d29eea4da31e507128e88c2ece41fb81544866156c6
MD5 cb833c6665a029ce90e981c496c877db
BLAKE2b-256 eaeed6edc1e2747c4699352ed9d676a56395c306ee99832e517e149d61c086ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp314-cp314-win_amd64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6d06e1e577b68c8142a6ac0476ac3af110e8ba5a68496a29ea27066daed720f9
MD5 1addef3de8f49436b63f62e63d590bed
BLAKE2b-256 6fc94af2c44c79466b9bcb788a344ff062d1ca7be89acc953236ef2798d47053

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b43a7ff01f121271a2529fe04c2e132faab867ab27a103c36990a2db14081298
MD5 a84e6262bfaa54c2f53d5eff1345d9e8
BLAKE2b-256 39351a1635a3957b5f926b5c670fadec07a5d41af9cca755d33bf0023fe0ed66

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp314-cp314-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp314-cp314-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 981e3956fddebf9999192bd97d7dceea67aad74f25462ea9b11f0b8cb5924002
MD5 e819b3279605c378f777530481ebc340
BLAKE2b-256 2d2edf25a449cd93ab200bf5f0faa26499fcd5f4b5f1bf6714e7232e8daafece

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp314-cp314-macosx_13_0_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp314-cp314-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp314-cp314-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 983488b149f7db9419d77745b021f209958234b1d2083d483fd18b849a1a4eda
MD5 6ea4876c28ea3122780f0438a814d237
BLAKE2b-256 5ab5e9cf1fa333bb4764c3e032019691835efb021b5d9086c946a519a7d893ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp314-cp314-macosx_13_0_arm64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: chikvdf-1.1.14-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chikvdf-1.1.14-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 90d2c3be0c56d0a8614f68f226f4f99fe9e9c2d3b313fec1437853bf3ec4cbc2
MD5 51e1a9d3359f885081878cbea1137756
BLAKE2b-256 333e267131ae8955845f9f6556ba5784ea01e870aa6b4496bf1a8d4fcbc0ab8c

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp313-cp313-win_amd64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6582f160fc214bb94460d00579f1a62f77bfbc0da2c90f1dc97e24eb0e03972a
MD5 3dfc093c62fbbbc89959d0748310feee
BLAKE2b-256 5c82d826a6c86b6d5af0e92199a9bb960f7ea892333290f85cdf3833db1e8b70

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c926c0b7a9eb14439b70ccc986f91659993d2d48475236886cfb7265d86b1f00
MD5 5681c605f48cf18f66ddaab0a1dfdb77
BLAKE2b-256 fdfb2cb30233f6af94209a077dd78441c37fd6aa56beb8716301cdc742852c7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp313-cp313-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp313-cp313-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 acc1e2343d57a5d2a828d9666fefcb0c2178b1a7f1a3a2bcad30ae320eace626
MD5 c5ef191017c11c68e0ddc27fdcfa18f5
BLAKE2b-256 30bc18610f0e8d796c39d628fb2611c55ee9997e6a0af15257210e1c5cae9299

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp313-cp313-macosx_13_0_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp313-cp313-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp313-cp313-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 6fadc66e9e1ed6f91b6d687b98730cd932dd4e9f547c372b442a0080959db255
MD5 1633d8c12166e80f384b85c7762e83c6
BLAKE2b-256 2ca5a3df880e5f1c72d32df6a21cc536a6070e9cab55070fd9869c44d317ec9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp313-cp313-macosx_13_0_arm64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: chikvdf-1.1.14-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chikvdf-1.1.14-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f01d2537633092b69e23ab42bb99c93678235bdec0c0b829b7d07f090fa45e57
MD5 99dbacc5494380b866eb085091f9eec1
BLAKE2b-256 fc7b1f0edb8c333b6c3110170c5f9c844d8922dffd4b323fe49f25f3c2f6bbb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp312-cp312-win_amd64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5c5198fd90348a8e32003f48adbcbd07b97503989b8663350e27eabdb0372454
MD5 1c104db8769c141975596782b0095f06
BLAKE2b-256 92191604682f413f99be5975930c96331fa65262a63f8b9836c4ce9c1e32ddd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 8066d60b1ccffcf15788d9e131e0dfd1237e4675ded2c54ad1dda2cf909afb39
MD5 b4b5414f72c3ce26ec25ad4b442c3b0f
BLAKE2b-256 9b81bc4e5f877667c42dda2f0554e039c98e8c479e43c66944e7c9716cf9f6e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 d4e16cb050cced2326fb525aeec0c097d617c61921bb2cc50bb062131310cd6f
MD5 fbab3a930110ead22a34b291c08cf31a
BLAKE2b-256 b3892150de10f98018b4662fd2edfc7cdd304c0a47c63497a8d27209c6643cf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp312-cp312-macosx_13_0_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 5b96eedc33685c51352c76831f865e7e66eda088d9e3f6fd9c199182cf138c0a
MD5 cd868a73c78dc9c0a2f38dff447246cb
BLAKE2b-256 d190daad84a3b7bd8e33deb79b531b60d4987c8cff83b3df804f407bb8bea488

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp312-cp312-macosx_13_0_arm64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: chikvdf-1.1.14-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chikvdf-1.1.14-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1645e532f6eadd7a83ba3ec42b568e0afe26add8fc4b4ac5a5f7dc917ffd8319
MD5 ab63be8de9719f4f38c2221bcb19b9d7
BLAKE2b-256 0d54fe3626738d53b687492ab24aacc6bea6612cd28e7f6fd1c57b777aa6afe6

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp311-cp311-win_amd64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 df24d388b1a5f79c067c1c3c1066f136b0fdb082580ae410ff7041ecd89563f2
MD5 72e76d680442ecbf2de211aa809a0591
BLAKE2b-256 13aaa89e8dd870678a16d192abd7f89b5b58a431b0f8b0c51f47ea618580d400

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e2cc56ce55395c9e22ccb0e5ee9e7d8b3d134d187995cbe533f95b01bf2606b1
MD5 7255b11d8869fd3c39a17b7c7e5fedaf
BLAKE2b-256 cc02d4ab5154f4ca2eb81ce2d80cd837d977d38d8dc83af9e386057a6ed8942f

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 9f2add45d762b065b7e7a9df27064196ce9e436e4219d9c63c3e37171baa681d
MD5 043a6a85628fbb859ec2cf01fe7b59a0
BLAKE2b-256 8c8f4032c699101dc7292bf2e90af95eace6c54493af6666b79e77f8e0b934ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp311-cp311-macosx_13_0_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 98913eea1b90cca629f3e1500a664264e4b27a6ec00771116003fce730928ead
MD5 0ca43f42e7e3704524e845f13411b063
BLAKE2b-256 22915bc7c61bbba5f3f0e5b2eb99007bd7e27396048ec5f87ce0cf3f8ddd4fdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp311-cp311-macosx_13_0_arm64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: chikvdf-1.1.14-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 2.1 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chikvdf-1.1.14-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4e0a6e184d75463ca80fd2e39ec7c110d4bbcb7913124ef3c48cd382f025dba8
MD5 26b851c6e60dcdb4872ec24317d13c8f
BLAKE2b-256 45c9684f217d689c864ec9345db33e22447fa94867cea6b9288495995e5b504b

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp310-cp310-win_amd64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 866177d6d9b086b5ca730a456f4a9562f6b5536263f39399432839288cb1e0c5
MD5 74b05828f49ad394926d7091fc6d516e
BLAKE2b-256 3b80259454edcc6d6a062a59e9a9a1330e955ec0eb98f7f9e3673ba72117cc78

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 d0088544fd2a6631a3cc15117c5ebebf0a034aafe8ab6dc58d625cdcc4c89f5f
MD5 ad0213297f7c4114c9989b29aca68ea9
BLAKE2b-256 3133feb611091e2ecb5c356a30b5058a2ad746114cd3e9a4db0dba26082d0683

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 4572a8f65f71b0ff676a0c67ac0846569c535bef81c2a83ee11b8499c3ceeb56
MD5 ee6e45b9097be65e6923df816895edfd
BLAKE2b-256 1110553805f06eb0c076aa1948e5420147526990499464a481623a6138180593

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp310-cp310-macosx_13_0_x86_64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chikvdf-1.1.14-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for chikvdf-1.1.14-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 0d66275e20a939174e51d1ff3000845c990b4c65699cd152d4468ffc7e7c4f7d
MD5 de2508efb5f8aba88ef37c7db44ccde9
BLAKE2b-256 6bd2a939165c139be1fd409d041ff6adf9f8a48f9fb4a084ef4e35bc084f9438

See more details on using hashes here.

Provenance

The following attestation bundles were made for chikvdf-1.1.14-cp310-cp310-macosx_13_0_arm64.whl:

Publisher: build.yml on Chik-Network/chikvdf

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page