Skip to content

Stratum v2 Template Provider common functionality#49

Closed
Sjors wants to merge 9 commits into2024/06/sv2_connectionfrom
2024/07/sv2-tp-common
Closed

Stratum v2 Template Provider common functionality#49
Sjors wants to merge 9 commits into2024/06/sv2_connectionfrom
2024/07/sv2-tp-common

Conversation

@Sjors
Copy link
Owner

@Sjors Sjors commented Jul 19, 2024

@Sjors
Copy link
Owner Author

Sjors commented Aug 13, 2024

Updated to the latest interface changes proposed in bitcoin#30409 and #53.

@Sjors Sjors force-pushed the 2024/06/sv2_connection branch from b549fd6 to 22d033c Compare August 13, 2024 17:14
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch 2 times, most recently from 491755c to 16d2381 Compare August 13, 2024 18:07
@Sjors Sjors force-pushed the 2024/06/sv2_connection branch 3 times, most recently from 4f957ee to b69544c Compare August 29, 2024 11:49
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch 2 times, most recently from ca73422 to 4fa25e0 Compare August 29, 2024 11:59
@Sjors
Copy link
Owner Author

Sjors commented Aug 29, 2024

Rebased for CMake

@Sjors
Copy link
Owner Author

Sjors commented Aug 30, 2024

One test still seems brittle:

src/test/sv2_template_provider_tests.cpp(256): fatal error: in "sv2_template_provider_tests/client_tests": critical check tester.GetBlockTemplateCount() == 3 has failed [2 != 3]

@Sjors Sjors force-pushed the 2024/06/sv2_connection branch from b69544c to 1ca68d2 Compare September 5, 2024 12:57
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch from 1f720ff to 1912743 Compare September 5, 2024 15:56
@Sjors Sjors force-pushed the 2024/06/sv2_connection branch from 1ca68d2 to b578e0a Compare September 10, 2024 14:54
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch 2 times, most recently from 598f08a to 436dc4d Compare September 11, 2024 05:39
@Sjors
Copy link
Owner Author

Sjors commented Sep 11, 2024

Moved TemplateProvider from node to common so that in #48 bitcoin-mine does not depend on bitcoin-node.

@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch from 436dc4d to 46fa8f1 Compare September 11, 2024 06:37
@Sjors Sjors force-pushed the 2024/06/sv2_connection branch from b578e0a to 489c9fb Compare September 19, 2024 15:02
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch 2 times, most recently from 7db898e to 765af74 Compare September 19, 2024 16:13
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch from 91ea715 to 4c07541 Compare January 24, 2025 14:02
@Sjors
Copy link
Owner Author

Sjors commented Jan 24, 2025

Rebased after bitcoin#31325, bitcoin#31581.

The rebase includes bitcoin#31376 which ensures that new templates account for the timewarp rule (important on testnet4 because of the MTP drift).

The rebase also includes bitcoin#31583 which makes getmininginfo a lot more useful! E.g. if displays the difficulty and target for the next block.

Using the latest version of bitcoin#31283 which has waitNext() return a new template once testnet difficulty drops after 20 minutes. It also requires a small refactor.

In anticipation of bitcoin#31384 I changed the block_reserved_weight calculation.

@Sjors Sjors force-pushed the 2024/06/sv2_connection branch from 6da01f6 to deb8e90 Compare January 27, 2025 10:16
@Sjors Sjors force-pushed the 2024/07/sv2-tp-common branch from 4c07541 to 0d588c2 Compare January 27, 2025 10:29
@Sjors
Copy link
Owner Author

Sjors commented Jan 27, 2025

Rebased and included #45 / stratum-mining/sv2-spec#86.

@Sjors
Copy link
Owner Author

Sjors commented Feb 10, 2025

Possible thread issue, found by CI in #68: https://cirrus-ci.com/task/5072000852426752?logs=ci#L3303

@Sjors
Copy link
Owner Author

Sjors commented Feb 10, 2025

Rebased after bitcoin#31384.

@Sjors
Copy link
Owner Author

Sjors commented Feb 21, 2025

Rebased in hopes of making #80 magically go away.

@Sjors
Copy link
Owner Author

Sjors commented Mar 6, 2025

I squashed 4c132d067586ede434f6d28d40b7de9d666efa9e "Incrementally update sv2 block template" into 61eeca1fc63779f5b22017db48bcb5d9d2d1404d "Sv2: construct and submit block templates" and then refactored the combined commit ad3120b to fix #80. Every client now has its own thread in the TemplateProvider.

It could be improved further, e.g. the handshake is blocking and we're not using optimistic send, but I'm going to wait to see what @theuni comes up with in terms of an alternative approach to Connman.

@Sjors
Copy link
Owner Author

Sjors commented Mar 20, 2025

Occasional failing on CentOS probably means the tests need to be made more robust. https://cirrus-ci.com/task/5262823086882816

@Sjors
Copy link
Owner Author

Sjors commented Apr 15, 2025

Rebased after bitcoin#31785 landed, which completes the interface changes needed for the Template Provider. Dropped the use of waitTipChanged() on startup and added a shutdown check in ThreadSv2ClientHandler().

@Sjors
Copy link
Owner Author

Sjors commented Jul 8, 2025

CI fails because since bitcoin#29307 we have to fclose files. I'll update 9e6d5d6485a108f938fe2333c2d17b3113956695 to do that.

@Sjors
Copy link
Owner Author

Sjors commented Jul 14, 2025

Note to self for the next update, apply:

diff --git a/src/sv2/template_provider.cpp b/src/sv2/template_provider.cpp
index a4331c6cb3..d83b86be69 100644
--- a/src/sv2/template_provider.cpp
+++ b/src/sv2/template_provider.cpp
@@ -66,7 +66,7 @@ Sv2TemplateProvider::Sv2TemplateProvider(interfaces::Mining& mining) : m_mining{
     version_pubkey_bytes[1] = 0;
     m_authority_pubkey = XOnlyPubKey(authority_key.GetPubKey());
     std::copy(m_authority_pubkey.begin(), m_authority_pubkey.end(), version_pubkey_bytes.begin() + 2);
-    LogInfo("Template Provider authority key: %s\n", EncodeBase58Check(version_pubkey_bytes));
+    LogPrintLevel(BCLog::SV2, BCLog::Level::Info, "Template Provider authority key: %s\n", EncodeBase58Check(version_pubkey_bytes));
     LogTrace(BCLog::SV2, "Authority key: %s\n", HexStr(m_authority_pubkey));

@Sjors
Copy link
Owner Author

Sjors commented Aug 25, 2025

Last rebase before I'm going to split off the sv2 functionality into a fresh codebase.

Sjors and others added 9 commits August 25, 2025 16:52
The template provider will listen for a Job Declarator client.
It can establish a connection and detect various protocol errors.

Co-Authored-By: Christopher Coverdale <chris.coverdale24@gmail.com>
Co-Authored-By: Fi3
Co-authored-by: Christopher Coverdale <chris.coverdale24@gmail.com>
Incrementally update the template.
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
On by default.

Allow Stratum v2 miners to opt out, pending more discussion on the BIP.
@Sjors
Copy link
Owner Author

Sjors commented Aug 27, 2025

This code is now part of https://github.com/Sjors/sv2-tp; feedback and pull requests are welcome there!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant