This invention relates generally to the field of cryptographic blockchains and more specifically to new and useful methods for grinding-resistant consensus in proof-of-space-based or proof-of-stake-based Nakamoto-type blockchains in the field of cryptographic blockchains.
The following description of embodiments of the invention is not intended to limit the invention to these embodiments but rather to enable a person skilled in the art to make and use this invention. Variations, configurations, implementations, example implementations, and examples described herein are optional and are not exclusive to the variations, configurations, implementations, example implementations, and examples they describe. The invention described herein can include any and all permutations of these variations, configurations, implementations, example implementations, and examples.
As shown in
One variation of the method S100 for generating proofs-of-space and updating a blockchain over a network includes storing a plot file based on a plot seed. This variation of the method S100 also includes accessing a blockchain, the blockchain: including a challenge chain including a series of challenge blocks, and a reward chain including a series reward blocks, the series of challenge blocks being a subset of the series of reward blocks; and defining a series of slots, each slot including a challenge block in the series of challenge blocks, and including a subset of reward blocks in the series of reward blocks, each reward block in the subset of reward blocks responsive to a proof-of-space challenge based on the challenge block and responsive to a VDF input based on the challenge block. Additionally, this variation of the method S100 includes accessing the blockchain, wherein an earliest reward block in the subset of reward blocks of each slot in the series of slots defines a challenge block of a subsequent slot. The method S100 additionally includes: at a time during a slot, receiving a current challenge based on a most recent challenge block in the challenge chain; in response to receiving the current challenge, retrieving a proof-of-space based on the current challenge and the plot file, the proof-of-space characterized by a quality; calculating a quality-based number of verifiable delay function iterations based on the quality; and, in response to a current slot length of the current slot exceeding the quality-based number of verifiable delay function iterations, broadcasting the proof-of-space to the network. The method S100 further includes, in response to receiving a signage point based on execution of a verifiable delay function for the number of iterations: cryptographically signing the signage point to generate a signed signage point based on the proof-of-space; generating a block including the signed signage point, the proof-of-space, and a hash of a most recent block in a reward chain; and broadcasting the block to the network.
As shown in
One variation of the method S200 for generating proof-of-time and extending a blockchain over a network includes accessing a blockchain in Step S210, the blockchain: including a challenge chain including a series of challenge blocks, and a reward chain including a series of reward blocks, the series of challenge blocks being a subset of the series of reward blocks; and defining a series of slots, each slot including a challenge block in the series of challenge blocks, and including a subset of reward blocks in the series of reward blocks, each reward block in the subset of reward blocks responsive to a proof-of-space challenge based on the challenge block and responsive to a VDF input based on the challenge block. Additionally, this variation of the method S200 includes accessing the blockchain, wherein an earliest reward block in the subset of reward blocks of each slot in the series of slots defines a challenge block of a subsequent slot. This variation of the method S200 also includes: at a time coinciding with a beginning of a slot, initiating a verifiable delay function based on a most recent block of a challenge chain in Step S220; receiving, from the network, a proof-of-space based on the most recent block of the challenge chain, the proof-of-space characterized by a quality corresponding to a quality-based number of verifiable delay function iterations in Step S230; broadcasting to the network a signage point based on an output of the verifiable delay function while executing the quality-based number of verifiable delay function iterations; receiving a signed block including a signed signage point based on the signage point, the proof-of-space, and a hash of a most recent block in a reward chain; executing a number of infusion verifiable delay function iterations succeeding the quality-based number of verifiable delay function iterations, the infusion verifiable delay function iterations based on the quality-based number of verifiable delay function iterations in Step S260; and, in response to executing the infusion quality-based number of verifiable delay function iterations prior to termination of the slot and in response to verifying the signed block, infusing the signed block into the verifiable delay function based on a second output of the verifiable delay function after executing the number of infusion verifiable delay function iterations to generate a new block in the reward chain in Step S280.
Generally, the method S100 and the method S200 are executed by nodes (e.g., computational devices) in a distributed network (e.g., connected over the internet) in order to extend a permissionless and secure blockchain including a proof-of-space and a proof-of-time within each block of the blockchain. The blockchain generated via execution of the methods S100 and S200 is secure assuming no party controls a sufficiently large fraction of the total space of the distributed network and assuming no party can execute proofs-of-time significantly faster than other parties in the distributed network. More specifically, by executing the methods S100 and S200, nodes in the distributed network can extend a blockchain that includes: two canonical chains, a challenge chain and a reward chain (the blocks of each chain including a proof-of-space, a proof-of-time, and a cryptographic signature); and a data chain, which can include transactions or any other data to be represented in the blockchain and which are cryptographically linked (e.g., via signatures or hashes of signatures) to blocks of the reward chain. Thus, the distributed network can generate a blockchain that exhibits the desirable security and decentralization characteristics of proof-of-work-based blockchains while utilizing far less energy by leveraging proofs-of-space and proofs-of-time. Additionally, by separating the data chain from the challenge chain via an intermediate reward chain, the distributed network can provide resistance to grinding attacks, to which other proof-of-space based blockchains are vulnerable.
The method S100 and the method S200 are two parts of a consensus algorithm that, when executed by nodes in the distributed network, operate in tandem to infuse blocks to the blockchain, thereby enabling decentralized verification of information (e.g., transactions) in association with these blocks. A node in the distributed network executing the method S100 (hereinafter “a space server”) is competing to generate a proof-of-space for a new block in the blockchain, while a node in the distributed network executing the method S200 (hereinafter a “time server”) is competing to generate a proof-of-time for the new block in the block chain. Thus, by executing the method S100 and S200 concurrently, at least one space server in interaction with at least one time server can: generate a proof-of-space and a proof-of-time respectively; combine these proofs into a valid block via cryptographic signatures and hashes; and infuse (or append) this block to the blockchain. Additionally, nodes (e.g., space servers) that contribute to the creation of a new and valid block can include a reward for themselves in a data block associated with the new block, thereby incentivizing further participation in the consensus algorithm.
In some implementations, a time server in the distributed network executes Steps of the method S200 to: execute an ongoing verifiable delay function (hereinafter “VDF”) computation; and occasionally infuse new blocks (including proofs-of-space) into this ongoing VDF computation. Meanwhile, a spacer server in the distributed network executes Steps of the method S100 to generate new blocks, including a proof-of-space allocated on the space server, for infusion into the ongoing VDF computation being executed at the time server. Thus, in these implementations, time servers and space servers in the distributed network cooperate to infuse blocks into the network in a predominately sequential manner. However, in some instances, due to communication delay of new blocks over the distributed network, some blocks may not refer to the immediately prior block but instead to earlier blocks in order to avoid orphaning blocks infused into the blockchain.
Generally, space servers generate a proof-of-space that is responsive to a challenge posed according to a most recent block in the challenge chain of the blockchain. A “challenge”, as referred to herein, describes a number that is some function (e.g., a hash) of a prior block within the blockchain. More specifically, space servers can: store a plot file on disk; receive a challenge based on the most recent block in the block chain; retrieve a proof-of-space (i.e., a series of tuples from the plot file) that confirms the presence of the plot file on disk and is responsive to the challenge; and calculate a quality of the proof-of-space. The space servers, therefore, compete against all the space servers in the distributed network to retrieve a high-quality proof-of-space (i.e., higher than a threshold quality) in order to win the ability to add a block to the blockchain. The space servers execute a proof-of-space algorithm that exhibits a property such that the probability of achieving a high-quality proof-of-space is directly proportional to the amount of space reserved for the plot file on disk, thereby conferring advantages to space servers with larger plot files stored on disk (or a greater number of plot files stored on disk). Thus, via execution of Steps of the method S100, space servers compete in a space-based lottery to add blocks to the blockchain based on each space server's share of the total drive space reserved across the distributed network.
Generally, time servers continuously execute iterations of a function that verifies the passage of time such as a VDF. A time server can infuse blocks into an ongoing VDF, which will modify future outputs of the VDF in a manner that is verifiable given the content of the infused block. Additionally, time server executing Steps of the method S200 calculate the timing of block infusion based on a “quality” of the proof-of-space included within each new block such that blocks of a lower quality are infused into the blockchain after a longer delay than blocks of a higher quality. More specifically, time servers can: receive a block including proof-of-space from a space server in the distributed network; verify the proof-of-space; execute a quality-based number of VDF iterations; and infuse the new block into the blockchain, after completing the quality-based number of iterations. Infusion incorporates the data of a new block (e.g., based on a hash of the new block) into future iterations of the VDF of the blockchain, thereby modifying future outputs of the VDF function based on the content of the infused block. Thus, time servers in the network execute a quality-based number of VDF cycles as quickly as possible in order to continuously extend the blockchain.
In addition to generating proofs-of-space and proofs-of-time and combining these proofs into new blocks, the space servers and time servers execute blocks of the methods S100 and S200 respectively according to “slots” that define which blocks are infused into the challenge chain, which blocks are infused to the reward chain, when transactions are added to the data chain, and when new challenges are issued to the distributed network. Each slot defines a predetermined slot length measured as a number of VDF iterations selected such that the slot lasts for a target slot duration (e.g., five minutes, ten minutes). Additionally, each slot includes a single slot challenge that affects the proof-of-space challenges to which the space servers respond. During a slot, space servers attempt to retrieve the highest-quality proof-of-space responsive to each proof-of-space challenge issued by the time servers. If the space server retrieves a proof-of-space characterized by a quality corresponding to a number of iterations less than a threshold number of iterations (e.g., the slot length or the signage point interval), then the space server generates a new block including the proof-of-space; and broadcasts the new block to the distributed network. A time server can then: receive the new block; and infuse the new block into the ongoing VDF computation at a position calculated based on the quality of the proof-of-space within the new block. However, if the space server retrieves a proof-of-space characterized by a quality-based number of VDF iterations greater than the threshold, then the space server can discard the proof-of-space as it will not be infused into the blockchain by a time server.
Upon expiration of a slot, the earliest reward block infused into the reward chain within the previous slot is infused into the challenge chain as the basis for the slot challenge of a subsequent slot. Therefore, the remaining reward blocks act to “bury” this earliest reward block in order to thwart withholding attacks and other grinding attacks. In addition to winning the ability to create a subsequent challenge block, the winning space server (i.e., the space server that retrieves the earliest proof-of-space during the slot) can also generate and sign a data block for infusion into the data chain that includes transactions, thereby completing consensus for new data added to the blockchain.
The consensus algorithm, as described herein, includes references to a single space server and a single time server. However, due to the nature of a distributed blockchain network, Steps of the method S100 and Steps of the method S200 can be executed concurrently by multiple space servers and by multiple time servers in competition to generate new blocks of the blockchain. Additionally, the distributed network can operate as a peer-to-peer network and, therefore, data—such as versions of the blockchain, challenge blocks, reward blocks, data blocks, challenges, signatures, and/or hashes-can be transferred between nodes in the distributed network directly or via a gossip protocol.
Generally, Steps of the method S100 and/or the method S200 may be referred to herein as occurring “concurrently” or being “concurrent with” another Step in the method S100 and/or the method S200. However, in this context, the term “concurrently” or being “concurrent with” indicates an event occurring after the same number of iterations of a VDF function from the beginning of the slot. For example, event A may be referred to as being concurrent with event B if event A and event B both occur after 125473 iterations of a single VDF or multiple VDFs running in parallel, executed by a time server, and having been initiated by the time server at the beginning of a current slot.
Generally, Steps of the method S200 can include “infusion” of a block into a particular sub-chain (i.e., the reward chain, the challenge chain, or the infused challenge chain) of the blockchain. As utilized herein, “infusion” or “infusing” indicates a change in the VDF function of a chain to include data from a block or from a part of a block. Thus, after a time server infuses a block into a blockchain, each subsequent iteration and output of the VDF generated by the timer server is dependent upon and affected by the content of the block.
Generally, space servers in the distributed network execute a proof-of-space algorithm to demonstrate that, at a time at which a proof-of-space challenge is posed, the space server is reserving a specified amount of space on disk. More specifically, a space server can: initialize or “plot” a specific amount of space on disk (e.g., 50 gigabytes, one terabyte) in Step S110; and, in response to receiving a proof-of-space challenge (e.g., in the form of a 256-bit value), retrieve a proof-of-space based on the received proof-of-space challenge and the plot file, the proof-of-space characterized by a quality. Further details regarding the plotting algorithm and retrieval of a proof-of-space based on the plot file and the challenge are described in U.S. patent application Ser. No. 17/320,114.
In one implementation, a space server can generate a proof-of-space that includes 64 values extracted from the plot file that are characterized by a prespecified mathematical relationship with each other, as well as with the proof-of-space challenge. Thus, other nodes in the distributed network can easily verify a proof-of-space by checking for these prespecified mathematical relationships between values in the proof-of-space and between the proof-of-space and the proof-of-space challenge. For example, the space server can generate a proof-of-space by retrieving a set of tuples from the plot file that generate an output of “true” when input to a cryptographic matching function.
Additionally, a space server executes a proof-of-space algorithm that requires very little computational time to retrieve (e.g., less than one second) when compared to the amount of computational time required to generate the plot file on disk (e.g., at least eight hours), thereby preventing space servers from generating multiple plots within a short period of time in response to a challenge and selecting the most promising proof-of-space from the newly generated plots. Thus, the proof-of-space algorithm prevents Hellman or time-memory tradeoff attacks.
Upon generating a proof-of-space in response to a challenge, a space server can then calculate a quality of the proof-of-space by executing a quality function on the proof-of-space. For example, the space server can execute a cryptographic hash of the proof-of-space to calculate a quality of the proof-of-space. Once the space server calculates a quality of a proof-of-space, the space server can combine this with a size of the plot file to calculate a quality-based number of iterations in Step S150. The space server calculates a higher number of iterations for lower quality values and for smaller plot file sizes. Thus, the highest quality blocks generated from the largest plots require the shortest amount of time to be incorporated into a block via a time server executing the method S200, thereby increasing the probability that a space server earns a reward for generating the proof-of-space proportionate to the size of the plot file. More specifically, a space server can execute a proof-of-space algorithm that generates proofs-of-space with higher quality proportional to the size of the plot file. In this implementation, the space server calculates the proof-of-space based on the challenge; executes a quality function to calculate a quality of the proof-of-space proportional to the size of the plot file; and calculates a quality-based number of VDF iterations based on the quality of the proof-of-space.
In one implementation, the proof-of-space challenge is calculated based on: a slot challenge, which remains the same for the duration of the slot; a challenge chain signage point, which is broadcasted by a time server on a predetermined signage point interval periodically during a slot, and a plot ID of the plot file. For example, the space server can calculate a proof of space challenge by calculating a cryptographic hash of the slot challenge, a most recent challenge chain signage point, and the plot ID of a plot file stored by the space server. Thus, in this implementation, proofs-of-space are cryptographically tied to the plot from which they were generated, the slot in which they were retrieved, and a particular challenge chain signage point within a slot. By relating proof-of-space challenges to periodic signage points within a slot, the distributed network can increase the frequency of block creation on the blockchain and effect a more predictable rate of block creation on the blockchain (e.g., by preventing clustering of blocks being infused at around the same time within a slot).
Generally, time servers in the distributed network execute VDFs in order to cryptographically demonstrate that a specific amount of time has passed since a proof-of-space challenge was issued. A VDF is a function that is inherently sequential to compute, so an adversary cannot speed up its evaluation via increased parallelism. The input to a VDF is typically a tuple (x, T) where x is the input and T is the number of sequential steps (e.g., squarings of a class group). Moreover, the output of a VDF can be efficiently verified by all parties. One implementation of a VDF executed by time servers in the distributed network is further described in U.S. patent application Ser. No. 17/320,114.
A time server can infuse a value (e.g., a hash of a new block) into a VDF computation by accessing an output of the VDF, hashing the output of the VDF with the value to be infused, sampling a new VDF instance based on the hash, continuing the computation of the new VDF instance. Thus, time servers can infuse blocks into the challenge or reward chains at specific positions.
For example, a time server can execute a VDF function that includes a repeated hash, wherein each iteration of the VDF is a hash of the output of the previous iteration. In this example, challenges and new blocks can be infused into a VDF by combining values representing the challenge or the new block with the last output of the VDF function before hashing the resulting combined value and inputting the hash into a subsequent iteration of the VDF. In this manner, time servers can infuse a new block to either the challenge chain or the reward chain by combining hashes of the new block with a latest VDF output of the respective chain into which the new block to be infused.
As shown in
More specifically, the nodes in the network can access a blockchain: including a reward chain, which includes a series of reward blocks and a challenge chain, which includes a subset of the series of reward blocks (i.e., a series of challenge blocks), wherein each challenge block sets the challenge for a set of subsequent blocks; and defining a series of slots, each slot including a challenge block in the series of challenge blocks and including a subset of reward blocks in the series of reward blocks, each reward block in the subset of reward blocks responsive to a proof-of-space challenge based on the challenge block and responsive to a VDF input based on the challenge block in Steps S120 and S210. Additionally, nodes in the distributed network can access a blockchain such that an earliest reward block in the subset of reward blocks of each slot in the series of slots defines a challenge block (in
Alternatively, as shown in
Furthermore, as shown in
In one implementation, the distributed network defines the slot length of each slot (in VDF iterations) such that the slot duration (in seconds) approaches a target slot duration (e.g., five minutes).
In another implementation, the blockchain can include an infused challenge chain that is based on the earliest reward block within a slot and defines a contiguous VDF (e.g., without infusions of subsequent reward blocks) that persists for the remaining duration of the slot. Therefore, the infused challenge chain isolates the content of the earliest reward block (which defines the challenge of the subsequent slot) from the influence of subsequent reward blocks infused into the reward chain. As a result, this implementation of the blockchain is more resilient to attacks based on manipulation of reward blocks later in a slot.
For each of the above-described challenge chains and the reward chain of the blockchain, a time server can execute a separate VDF. For example, in an implementation of the blockchain including a challenge chain and a reward chain, a time server can simultaneously execute a first reward VDF for the reward chain (infusing reward blocks as the reward blocks are generated by the space servers) and execute a second challenge VDF for the challenge chain (infusing a new challenge block at the beginning of each slot, thereby generating the challenge for the subsequent slot). In another example implementation of the blockchain including a challenge chain, an infused challenge chain, and a reward chain, a time server can simultaneously execute a first reward VDF for the reward chain, a second challenge VDF for the challenge chain, and a third infused challenge VDF for the infused challenge chain.
In one implementation, time servers in the distributed network execute a VDF based on class groups of binary quadratic forms. In this implementation, the time server infuses new blocks or other content into a chain by modifying the class group of the VDF. More specifically, the time server can infuse the block in a chain's VDF by hashing the output of the VDF together with the content to be infused (e.g., a new block), sampling a new group based on the hash value, and continuing the VDF computation based on the new group.
Generally, the challenge chain includes a series of challenge blocks, each challenge block being the earliest response to the previous challenge block present within the reward chain. Each challenge block within the challenge chain includes a proof-of-space responsive to a challenge from the previous challenge block (e.g., a hash of the VDF output of the previous challenge block), a VDF output characterized by a quality-based number of VDF iterations less than the slot length and based on the hash of the previous challenge block, and a proof-of-space signature based on the proof-of-space. Thus, each challenge block in the challenge chain is also present as a reward block in the reward chain.
In one implementation, a time server can infuse a new challenge block to the challenge chain concurrent with infusion of the corresponding earliest reward block in the reward chain (i.e., before the end of the slot), the time server can then execute the remaining number of VDF iterations in the slot prior to broadcasting the output of this VDF as the subsequent challenge at the end of the slot. Thus, a new challenge is issued exactly once per slot at the beginning of each slot.
In another implementation, a time server does not infuse the new challenge block concurrent with infusion of the corresponding earliest reward block in the reward chain and instead initiates the infused challenge chain based on the earliest reward block of the slot for the remaining duration of the slot. In this implementation, the time server continues to execute the challenge VDF without infusion until the end of the slot. Upon reaching the end of the slot, the time server infuses the infused challenge chain into the challenge chain, thereby generating the proof-of-space challenge of the subsequent block. Thus, in this implementation, the challenge chain can include a reference to the earliest reward block of the prior slot but does not directly infuse this block. This implementation, including the infused challenge chain, is further described below.
Generally, the reward chain includes a series of reward blocks that includes the series of challenge blocks (which are the earliest reward blocks within each slot) and a series of reward blocks succeeding the challenge block in each slot of the reward chain. Each reward block in the reward chain includes a proof-of-space responsive to the challenge of the slot, a VDF output characterized by a number of iterations equal to a quality-based number of VDF iterations and based on the hash of a previous reward block, and a signature based on the proof-of-space. Thus, the earliest reward block within a slot is infused into the reward chain and the challenge chain (or the infused challenge chain) and affects the challenge issued during a subsequent slot, while the subset of subsequent reward blocks is infused within the slot to prevent grinding by burying the earliest block beneath additional legitimate blocks, thereby increasing the difficulty of executing a grinding attack on the challenge for the next slot. Therefore, changing the slot challenge of the subsequent slot (in order to provide a competitive advantage in extending the blockchain) forces a malicious node to replace the earliest block in the reward chain thereby orphaning all the blocks that were subsequently infused into the reward chain. This loss cannot be replaced with a minor grinding opportunity on the challenge.
In one implementation, a protocol of the distributed network may distribute rewards to nodes that successfully generate a reward block that is infused into the reward chain, even if the reward block is not the earliest reward block in response to the most recent slot challenge. Thus, the reward chain can also smooth the distribution of rewards across more nodes in the network (even if these rewards are smaller), thereby decreasing variance in reward distribution.
In another implementation, the protocol of the distributed network can set a target number of reward blocks per slot (e.g., sixteen reward blocks per slot, 32 reward blocks per slot) and adjust a difficulty factor for the proof-of-space algorithm such that the expected number of reward blocks generated by the distributed network equals the target number of reward blocks per slot for each slot of the blockchain.
In yet another implementation, the blockchain structure can include a reward chain with a series of reward chain signage points broadcasted at a predetermined signage point interval by a time server. In this implementation, space servers in the distributed network can receive a reward chain signage point, sign the reward chain signage point, and include, in a new block, the signed reward chain signage point concurrent with the proof-of-space challenge to which the new block is responsive. Alternatively, in this implementation, the space server calculates a proof-of-space challenge based on a slot challenge for a current slot, a challenge chain signage point, and a concurrent reward chain signage point.
In one implementation, shown in
In particular, the time server can: initiate an infused chain VDF for an infused challenge chain; execute the infused challenge chain VDF for a number of iterations corresponding to a remainder of a current slot duration (e.g., upon infusion of the earliest block of the slot into the reward chain); generate the subsequent slot challenge based on an output (i.e., a terminal output) of the infused challenge chain VDF at the number of iterations corresponding to the remainder of the current slot duration; initiate a subsequent challenge chain VDF for the challenge chain based on the subsequent slot challenge; and initiate a subsequent reward chain VDF for the reward chain based on the subsequent slot challenge.
In one example of this implementation, the infused challenge chain is non-contiguous such that a time server can generate a new infused challenge chain for each slot of the block chain and can terminate the infused challenge chain at the end of each slot. Thus, in this example, from the beginning of the slot until the time server infuses the earliest reward block into the reward chain, the time server does not execute an infused challenge chain VDF.
In another example of this implementation, a time server can infuse the terminal value of the infused challenge chain into both the challenge chain and the reward chain at the end of the slot.
In yet another example of this implementation, a time server can calculate the subsequent slot challenge for the subsequent slot based on a proof-of-space and the challenge chain signage point from a block (e.g., excluding other content of the block). In this example, the time server can initiate the infused challenge chain based on a hash of the proof-of-space and the challenge chain signage point of the block. Thus, in this example, the time server prevents grinding from occurring on the infused challenge chain (via modification or withholding of other content of the block).
Generally, the data chain includes a series of data blocks, which can represent transaction data and/or cryptographic signatures and hashes corresponding to reward blocks in the reward chain and prior blocks of the data chain. More specifically, upon creating a reward block, a space server can generate a corresponding data block based on a hash of the most recent data block in the data chain and sign this data block with a signature based on the proof-of-space of the reward block. Thus, by including signatures in the reward block, the space servers in the distributed network enforce a one-to-one relationship between data blocks and proofs-of-space generated for new reward blocks, while appending the data blocks in a hash chain ensures that intermediate data blocks cannot be replaced (but blocks at the end of the data chain can). Thus, the data chain can only be rolled back by a number of consecutive data blocks generated by a malicious party. As soon as an honest node adds a data block “burying” earlier data blocks in the data chain, the data chain can no longer be modified. Therefore, nodes in the distributed network can confirm data contained in a data block in response to the data block reaching a selected depth in the data chain.
In one implementation, the distributed network grants a space server that generates the earliest reward block in the reward chain the ability to include transactions (e.g., cryptocurrency transactions) in a corresponding data block of the reward block. Thus, each space server in the network can maintain a running buffer of transactions communicated over the distributed network (i.e., a memory pool or “mempool”) and insert these transactions into the data block corresponding to the earliest reward block within the slot. In this implementation, blocks associated with other reward blocks within the reward chain that are not the earliest in their respective slots included hashes or prior data blocks to maintain continuity of the data chain.
In another implementation, any reward block satisfying a specific set of qualifications can be associated with a transaction data block. For example, the space server can generate a transaction data block for any reward block infused to the blockchain that includes a reward chain signage point subsequent to the latest infusion of a block into the reward chain.
Generally, without some explicit link between the reward chain and the challenge chain, the blockchain may be vulnerable to long range replotting attacks from malicious nodes in the distributed network. This form of attack enables the attacker to, in a first phase, create the challenge chain (independent from the reward chain) in order to observe future challenges and, in a second phase, regenerate plot files within the available space several times, each time infusing the reward chain blocks that can be computed from these challenges until the resulting chain is heavier than the honest one. However, in order to prevent the aforementioned attack, the distributed network can periodically infuse the reward chain into the challenge chain, thereby incorporating the information contained therein into the challenge chain. In this implementation, the distributed network limits the above-mentioned replotting attack to a window between two such infusions, and if this window is shorter than twice the replotting time (as a conservative buffer), the distributed network is not vulnerable to the replotting attack. The period for these infusions of the reward chain into the challenge chain is referred to herein as a sub-epoch and is defined based on number of transpired slots or based on a target number of reward blocks added since the beginning of the current sub-epoch. For example, the distributed network can infuse the reward chain into the challenge chain every 24 slots (e.g., approximately every four hours) or after a 384 reward blocks have been added to the reward chain.
Additionally, in order to control the rate at which reward blocks and/or challenge blocks are added to the reward chain and challenge chain respectively, the distributed network can periodically execute a difficulty reset by modifying: a time parameter that controls the number of VDF iterations within a slot (i.e., the slot length) such that the slot duration is approximately equal to the target slot duration (e.g., ten minutes) and a target signage point interval (e.g., ten seconds); and a space parameter that controls the difficulty of generating a high-quality proof-of-space such that the number of reward blocks added to the reward chain within each slot is approximately equal to a target number of blocks. The period with which the distributed network executes a difficulty reset is referred to herein as an “epoch” and is defined based on a number of slots or reward blocks added since the most recent difficulty reset.
Generally, prior to executing the method S100 or the method S200, a node in the distributed network selects a version of the blockchain that the node can extend (by retrieving proofs-of-space and blocks in the case of a space server or by executing VDFs and infusing blocks in the case of a time server). Due to the asynchronous nature of the distributed network and/or the existence of ongoing attacks, multiple versions of the blockchain may be simultaneously broadcast across the distributed network. Thus, nodes in the distributed network can select a blockchain from among these multiple versions based on a “weight” of the blockchain. A node in the distributed network can calculate a weight based on the length of the blockchain (i.e., the number of blocks represented by the blockchain) and the difficulty parameters for each block in the blockchain. Each node in the distributed network can then select the weightiest chain to which the node has access and can then extend this node according to the method S100 and/or the method S200.
Generally, as shown in
Generally, a space server in the distributed network can receive slot challenges at the beginning of each new slot as each new slot challenge is generated by a time server in the distributed network. More specifically, the space server can access a first proof-of-space challenge based on a current slot challenge associated with the current slot and a first challenge chain signage point in a current series of challenge chain signage points of the current slot in Step S130. In one implementation, the space server can immediately retrieve a proof-of-space based on the slot challenge, as is described below.
Alternatively, the space server can store the current slot challenge in a buffer and await additional information with which the space server can generate a proof-of-space challenge. In this alternative implementation, the space server can periodically receive signage points broadcasted by time servers executing VDFs for the challenge chain and/or the reward chain. The space server can then generate a proof-of-space challenge by hashing the slot challenge and the most recent signage point received via the distributed network (e.g., a challenge chain signage point). More specifically, in this implementation, the space server can: access the current slot challenge and the first challenge chain signage point; calculate a hash of the slot challenge, the first challenge chain signage point, and a plot identifier of the plot file; and calculate the first proof-of-space challenge based on the hash. Thus, the distributed network can periodically update the proof-of-space challenge during a slot in an unpredictable manner, while still maintaining the dependence of each proof-of-space challenge on the slot challenge.
In this implementation, time servers in the distributed network are configured to broadcast a set of discrete signage points at a set of predetermined times within the slot (e.g., periodically on a predetermined number of VDF iterations). In this implementation, the space server can wait until receipt of a latest discrete signage point; sign this signage point; and create a block based on the signed signage point as described below.
In one implementation, the space server can calculate a distinct proof-of-space challenge for each plot file stored on the drive of the space server. In this implementation, the space server can calculate a hash of the slot challenge, the most recent signage point (e.g., a challenge chain signage point and/or a reward chain signage point), and a plot ID of the plot file. Thus, the space server can retrieve a proof-of-space cryptographically associated with the plot from which the proof-of-space was extracted.
In another implementation, the proof-of-space challenge received by the space server is a hash of the VDF output contained in the most recent challenge block. In this implementation, the VDF input received by the time server is a hash of the most recent challenge block.
Generally, a space server can, in response to accessing a proof-of-space challenge in Step S130: retrieve a proof-of-space based on the proof-of-space challenge and a plot file; execute a quality function on the proof-of-space to calculate a quality of the proof-of-space; and calculate a quality-based number of VDF iterations based on the quality of the proof-of-space. More specifically, the space server can: retrieve a proof-of-space based on the proof-of-space challenge and the plot file, the proof-of-space characterized by a quality in Step S140; and calculate a first quality-based number of iterations based on the first quality in Step S150. Thus, the space server can compare the quality-based number of iterations for the proof-of-space to a threshold number of iterations qualifying the proof-of-space for inclusion in a new block to be infused into the blockchain. In response to the quality-based number of iterations for the proof-of-space exceeding the threshold number of iterations, the space server discards the proof-of-space and awaits access of a subsequent proof-of-space challenge. In response to the quality-based number of iterations not exceeding the threshold number of iterations for the proof-of-space, the space server can proceed to generate a new block for inclusion in the blockchain based on the proof-of-space.
Additionally, the space server can identify, based on the quality-based number of iterations for the proof-of-space, a deadline for infusion of a new block including the proof-of-space into the reward chain. Thus, by implementing a threshold number of iterations for infusion of a new block, the distributed network limits the delay between initial creation of a block and its eventual inclusion in the blockchain.
In one implementation, the threshold number of iterations is equal to the slot length or the remaining slot duration of the current slot. Thus, if the quality-based number of VDF iterations is less than the slot length of the current slot, the space server can identify a time at which to create and broadcast a new reward block to the distributed network for subsequent infusion into the reward chain according to Steps of the method S200. However, if the quality-based number of VDF iterations is greater than the slot length of the blockchain, the space server can discard the proof-of-space and wait until the next challenge to attempt to generate a reward block.
In another implementation, the space server can, in response to the slot length of the blockchain exceeding the quality-based number of VDF iterations, broadcast the proof-of-space over the distributed network for verification by a space server in Step S140. In this implementation, the space server initiates the creation of a new reward block by seeking verification of the proof-of-space by a time server. The time server, upon verifying that the proof-of-space is legitimate, can return a signage point (e.g., a most recent value of the reward chain VDF and/or challenge chain VDF) to the space server to sign and include in the new reward block (as is further described below). Alternatively, the space server can generate a block including a signed signage point and broadcast this partially completed block to a time server via the distributed network. More specifically, the space server can, in response to a slot length of the current slot exceeding the first quality-based number of iterations, generate a new block.
In yet another implementation, the space server can compare the quality-based number of iterations to a threshold number of iterations equal to the signage point interval. More specifically, in this implementation, the space server can, in response to the signage point interval exceeding the quality-based number of iterations, generate a new block; and broadcast the new block to a time server via the distributed network.
Upon identifying that the quality-based number of iterations corresponding to the retrieved proof-of-space for a given proof-of-space challenge is less than the threshold number of iterations for inclusion in the blockchain, the space server can generate a partial block (lacking a proof-of-time in the form of infusion points, which are generated by a time server executing Steps of the method S200). More specifically, the space server can generate a block including a proof-of-space and a challenge chain signage point in Step S160. Once the space server completes the partial reward block, the space server can then broadcast the new reward block over the distributed network to a time server in Step S170. Thus, the space server can generate a new partial reward block for the reward chain that includes a proof-of-space and is based on the slot challenge and/or recent signage points broadcasted during the slot.
In one implementation, the space server, while generating the new reward block, can generate a corresponding data block, sign this data block based on the proof of space, and append this data block to the data chain. More specifically, the space server can: generate a transaction block comprising a set of transactions from a mempool of the space server and a cryptographic signature based on the partial block. Thus, the space server adds data blocks to the data chain, linked via signature to reward blocks in the reward chain. In one example, in response to creating an earliest reward block in the slot, a space server can include transaction data in the data block corresponding to the earliest reward block, thereby enabling the blockchain to securely store transaction data across a decentralized distributed network.
In another implementation, the space server can cryptographically sign signage points based on the proof-of-space and include these signed signage points in the new block that is broadcast to the network, thereby explicitly relating the proof-of-space to the signage point from which the space server generated the proof-of-space. More specifically, the space server can: cryptographically sign the first challenge chain signage point based on the proof-of-space; and cryptographically sign the first reward chain signage point based on the proof-of-space.
In another implementation, the space server can include a signage point from both the challenge chain and the reward chain in the new block, thereby establishing a cryptographic association between the new block and both chains. More specifically, the space server can generate the new block including the proof-of-space, the challenge chain signage point, and a reward chain signage point in a current series of reward chain signage points of the current slot, the reward chain signage point concurrent with the challenge chain signage point.
In yet another implementation, the space server can include canonical (i.e., predefined) components in a new reward block and can include mutable components, such as transactions and/or other data tracked by the blockchain in a new data block associated with the new reward block. More specifically, the space server can: generate a canonical block including the proof-of-space and the challenge chain signage point; and generate an associated data block including a mutable record (e.g., transactions).
While space servers in the distributed network respond to the proof-of-space challenge, the time server can receive a VDF input based on the most recent challenge block and/or the slot challenge of a current slot and can initiate execution of one or more VDFs based on the VDF input. More specifically, the time server can, at a beginning of a current slot: initiate a challenge chain VDF for the challenge chain based on a current slot challenge associated with the current slot in Step S220; and initiate a reward chain VDF for the reward chain based on the current slot challenge in Step S222. Thus, a time server in the distributed network functions to establish proofs of the passage of time based on intermediate values of the VDF during a slot.
In one implementation, each time server can execute a challenge chain VDF for the challenge chain and a reward chain VDF for the reward chain. In this implementation, the time server can execute the challenge VDF function in order to establish VDF values that are unaffected by the subsequent infusion of reward blocks during the slot while also enabling infusion of reward blocks into the reward chain VDF. Thus, each time server in the distributed network can execute two VDFs in parallel.
While executing the VDF function, a time server can periodically broadcast, to the distributed network, signage points (sp in
In one implementation, the time server automatically broadcasts signage point VDF outputs at discrete intervals within the slot, and space servers can select a latest signage point prior to the quality-based number of VDF iterations calculated based on the quality of proof-of-space of the new reward block. For example, the time server can automatically broadcast the output of its VDF function 64 times during a slot as 64 different signage points, and the space server can receive and create a block based on the signage point immediately prior to the quality-based number of VDF iterations corresponding to the space server's proof-of-space. Thus, the distributed network can reduce the transmission complexity of the consensus algorithm by enabling space servers to listen for the correct signage point as opposed to requesting it from a time server.
In another implementation, the time server can receive additional proofs-of-space after an earliest proof-of-space within the slot and can issue signage points to the space servers that generated each proof-of-space. However, it is possible that the signage point for the reward block is broadcast to the corresponding space server before the infusion point of the prior reward block. Therefore, in this instance, the space server generating the new reward block does not have access to a finalized version of the previous reward block to hash and include in the new reward block. In this implementation, in applications in which there is overlap between infusion periods of successive reward blocks, the latter of the blocks can skip the earlier block and instead include the hash of the reward block before the earlier block.
While broadcasting signage points from the challenge chain VDF and/or the reward chain VDF during a current slot, the time server can receive a partial block from a space server for infusion into the reward chain. More specifically, the time server can receive, from the distributed network, a block comprising a proof-of-space based on the current slot challenge and a challenge chain signage point in the current series of challenge chain signage points, the proof-of-space characterized by a quality in Step S240. Additionally, the time server can verify whether the proof-of-space is a legitimate response to the proof-of-space challenge and reject the block in response to identifying that the proof-of-space is illegitimate.
In one implementation, upon receiving the new block for infusion into the reward chain, the time server can independently calculate the quality-based number of iterations for the block based on the proof-of-space of the block in order to define the infusion point of the block. More specifically, the time server can calculate a quality-based number of iterations based on the quality of the proof-of-space in the new block in Step S250. Alternatively, the space server can communicate the quality-based number of iterations to the time server in addition the new block.
Generally, the time server can define an infusion point (ip in
In one example, the time server can set an infusion point for a block at a number of VDF iterations from the beginning of the slot equal to the quality-based number of iterations associated with a proof-of-space of the block. For example, if the quality-based number of VDF iterations for a proof-of-space within a block is 145892 then the time server can set an infusion point for the block 145892 iterations into the current slot. Alternatively, the time server can set an infusion point for a block at a number of VDF iterations from the beginning of the slot equal to the quality-based number of VDF iterations for a proof-of-space plus some constant buffer number of VDF iterations (e.g., 100000 iterations). Thus, by adding a constant number of iterations to the infusion point, the time server ensures a minimum interval of time between creation and infusion of a block.
In another example, the time server can set an infusion point for a block based on the signage point of the block and the quality-based number of iterations of a block. In this example, the time server sets an infusion point that is a quality-based number of iterations after the signage point that initiated the proof-of-space challenge to which the block is responsive. Thus, the time server establishes a maximum interval between creation of a block based on a signage point broadcast by the time server and infusion of that block. For example, the time server can set an infusion point of a block equal to the number of iterations of the signage point of the block plus the quality-based number of iterations of the block plus a constant number of iterations.
In yet another example, the time server can calculate the number of infusion iterations (between issuing the signage point and the infusion point of a reward block) based on the quality-based number of iterations corresponding to the proof-of-space of the new reward block. For example, the time server can calculate a number of infusion VDF iterations as a proportion (e.g., 10%) of the initial number of VDF iterations.
After receiving the new reward block in Step S240, the time server can: continue executing the VDF function until the infusion point defined for the new block and infuse the block at the defined infusion point. More specifically, the time server can execute the reward chain VDF for a number of infusion iterations based on the quality-based number of iterations in Step S260. Thus, the space server and the time server can mutually verify the proof-of-time and the proof-of-space, respectively, over the distributed network. The space server then creates a new reward block including both proofs, and the time server can infuse this new block into the reward chain.
Upon executing the number of infusion iterations corresponding to the infusion point of the new block, the time server can append the infusion point to the new block, thereby completing the block in preparation for immediate infusion of the block. More specifically, the time server can, in response to executing the reward chain VDF for the number of infusion iterations, append a reward chain infusion point to the first block, the first reward chain infusion point based on the output of the reward chain VDF at the number of infusion iterations in Step S270. The time server generates an infusion point by iterating a VDF for the number of infusion iterations, therefore, the output of the VDF after the number of infusion iterations is the infusion point, which can then be appended to the new block.
Upon appending the reward chain infusion point to the new block, the time server can then infuse the new block back into the reward chain. More specifically, the time server can infuse the block into the reward chain VDF to extend the blockchain in Step S280. Thus, future iterations of the reward chain VDF are dependent upon both an immediately prior iteration of the reward chain VDF and the content of the new block.
Generally, the time server appends a reward chain infusion point into a new block. However, in some implementations, the time server can also append concurrent infusion points from parallel chains such as a challenge chain infusion point (in
In one implementation, in response to identifying that the block is characterized by the earliest infusion point among all blocks generated during the current slot, the time server can infuse the new block into the challenge chain concurrent with the infusion of the new block into the reward chain. More specifically, the time server can, in response to the block being an earliest block infused into the reward chain during the current slot, calculate a subsequent slot challenge for a subsequent slot to the current slot based on the first block. Thus, in this implementation, the earliest reward block to be infused into the reward chain for a given slot is simultaneously infused into the challenge chain. In this implementation, one consequence of utilizing two separate VDF function threads (i.e., one for the challenge chain and one for the reward chain) is that, in order to efficiently progress the blockchain as a whole, time servers can execute two VDF functions concurrently.
In another implementation, shown in
In one implementation, the time server can execute an infusion filter or signage-point filter that dictates whether the time server can infuse a newly-created reward block into the reward chain. In this implementation, the time server can execute the infusion filter on a block prior to infusing the block into the reward chain; the infusion filter then generates a binary output indicating whether the new reward block passes or fails the infusion filter. Thus, by executing the infusion filter, time servers provide an additional layer of unpredictability regarding which reward blocks will be infused in the reward chain in a given slot. This unpredictability increases the blockchain's resistance to grinding attacks by increasing the potential branches of the blockchain that must be explored by a malicious actor in order to identify the challenge of a subsequent block and then exploit this information, thereby discouraging this type of attack.
In one example, the time server can execute the infusion filter on a block based on the challenge signage point of the block. In this example, the time server can receive a new reward block for infusion into the reward chain; access the challenge signage point included in the reward block; and evaluate whether the challenge signage point satisfies a condition that occurs with a predetermined frequency (e.g., a threshold number of initial digits of the signage point are equal to zero). By limiting infusion in the reward chain based on challenge signage points from the challenge chain, a time server can prevent attacks that seek to modify the probability of inclusion later in the block by withholding or delaying an earlier generated block. Additionally, in this example, the blockchain can include an infusion challenge chain that functions to delay infusion of the earliest reward block into the challenge chain until the end of the slot. Thus, in this example, signage points from the reward chain are not affected by infusion of the earliest reward block into the challenge chain before the end of the slot (which would then change the values of all subsequent challenge signage points during the slot).
In another implementation, the space server can execute a filter at the plot-file-level to disqualify a certain number of plot files when generating a proof-of-space, thereby reducing network traffic relative to the infusion filter described above. In this implementation, the space server can, for each plot file stored by the space server, calculate a filter hash based on the current slot challenge, the challenge chain signage point, and a plot ID. The space server can then apply a plot filter criterion (e.g., that plots are included only if the first eight digits of the filter hash of the plots are equal to zero) to eliminate plots from which the space server can retrieve proofs-of-space. More specifically, the space server can: calculate a filter hash of the current slot challenge, the challenge chain signage point, and a plot identifier of the plot file; and, in response to accessing the proof-of-space challenge and in response to the filter hash satisfying a plot filter criterion, retrieve the proof-of-space based on the proof-of-space challenge and the plot file. Thus, by implementing a plot filter, the distributed network can randomly eliminate a predetermined proportion of plot files (based on the plot filter criterion) from competing for high-quality proofs-of-space, thereby reducing the effectiveness of withholding attacks.
The systems and methods described herein can be embodied and/or implemented at least in part as a machine configured to receive a computer-readable medium storing computer-readable instructions. The instructions can be executed by computer-executable components integrated with the application, applet, host, server, network, website, communication service, communication interface, hardware/firmware/software elements of a user computer or mobile device, wristband, smartphone, or any suitable combination thereof. Other systems and methods of the embodiment can be embodied and/or implemented at least in part as a machine configured to receive a computer-readable medium storing computer-readable instructions. The instructions can be executed by computer-executable components integrated by computer-executable components integrated with apparatuses and networks of the type described above. The computer-readable medium can be stored on any suitable computer readable media such as RAMs, ROMs, flash memory, EEPROMs, optical devices (CD or DVD), hard drives, floppy drives, or any suitable device. The computer-executable component can be a processor, but any suitable dedicated hardware device can (alternatively or additionally) execute the instructions.
As a person skilled in the art will recognize from the previous detailed description and from the figures and claims, modifications and changes can be made to the embodiments of the invention without departing from the scope of this invention as defined in the following claims.
This Application is a continuation of U.S. Provisional application Ser. No. 17/497,699, filed on 8 Oct. 2021, which claims the benefit of U.S. Provisional Application No. 63/150,573, filed on 17 Feb. 2021, and U.S. Provisional Application No. 63/089,492, filed on 8 Oct. 2020, each of which is incorporated in its entirety by this reference. This Application is related to U.S. patent application Ser. No. 17/320,114, filed on 13 May 2021, which is a continuation-in-part application of U.S. patent application Ser. No. 15/931,463, filed on 13 May 2020, which claims the benefit of U.S. Provisional Application 62/850,221, filed on 20 May 2019, each of which is incorporated in its entirety by this reference.
Number | Date | Country | |
---|---|---|---|
63150573 | Feb 2021 | US | |
63089492 | Oct 2020 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 17497699 | Oct 2021 | US |
Child | 18424651 | US |