Skip to content

Commit c89d080

Browse files
authored
xearl4's ApproximateParameter fix and GIL related parameter copies (#215)
* duplicating xearl4 pr to test ci more * copy * more copies to appease the gil
1 parent 816356b commit c89d080

File tree

3 files changed

+30
-19
lines changed

3 files changed

+30
-19
lines changed

src/callback.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class OneWesolowskiCallback: public WesolowskiCallback {
7676
uint32_t k, l;
7777
this->wanted_iter = wanted_iter;
7878
if (wanted_iter >= (1 << 16)) {
79-
ApproximateParameters(wanted_iter, k, l);
79+
ApproximateParameters(wanted_iter, l, k);
8080
} else {
8181
k = 10;
8282
l = 1;

src/provers.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class OneWesolowskiProver : public Prover {
1111
{
1212
this->intermediates = intermediates;
1313
if (num_iterations >= (1 << 16)) {
14-
ApproximateParameters(num_iterations, k, l);
14+
ApproximateParameters(num_iterations, l, k);
1515
} else {
1616
k = 10;
1717
l = 1;

src/python_bindings/fastvdf.cpp

+28-17
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ PYBIND11_MODULE(chiavdf, m) {
2525
const string& x_s, const string& y_s,
2626
const string& proof_s,
2727
uint64_t num_iterations) {
28-
py::gil_scoped_release release;
2928
integer D(discriminant);
30-
form x = DeserializeForm(D, (const uint8_t *)x_s.data(), x_s.size());
31-
form y = DeserializeForm(D, (const uint8_t *)y_s.data(), y_s.size());
32-
form proof = DeserializeForm(D, (const uint8_t *)proof_s.data(), proof_s.size());
29+
std::string x_s_copy(x_s);
30+
std::string y_s_copy(y_s);
31+
std::string proof_s_copy(proof_s);
32+
py::gil_scoped_release release;
33+
form x = DeserializeForm(D, (const uint8_t *)x_s_copy.data(), x_s_copy.size());
34+
form y = DeserializeForm(D, (const uint8_t *)y_s_copy.data(), y_s_copy.size());
35+
form proof = DeserializeForm(D, (const uint8_t *)proof_s_copy.data(), proof_s_copy.size());
3336

3437
bool is_valid = false;
3538
VerifyWesolowskiProof(D, x, y, proof, num_iterations, is_valid);
@@ -41,16 +44,19 @@ PYBIND11_MODULE(chiavdf, m) {
4144
const string& x_s,
4245
const string& proof_blob,
4346
const uint64_t num_iterations, const uint64_t disc_size_bits, const uint64_t recursion) {
47+
std::string discriminant_copy(discriminant);
48+
std::string x_s_copy(x_s);
49+
std::string proof_blob_copy(proof_blob);
4450
py::gil_scoped_release release;
45-
std::string proof_blob_str(proof_blob);
46-
uint8_t *proof_blob_ptr = reinterpret_cast<uint8_t *>(proof_blob_str.data());
47-
int proof_blob_size = proof_blob.size();
51+
uint8_t *proof_blob_ptr = reinterpret_cast<uint8_t *>(proof_blob_copy.data());
52+
int proof_blob_size = proof_blob_copy.size();
4853

49-
return CheckProofOfTimeNWesolowski(integer(discriminant), (const uint8_t *)x_s.data(), proof_blob_ptr, proof_blob_size, num_iterations, disc_size_bits, recursion);
54+
return CheckProofOfTimeNWesolowski(integer(discriminant_copy), (const uint8_t *)x_s_copy.data(), proof_blob_ptr, proof_blob_size, num_iterations, disc_size_bits, recursion);
5055
});
5156

5257
m.def("prove", [] (const py::bytes& challenge_hash, const string& x_s, int discriminant_size_bits, uint64_t num_iterations) {
5358
std::string challenge_hash_str(challenge_hash);
59+
std::string x_s_copy(x_s);
5460
std::vector<uint8_t> result;
5561
{
5662
py::gil_scoped_release release;
@@ -59,7 +65,7 @@ PYBIND11_MODULE(chiavdf, m) {
5965
challenge_hash_bytes,
6066
discriminant_size_bits
6167
);
62-
form x = DeserializeForm(D, (const uint8_t *) x_s.data(), x_s.size());
68+
form x = DeserializeForm(D, (const uint8_t *) x_s_copy.data(), x_s_copy.size());
6369
result = ProveSlow(D, x, num_iterations);
6470
}
6571
py::bytes ret = py::bytes(reinterpret_cast<char*>(result.data()), result.size());
@@ -74,11 +80,14 @@ PYBIND11_MODULE(chiavdf, m) {
7480
const uint64_t num_iterations, const uint64_t recursion) {
7581
std::pair<bool, std::vector<uint8_t>> result;
7682
{
83+
std::string discriminant_copy(discriminant);
84+
std::string B_copy(B);
85+
std::string x_s_copy(x_s);
86+
std::string proof_blob_copy(proof_blob);
7787
py::gil_scoped_release release;
78-
std::string proof_blob_str(proof_blob);
79-
uint8_t *proof_blob_ptr = reinterpret_cast<uint8_t *>(proof_blob_str.data());
80-
int proof_blob_size = proof_blob.size();
81-
result = CheckProofOfTimeNWesolowskiWithB(integer(discriminant), integer(B), (const uint8_t *)x_s.data(), proof_blob_ptr, proof_blob_size, num_iterations, recursion);
88+
uint8_t *proof_blob_ptr = reinterpret_cast<uint8_t *>(proof_blob_copy.data());
89+
int proof_blob_size = proof_blob_copy.size();
90+
result = CheckProofOfTimeNWesolowskiWithB(integer(discriminant_copy), integer(B_copy), (const uint8_t *)x_s_copy.data(), proof_blob_ptr, proof_blob_size, num_iterations, recursion);
8291
}
8392
py::bytes res_bytes = py::bytes(reinterpret_cast<char*>(result.second.data()), result.second.size());
8493
py::tuple res_tuple = py::make_tuple(result.first, res_bytes);
@@ -89,11 +98,13 @@ PYBIND11_MODULE(chiavdf, m) {
8998
const string& x_s,
9099
const string& proof_blob,
91100
const uint64_t num_iterations, const uint64_t recursion) {
101+
std::string discriminant_copy(discriminant);
102+
std::string x_s_copy(x_s);
103+
std::string proof_blob_copy(proof_blob);
92104
py::gil_scoped_release release;
93-
std::string proof_blob_str(proof_blob);
94-
uint8_t *proof_blob_ptr = reinterpret_cast<uint8_t *>(proof_blob_str.data());
95-
int proof_blob_size = proof_blob.size();
96-
integer B = GetBFromProof(integer(discriminant), (const uint8_t *)x_s.data(), proof_blob_ptr, proof_blob_size, num_iterations, recursion);
105+
uint8_t *proof_blob_ptr = reinterpret_cast<uint8_t *>(proof_blob_copy.data());
106+
int proof_blob_size = proof_blob_copy.size();
107+
integer B = GetBFromProof(integer(discriminant_copy), (const uint8_t *)x_s_copy.data(), proof_blob_ptr, proof_blob_size, num_iterations, recursion);
97108
return B.to_string();
98109
});
99110
}

0 commit comments

Comments
 (0)