Work provenance in computing pools
11695752 · 2023-07-04
Assignee
Inventors
Cpc classification
H04L9/3239
ELECTRICITY
H04L9/3297
ELECTRICITY
H04L9/30
ELECTRICITY
G06F9/5011
PHYSICS
International classification
G06F9/50
PHYSICS
H04L9/30
ELECTRICITY
H04L9/32
ELECTRICITY
Abstract
A system and method for participating in and operating a distributed computing pool are disclosed. Computing pools combine computational resources from a plurality of computing devices over a network by splitting jobs into smaller jobs and distributing those smaller jobs to the computing devices so that they can be solved in parallel with little or no overlap in the work performed. The computing devices attempt to find solutions to the smaller jobs. Solutions found are signed and submitted back to the pool. The pool uses the signature to confirm the true origin of the solution and that the solution has not been tampered with.
Claims
1. A method for participating in a computing pool that combines computational resources over a network, the method comprising: authenticating a computing device by sending a username, a password, and a public key from the computing device to the pool via the network, wherein the public key corresponds to a private key associated with the computing device; sending a connection request from the computing device to the pool; receiving at the computing device a response to the connection request from the pool, wherein the response comprises a job; executing the job on the computing device to calculate a solution; signing the solution on the computing device with a signature based on the private key; sending the signed solution from the computing device to the pool; receiving a reward from the pool in response to submitting the signed solution if the signature of the signed solution is verified; authenticating a second computing device by sending a second username and a second password from the second computing device to the pool via the network; sending a second connection request from the second computing device to the pool; receiving at the second computing device a second response to the second connection request from the pool, wherein the second response comprises a second job; executing the second job on the second computing device to calculate a second solution; sending the second solution in unsigned form from the second computing device to the pool; and receiving a reduced reward from the pool in response if the unsigned second solution is valid and the pool is first to solve a blockchain block corresponding to the second solution.
2. The method of claim 1, further comprising creating an SSL/TLS connection from the computing device to the pool.
3. The method of claim 1, wherein the reward is received from the pool in response to submitting the signed solution if (i) the signature of the signed solution is verified, (ii) the signed solution is valid, and (iii) the pool is first to solve a blockchain block.
4. The method of claim 1, further comprising receiving at a third computing device a share rejected notification from the pool in response to submitting an unsigned third solution to the pool.
5. A method for operating a computing pool, the method comprising: receiving a connection request from a computing device to a pool; responding to the connection request by sending a job to the computing device; waiting for the computing device to execute the job and respond with a solution signed by a private key; verifying the signature of the solution with a public key; verifying the solution; granting a first reward to the computing device if the signature is properly verified; rejecting solutions that are not properly verified; determining whether the solution is a block; submitting the solution to a blockchain node; receiving a username and a password from a second computing device via a network to authenticate the second computing device; receiving a second connection request from the second computing device to the pool; responding to the second connection request by sending a second job to the second computing device; waiting for the second computing device to execute the second job and respond with a second solution; receiving the second solution in unsigned form from the second computing device to the pool; and granting a reduced reward from the pool to the second computing device if the unsigned second solution is verified and the pool is first to solve a blockchain block corresponding to the second solution.
6. The method of claim 5, further comprising creating an SSL/TLS connection from the computing device to the pool.
7. The method of claim 5, further comprising granting a reward to the computing device for signed solutions that are verified if the signature of the signed solution is verified and the pool is first to solve a current blockchain block.
8. The method of claim 7, wherein the reward is proportional to the number of shares and share difficulty submitted by the computing device for the current blockchain block.
9. The method of claim 7, wherein the reward is proportional to the number of shares and share difficulty submitted out of the last N verified shares received by the pool.
10. The method of claim 7, further comprising: receiving an unsigned third solution from a third computing device; verifying the unsigned third solution; and refraining from granting any reward to the third computing device for the unsigned third solution.
11. The method of claim 7, further comprising: receiving an unsigned third solution from a third computing device; rejecting the unsigned third solution before performing any verification; and refraining from granting any reward to the third computing device for the rejected unsigned third solution.
12. A method for operating a computing pool, the method comprising: operating a computing pool management application on a server; in response to receiving at the server a connection request from a computing device attempting to connect to the pool, responding by sending a job from the server to the computing device; waiting for the computing device to execute the job and respond with a solution; signing the solution on the computing device with a private key; sending the signed solution from the computing device to the pool; in response to receiving the solution to the job from the computing device, verifying the correctness of the solution; verifying a signature of the solution with a public key; allocating a share of any rewards the pool receives for the job to the computing device if the solution is correct and the signature is properly verified; receiving a username and a password from a second computing device via a network to authenticate the second computing device; receiving a second connection request from the second computing device to the pool; responding to the second connection request by sending a second job from the server to the second computing device; waiting for the second computing device to execute the second job and respond with a second solution; receiving the second solution in unsigned form from the second computing device; and granting a reduced share of the rewards the pool receives to the second computing device if the unsigned second solution is verified and the pool is first to solve a blockchain block corresponding to the second solution.
13. The method of claim 12, further comprising: not allocating any share of the rewards the pool receives in response to solutions without verified signatures.
14. The method of claim 12, further comprising: allocating a reduced share of the rewards the pool receives in response to valid solutions without verified signatures.
15. The method of claim 5, wherein verifying the signature includes comparing the private key to the public key.
16. The method of claim 15, wherein verifying the signature includes: determining that the signature is valid when the private key matches or corresponds to the public key; and determining that the signature is invalid when the private key does not match or correspond to the public key.
17. The method of claim 5, wherein verifying the signature includes: looking up the public key of the computing device on a data store or network; and comparing the private key to the public key.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1)
(2)
(3)
(4)
(5)
DETAILED DESCRIPTION
(6) Reference will now be made in detail to embodiments of the present disclosure, examples of which are described herein and illustrated in the accompanying drawings. While the present disclosure will be described in conjunction with embodiments and/or examples, it will be understood that they do not limit the present disclosure to these embodiments and/or examples. On the contrary, the present disclosure covers alternatives, modifications, and equivalents.
(7) Various embodiments are described herein for various apparatuses, systems, and/or methods. Numerous specific details are set forth to provide a thorough understanding of the overall structure, function, manufacture, and use of the embodiments as described in the specification and illustrated in the accompanying drawings. It will be understood by those skilled in the art, however, that the embodiments may be practiced without such specific details. In other instances, well-known operations, components, and elements have not been described in detail so as not to obscure the embodiments described in the specification. Those of ordinary skill in the art will understand that the embodiments described and illustrated herein are non-limiting examples, and thus it can be appreciated that the specific structural and functional details disclosed herein may be representative and do not necessarily limit the scope of the embodiments.
(8) Turning now to
(9) In one embodiment, CPU/controller 160 is configured to receive jobs from server 100 via network 102 and then distribute them to the ASICs/GPUs 170 on processing/hash boards 150. Results from ASICs/GPUs 170 that meet a specified minimum difficulty are passed to pool management application 130 executing on server 100 by controller 160 after being signed by the computing device's private key.
(10) Server 100 may comprise one or more processors 120, a data storage device 124, and a network interface 122 configured to enable communication between server 100 and other devices including computing devices 110 and other participants in the blockchain network. Server 100 may be configured to execute a pool management application 130 that comprises a number of different modules that, when executed by processor 120, perform operations that manage computing devices 110 in their work for the blockchain network. For example, account module 132 is configured to interact with users so that they can create pool accounts. This includes for example setting users names and passwords, contact information, managing the accounts in which rewards from the pool should be deposited (e.g., wallet addresses), and receiving a public key for each computing device 110. Interaction by the user/owner of computing device 110 with account module 132 is preferably via an encrypted secure connection (e.g., SSL/TLS).
(11) Pool management application 130 may also include a job dispatch module 134 that when executed causes jobs to be dispatched to computing devices 110 via network 102. The jobs may for example include information to be hashed, a target difficulty, and one or more starting nonce values. Upon receiving the jobs, computing devices 110 may be configured to begin calculating hashes for the received information. If the resulting hash does not meet the specified minimum difficulty, the computing device 110 may be configured to repeatedly increment the one or more nonces and then continue hashing. If the resulting hash meets the specified minimum difficulty, the computing device 110 may be configured to sign the results with a private key and send them to the pool management application 130 on server 100 via network 102.
(12) In response to receiving a signed result from computing devices 110, pool management application 130 may be configured to check the signature by executing signature checking module 138. Signature checking module 136 may be configured to lookup the public signature for the submitting computing device 110 (e.g., from data storage 124 or network 102) and use it to check the signature of the signed results. If the signature indicates that the results did indeed come from the corresponding computing device 110 and that the results were not tampered with, then pool management application 130 may be configured to pass the results to share checking module 138 which when executed is configured to confirm that the nonce(s) provided by the computing device 110 is/are valid, e.g., meet the minimum difficulty requirement specified by the pool management application 130. If the results meet the blockchain network's current difficulty and have not been rendered moot by a prior solution, share checking module 138 may be configured to send the results as a solved block to the blockchain network via network 102. The pool management application 130 may then be configured to invoke rewards module 139 to allocate the rewards to the user accounts from computing devices 110 in accordance with a reward distribution algorithm that users/owners of computing devices 110 agreed to as part of the pool signup and device registration process. For example, reward distribution algorithms implemented by rewards module 139 may include payment per share based on difficulty or payment per last N shares based on difficulty, but other algorithms are possible and contemplated. For example, a greater share of rewards may for example be allocated to the computing device 110 that submitted the winning share (i.e., rewarding good luck).
(13) Pool management application 130 is preferably implemented in software (e.g., instructions stored on a non-volatile storage medium such as a hard disk, flash drive, or DVD-ROM), but hardware implementations are also possible. Software implementations of management application 130 may be written in one or more programming languages or combinations thereof, including low-level or high-level languages, with examples including Java, Ruby, JavaScript, Python, C, C++, C #, or Rust. The program code may execute entirely on one or more servers 100 as a stand-alone software package, or partly on server 100 and partly on a user's computer or device or a remote computer. In the latter scenario, the remote computer may be connected to server 100 through network 102 or a different network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet service provider). Alternatively, the functions of the pool management application 130 or one or more modules 132-139 may be implemented in whole or in part by integrated circuits (e.g., FPGAs) or other hardware (not shown).
(14) Turning now to
(15) Computing device 110 calculates hashes for block 220 by iterating through the possible values of nonce 266. The calculated hashes are checked to see if they match the desired difficulty 254 (e.g., by beginning or ending with a specified number of zeros) specified by the server 100. Once computing device 110 has checked all possible values of nonce 266, computing device 110 may increment the second extra nonce 260 and then start over checking possible values of nonce 266. Any hashes that satisfy the specified difficult 254 are conveyed to server 100.
(16) In one embodiment, the solutions are conveyed by providing selected information 230 to the server 100, including for example the compute device's worker name 292 (typically established as part of the miner setup or subscription/authorization process), the second extra nonce 260, the job ID 250, the timestamp 286, and the nonce 266.
(17) If the pool is the first to determine a hash that satisfies the blockchain's current specified difficulty, the pool submits the block 220 to the blockchain and receives a reward that the pool then distributes to pool members according to the pool's specified reward sharing algorithm. Block 220 may for example comprise a version field 280, a hash of the previous block's header 282, a Merkel tree root for the transaction or transactions 256 being included in the block 220, a timestamp 252, a difficulty value 288, and a nonce 266.
(18) Turning now to
(19) Once the pool account has been created, the pool participant may use that information to configure the user's computing devices 110 that will be participating in the pool. As part of the configuration process, configuration information 306 may be sent from computer 300 to one or more computing devices 110. Configuration information may comprise, for example, a URL or IP address and port number combination that computing device 110 may use to communicate with the pool, an account id, a miner id (to differentiate between multiple computing devices 110 that are mining on the same account), and a password (which may be needed for security purposes in order to update the computing device's settings). In some embodiments configuration information 306 may be communicated to computing device 110 via SSH connection or SSL via computing device 110's web interface.
(20) Once configured and ready to mine, computing device 110 may be configured to send a subscription message 310 to the pool managed by server 100. In response, server 100 may send a subscription response message 320 to computing device 110. In one embodiment, subscription response message 320 may comprise a subscription ID, and additional information such as a minimum difficulty (i.e., a difficulty below which the pool will not accept completed work or “shares”). In response, computing device 110 may respond with an authorization message 330 which may comprise the computing device's configured account ID, miner ID, password and a public key. The public key may be generated by a key module configured to generate public and private key pairs for computing device 110. In some embodiments the key module may execute on computing device 110, in other embodiments it may execute on computer 300, with the keys being provided to computing device 110 with the pool configuration information 306.
(21) In response to the authorization request message 330, server 100 may be configured to respond with an authorization status response message 340, indicating either success or failure. If success is indicated, server 100 may follow up with a mining job 350. This may include a job ID and information required or helpful for computing device 110 to perform the request job. For example, this may include the hash of the previous block, one or more parts of the coinbase transaction for the current block being mined, and a nonce to start from.
(22) In response to receiving the work/job, computing device 110 may be configured to begin the job, e.g., beginning calculating hashes and iterating through nonces in the assigned range. In the event that computing device 110 finds a hash/solution that meets the minimum difficulty specified by the pool, a submit share message 360 may be sent. The submit share message 360 may include information such as the username, job ID, and the nonce or nonces that resulted in the solution that met the specified minimum difficulty. Computing device 110 may be configured to cryptographically sign the submit share message 360 with a private key corresponding to the public key that was provided to server 100 earlier as part of the authorize message 330.
(23) Server 100 may be configured to check the signature of any received submit share messages that are signed to confirm the provenance of the share being submitted. Beneficially, if the signature corresponds to computing device 110's previously submitted public key, server 100 will know that the share validly came from computing device 110. Conversely, if the signature is missing or does not correspond to computing device 110's previously submitted public key, server 100 will know that the share was tampered with (in the event of a malformed signature) or that the share is of unknown provenance (in the event of no signature).
(24) Server 100 may be configured to respond with an accepted or rejected/declined share message 370. In the event of a rejected/declined share, server 100 may provide an error code to indicate why the share was rejected (e.g., invalid or missing signature).
(25) Computing device 110 may be configured to request additional jobs via a get work message 380, and server 100 may be configured to respond, or send of it is own accord (e.g., when the current block is solved) a new mining job notification message 390. Mining job notification message 390 may include a job ID, additional parameters that computing device 110 may require to perform the job, and also an optional indicator of whether or not to clear the computing device's current job queue and start immediately on the new job.
(26) In some embodiments, a secure network connection (e.g., SSL/TLS) may be use for one or more of the communications between the computing device 110 and server 100. For example, the authentication message 330 may be communicated over the secure network connection.
(27) Turning now to
(28) Turning now to
(29) Reference throughout the specification to “various embodiments,” “with embodiments,” “in embodiments,” or “an embodiment,” or the like, means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. Thus, appearances of the phrases “in various embodiments,” “with embodiments,” “in embodiments,” or “an embodiment,” or the like, in places throughout the specification are not necessarily all referring to the same embodiment. Furthermore, the particular features, structures, or characteristics may be combined in any suitable manner in one or more embodiments. Thus, the particular features, structures, or characteristics illustrated or described in connection with one embodiment/example may be combined, in whole or in part, with the features, structures, functions, and/or characteristics of one or more other embodiments/examples without limitation given that such combination is not illogical or non-functional. Moreover, many modifications may be made to adapt a particular situation or material to the teachings of the present disclosure without departing from the scope thereof.
(30) It should be understood that references to a single element are not necessarily so limited and may include one or more of such elements. Any directional references (e.g., plus, minus, upper, lower, upward, downward, left, right, leftward, rightward, top, bottom, above, below, vertical, horizontal, clockwise, and counterclockwise) are only used for identification purposes to aid the reader's understanding of the present disclosure, and do not create limitations, particularly as to the position, orientation, or use of embodiments.
(31) Joinder references (e.g., attached, coupled, connected, and the like) are to be construed broadly and may include intermediate members between a connection of elements and relative movement between elements. As such, joinder references do not necessarily imply that two elements are directly connected/coupled and in fixed relation to each other. The use of “e.g.” and “for example” in the specification is to be construed broadly and is used to provide non-limiting examples of embodiments of the disclosure, and the disclosure is not limited to such examples. Uses of “and” and “or” are to be construed broadly (e.g., to be treated as “and/or”). For example and without limitation, uses of “and” do not necessarily require all elements or features listed, and uses of “or” are inclusive unless such a construction would be illogical.
(32) While processes, systems, and methods may be described herein in connection with one or more steps in a particular sequence, it should be understood that such methods may be practiced with the steps in a different order, with certain steps performed simultaneously, with additional steps, and/or with certain described steps omitted.
(33) All matter contained in the above description or shown in the accompanying drawings shall be interpreted as illustrative only and not limiting. Changes in detail or structure may be made without departing from the present disclosure.
(34) It should be understood that a computer, a system, and/or a processor as described herein may include a conventional processing apparatus known in the art, which may be capable of executing preprogrammed instructions stored in an associated memory, all performing in accordance with the functionality described herein. To the extent that the methods described herein are embodied in software, the resulting software can be stored in an associated memory and can also constitute means for performing such methods. Such a system or processor may further be of the type having ROM, RAM, RAM and ROM, and/or a combination of non-volatile and volatile memory so that any software may be stored and yet allow storage and processing of dynamically produced data and/or signals.
(35) It should be further understood that an article of manufacture in accordance with this disclosure may include a non-transitory computer-readable storage medium having a computer program encoded thereon for implementing logic and other functionality described herein. The computer program may include code to perform one or more of the methods disclosed herein. Such embodiments may be configured to execute via one or more processors, such as multiple processors that are integrated into a single system or are distributed over and connected together through a communications network, and the communications network may be wired and/or wireless. Code for implementing one or more of the features described in connection with one or more embodiments may, when executed by a processor, cause a plurality of transistors to change from a first state to a second state. A specific pattern of change (e.g., which transistors change state and which transistors do not), may be dictated, at least partially, by the logic and/or code.