Commensal Token System
The commensal token system efficiently validates token transactions by pegging token values to native blockchain tokens, utilizing a UTXO-based model to trace inputs and construct token blocks, addressing inefficiencies in existing systems and ensuring data integrity and security.
Patent Information
- Application Number
- JP2023518286
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-09-21
- Filing Date
- 2021-08-26
- Publication Date
- 2025-12-23
- Estimated Expiration
- 2041-08-26
AI Technical Summary
Existing blockchain systems face inefficiencies in validating and processing token transactions due to the need for dedicated token engines to interpret non-consumable outputs, leading to increased storage burdens and processing overhead.
A commensal token system is introduced, where token values are pegged to native blockchain tokens, allowing validation by blockchain nodes without additional processing, using a UTXO-based model to trace token inputs back to a minting transaction, and constructing token blocks for efficient validation.
This approach enhances token transaction validation efficiency by leveraging blockchain security without additional burden, ensuring data integrity and preventing double-spending, while maintaining the integrity of the blockchain system.
Smart Images

Figure 0007791181000013 
Figure 0007791181000014 
Figure 0007791181000015
Abstract
Description
[Technical Field]
[0001] The present disclosure relates to a method for validating a token transaction, which is a blockchain transaction that has one or more token outputs. [Background technology]
[0002] A blockchain refers to a form of distributed data structure, in which a copy of the blockchain is maintained and publicly published at each of multiple nodes in a decentralized peer-to-peer (P2P) network (hereinafter referred to as the "blockchain network"). A blockchain comprises a chain of blocks of data, with each block comprising one or more transactions. Each transaction, other than so-called "coinbase transactions," points to a preceding transaction in the sequence, which may span one or more blocks back to one or more coinbase transactions. Coinbase transactions are discussed further below. Transactions submitted to the blockchain network are included in new blocks. New blocks are created by a process often referred to as "mining," which involves multiple nodes competing to perform "proof of work," i.e., solving a cryptographic puzzle based on a representation of a defined set of ordered and validated outstanding transactions awaiting inclusion in a new block of the blockchain. Note that a blockchain may be pruned at some nodes, and publication of blocks may be achieved by publishing only the block headers.
[0003] Transactions in a blockchain may be used for one or more of the following purposes: carrying digital assets (i.e., a number of digital tokens), ordering a set of entries in a virtualized ledger or register, receiving and processing timestamp entries, and / or temporally ordering index pointers. Blockchains may also be utilized to layer additional functionality onto the blockchain. For example, blockchain protocols may allow for the storage of additional user data or indexes to data in a transaction. Because there is no pre-specified limit on the maximum amount of data that can be stored in a single transaction, increasingly complex data can be incorporated. For example, this could be used to store electronic documents, or audio or video data in the blockchain.
[0004] Nodes (often called "miners") in a blockchain network perform a decentralized transaction registration and validation process, described in more detail below. Briefly, during this process, nodes validate transactions and insert them into a block template, and the nodes attempt to identify a valid proof-of-work solution for that block template. Once a valid solution is found, a new block is disseminated to other nodes in the network, allowing each node to record a new block in the blockchain. To have a transaction recorded in the blockchain, a user (e.g., a blockchain client application) submits the transaction to one of the nodes in the network for dissemination. Nodes receiving the transaction can compete to find a proof-of-work solution that will incorporate the validated transaction into a new block. Each node is configured to implement the same node protocol, which includes one or more conditions for a transaction to be valid. Invalid transactions are not disseminated or incorporated into a block. Assuming the transaction is validated and therefore accepted on the blockchain, the transaction (including any user data) remains registered and indexed at each of the nodes in the blockchain network as an immutable public record.
[0005] Nodes that successfully solve the proof-of-work puzzle to create the latest block are typically rewarded with a new transaction called a "coinbase transaction" that distributes a certain amount of digital assets, i.e., a certain number of tokens. Detection and rejection of invalid transactions is performed by the activities of competing nodes, who act as agents of the network and have an incentive to report and prevent fraud. Public disclosure of information allows users to continuously audit node performance. Publishing only block headers allows participants to ensure the ongoing integrity of the blockchain.
[0006] In an “output-based” model (sometimes called a UTXO-based model), the data structure of a given transaction comprises one or more inputs and one or more outputs. Every consumable output comprises an element specifying an amount of a digital asset derivable from the preceding sequence of transactions. A consumable output is sometimes called a UTXO (or “unspent transaction output”). An output may further comprise a locking script that specifies conditions for further redemption of the output. A locking script is a predicate that defines the conditions necessary to validate and transfer a digital token or asset. Each input of a transaction (other than a coinbase transaction) comprises a pointer (i.e., a reference) to such output in a preceding transaction and may further comprise an unlocking script for unlocking the locking script of the pointed-to output. Thus, consider a pair of transactions, referred to as a first transaction and a second transaction (or “target” transaction). The first transaction comprises at least one output that specifies an amount of a digital asset and comprises a locking script that defines one or more conditions for unlocking the output. The second target transaction comprises at least one input comprising a pointer to an output of the first transaction and an unlocking script for unlocking the output of the first transaction.
[0007] In such a model, when a second target transaction is sent to the blockchain network to be disseminated and recorded in the blockchain, one validity criterion applied at each node is that the unlocking script meets all of one or more conditions defined in the locking script of the first transaction. Another criterion is that the output of the first transaction has not yet been redeemed by another, earlier, valid transaction. Any node that finds the target transaction invalid according to any of these conditions will not disseminate the transaction (or, in some cases, not disseminate the invalid transaction as a valid transaction in order to register it) and will not include the transaction in a new block to be recorded on the blockchain. Summary of the Invention [Problem to be solved by the invention]
[0008] Issuing and consuming tokens using blockchain is not new. Previously, tokens were issued using non-consumable transaction outputs. Implementing the system required building a special token engine to interpret the data payload of non-consumable outputs, and the data itself is meaningless to the blockchain system. This presents a challenge to blockchain nodes, as they must separate the data from the consumable outputs in terms of storage.
[0009] An alternative is the UTXO-based approach, where tokens are tied to the outgoing points of a transaction. With stronger integration with native blockchains, UTXO-based token systems share some of the advantageous features of blockchain systems in addition to security, such as in-script smart contracts for tokens. They also allow token issuers to peg their token value to the value of the native blockchain token.
[0010] It is desirable to have a blockchain-based token system that allows tokens to be validated quickly and efficiently (e.g., without requiring a dedicated token engine to interpret token data) and without negatively impacting blockchain storage by blockchain nodes (e.g., without bloating the blockchain with token payload data).
[0011] According to one aspect disclosed herein, there is provided a computer-implemented method for validating a token transaction, wherein the token transaction is a blockchain transaction having one or more token outputs, each token output locking a respective amount of tokens, wherein a validation entity has access to a token minting transaction and / or a token setup transaction, wherein the token minting transaction has cryptographic minting data and mints an initial amount of tokens, and the token setup transaction has minting data authenticated by a token issuer, the method being performed by the validation entity, the method including: obtaining a target token transaction having one or more token inputs and one or more token outputs; and validating the target token transaction, wherein validating the target token transaction verifying that each token input of the target token transaction has minting data and / or verifying that each token input of the target token transaction references a respective token output of either the token minting transaction or a previously validated token transaction that can be traced back to the token minting transaction.
[0012] It will be appreciated that a blockchain can be thought of as a directed acyclic graph (DAG) with multiple transaction chains. Each transaction chain begins with a coinbase transaction or multiple coinbase transactions. Two or more transaction chains can be merged by creating a transaction with multiple inputs from different transaction chains. There are many features that can be developed using this interpretation of a blockchain. Embodiments of the present invention enable the development of a token system, referred to herein as a "commensurate token system."
[0013] Commensalization is a symbiotic relationship between two species in which members of one species benefit while members of the other species are neither benefited nor harmed. The commensal token system of the present invention benefits from blockchain systems in terms of double-spend prevention, data integrity, and other security features while remaining immune to the effects of the blockchain system. This is achieved by pegging token values to native blockchain token values.
[0014] A token transaction is a blockchain transaction that consists of one or more "token outputs." A token output is a consumable output of a blockchain transaction that locks a respective amount of tokens. In other words, the value of a token is pegged to the native blockchain token (e.g., Bitcoin). Therefore, there is no additional token-specific work or token data for blockchain nodes to process. Furthermore, the peg allows the token system to naturally inherit the security of the blockchain system. That is, the token system benefits from the blockchain system without imposing any additional burden on the Bitcoin system. Because each token transaction is validated by blockchain nodes according to the blockchain protocol, for a validating entity to validate a token transaction, the validating entity only needs to validate the token transaction being validated (referred to here as the target token transaction) that contains a token input that can be traced back to the token minting transaction. That is, the token input references the token output of the token minting transaction or the token output of a previous token transaction that is part of the transaction train leading back to the token minting transaction. This improves the efficiency of token transaction validation.
[0015] In some embodiments, the validating entity may construct data structures to further improve the efficiency of validating token transactions. For example, the validating entity may construct token blocks similar to blockchain blocks. Each token block contains a set of valid token transactions (or transaction identifiers for each of the set of valid token transactions). Instead of tracing back to the token-generating transaction, the validating entity need only check that the token input references a valid token transaction stored in the token block.
[0016] According to one aspect disclosed herein, there is provided a computer-implemented method for validating a token transaction, the token transaction being a blockchain transaction having one or more token outputs, each token output locking a respective amount of tokens, the method being executed by a validation entity, the method including: obtaining a target token transaction having one or more token inputs and one or more token outputs; and validating the target token transaction, wherein each token input of the target token transaction references a respective token output stored in a current token snapshot, the current token snapshot including a set of token unspent transaction outputs (UTXOs), each token UTXO being a token output of a respective unspent token transaction.
[0017] To facilitate an understanding of embodiments of the disclosure and to show how such embodiments may be carried into effect, reference will now be made, by way of example only, to the accompanying drawings, in which: [Brief explanation of the drawings]
[0018] [Figure 1] FIG. 1 is a schematic block diagram of a system for implementing a blockchain. [Figure 2] FIG. 1 illustrates schematically some examples of transactions that may be recorded on a blockchain. [Figure 3A] FIG. 2 is a schematic block diagram of a client application. [Figure 3B] FIG. 3B is a schematic mock-up of an exemplary user interface that may be presented by the client application of FIG. 3A. [Figure 4A] FIG. 1 shows a schematic diagram of a blockchain ledger as a directed acyclic graph partitioned into two transaction chains. [Figure 4B] Schematic diagram of a blockchain ledger as a blockchain, where each block contains a new coinbase transaction. [Figure 5] FIG. 10 is a schematic diagram illustrating an example of a directed acyclic graph of outpoint signatures. [Figure 6] FIG. 1 is a diagram illustrating an example of a token network connecting to a blockchain network. [Figure 7] FIG. 1 illustrates a schematic diagram of an exemplary system for implementing embodiments of the present invention. DETAILED DESCRIPTION OF THE INVENTION
[0019] Exemplary System Overview 1 illustrates an exemplary system 100 for implementing a blockchain 150. The system 100 may consist of a packet-switched network 101, which is typically a wide-area internetwork such as the Internet. The packet-switched network 101 comprises a plurality of blockchain nodes 104 that may be arranged to form a peer-to-peer (P2P) network 106 within the packet-switched network 101. Although not shown, the blockchain nodes 104 may be arranged as a near-complete graph. Thus, each blockchain node 104 is highly connected to other blockchain nodes 104.
[0020] Each blockchain node 104 comprises a peer's computing equipment, with different nodes 104 belonging to different peers. Each blockchain node 104 comprises a processing unit comprising one or more processors, e.g., one or more central processing units (CPUs), accelerator processors, application-specific processors and / or field programmable gate arrays (FPGAs), and other devices such as application-specific integrated circuits (ASICs). Each node also comprises memory, i.e., computer-readable storage in the form of a non-transitory computer-readable medium. The memory may comprise one or more memory units utilizing one or more memory media, e.g., magnetic media such as hard disks, electronic media such as solid-state drives (SSDs), flash memory, or EEPROMs, and / or optical media such as high-value disk drives.
[0021] A blockchain 150 comprises a chain of blocks of data 151, with a respective copy of the blockchain 150 maintained at each of multiple blockchain nodes 104 in a distributed network or blockchain network 106. As mentioned above, maintaining a copy of the blockchain 150 does not necessarily mean storing the blockchain 150 in its entirety. Instead, the blockchain 150 can be pruned so long as each blockchain node 150 stores the block header (discussed below) of each block 151. Each block 151 in the chain comprises one or more transactions 152, where a transaction in this context refers to a certain data structure. The nature of the data structure depends on the type of transaction protocol used as part of the transaction model or scheme. A given blockchain uses one particular transaction protocol throughout. In one general type of transaction protocol, the data structure of each transaction 152 comprises at least one input and at least one output. Each output specifies an amount representing some quantity of digital assets as wealth, such as a user 103 to whom the output is cryptographically locked (requiring that user's signature or other solution to unlock and redeem or spend). Each input points to the output of a preceding transaction 152, thereby linking those transactions.
[0022] Each block 151 also has a block pointer 155 that points to a previously created block 151 in the chain to define a sequential order for the blocks 151. Each transaction 152 (other than a coinbase transaction) has a pointer to a previous transaction to define an order for the sequence of transactions (note that the sequence of transactions 152 is allowed to diverge). The chain of blocks 151 goes back to the genesis block (Gb) 153, which was the first block in the chain. One or more original transactions 152 early in the chain 150 pointed to the genesis block 153 rather than to a preceding transaction.
[0023] Each blockchain node 104 is configured to forward transactions 152 to other blockchain nodes 104, thereby allowing the transactions 152 to be disseminated throughout the network 106. Each blockchain node 104 is configured to create blocks 151 and store respective copies of the same blockchain 150 in its memory. Each blockchain node 104 also maintains an ordered set (also called a "pool") 154 of transactions 152 waiting to be incorporated into a block 151. The ordered pool 154 is often referred to as a "memory pool." This term in this specification is not intended to be limited to any particular blockchain, protocol, or model. It refers to an ordered set of transactions that the node 104 has accepted as valid and that the node 104 is not obligated to accept other transactions that attempt to consume the same output.
[0024] For a given current transaction 152j, the input (or each input) comprises a pointer that references the output of a preceding transaction 152i in the sequence of transactions, specifying that this output is to be redeemed, or "consumed," in the current transaction 152j. In general, a preceding transaction can be any transaction in the ordered set 154 or any block 151. A preceding transaction 152i does not necessarily have to exist at the time the current transaction 152i is created or even transmitted to the network 106, but the preceding transaction 152i must exist and be validated for the current transaction to be valid. Thus, "preceding" herein refers to something that precedes in the logical sequence linked by the pointer, and not necessarily to the time of creation or transmission in the chronological order, and thus does not necessarily preclude transactions 152i, 152j from being created or transmitted out of order (see the discussion of orphan transactions below). A preceding transaction 152i may also be referred to as an ancestor transaction or predecessor transaction.
[0025] The input of the current transaction 152j also comprises an input authorization, e.g., the signature of the user 103a to whom the output of the preceding transaction 152i is locked. The output of the current transaction 152j may then be cryptographically locked to a new user or entity 103b. Thus, the current transaction 152j may transfer an amount defined in the input of the preceding transaction 152i to the new user or entity 103b as defined in the output of the current transaction 152j. In some cases, a transaction 152j may have multiple outputs to divide the input amount among multiple users or entities (one of which may be the original user or entity 103a to provide the remaining amount). In some cases, a transaction may also have multiple inputs to pool together amounts from multiple outputs of one or more preceding transactions and redistribute one or more outputs of the current transaction.
[0026] According to an output-based transaction protocol such as Bitcoin, when a party 103, such as an individual user or an organization, wishes to execute a new transaction 152j (either manually or through an automated process employed by the party), the executing party transmits the new transaction from its computer terminal 102 to a recipient. The executing party or recipient ultimately transmits this transaction to one or more of the blockchain nodes 104 of the network 106 (which today are typically servers or data centers, but could in principle be other user terminals). It is not excluded that the party 103 executing the new transaction 152j can transmit the transaction directly to one or more of the blockchain nodes 104, and in some instances not to the recipient. The blockchain nodes 104 receiving the transaction check whether the transaction is valid according to a blockchain node protocol applied at each of the blockchain nodes 104. The blockchain node protocol typically requires the blockchain nodes 104 to check that the cryptographic signature in the new transaction 152j matches an expected signature, which depends on the previous transaction 152i in the ordered sequence of transactions 152. In such output-based transaction protocols, this may comprise checking that a cryptographic signature or other authorization of a participant 103 included in the input of the new transaction 152j matches a condition defined in the output of the preceding transaction 152i that the new transaction assigns, which condition typically comprises at least checking that the cryptographic signature or other authorization in the input of the new transaction 152j unlocks the output of the previous transaction 152i to which the input of the new transaction is chained. This condition may be defined at least in part by a script included in the output of the preceding transaction 152i.
[0027] Alternatively, it may be fixed simply by the blockchain node protocol alone, or it may be by a combination of these. In either case, if the new transaction 152j is valid, the blockchain node 104 forwards it to one or more other blockchain nodes 104 in the blockchain network 106. These other blockchain nodes 104 apply the same tests according to the same blockchain node protocol and forward the new transaction 152j to one or more further nodes 104, and so on. In this way, the new transaction is disseminated throughout the network of blockchain nodes 104.
[0028] In an output-based model, the definition of whether a given output (e.g., UXTO) is allocated (e.g., spent) is whether it has already been validly redeemed by the input of another prior transaction 152j according to the blockchain node protocol. Another condition for a transaction to be valid is that the output of the preceding transaction 152i that the transaction attempts to redeem has not already been redeemed by another transaction. Again, if not valid, the transaction 152j is not disseminated (unless flagged as invalid and disseminated as a warning) or recorded in the blockchain 150. This protects against double spending, such as when a transactor attempts to allocate the same transaction output more than once. On the other hand, an account-based model protects against double spending by maintaining account balances. Again, because there is a defined order of transactions, an account balance has a single defined state at any given time.
[0029] In addition to validating transactions, blockchain nodes 104 also compete to be the first to create a block of transactions, aided by "proof of work," in a process commonly referred to as mining. At blockchain nodes 104, new transactions are added to an ordered pool 154 of valid transactions that have not yet appeared in a block 151 recorded in the blockchain 150. Blockchain nodes then compete to assemble a new valid block 151 of transactions 152 from the ordered set 154 of transactions by attempting to solve a cryptographic puzzle. Typically, this involves looking for a nonce value such that when the "nonce" is concatenated with a representation of the ordered pool 154 of outstanding transactions and hashed, the hash output satisfies a predetermined condition. For example, the predetermined condition could be that the hash output has a certain number of leading zeros. Note that this is just one specific type of proof-of-work puzzle; other types are not excluded. The nature of a hash function is that it has an unpredictable output given its input. This search can therefore only be performed by brute force, consuming a large amount of processing resources at each blockchain node 104 attempting to solve the puzzle.
[0030] A first blockchain node 104 attempting to solve the puzzle announces this to the network 106 and provides the solution as a proof that can be easily checked by other blockchain nodes 104 in the network (given the solution to the hash, it is simple to check that it causes the hash output to satisfy the conditions). The first blockchain node 104 disseminates the block to a threshold consensus of other nodes, which accept the block and therefore enforce the protocol rules. The ordered set of transactions 154 is then recorded as a new block 151 in the blockchain 150 by each of the blockchain nodes 104. A block pointer 155 is also assigned to the new block 151n that points to the previously created block 151n-1 in the chain. The large amount of effort required to create the proof-of-work solution, e.g., in the form of a hash, indicates the first node's 104's intention to follow the rules of the blockchain protocol. Such rules include not accepting a transaction as valid if it assigns the same output as a previously validated transaction (otherwise known as double-spend). Once created, blocks 151 cannot be altered because they are known and maintained at each of the blockchain nodes 104 in the blockchain network 106. Block pointers 155 also impose a sequential order on blocks 151. Because transactions 152 are recorded in blocks that are ordered at each blockchain node 104 in the network 106, this provides an immutable public ledger of transactions.
[0031] Note that different blockchain nodes 104 competing to solve the puzzle at any given time may be doing so based on different snapshots of the pool of unpublished transactions 154 at any given time, depending on when they began searching for a solution or the order in which transactions were received. The first to solve each puzzle defines which transactions 152 will be included in the next new block 151n and in what order, and the current pool of unpublished transactions 154 is updated. The blockchain nodes 104 then continue competing to create blocks from the newly defined ordered pool of unpublished transactions 154, and so on. Protocols also exist for resolving any possible "forks," which are situations in which two blockchain nodes 104 solve the puzzle within a very short time of each other, resulting in conflicting views of the blockchain being propagated between the nodes 104. That is, whichever tip of the fork has grown longer will become the final blockchain 150. Note that this should not affect users or agents of the network, as the same transactions appear in both forks.
[0032] According to the Bitcoin blockchain (and most other blockchains), a node that successfully constructs a new block 104 is granted the ability to allocate an additional, permitted amount of digital assets in a new, special type of transaction that distributes an additional, defined quantity of digital assets (as opposed to an agent-to-agent or user-to-user transaction that transfers an amount of digital assets from one agent or user to another). This special type of transaction is commonly called a “coinbase transaction,” but may also be called an “initiation transaction” or “generation transaction.” It typically forms the first transaction in a new block 151n. The proof of work indicates the node constructing the new block’s intent to follow protocol rules that allow this special transaction to be redeemed later. Blockchain protocol rules may require a maturation period, e.g., 100 blocks, before this special transaction can be redeemed. Often, a regular (non-generational) transaction 152 also specifies an additional transaction fee in one of its outputs to further reward the blockchain node 104 that created the block 151n in which the transaction was published. This fee is commonly called a “transaction fee” and is discussed below.
[0033] Due to the resources involved in validating and publishing transactions, at least each of the blockchain nodes 104 typically takes the form of a server comprising one or more physical server units, or even an entire data center. However, in principle, any given blockchain node 104 could take the form of a user terminal or a group of user terminals networked together.
[0034] The memory of each blockchain node 104 stores software configured to execute on the processing unit of the blockchain node 104 to perform its respective role and handle transactions 152 in accordance with the blockchain node protocol. It will be understood that any activity attributable to this specification for a blockchain node 104 may be performed by software executing on the processing unit of the respective computing device. The node software may be implemented in one or more applications at the application layer, or at a lower layer, such as the operating system layer or protocol layer, or any combination thereof.
[0035] Also connected to the network 101 are computing devices 102 of each of a number of participants 103 who act as consuming users. These users may interact with the blockchain network 106 but do not participate in the validation or construction of transactions and blocks. Some of these users or agents 103 may act as senders or receivers in transactions. Other users may interact with the blockchain 150 without necessarily acting as senders or receivers. For example, some participants may act as storage entities that store copies of the blockchain 150 (e.g., have obtained a copy of the blockchain from a blockchain node 104).
[0036] Some or all of the participants 103 may be connected as part of a different network, such as a network superimposed on the blockchain network 106. Users of the blockchain network (often called “clients”) are sometimes said to be part of a system that includes the blockchain network 106. However, these users are not blockchain nodes 104 because they do not perform the roles required of blockchain nodes. Instead, each participant 103 may interact with the blockchain network 106 and thereby utilize the blockchain 150 by connecting to (i.e., communicating with) a blockchain node 106. Two participants 103 and their respective devices 102 are shown for illustrative purposes: a first participant 103a and its respective computing device 102a, and a second participant 103b and its respective computing device 102b. It will be understood that more such participants 103 and their respective computing devices 102 may be present and participating in the system 100, but are not shown for convenience. Each participant 103 may be an individual or an organization. Purely by way of example, the first party 103a is referred to herein as Alice and the second party 103b is referred to as Bob, but it will be understood that this is not limiting and any reference herein to Alice or Bob may be replaced with "first party" and "second party" respectively.
[0037] The computing device 102 of each participant 103 comprises a respective processing unit comprising one or more processors, e.g., one or more CPUs, GPUs, other accelerator processors, application-specific processors, and / or FPGAs. The computing device 102 of each participant 103 further comprises memory, i.e., computer-readable storage, in the form of a non-transitory computer-readable medium. This memory may comprise one or more memory units utilizing one or more memory media, e.g., magnetic media such as hard disks, electronic media such as SSDs, flash memory, or EEPROMs, and / or optical media such as optical disk drives. The memory of the computing device 102 of each participant 103 stores software comprising a respective instance of at least one client application 105 adapted to execute on the processing unit. It will be understood that any activity attributable to this specification for a given participant 103 may be performed using software executing on the processing unit of the respective computing device 102. The computing device 102 of each participant 103 comprises at least one user terminal, e.g., a desktop or laptop computer, a tablet, a smartphone, or a wearable device such as a smartwatch. The computing equipment 102 of a given participant 103 may also comprise one or more other networked resources, such as cloud computing resources accessed via a user terminal.
[0038] The client application 105 may initially be provided to the computing equipment 102 of any given participant 103 on a suitable computer-readable storage medium, for example downloaded from a server or provided on a removable storage device, such as a removable SSD, a flash memory key, a removable EEPROM, a removable magnetic disk drive, a magnetic floppy disk or tape, an optical disk such as a CD or DVD ROM, or a removable optical drive.
[0039] The client application 105 comprises at least a "wallet" functionality. It has two main functions. One of these is to allow each party 103 to create, approve (e.g., sign), and submit transactions 152 to one or more Bitcoin nodes 104 so that the transactions 152 are disseminated throughout the network of blockchain nodes 104 and included in the blockchain 150. The other is to report to each party the amount of digital assets that they currently own. In an output-based system, this second function comprises reconciling the amounts defined in the outputs of various 152 transactions scattered throughout the blockchain 150 that belong to the party in question.
[0040] Note: While various client functions are sometimes described as being integrated into a given client application 105, this is not necessarily limiting; instead, any client function described herein may be implemented in a series of two or more separate applications, interfacing, for example, via an API, or one plugging into another. More generally, client functions may be implemented at the application layer, or at a lower layer such as an operating system, or any combination thereof. While the following is described with respect to a client application 105, it will be understood that this is not limiting.
[0041] An instance of a client application or software 105 on each computing device 102 is operably coupled to at least one of the blockchain nodes 104 of the network 106. This allows the wallet functionality of the client 105 to send transactions 152 to the network 106. The client 105 can also contact the blockchain node 104 to query the blockchain 150 for any transactions in which the respective party 103 is a recipient (or, in embodiments, actually investigate other party transactions in the blockchain 150, since the blockchain 150 is a public entity that lends credibility to some transactions by virtue of its public presence). The wallet functionality of each computing device 102 is configured to organize and send transactions 152 according to a transaction protocol. As noted above, each blockchain node 104 executes software configured to validate transactions 152 according to a blockchain node protocol and forward them to disseminate the transactions 152 throughout the blockchain network 106. The transaction protocol and the node protocol correspond to each other; a given transaction protocol accompanies a given node protocol and together implements a given transaction model. The same transaction protocol is used for all transactions 152 in the blockchain 150. The same node protocol is used by all nodes 104 in the network 106.
[0042] When a given party 103, e.g., Alice, wishes to submit a new transaction 152j to be included in the blockchain 150, she organizes the new transaction (using the wallet functionality of her client application 105) according to the associated transaction protocol. She then sends the transaction 152 from her client application 105 to one or more blockchain nodes 104 to which she is connected. For example, this may be the blockchain node 104 best connected to Alice's computer 102. When any given blockchain node 104 receives the new transaction 152j, it handles the new transaction 152j according to the blockchain node protocol and its respective role. This involves first checking whether the newly received transaction 152j meets some conditions for being "valid," examples of which will be discussed in more detail shortly. In some transaction protocols, the conditions for validation may be configurable per transaction via a script included in the transaction 152. Alternatively, this condition may simply be a built-in feature of the node protocol or may be defined by a combination of the script and the node protocol.
[0043] Provided that the newly received transaction 152j passes the tests to be considered valid (i.e., it is "validated"), any blockchain node 104 that receives the transaction 152j adds the new validated transaction 152 to the ordered set of transactions 154 maintained by that blockchain node 104. Additionally, every blockchain node 104 that receives the transaction 152j disseminates the validated transaction 152 onward to one or more other blockchain nodes 104 in the network 106. Because each blockchain node 104 applies the same protocol, assuming the transaction 152j is valid, this means that it will soon be disseminated throughout the network 106.
[0044] Once granted access to the ordered pools 154 of outstanding transactions maintained at a given blockchain node 104, that blockchain node 104 begins competing to solve the proof-of-work puzzle for the latest version of each pool 154 that includes the new transaction 152. (Recall that other blockchain nodes 104 may be trying to solve the puzzle based on different pools 154 of transactions, but whoever gets there first defines the set of transactions included in the latest block 151. Ultimately, the blockchain node 104 solves the puzzle for the portion of the ordered pool 154 that includes Alice's transaction 152j.) Once the proof-of-work has been done for the pool 154 that includes the new transaction 152j, it immutably becomes part of one of the blocks 151 in the blockchain 150. Because each transaction 152 includes a pointer to earlier transactions, the order of the transactions is also immutably recorded.
[0045] Because different blockchain nodes 104 initially receive different instances of a given transaction, they may have conflicting views of which instance is "valid" before an instance is published in a new block 151, at which point all blockchain nodes 104 agree that the published instance is the only valid instance. If a blockchain node 104 accepts an instance as valid and discovers that a second instance has been recorded in the blockchain 150, it accepts it and discards (i.e., treats as invalid) the instance it originally accepted (i.e., the instance not published in block 151).
[0046] An alternative type of transaction protocol operated by some blockchain networks is sometimes called an "account-based" protocol, as part of an account-based transaction model. In the account-based case, each transaction defines the amount to be transferred by referencing an absolute account balance, rather than by referencing the UTXO of a preceding transaction in a sequence of past transactions. The current state of every account is stored and periodically updated by the network's nodes, separate from the blockchain. In such a system, transactions are ordered using the account's running transaction tally (also called its "position"). This value is signed by the sender as part of the cryptographic signature and hashed as part of the transaction reference calculation. Additionally, an optional data field may also be the signed transaction. This data field may point to a previous transaction, for example, if a previous transaction ID is included in the data field.
[0047] UTXO-based model FIG. 2 illustrates an exemplary transaction protocol. This is an example of a UTXO-based protocol. Transactions 152 (abbreviated as "Tx") are the fundamental data structure of a blockchain 150 (each block 151 comprises one or more transactions 152). The following is described with reference to an output-based or "UTXO"-based protocol. However, this is not a limitation to all possible embodiments. Note that while the exemplary UTXO-based protocol is described with reference to Bitcoin, it may equally be implemented on other exemplary blockchain networks.
[0048] In a UTXO-based model, each transaction (“Tx”) 152 comprises a data structure comprising one or more inputs 202 and one or more outputs 203. Each output 203 may comprise an unspent transaction output (UTXO), which can be used as a source of input 202 for another new transaction (if the UTXO has not yet been redeemed). A UTXO contains a value that specifies an amount of a digital asset, which represents a set number of tokens on a distributed ledger. A UTXO may also contain, among other information, the transaction ID of the transaction from which the UTXO originated. The transaction data structure may also comprise a header 201, which may comprise indicators of the sizes of the input fields 202 and output fields 203. The header 201 may also include the transaction's ID. In embodiments, the transaction ID is a hash of the transaction data (excluding the transaction ID itself) and is stored in the header 201 of the raw transaction 152 submitted to the node 104.
[0049] Suppose Alice 103a wants to create a transaction 152j that transfers a certain amount of digital assets of interest to Bob 103b. In FIG. 2, Alice's new transaction 152j is labeled "Tx1." Tx1 takes the amount of digital assets locked to Alice in the output 203 of the previous transaction 152i in the sequence and transfers at least a portion of it to Bob. The previous transaction 152i is labeled "Tx0" in FIG. 2. Tx0 and Tx1 are merely arbitrary labels. They do not necessarily mean that Tx0 is the first transaction in the blockchain 151, nor do they mean that Tx1 is the immediate next transaction in the pool 154. Tx1 may refer to any previous (i.e., ancestor) transaction that still has unspent outputs 203 locked to Alice.
[0050] The predecessor transaction Tx0 may already be validated and included in block 151 of blockchain 150 when Alice creates new transaction Tx1, or at least when she submits it to network 106. It may already be included in one of the blocks 151 at that time, or it may still be waiting in ordered set 154, in which case it will soon be included in the new block 151. Alternatively, Tx0 and Tx1 may be created and submitted to network 106 together, or Tx0 may even be submitted after Tx1 if the node protocol allows for buffering of “orphan” transactions. The terms “predecessor” and “subsequent,” as used herein in the context of a sequence of transactions, refer to the order of transactions in the sequence as defined by transaction pointers specified in the transactions (e.g., which transaction points to which other transaction). They may be equally replaced by “predecessor” and “successor,” or “ancestor” and “descendant,” “parent” and “child,” etc. This does not necessarily imply the order in which they are created, sent to the network 106, or arrive at any given blockchain node 104. Nevertheless, a subsequent transaction (a descendant transaction or "child") that points to a preceding transaction (an ancestor transaction or "parent") is not validated until and unless the parent transaction is validated. A child that arrives at a blockchain node 104 before its parent is considered an orphan. It may be discarded or buffered for some time to wait for its parent, depending on the node protocol and / or node behavior.
[0051] One of the one or more outputs 203 of the preceding transaction Tx0 comprises a particular UTXO, here labeled UTXO0. Each UTXO comprises a value specifying the amount of the digital asset represented by the UTXO and a locking script that defines a condition that must be met by an unlocking script in the input 202 of the subsequent transaction for the subsequent transaction to be validated, and therefore for the UTXO to be successfully redeemed. Typically, the locking script locks the amount to a particular party (the beneficiary of the transaction in which the locking script is included). That is, the locking script defines an unlocking condition, which typically comprises a condition that the unlocking script in the input of the subsequent transaction comprises the cryptographic signature of the party to which the preceding transaction is locked.
[0052] A locking script (also known as scriptPubKey) is code written in a domain-specific language recognized by the node protocol. A specific example of such a language is called "Script" (capital S) used by blockchain networks. A locking script specifies what information is needed to consume the transaction output 203, for example, the requirements of Alice's signature. An unlocking script appears in the transaction's output. An unlocking script (also known as scriptSig) is code written in a domain-specific language that provides the information needed to meet the locking script criteria. For example, it may include Bob's signature. An unlocking script appears in the transaction's input 202.
[0053] Thus, in the example shown, UTXO0 in Tx0's output 203 must contain Alice's signature SIG P in order for UTXO0 to be redeemed (or, more precisely, for any subsequent transaction attempting to redeem UTXO0 to be valid). A Locking scripts that require [Checksig P A ] Equipped with. [Checksig P A ] is the public key P from Alice's public-private key pair. A , a representation (i.e., a hash) of Tx1's input 202. Tx1's input 202 comprises a pointer to Tx1 (e.g., by its transaction ID, TxID0, which in an embodiment is a hash of the entire transaction Tx0). Tx1's input 202 comprises an index that identifies UTXO0 within Tx0, in order to identify UTXO0 among all other possible outputs of Tx0. Tx1's input 202 also comprises an unlocking script that comprises Alice's cryptographic signature, created by Alice applying her private key from her key pair to a predetermined portion of data (sometimes called a "message" in cryptography). <Sig P A The data (or "message") that needs to be signed by Alice to provide a valid signature may be defined by the locking script, or by the node protocol, or by a combination of these.
[0054] When new transaction Tx1 arrives at blockchain node 104, the node applies the node protocol, which involves running the locking script and the unlocking script together to see if the unlocking script meets the conditions defined in the locking script (which may comprise one or more criteria). In an embodiment, this involves concatenating the two scripts. <Sig P A > <P A >||[Checksig P A ] where '||' denotes concatenation, '<...>' means putting data on the stack, and '[...]' are functions contained in the locking script (in this example, a stack-based language). Equivalently, rather than concatenating the scripts, the scripts may be executed one after the other using a common stack. Either way, when executed together, the scripts will create a locking script containing Alice's public key P, as contained in the locking script in the output of Tx0. A is used to authenticate that the unlocking script in Tx1's input contains Alice's signature signing the expected portion of the data. The expected portion of the data itself (the "message") must also be included in order to perform this authentication. In an embodiment, the signed data comprises the entirety of Tx1 (thus there is no need to include a separate element specifying the signed portion of the data in the clear, since it was there originally).
[0055] The details of authentication with public-private cryptography will be familiar to those skilled in the art. Essentially, if Alice signs a message using her private key, then given Alice's public key and the message in plaintext, another entity, such as node 104, can authenticate that the message must have been signed by Alice. Signing typically comprises hashing the message, signing the hash, and tagging this as a signature onto the message, allowing any holder of the public key to authenticate the signature. Thus, it should be noted that any reference herein to signing a particular piece of data or transaction, etc., in embodiments means signing a hash of that data or transaction piece.
[0056] If the unlocking script in Tx1 satisfies one or more conditions specified in the locking script of Tx0 (thus, in the illustrated example, if Alice's signature is provided and authenticated in Tx1), the blockchain node 104 considers Tx1 valid. This means that the blockchain node 104 adds Tx1 to its ordered pool of outstanding transactions 154. The blockchain node 104 also forwards transaction Tx1 to one or more other blockchain nodes 104 in the network 106, so that it is disseminated throughout the network 106. Once Tx1 is validated and included in the blockchain 150, it defines the UTXO0 from Tx0 as being consumed. Note that Tx1 can only be valid if it consumes an unspent transaction output 203. If it attempts to consume an output that has already been consumed by another transaction 152, Tx1 becomes invalid even if all other conditions are met. Therefore, blockchain node 104 also needs to check whether the referenced UTXO in the preceding transaction Tx0 has already been spent (i.e., whether it has already formed valid inputs into another valid transaction). This is one reason why imposing a prescribed ordering on transactions 152 is important for blockchain 150. In practice, a given blockchain node 104 may maintain a separate database that marks which UTXOs 203 a transaction 152 has spent in it, but ultimately, what defines whether a UTXO is spent is whether the UTXO has already formed valid inputs into another valid transaction in blockchain 150.
[0057] If the total amount specified in all outputs 203 of a given transaction 152 is greater than the total amount indicated by all its inputs 202, this is also grounds for invalidity in most transaction models. Therefore, such a transaction is not propagated and is not included in block 151.
[0058] Note that in the UTXO-based transaction model, a given UTXO must be spent in its entirety; it cannot "leave behind" part of the amount defined in the UTXO as spent while another part is spent. However, the amount from a UTXO can be divided among multiple outputs of subsequent transactions. For example, the amount defined in UTXO0 in Tx0 can be divided among multiple UTXOs in Tx1. Thus, if Alice does not want to give Bob the entire amount defined in UTXO0, she can use a reminder to give the remainder of the second output of Tx1 to herself or pay another party.
[0059] In practice, Alice is typically required to include a fee for any Bitcoin node 104 that successfully includes her transaction 104 in block 151. If Alice does not include such a fee, Tx0 may be rejected by the blockchain node 104 and therefore not disseminated or included in the blockchain 150, even though it is technically valid (the node protocol does not force a blockchain node 104 to accept a transaction 152 if it does not want to). In some protocols, the transaction fee does not require a unique, separate output 203 (i.e., it does not require a separate UTXO). Instead, any difference between the total amount pointed to by the input 202 and the total amount specified in the output 203 of a given transaction 152 is automatically given to the blockchain node 104 that publishes the transaction. For example, suppose a pointer to UTXO0 is the only input to Tx1, and Tx1 has only one output, UTXO1. If the amount of digital assets specified in UTXO0 is greater than the amount specified in UTXO1, the difference may be allocated by the node 104 that won the proof-of-work competition to create the block containing UTXO1. However, it is not necessarily excluded that a transaction fee may alternatively or additionally be explicitly specified in its own UTXO of transaction 152's UTXOs 203.
[0060] Alice and Bob's digital assets consist of the UTXOs locked to them in any transaction 152 anywhere on the blockchain 150. Thus, typically, a given party 103's assets are spread across the UTXOs of various transactions 152 across the entire blockchain 150. There is no single number stored anywhere on the blockchain 150 that defines a given party's 103 total balance. It is the role of the wallet function of the client application 150 to collate together the values of all the various UTXOs locked to each party that have not yet been spent in another, further transaction. The wallet function can do this by querying a copy of the blockchain 150, such as that stored on one of the Bitcoin nodes 104.
[0061] Note that script code is often expressed generally (i.e., without using a precise language). For example, operation codes (opcodes) may be used to represent specific functions. "OP_..." refers to a specific opcode in the Script language. As an example, OP_RETURN is an opcode in the Script language that, when preceded by OP_FALSE at the beginning of a locking script, produces a non-consumable output of the transaction that can store data within the transaction, thereby immutably recording the data in the blockchain 150. For example, the data may comprise a document that is desired to be stored in the blockchain.
[0062] Typically, the input for a transaction is a public key P AIn embodiments, this is based on ECDSA using the elliptic curve secp256k1. The digital signature signs specific data. In some embodiments, for a given transaction, the signature signs some of the transaction inputs and some or all of the transaction outputs. The specific portions of the outputs to sign depend on the SIGHASH flag, which is typically a 4-byte code included at the end of the signature (and therefore fixed at the time of signing) that selects which outputs are signed.
[0063] A locking script is sometimes referred to as a "scriptPubKey," referring to the fact that the locking script typically includes the public key of the party to which each transaction is locked. An unlocking script is sometimes referred to as a "scriptSig," referring to the fact that the unlocking script typically provides a corresponding signature. However, more generally, it is not required in all applications of blockchain 150 that the condition for a UTXO to be redeemed include authenticating the signature. More generally, a scripting language may be used to define any condition or conditions. Therefore, the more general terms "locking script" and "unlocking script" are sometimes preferred.
[0064] Side Channels As shown in FIG. 1, each client application on Alice's and Bob's computing devices 102a, 102b may include additional communication capabilities. This additional functionality allows Alice 103a to establish a separate side channel 107 with Bob 103b (either party or at the instigation of a third party). The side channel 107 allows for the exchange of data separately from the blockchain network. Such communication may be referred to as “off-chain” communication. For example, it may be used to exchange transactions 152 between Alice and Bob without the transactions 152 being registered in the blockchain network 106 or advancing toward the chain 150 until one of them chooses to broadcast the transactions 152 to the network 106. Sharing transactions in this manner may be referred to as sharing a “transaction template.” A transaction template may lack one or more inputs and / or outputs required to form a complete transaction. Alternatively or additionally, the side channel 107 may be used to exchange any other transaction-related data, such as keys, negotiated amounts or terms, data content, etc.
[0065] The side channel 107 may be established over the same packet-switched network 101 as the blockchain network 106. Alternatively or additionally, the side channel 107 may be established over a different network, such as a mobile cellular network, or a local area network, such as a local wireless network, or even a direct wired or wireless link between Alice's device 102a and Bob's device 102b. In general, the side channel 107 referred to elsewhere herein may comprise any one or more links, via one or more networking technologies or communication media, for exchanging data “off-chain,” i.e., separately from the blockchain network 106. When more than one link is used, the bundle or collection of off-chain links may collectively be referred to as the side channel 107. Thus, when Alice and Bob are said to exchange some information, data, etc., over the side channel 107, this does not necessarily imply that all of this data must be transmitted over exactly the same link, or even over the same type of network.
[0066] Client Software 3A shows an example implementation of a client application 105 for implementing embodiments of the presently disclosed schemes. The client application 105 comprises a transaction engine 401 and a user interface (UI) layer 402. The transaction engine 401 is configured to implement transaction-related functionality behind the client 105, such as orchestrating transactions 152, receiving and / or sending transactions and / or other data via side channels 107, and / or sending transactions to one or more nodes 104 for dissemination through the blockchain network 106, according to the schemes discussed above and as will be discussed in more detail shortly. According to embodiments disclosed herein, the transaction engine 401 of each client 105 comprises functionality 403 configured to generate token transactions.
[0067] The UI layer 402 is configured to render a user interface via the user input / output (I / O) means of each user's computing device 102, including outputting information to each user 103 via the device's 102's user output means and receiving input from each user 103 via the device's 102's user input means. For example, the user output means may comprise one or more display screens (touchscreen or non-touchscreen) for providing visual output, one or more speakers for providing audio output, and / or one or more tactile output devices for providing tactile output, etc. The user input means may comprise, for example, an input array of one or more touchscreens (the same or different from those used for the output means), one or more cursor-based devices such as a mouse, trackpad, or trackball, one or more microphones and speech or voice recognition algorithms for receiving speech or audio input, one or more gesture-based input devices for receiving input in the form of hand or body gestures, or one or more mechanical buttons, switches, joysticks, etc.
[0068] Note: While various functions are sometimes described herein as being integrated into the same client application 105, this is not necessarily limiting; instead, they may be implemented in a series of two or more separate applications, for example, one plugging into the other or interfacing via an API (application programming interface). For example, the functionality of the transaction engine 401 may be implemented in a separate application from the UI layer 402, or the functionality of a given module, such as the transaction engine 401, may be split among more than one application. It is not excluded that some or all of the described functionality may be implemented, for example, in the operating system layer. Where reference is made anywhere herein to a single or given application 105, etc., it will be understood that this is merely an example and that, more generally, the described functionality may be implemented in any form of software.
[0069] 3B provides a mockup of an example user interface (UI) 500 that may be rendered by the UI layer 402 of client application 105a on Alice's device 102a. It will be understood that a similar UI may be rendered by client 105b on Bob's device 102b, or a client on any other participant's device.
[0070] 3B shows UI 500 from Alice's perspective. UI 500 may comprise one or more UI elements 501, 502, 502 that are rendered as separate UI elements via user output means.
[0071] For example, the UI elements may comprise one or more user-selectable elements 501, which may be various on-screen buttons, or various options in a menu, etc. User input means are adapted to allow the user 103 (in this case Alice 103a) to select or otherwise manipulate one of the options, such as by clicking or touching the UI element on the screen or speaking the name of the desired option (the term "manual" as used herein is intended only to contrast with automatic and is not necessarily limited to use of hands).
[0072] Alternatively or additionally, the UI element may comprise one or more data entry fields 502. These data entry fields may be rendered via a user output means, for example on a screen, and data may be entered into the fields via a user input means, for example a keyboard or touch screen. Alternatively, data may be received verbally, for example based on speech recognition.
[0073] Alternatively or additionally, the UI element may comprise one or more output information elements 503 for outputting information to the user, which may be rendered on a screen or audibly, for example.
[0074] It will be understood that the particular means of rendering the various UI elements, selecting options, and inputting data are not tangible. The functionality of these UI elements will be discussed in more detail shortly. It will also be understood that the UI 500 shown in FIG. 3 is only a schematic mockup, and that in reality it may comprise one or more additional UI elements, which are not shown for the sake of brevity.
[0075] The blockchain as a directed acyclic graph The Bitcoin ledger is commonly referred to as a blockchain, where the data structure is thought of as a chain of blocks. However, if we consider transactions (instead of blocks) as the fundamental element, we can see that the Bitcoin ledger can be thought of as a directed acyclic graph. In this section, we provide a formal definition of a Bitcoin directed acyclic graph (BDAG) and a special type of subgraph of a BDAG.
[0076] Definition – Bitcoin Directed Acyclic Graph The Bitcoin Directed Acyclic Graph (BDAG) is a DAG where: 1. A node is a Bitcoin transaction 2. A directed edge is established from one node to another if at least one output is allocated (consumed) from the first node to the second node.
[0077] Note that a directed cycle of transactions implies a circular reference of transaction IDs in the inputs, which is not possible, and therefore the graph is acyclic. Based on the definition, we can highlight some properties: 1. Each node can have at most n outgoing edges, where n is the number of consumable outputs in the transaction represented by this node. 2. The coinbase node has no inward edges, 3. A path starting from any node and following the edges in the opposite direction should end at one or more coinbase nodes.
[0078] An example of a BDAG is shown in Figure 4A. Figure 4B shows the BDAG when a blockchain structure is stamped onto it. Definition - Transaction Path The transaction path from node A to node B in the BDAG consists of nodes N0, N1,...,N t is the set of 1. N0 is node A and N t is Node B, 2. For all i=0, 1, ..., t-1, N i From N i+1 There is a directed edge to 3. t is defined as the length of the path.
[0079] Definition – Transaction Chain A transaction chain is a connected subgraph of a BDAG, i.e., for any pair of nodes in the subgraph, there exists a path between the two nodes ignoring the direction of the edges. Note that all transaction chains in a BDAG form a partition of the BDAG.
[0080] As shown in Figure 4A, there are two transaction chains: the first one starts with two coinbase transactions and can be thought of as a merge of two transaction chains, while the second one starts with one coinbase transaction and has a simpler structure.
[0081] Note that while the above examples refer to the Bitcoin ledger (i.e., the Bitcoin blockchain), the same definitions apply to other UTXO-style blockchains.
[0082] Token Validation Embodiments of the present invention relate to validating token transactions. FIG. 7 illustrates an exemplary system 700 according to some embodiments. As illustrated, the system 700 includes a validation entity 701, a token issuer 702, one or more token users 703a, 703b, and a blockchain network 106. While only two token users 703a, 703b are shown in FIG. 7, it should be noted that in general, the system 700 can include any number of token users 703. Each of the token issuer 702 and one or more token users 703 can take the form of Alice 103a or Bob 103b, as described with reference to FIGS. 1-3. That is, each of the token issuer 702 and token users 703 can be configured to perform some or all of the actions performed by Alice 103a and / or Bob 103b.
[0083] The validation entity 701 can take one of several forms, more fully described below. Generally, however, the validation entity 701 can operate a computing device including a processing unit with one or more processors, such as, for example, one or more CPUs, GPUs, other accelerator processors, application-specific processors, and / or FPGAs. The computing device further includes computer-readable storage in the form of memory, i.e., a non-transitory computer-readable medium. This memory may include one or more memory units using one or more memory media, such as, for example, magnetic media such as hard disks; electronic media such as SSDs, flash memory, EEPROMs; and / or optical media such as optical disk drives. The memory on the computing device can include respective instances of at least one client application configured to store software and execute on the processing unit. It will be understood that any action attributed to the validation entity 701 herein can be performed using software executing on the computing device's processing unit. The computing device of the validation entity 701 can include at least one user terminal, such as, for example, a desktop or laptop computer, a tablet, a smartphone, or a wearable device such as a smartwatch. The computing equipment of validation entity 701 may also include one or more other networked resources, such as cloud computing resources accessed via a user terminal. The client application may initially be provided to the computing equipment of validation entity 701 on a suitable computer-readable storage medium, for example, downloaded from a server or provided on a removable storage device such as a removable SSD, a flash memory key, a removable EEPROM, a removable magnetic disk drive, a magnetic floppy disk or tape, an optical disk such as a CD or DVD ROM, or a removable optical drive.
[0084] The validation entity 701 is configured to validate token transactions. The validation entity 701 has access to mint transactions. A mint transaction mints, or issues, a certain amount of tokens. A mint transaction may be signed by the token issuer 702 (i.e., the mint transaction may include an input having a signature linked to an issuing public key owned by the token issuer 702) and may include an output that locks an initial amount of tokens. In other examples, a mint transaction may include different forms of encrypted data, such as a mint public key, a message signed by the token issuer, or a message encrypted by the token issuer. Generally, a mint transaction includes encrypted "mint" data. Cryptographic data is data used as part of an encryption scheme. Mint data is public information known to be relevant to minting a token. A mint transaction may include multiple outputs, each locking an initial amount of tokens. Mint transactions are recorded on the blockchain 150. The validation entity 701 can access the mint transactions from the blockchain 150, or the validation entity 701 can store the mint transactions locally. In some examples, the mint data may be a knowledge proof, such as a hash puzzle or an r-puzzle. Solving the knowledge proof, i.e., unlocking it, requires knowledge of the data.
[0085] The validation entity 701 obtains a "target token transaction," i.e., a token transaction to be validated by the validation entity 701. The target token transaction may be submitted to the validation entity 701 by a token user 703. Alternatively, the target token transaction may be submitted to the validation entity by a different validation entity 701. That is, the system 700 may include multiple validation entities, such as, for example, the token server 601 and token client of Figure 6. The target transaction may also be obtained in other ways.
[0086] The first condition for a target token transaction to be a valid token transaction is that it must be part of a transaction chain leading back to a mint transaction. That is, the target transaction must contain an input that references (i.e., consumes) the output of the mint transaction, or an input that references a previous token transaction that is part of a transaction chain leading back to the mint transaction. In the latter case, the previous transaction must contain an input that references the output of the mint transaction, or an input that references a previous token transaction that is part of a transaction chain leading back to the mint transaction. In other words, tracing the referenced outputs of previous token transactions must eventually lead to the token transaction. If the target token transaction is a mint transaction, the first condition is met: whether the target token transaction contains mint data, e.g., a mint public key.
[0087] The validation entity 701 may be configured to verify the first condition by performing said tracing of the referenced output, or alternatively, the validation entity 701 may perform a more efficient process for verifying the first condition, as described below.
[0088] The target token transaction may include multiple token inputs. In these examples, the validation entity 701 is configured to verify that each token input is part of a transaction chain leading back to the mint transaction. Note that there may be multiple mint transactions issued by the token issuer 702. In that case, a particular token input may be traced back to multiple mint transactions. Similarly, the various token inputs of the target token transaction may be traced back to various mint transactions.
[0089] In some instances, additional conditions must be met for a target token transaction to be considered valid. These additional conditions are described below.
[0090] Once validated, i.e., once the first condition or any other condition is verified, the validation entity 701 can submit the target token transaction to the blockchain network 106. That is, the token user 703a can submit the target token transaction to the validation entity for validation, and, provided that the target token transaction is valid, the validation entity 701 will forward the target token transaction to the blockchain network 106.
[0091] The validation entity 701 may obtain confirmation that the target token transaction is a valid blockchain transaction. For example, the validation entity 701 may obtain confirmation that the target token transaction is published in block 151 on the blockchain 150. The validation entity 701 may obtain a Merkle proof from the blockchain node 104 to verify that the target token transaction is published in block 151. Once the target token transaction is confirmed to be a valid blockchain transaction, the validation entity 701 may record the target token transaction in the list of valid token transactions. Note that the validation entity 701 may record the target token transaction in the list of valid token transactions before obtaining confirmation that the target token transaction is a valid blockchain transaction. The validation entity 701 may choose to remove the target token transaction from the list even if the target token transaction is not a valid blockchain transaction.
[0092] In some examples, after validating the target token transaction, the validation entity 701 may sign the target token transaction before submitting it to the blockchain network 106. For example, the target token transaction may be incomplete, and the validation entity 701 may complete the target token transaction by including an input that includes the validation entity's signature, i.e., a signature linked to a public key owned by the validation entity 701. This signature indicates that the target token transaction has been validated. In some examples, the input may be a fee payment input, i.e., an input that pays the transaction fee collected by the blockchain node 104 that published the transaction in block 151. Such an input is an example of a "non-token input."
[0093] The target token transaction may include one or more non-token inputs, for example, before the validation entity 701 adds non-token inputs as needed. The validation entity 701 does not need to check that the non-token inputs meet the first condition of being part of a transaction chain back to the mint transaction. However, the validation entity 701 needs to distinguish between token and non-token inputs to determine which inputs must meet the first condition. In the simplest example, inputs may be distinguished based on their index within the target transaction. For example, a first input may be defined as being a token input and a second input as being a non-token input, or vice versa.
[0094] In another example, a non-token input may be identified by identifying a public key included in the non-token input. That is, the validation entity 701 may determine whether the input includes one of a predefined set of public keys, such as one of a set of fee-paying public keys. If the input includes one of the predefined set of public keys, the validation entity 701 considers the input to be a non-token input.
[0095] As another option, the validation entity 701 can identify non-token inputs as being signed with a particular signature flag. For example, non-token inputs can be defined as being signed with the SIGHASH_SINGLE signature flag.
[0096] If the target token transaction includes one or more non-token inputs, the target token transaction must satisfy a second condition to be considered a valid token transaction: The validation entity 701 is configured to verify that the total amount of tokens locked by the token outputs of the target token transaction does not exceed the total amount of tokens locked by the outputs referenced by the token inputs of the target token transaction. In other words, the target token transaction cannot distribute more tokens across its token outputs than were consumed by the token inputs of the target token transaction.
[0097] The target token transaction may include one or more non-token outputs. For example, the non-token output may be used to return the difference between the fee payment input and the transaction fee to the entity paying the transaction fee. The non-token output may be used for other purposes. If the target token transaction includes one or more non-token outputs, the target token transaction must satisfy a third condition to be considered a valid token transaction. The validation entity 701 is configured to verify that the total amount of tokens locked by the token outputs of the target token transaction does not exceed the total amount of tokens locked by the outputs referenced by the token inputs of the target token transaction.
[0098] To verify the third condition, the validation entity 701 needs to distinguish between token and non-token outputs. In the simplest case, the index of the output is sufficient to distinguish between token and non-token outputs, e.g., non-token outputs are placed at the beginning of the transaction. As another option, non-token outputs can be identified as having the same index as the corresponding non-token input. Alternatively, if the non-token input is defined as signed with a specific signature flag, the non-token output will be output as signed with more signatures than the token output.
[0099] As another optional condition, the validation entity 401 can verify that the target token transaction does not attempt to double-spend the outputs of the blockchain transaction. That is, the validation entity can verify that the outputs referenced by the inputs (both non-token outputs and token outputs) of the target token transaction are unspent transaction outputs (UTXOs). This check is performed by the blockchain node 104 when submitted to the blockchain network 106, but the validation entity 701 may also want to perform this check, for example, to prevent invalid blockchain transactions from being sent to the blockchain network 106.
[0100] In some examples, the validation entity 701 may also validate the mint transaction. For example, the validation entity 701 may verify that the mint transaction includes a signature linked to a mint public key associated with the token issuer 702.
[0101] The validation entity 701 may receive a request from a requesting entity (e.g., token user 703b) to verify whether a token transaction (e.g., target token transaction) is a valid token transaction. The validation entity 701 may verify that the token transaction is a valid token transaction, and if the token transaction is valid, send a response to the requesting entity informing the requesting entity that it is a valid token transaction. This request and response process is described in more detail below.
[0102] Token Server In some embodiments, the validation entity 701 may comprise a "token server" 601. That is, the validation entity 701 may take the form of (or include) a server configured to perform the actions of the validation entity 701. The token server 601 may store a record (e.g., a database) of valid token transactions, i.e., token transactions that have been previously verified. These token transactions may have been validated by the token server 601 or a different entity. In some examples, the token server 601 may keep a record of all valid transactions.
[0103] In these embodiments, the token server 601 can verify that the token input of the target token transaction references the output of a previously validated token transaction by determining whether the referenced transaction exists in its record of valid token transactions, for example, by performing a lookup of the transaction ID of the referenced transaction.
[0104] In some examples, the token server 601 can construct a "token block." A token block shares some similarities with a blockchain block 151. A token block consists of a token block header and a list of valid token transactions (or at least identifiers for each of the valid token transactions). Once a target token transaction is validated, it can be included in the current (i.e., latest) token block. The token block header for a particular token block consists of a Merkle root calculated based on the set of token transactions in that token block. As described below, the block header may include additional fields.
[0105] Similar to a blockchain block 151, the block header of a token block may contain a pointer to the previous token block in the sequence (i.e., chain) of token blocks. The pointer may take the form of a hash (e.g., a double hash) of the block header of the previous token block. The pointer traces back to the first (i.e., first created) token block.
[0106] The token server 601 may construct one token block per blockchain block 151. That is, a token block may be constructed based on transactions (specifically, token transactions) within a particular token block. A token block may be constructed before the corresponding blockchain block 151 is published (e.g., when the token transactions included in the blockchain block 151 are sent to the network 106 by the token server 601), or may be constructed after the blockchain block 151 is published (e.g., the token server 601 may scan the blockchain block 151 for token transactions).
[0107] Optionally, some or all of the token blocks may include one or more signatures. The signatures may be included in the block header of each of the token blocks. For example, the token server 601 may include a signature to verify that the token block was actually constructed by the token server 601. A signed message may include some or all of the token blocks. In some examples, the token issuer 703 and / or one or more additional entities (e.g., auditors, government agencies, or other official entities) may include respective signatures.
[0108] In addition to keeping a record of token blocks, the token server 601 can send one or more token blocks (e.g., periodically or on demand) to a requesting entity, such as the token user 703b or the token issuer 702. The requesting entity can be the token issuer 702, the token user 703, or a different validation entity (e.g., a token write client, described below). The token server 601 can send the entire token block or just the token block header.
[0109] In some cases, the token server 601 can send a token block header (and optionally a complete token block) as part of a simplified token validation method to verify the existence and integrity of a valid token transaction. Verifying the integrity of a transaction ensures that the data in the transaction has not been tampered with. For example, a requesting entity (e.g., token user 702b) may wish to verify that a token transaction is valid. The token transaction in question may be a token transaction referenced by an input of the current token transaction, such as a target token transaction. To confirm that the referenced token transaction is valid, the token server 601 can provide the requesting entity with a Merkle proof to verify the existence of the referenced token transaction in the token block. Merkle proofs are known to those skilled in the art. The Merkle proof sent to the requesting entity includes a sequence of hashes. The referenced token transaction is hashed and concatenated with the first hash in the sequence, and the result is hashed again. The next result is concatenated with the next hash in the sequence (if any), and the result is hashed again. Each hash in the sequence has a left or right indicator. Left or right can be determined by a single index, which can be provided as the first number in the Merkle proof. This process is repeated until each hash in the sequence has been used. If the final hash is equal to the Merkle root contained in the token block header of the token block, the referenced token transaction is included in the token block. Since token blocks only contain valid token transactions, the referenced token transaction must be valid and the data in the referenced transaction must not have been altered.
[0110] Token Write Client In some embodiments, the validation entity 701 may comprise a "token write client" 602a. That is, the validation entity 701 may take the form of (or include) a client application configured to perform the actions of the validation entity 701. The token server 601 may store a record (e.g., a database) of valid token transactions, i.e., token transactions that have previously been verified. These token transactions may have been validated by the token write client 602a or a different entity.
[0111] The token write client 602a maintains a record of token block headers along with a record of transaction identifiers for valid token transactions. The token write client 602a also stores a record of the token value and index for each token output of a valid token transaction. For example, the record may have multiple data items of the form TxID||index||value. The token block headers may be obtained from the token server 601, for example, upon request and / or as each token block is constructed by the token server 601. In some examples, the token block header may be for a token block constructed by the token write client 602a.
[0112] The token write client 602a can use the record to validate received token transactions. For example, the token write client 602a may verify that the token output referenced by the token input of the target transaction is stored in the record. For example, the token write client 602a performs a lookup of the referenced TxID||index||value in the record. If the target token transaction is valid (i.e., meets one or more conditions for validity), the token write client 602a can add the token output of the target transaction to the record. In some examples, the token write client 602a can remove the referenced token output from the record.
[0113] The token write client 602a can receive token transactions from token users 703, validate the token transactions, and then send them to the blockchain network 106 and / or the token server 601.
[0114] Similar to the token server 601, the token write client 602a can also construct token blocks. These token blocks can take the same form as those constructed by the token server 601. For example, the token write client 602a can receive token transactions from token users 703 and construct token blocks based on those token transactions. The token write client 602a can also include in token blocks token transactions that have been sent to different instances of the token write client 602a and then forwarded to the token write client 602a, or that have been retrieved from the blockchain 150 (after being sent to the blockchain network 106 by other token write clients). Similar to the token server 601, the token write client 602a can construct token blocks for each newly published block of the blockchain 150.
[0115] In some examples, the token write client 602a can send constructed token blocks to the token server 601, for example, for validation by the token server 601. The token server 601 can add its signature to the token block headers of such token blocks and return them to the token write client 602a. In some examples, the token write client 602a can receive token blocks from the token server 601. For example, the token write client 602a may temporarily lose connection to the blockchain network 106 and therefore be unable to construct token blocks during that time.
[0116] Similar to the token server 601, in some cases the token write client 602a may send a token block header (and optionally a complete token block) as part of a simplified token validation method to verify the presence of a valid token transaction. A similar scenario applies, where the token write client 602a sends a block header and a Merkle proof of the valid token transaction contained in the corresponding token block to a requesting entity (e.g., token user 703). If the Merkle proof leads to a Merkle root contained in the block header, the token transaction can be confirmed to be included in the token block and therefore to be a valid token transaction.
[0117] Token UTXO Client As shown in Figure 6, the system may include one or more token UTXO clients 602b. These client applications are also configured to validate token transactions. That is, the validation entity 701 may take the form of a token UTXO client application 602b. A token UTXO client maintains a record of one token snapshot. A token snapshot consists of a set of token UTXOs. Each token UTXO is an unspent token output of a token transaction. Each token snapshot captures a set of token UTXOs at a different point in time.
[0118] Some or all of the token snapshot is constructed by the token UTXO client 602b. Some may be received from a different instance of the token UTXO client 602b or may be received from the token server 601. In some cases, the token server 601 may construct a token snapshot and send it to the token UTXO client 602b, for example, in response to the token UTXO client 602b losing connectivity to the blockchain network 106. The token snapshot may be constructed by tracking token UTXOs on the blockchain, i.e., by tracking which token outputs have not yet been validly consumed by later blockchain transactions (token or non-token).
[0119] The token UTXO client 602b is configured to validate the token transaction, for example, by verifying that each token input of the target token transaction references a respective unspent token output of a previous token transaction (which may be a mint transaction). The token UTXO client 602b does this by verifying that the referenced token output is present in the latest token snapshot.
[0120] Upon validating the token transaction, the token UTXO client 602b can submit the token transaction to the blockchain network 106 and / or the token server 601. The token UTXO client 602b can construct a new token snapshot that includes the token output of the target transaction but does not include the referenced token outputs.
[0121] The token UTXO client 602b can also perform a simplified token validation method to verify the existence of a valid token output. Each token UTXO snapshot can include a Merkle root calculated based on the token UTXOs stored in the snapshot. To verify the existence of a token output, the token UTXO client 602b can send a Merkle path linking a given token UTXO to the Merkle root of the current token snapshot to the requesting entity (e.g., token user 703). Note that a Merkle root can be constructed for a Merkle tree whose leaves take one of the following forms: 1. TxID||index 2. TxID||index||value 3. TxID||index||locking script||value
[0122] Token System Example An example token system will now be described. It will be understood that some features of the token framework are optional, and other variations may be selected based on the specific implementation of an embodiment of the present invention. According to an example framework, blockchain transactions are subject to dust limits, token values are pegged to native blockchain tokens, and no token-specific data is pushed to locking scripts.
[0123] Setup Transaction A token issuer 702 can issue a setup transaction. Suppose the token issuer 702 wants to issue a token representing a national currency. Note that this is just one of many possible use cases for a token system. The token issuer 702 can choose to publish the on-chain token specification in a non-spendable (e.g., OP_FALSE OP_RETURN) payload within the setup transaction. Alternatively, the specification can be published on a website or other appropriate public record, as long as that record is trusted by users and the general public. This allows the token issuer 702 to publicly publish the token chain and prove the token's rules. In the event of a dispute, token users 703, including the token issuer 702, can refer to the specification to resolve the dispute. The specification can be thought of as a public company statement or the terms and conditions of the token system. This specification can reference the ERC-20 standard, a tokenized standard, or a customized standard the token issuer deems appropriate. If the token chain is private, the specification can be published as a hash value to ensure integrity.
[0124] An example of a setup transaction is shown below. [Table 1]
[0125] The token issuer 702 signs the setup transaction and includes the issuing public key. The setup transaction can reference any unspent transaction output (UTXO) owned by the token issuer 702. Similarly, the output of the setup transaction can be locked to any public key, such as another public key 702 owned by the token issuer.
[0126] Note that the above description is for illustrative purposes only. The token issuer 702 may include all details about the token system in this setup transaction. In general, this description is intended to demonstrate that the token system is technically robust and legally compliant.
[0127] Three public keys are explicitly shown in the example illustration: PK mint is used to mint tokens, and PK melt is used for coin melting, PK Audit are used to prove compliance of the token system. All three public keys are certified by a signature from the token issuer 702 at the input of the setup transaction. Other types of mint data may be included herein instead of or in addition to the public keys.
[0128] The token issuer 702 can add more public keys to provide more sophisticated access control structures. For example, there may be a public key for the transaction validator 701, in which case token transactions may be validated and signed by the validator 701 before being sent to the blockchain network 106. The token issuer 702 can also add master certificate public keys as the token system evolves, creating a hierarchy of certified public keys. There may also be a public key dedicated to paying transaction fees, as described below.
[0129] In the exemplary framework, tokens are pegged to native blockchain tokens. For simplicity, a Bitcoin example is used here, but it should be understood that this is not limiting to all embodiments. In that case, there is a fixed conversion rate between Bitcoin and the token. Note that this is not an exchange rate; it is merely a convenient representation of the token value. For example, 1000 satoshis (sats) may represent 1 GBP. Thus, for a token transaction with 10,000 sats as output, the token value of the token output is 10 GBP. Note that, as of this writing, the dust limit is 546 satoshis, so it may be more convenient to define the peg ratio as 1:dust limit, where 1 is the smallest non-divisible unit of the token.
[0130] Note that in this example, the specification may include a reserve issuance ratio. This suggests that the token issuer 702 cannot issue tokens that exceed its financial capacity. The token issuer 702 may also need to obtain a valid license from a central bank to be permitted to issue GBP tokens. The jurisdiction field may specify where the token system is regulated and applicable relevant laws. These compliances may be audited by a third party, and the audit results may be placed on-chain to ensure transparency. In general, all traditional approaches to financial entities or token issuers can be integrated into the sample token framework. Enforcement of rules, regulations, or laws may be a combination of on-chain and off-chain.
[0131] Mint Transaction To mint a token, the token issuer 702 constructs a mint transaction, an example of which is shown below: [Table 2]
[0132] This exemplary transaction is arranged by the token issuer 702 and involves the use of a public key PK mint A mint transaction has one input, which is a signature that can be verified by the TxID. A mint transaction may contain different forms of cryptographic data, for example a signature or an encrypted message. setup According to the specifications, this transaction will generate x1 GBP tokens, which will be allocated to the holders of PK1.
[0133] The transaction fee is the value of the mint out point - 1000x1, where it is assumed that the mint out point has been prepared by the token issuer 702 to have the exact amount to cover both the transaction fee and the value of the first output. Details of the transaction fee are provided below.
[0134] A blockchain transaction is defined as a token minting transaction if: 1. All inputs in the transaction contain one or more signatures that can be verified by one or more mint public keys, and 2. If it is a valid blockchain transaction.
[0135] What this definition means is that Bitcoin is colored with a mint public key. The color is then preserved throughout the transaction chain starting from the mint transaction or transactions. To check if a blockchain transaction is a token transaction, it can be traced back through the transaction chain to the mint transaction. This can be difficult to do when the system is large. However, this process can be optimized using token blocks and token UTXO snapshots.
[0136] A token issuer 702 may structure multiple such transactions to meet demand for tokens, in which case the number of tokens that can be minted is limited by the number of bitcoins held by the token issuer 702 and the rules of the specification.
[0137] Consumption Transactions Once the mint transaction is published on the blockchain 150, any token user 703 who owns the public key to which the token output of the mint transaction is locked can spend the token.
[0138] TxID mint The next transaction that consumes the TxID spend Think about it. [Table 3]
[0139] This transaction uses the public key PK mint To identify this transaction as a token transaction, you must include the transaction referenced in the input (TxID mint ) to the TxID. mint locally or from the blockchain network 106, it can be verified that it is a valid token minting transaction and therefore the TxID spent is a token transaction. To validate a token transaction, three main checks are required: 1. The out-point referenced in the input is unconsumed, and 2. The output value is less than or equal to the input value, and 3. The signature is valid (or the script is successfully validated).
[0140] Note that all these checks are done at the same time as the validation of a regular blockchain transaction, so all checks can be delegated to the blockchain node 104. In summary, token transaction validation consists of only two steps: 1. Checking that the input can be traced back to a token minting transaction; and 2. Obtaining confirmation from a blockchain node that the token is blockchain valid.
[0141] Transaction Fees There are three ways to handle transaction fees:
[0142] The first is a token-only approach: to maintain simplicity in token transaction validation and ensure that token transactions consist only of token inputs and outputs, transaction fees can be paid by burning a small fraction of tokens. spend As shown in Figure 7, the owner of PK1 transfers x2 GBP tokens to the owner of PK2. A transaction fee of 1000 (x1 - x2) effectively burns (x1 - x2) tokens. For token users, this can be thought of as a fee for the token transfer. For token issuers, this means that the number of tokens in the system decreases with usage. This is a desirable feature for some tokens that naturally depreciate in value. On the other hand, if this is a problem for the token issuer 702, they can mint new tokens from time to time to compensate for the transaction fees.
[0143] If zero-fee transactions are accepted by the blockchain node 104, the issue of paying fees for token transactions is resolved. However, the token issuer 702 may need to make a fiat payment to the blockchain node 104 off-chain through a business contract. In this case, the token issuer 702 is effectively paying the transaction fee to the token user 703.
[0144] The second is the public key approach. Another possibility is to use a public key to indicate the purpose of an input in a token transaction. In this case, the token issuer 702 can introduce a fee-paying public key, or a set of fee-paying public keys, in the setup transaction specification. The fee-paying public keys are owned by the token issuer and can be distributed to token wallets. The idea is to add one more input to every token-spending transaction, covering the exact amount of the transaction fee. An example is shown below: [Table 4]
[0145] Note that a fee outpoint is not a token input in the sense that it cannot be traced back to a token minting transaction. However, a fee outpoint does not invalidate a token transaction, as the public key in the unlocking script can be identified as a valid public key certified by the token issuer 702. For more flexibility, token issuers may allow users to register fee-paying public keys. The list of certified fee-paying public keys could be published in an updated version of the specification.
[0146] The advantage of this approach is that all outputs of a token transaction are token outputs. This simplifies validation. As a token issuer 702, it is also possible to use a fee payment input as authorization for a token transfer. A token user 703 first constructs a partial transaction. The token issuer 702 or wallet software authorizes the transaction by adding a fee input to complete the transaction. This additional authorization process prevents users from accidentally burning tokens.
[0147] With respect to the token-only approach, this approach has two drawbacks: 1. Some additional checks need to be implemented. a. Check that the fee-paying public key is included in the specification. b. Check that the value of the output is equal to (or less than) the value of the token input. This is to prevent token users from inflating the token output value by "borrowing" some bitcoins from the fee payment input. In a token-only approach, since the input consists only of token inputs, the check is equivalent to whether the total output value is not greater than the total input value, which can be delegated to the blockchain node 104. 2. The fee outpoint must contain the exact amount to pay the transaction fee. Non-token outputs are not allowed, so no change can be collected. For this reason, token users or token issuers must prepare the fee outpoint before transferring tokens.
[0148] The overhead introduced by 1b is negligible from a computational standpoint, and the benefits it brings are significant in terms of preventing accidental burning of tokens. The second drawback can also be mitigated by having a fee outpoint pool or server owned by the token issuer 702 and providing the appropriate fee outpoint for each token transaction request.
[0149] The third is the SIGHASH_SINGLE approach. Here, the goal is to address the inflexibility in paying transaction fees and simultaneously eliminate the confusion between token and non-token outputs. We know that paying transaction fees and collecting some change only requires one input and one output from a token transaction. We use SIGHASH_SINGLE to link this input-output pair, allowing us to distinguish the output from other outputs.
[0150] SIGHASH_SINGLE is a flag added to a signature to indicate that the message signed by the signature excludes all outputs except those with the same index as the input containing the signature. Note that other blockchains may use different signature flags for the same purpose, and SIGHASH_SINGLE is used only as an illustrative example. This means that outputs can be added or modified in a transaction without invalidating the signature, as long as the indices of the signed outputs are the same. Inputs cannot be added or modified because SIGHASH_NONE is not included.
[0151] To construct a spend transaction, a user sends a token input (e.g., TxI) to their wallet software or to an entity that funds the transaction fee (which can be the user themselves). Dmint ||0). An incomplete transaction is constructed as follows: [Table 5] Signature fee teeth,
number
[0152] Upon receiving or constructing an incomplete transaction, user 703 completes the transaction by adding any number of token outputs and signs the updated transaction. [Table 6] In this transaction, the signature Sig1 signs all inputs and outputs, with the following equation for values: Transaction Fee = Fee Outpoint Value - z x1= x2+ x3
[0153] There are several ways to distinguish between fee payment inputs and token inputs. 1. Check if the input is a token output. This becomes very difficult if you don't have a list of token outpoints to reference. If you start working backwards from the fee outpoints, it can take a long time to reach a negative conclusion. 2. Define the first input to always be the fee payment input. This can be implemented as part of the wallet software. 3. Use SIGHASH_SINGLE to define the input as a fee payment input, which means you cannot use SIGHASH_SINGLE with other token inputs.
[0154] Assuming that fee-paying inputs can be distinguished from token inputs, identifying a non-token output is simply a matter of checking whether the index of the output is the same as the index of the fee-paying input.
[0155] However, assuming SIGHASH_SINGLE is used to flag fee-paying inputs (Method 3), we can directly identify non-token outputs without identifying the fee-paying inputs. For each output, we can count the number of signatures that signed that output. Non-token outputs will have the highest number of signatures, since they always have at least one additional signature from a fee-paying input.
[0156] This feature of the token output induces another type of directed acyclic graph at the outpoint level.
[0157] Outpoint Signature Directed Acyclic Graph (OS DAG) Outpoint Signature A directed acyclic graph is a DAG, 1. A node is the outgoing point of a blockchain transaction, 2. A directed edge is established from one node to another if the second node is part of a message signed with the signature required to allocate (consume) the first node.
[0158] Roughly speaking, we have outpoints as nodes and signatures as edges. All edges in the OS DAG are established within blockchain transactions. Figure 5 shows an example.
number
[0159] The advantage of this SIGHASH_SINGLE approach is that it provides flexibility in paying transaction fees.
[0160] Non-token Input Security In order to pay transaction fees, non-token inputs are introduced into token transactions. These non-token inputs can be used accidentally or maliciously to inflate the value of the token output. Checks must be implemented to check that these token transactions are considered invalid.
[0161] The sum of the input values in satoshis of the token transaction is calculated as VI token + VI non-token Then, the total output value is VO token +VO non-token , transaction fees are V feeThen, VO token +VO non-token + V fee = VI token + VI non-token get.
[0162] VO token = VI token However, token users are expected to non-token or V fee You can get some satoshis from:
number
[0163] As a blockchain transaction, it remains valid. As a token transaction, it is considered invalid.
[0164] An example pair of token transactions is shown below: [Table 7]
[0165] The first transaction is token valid in the sense that the token output has the same value as the token input, and the difference between the fee input and the fee output indicates a transaction fee of 2000 satoshis. The second transaction is token invalid in the sense that the token output is greater than the token input. However, the difference between the sum of the input and the sum of the output indicates a transaction fee of 1000 satoshis. This transaction is blockchain valid and is accepted by the blockchain nodes. Therefore, when this transaction is published, the value of the token, represented by 1000 satoshis, is lost.
[0166] In token-only and public-key approaches, the fee payment input must be added after the token input and output are complete. Therefore, the fee-paying entity (token issuer or wallet software) can enforce a check before signing the token transaction. There is no incentive for users to intentionally inflate token output in this manner, as this would result in burning tokens. Meanwhile, accidental mistakes are immutably recorded on the blockchain. Token users can demonstrate to the token issuer that the accident was genuine, and the issuer can choose to mint new tokens to refund the user. However, avoiding accidental mistakes is still important.
[0167] Token Transaction Validity Now that we've explained how tokens are minted and spent, we can give a comprehensive definition of the validity of token transactions. Definition - Token Outpoint Outpoint TxID||Index is a token-out point if: 1. The transaction TxID is a token minting transaction, or 2. There is a transaction path from the token mint transaction to transaction TxID, and 3. The index does not correspond to an index of fee payment inputs or non-token inputs.
[0168] Definition - Token Transaction Validity A token transaction is a valid token minting transaction, or 1. Blockchain is valid and 2. At least one input references a token-out point, and 3. The sum of the token outputs is valid if it is less than or equal to the sum of the token inputs.
[0169] Given the above definitions, for each blockchain transaction, it must be traced to either a mint transaction or a coinbase transaction. If it ultimately becomes a mint transaction, the transaction is a token transaction. If it becomes a coinbase transaction without identifying a mint transaction, the transaction is not a token transaction. As blockchain systems scale, identifying and validating token transactions can become difficult. One way to improve this is to keep a record of known valid token transactions. Instead of tracing back to a mint transaction, the validator can stop at a known valid token transaction. Furthermore, if the validator has access to a trusted set of unused token outpoints, it can replace tracing with a lookup operation that checks membership in the set.
[0170] To address the scalability of the token system, we propose several options to optimize token transaction validation. We start by describing the token server 601, which keeps a record of all token transactions. We then propose a block of records structure, which leads to the description of a light client for the token system. Finally, we propose a token client that utilizes token UTXO snapshots to further improve efficiency.
[0171] Definition - Token Server The token server 601 must meet the following requirements: 1. Ability to verify token transactions 2. Connected to a blockchain network.
[0172] The first requirement means that the token server 601 must store some information about the token system in order to recognize that the input of a blockchain transaction is a token input. There are many ways to achieve this.
[0173] The simplest method is to store the token configuration transaction along with the token specification and all subsequent token transactions. The token server 601 first checks whether the transaction is a token minting transaction by checking the public key and corresponding signature in the input. If it is not a token minting transaction, the token server 601 checks whether the blockchain transaction input is from a past token transaction. If the check passes, the token server 601 can begin validating the token transaction as defined below.
[0174] Note that double-spend checks are provided by blockchain nodes and are optional for token clients. If the token server 601 delegates some checks on transaction validity to a blockchain node, the node must wait for confirmation of validity from the network. Hence the second requirement in the definition.
[0175] It is possible to replace signature validation with a format check, which can be more efficient to implement. The idea is to ensure that when a public key is given in the input, the corresponding signature also exists, and delegate signature validation to the blockchain node. This can be achieved if the locking script is a standard P2PKH and the unlocking script in the input contains only one public key and signature. Other common scripts may be allowed, and you can fall back to signature validation if there are problems with the script.
[0176] Token Block Regarding the structure of the data stored in the token server 601, we can mimic the blockchain system and introduce the concept of a token block. This will allow us to introduce the concept of a token write client 602a in the next section. An example of the definition of a token block is shown below.
[0177] Definition - Token Block A token block consists of a block header and a list of valid token transactions. The block header may contain some or all of the following fields: 1. The version indicates which token system this block belongs to, 2. The previous block header hash is the SHA256 value of twice the previous token block header, and is empty for the genesis token block. 3. The Merkle root is calculated based on the token transactions within that token block. 4. Bitcoin block height indicates which Bitcoin block all token transactions come from, 5. The number of transactions indicates the total number of token transactions included in the token block.
[0178] A list of digital signatures may be added to each token block to indicate that each signer has verified the validity of the block, where a token block is valid if: 1. All transactions are token-valid; 2. All transactions are taken from the blockchain block specified by the blockchain block height; 3. Contains the hash value of the previous token block header, 4. The Merkle root of the token transaction is calculated correctly, 5. The transaction numbers are correct.
[0179] As soon as a new blockchain block is published, a token block is constructed on the token server 601. For example, suppose there is a newly published blockchain block. [Table 8]
[0180] 1. Use the version field to indicate which token system the block belongs to. 2. The previous block hash is the hash value of the previous block header. Note that no proof of work is required here. 3. The Merkle root is calculated from the transactions contained in the token block. Another way is to use the Bitcoin Merkle root. 4. A new field called Bitcoin block height is used to indicate which Bitcoin block every token transaction belongs to. 5. The number of transactions indicates the number of transactions that exist in the token block. 6. The complete list of transactions is listed in the Transactions field. 7. The signature field allows an entity to add a digital signature to sign the block header. This can be a signature from the token issuer or a delegator. The signature should only be added after the token block has been successfully validated.
[0181] Note that the token block header includes the first five fields in the token block.
[0182] For each blockchain block, there can be at most one token block, and it is not possible for a token block to contain a set of transactions coming from two different blockchain blocks.
[0183] There is no proof-of-work required for a token system. However, all information about the token system can be obtained from the blockchain ledger, so the security of the token system is inherited from the blockchain system. Signatures added to blocks provide a shortcut for token block validation. However, even if users do not trust the signers, they can still validate blocks independently. All information needed to validate a token block is publicly available on the blockchain ledger. Meanwhile, given that token blocks can be publicly verified, signers are incentivized not to sign invalid token blocks.
[0184] A common concern is orphaned blocks, which occur occasionally, though rarely. Indeed, token systems, like blockchain systems, are subject to reorganizations. When a valid block becomes orphaned due to the existence of another, longer chain with more proof of work, all transactions in that block that are not included in the other, longer chain revert to private status. The same is true for the status of the token. However, as is often the case, transactions on competing chains are identical, so honest users and honest blockchain nodes are not affected by the reorganization. For token issuers, an accurate, up-to-date view of the token system requires ensuring that the token server 601 that maintains the token system is connected to a large portion of the network.
[0185] To optimize token validation, we can try to minimize storage for token transactions and improve lookup efficiency. We introduce the Token Lite Client 602a as an equivalent to the Bitcoin Lite Client.
[0186] Token Write Client The Token Write Client 602a is a token client that maintains: 1. Token setup transaction, 2. Token block header, 3. The token transaction in the transaction ID, and 4. The token value for each stored transaction ID and the index of each output.
[0187] The last two items can be concatenated into a string of the form TxID||index||value. The token write client 602a is capable of token transaction validation and token block construction.
[0188] When a token transaction is sent to the token write client 602a, the token write client 602a performs the following steps: 1. Check if the token transaction is a mint transaction by comparing the public key in the input with the public key in the token specification. 2. Otherwise, for each input, check if the referenced out-point matches a locally stored token out-point. 3. If there is a match, identify all token outputs and check that the sum of the token inputs is equal to (or greater than) the sum of the token outputs.
[0189] If the check passes, the token write client 602a saves the transaction for each of its token outputs as TxID||index||value||flag. The flag indicates whether the corresponding transaction output (TxID||index) is spent or unspent. The token transaction is then sent to the blockchain network for further checks.
[0190] Once the token write client 602a gets confirmation from the blockchain node that the transaction is valid or accepted, the token write client 602a can include the transaction in the next token block. When a new blockchain block is published, the token write client 602a can construct the corresponding token block. Note that complete transaction data is not required to construct a token block; only the transaction ID is sufficient. Furthermore, no work-of-proof is required to construct a block. It would be wise to double-check that everything is calculated and recorded correctly. A token block can be finalized by obtaining a signature from the token issuer.
[0191] Token UTXO Client The token system can be further improved by observing that there is no need to store spent token transactions or token outpoints. In this section, we maintain the token server 601 as described above and introduce the concept of a token UTXO client 602b. The token UTXO client 602b is responsible for tracking all unused token outpoints, which improves the efficiency of identifying and validating token transactions. If anything goes wrong, the token system can always fall back to the token server 601.
[0192] Definition - Token UTXO Snapshot A token UTXO snapshot consists of a snapshot header and a set of outpoints. The snapshot header contains five fields: 1. The version indicates which token chain this snapshot belongs to. 2. The hash of the previous snapshot header is the SHA256 value of twice the previous token snapshot header. 3. The Merkle root is calculated over all outgoing points in the token UTXO set. 4. The Bitcoin block height indicates up to which Bitcoin block the token UTXO set derives. 5. The outpoint count indicates the total number of outpoints in the token UTXO set.
[0193] The token server 601 and / or token UTXO client 602b can build and maintain a list of token UTXO snapshots, for example: [Table 9]
[0194] The advantage of this solution is that a token client can choose to store only the most recent token UTXO snapshot, since it contains all the information it needs to validate token transactions and construct the next token UTXO snapshot. When receiving blockchain transactions, the token client simply looks for outpoints in the inputs and checks whether they are included in the latest token UTXO set. If they are, they are valid token inputs. Note that the token client does not check for double-spend conditions; this check is done by the blockchain nodes. This is one of the main advantages of UTXO-based token systems.
[0195] The drawback is that if the latest token UTXO snapshot is corrupted, the token UTXO client 602b retrieves the last available token UTXO snapshot and subsequent blockchain blocks or token blocks must derive the latest snapshot block by block, in which case the token server becomes the authoritative source of the required information.
[0196] To further mitigate the potential risk of losing the most recent UTXO snapshot, a token issuer may choose to have multiple token servers and a small number of token UTXO clients to maintain the token system. If one token UTXO client 602b fails, the other UTXO clients can provide information for a quick recovery while keeping the token system running uninterrupted.
[0197] An example token network is shown in Figure 6. In summary, a token network consists of some or all of the following: A token server 601 that stores all token-related transactions and structures them into blocks; one or more token write clients 602a that store all token outpoints and their corresponding values; and One or more token UTXO clients 602b that store all unspent token outpoints and their corresponding values.
[0198] All of them are capable of validating token transactions and creating checkpoints (e.g., token block or token UTXO snapshots) to improve efficiency.
[0199] Bitcoin valid and token invalid Like many other token systems, shared token systems allow for transactions that may invalidate the token even if the blockchain is valid, resulting in a loss of tokens. This issue can be mitigated by introducing a validation step before adding transaction fees to complete a token transaction. This validation step can be performed by the token wallet, token client, or token server.
[0200] Tokens and Non-Tokens One of the major challenges in designing a token system is to avoid mixing tokens with non-tokens or other tokens. The challenge becomes even more difficult when token transactions must include transaction fees. To address this, the public key approach and the sighash-single approach are proposed. In both cases, mechanisms are put in place to ensure that bitcoins representing tokens are not mixed with bitcoins covering transaction fees.
[0201] By pegging the token value to the Bitcoin value and putting these mechanisms in place to prevent mixing of tokens with non-tokens, it means that the total amount of Bitcoin in the token system exists at the time of token issuance. These tokens or colored Bitcoins can be transferred, split, or even burned, but they can never be mixed with uncolored Bitcoin.
[0202] This leads to another use case: "Green Bitcoin." To promote environmentally friendly mining, Bitcoin mined using renewable energy can be colored and called Green Bitcoin using an authenticated public key or miner ID. By adopting a public key or sighash-single approach, Green Bitcoin cannot be mixed with non-Green Bitcoin. As users tend to acquire Green Bitcoin, more Bitcoin nodes will be encouraged to switch to renewable energy to mint Green Bitcoin.
[0203] substitutability Due to the nature of the peg, a shared token system is primarily used for fungible tokens. However, the idea of using a public key to color Bitcoin can be simply abstracted to create non-fungible tokens. For the time being, we believe that non-fungible tokens are outside the scope of this whitepaper.
[0204] Scalability By design, the shared token system relies on the blockchain system and reuses work from the blockchain system as much as possible. The shared token system does not need to check for double-spends. Therefore, no memory is required to hold unpublished token transactions (mempool) or temporarily configured token UTXOs. As the blockchain system scales, the shared token system scales accordingly.
[0205] conclusion Other variations or uses of the disclosed techniques may become apparent to those skilled in the art given the disclosure herein. The scope of the present disclosure is limited only by the appended claims, and not by the described embodiments.
[0206] For example, some embodiments above are described with reference to the Bitcoin network 106, the Bitcoin blockchain 150, and the Bitcoin nodes 104. However, it will be understood that the Bitcoin blockchain is one particular example of the blockchain 150, and the above description may apply generally to any blockchain. That is, the present invention is in no way limited to the Bitcoin blockchain. More generally, any references above to the Bitcoin network 106, the Bitcoin blockchain 150, and the Bitcoin nodes 104 may be replaced with reference to the blockchain network 106, the blockchain 150, and the blockchain nodes 104, respectively. The blockchains, blockchain networks, and / or blockchain nodes may share some or all of the described properties of the Bitcoin blockchain 150, the Bitcoin network 106, and the Bitcoin nodes 104, as described above.
[0207] In a preferred embodiment of the present invention, the blockchain network 106 is the Bitcoin network, and the Bitcoin nodes 104 perform at least all of the described functions of creating, publishing, disseminating, and storing blocks 151 in the blockchain 150. It is not excluded that there may be other network entities (or network elements) that perform only one or some, but not all, of these functions. That is, network entities may perform the function of disseminating and / or storing blocks without creating and publishing them (it is not to be recalled that these entities are not considered to be nodes of the preferred Bitcoin network 106).
[0208] In non-preferred embodiments of the present invention, the blockchain network 106 may not be the Bitcoin network. In these embodiments, it is not excluded that a node may perform at least one or some, but not all, of the functions of creating, publishing, disseminating, and storing blocks 151 of the blockchain 150. For example, in these other blockchain networks, "node" may be used to refer to a network entity that is configured to create and publish blocks 151 but not store and / or disseminate those blocks 151 to other nodes.
[0209] Also more generally, any reference above to the term "Bitcoin node" 104 may be replaced with the term "network entity" or "network element," where such entity / element is configured to perform some or all of the roles of creating, publishing, disseminating, and storing blocks. The functionality of such network entity / element may be implemented in hardware in the same manner as described above with respect to blockchain node 104.
[0210] It will be apparent that the above-described embodiments have been described by way of example only. More generally, there may be provided a method, apparatus, program according to any one or more of the following:
[0211] Statement 1. A computer-implemented method for validating a token transaction, wherein the token transaction is a blockchain transaction having one or more token outputs, each token output locking a respective amount of tokens, and a validation entity has access to a token minting transaction and / or a token setup transaction, wherein the token minting transaction has cryptographic minting data and mints an initial amount of tokens, and the token setup transaction has minting data authenticated by a token issuer, the method being performed by the validation entity and including the steps of obtaining a target token transaction having one or more token inputs and one or more token outputs, and validating the target token transaction, wherein validating the target token transaction verifying that each token input of the target token transaction has minting data and / or verifying that each token input of the target token transaction references a respective token output of the token minting transaction or any of previously validated token transactions that can be traced back to the token minting transaction.
[0212] In other words, a target token transaction is a valid mint transaction if it includes a mint public key (and a signature corresponding to the mint public key) in its inputs.
[0213] Encrypted data is data that has been used as part of an encryption method, i.e., in an encryption configuration.
[0214] Statement 2. The method of statement 1, including the step of transmitting the target token transaction to the blockchain network, provided that the target token transaction is a valid token transaction.
[0215] Statement 3. The method of statement 2, including obtaining confirmation from the blockchain network that the target token transaction is a valid blockchain transaction.
[0216] Upon obtaining the confirmation, the validation entity may store the target token transaction in a list of valid token transactions.
[0217] Statement 4. The method of claim 3, wherein obtaining confirmation includes verifying that the target token transaction is recorded on the blockchain.
[0218] Statement 5. Mint Data is - A mint public key associated with the token issuer, - Proof of knowledge created by the token issuer, - a symmetrically signed message signed by the token issuer, and - One of the messages encrypted by the token issuer, as in statements 1-4.
[0219] Statement 6. The method of any of statements 1-5, including the steps of receiving a request from a first requesting entity for confirmation that the target token transaction is a valid token transaction, and, under the condition that the target token transaction is a valid token transaction, sending a confirmation that the target token transaction is a valid token transaction to the first requesting entity.
[0220] Statement 7. Statement 2 or any method dependent on Statement 2, comprising, under the condition that the target token transaction is a valid token transaction and prior to submitting the target token transaction to the blockchain network, signing the target token transaction with a signature linked to a validation public key associated with the validation entity.
[0221] Statement 8. The method of any of statements 1-7, wherein the target token transaction includes one or more non-token inputs that reference respective outputs of prior blockchain transactions, and the method includes identifying the one or more non-token inputs as inputs having one or more of a predetermined set of public keys, e.g., fee-paying public keys.
[0222] Statement 9. The method of statement 8, wherein validating the target token transaction includes verifying that the total amount of tokens locked by the one or more token outputs of the target token transaction is less than or equal to the amount locked by one or more respective token outputs referenced by the one or more token inputs of the target token transaction.
[0223] Statement 10. The method of any of statements 1-9, wherein the target token transaction comprises one or more non-token inputs and one or more non-token outputs, and wherein validating the target token transaction includes verifying that a total amount of tokens locked by the one or more token outputs of the target token transaction is less than or equal to the amount locked by the token outputs referenced by the one or more token inputs.
[0224] Statement 11. The method of any of statements 8-10, including identifying the non-token input as an input signed with a signature having a predetermined signature flag, e.g., a sighash_single signature flag.
[0225] Statement 12. The method of statement 11, including identifying the non-token output as an output signed with more signatures.
[0226] Statement 13. The method of any of statements 1-12, wherein validating the target token transaction includes verifying that the token output of a previously validated token transaction is an unspent transaction output.
[0227] Statement 14. The method of any of statements 1-12, wherein the step of validating the target token transaction does not include the step of verifying that the token output of a previously validated token transaction is an unspent transaction output.
[0228] In other words, it delegates to the blockchain network the task of verifying that the token output of a previously validated token transaction is an unspent transaction output.
[0229] Statement 15. The method of any of statements 1-14, including validating the token minting transaction, wherein validating the token minting transaction includes verifying that the token minting transaction comprises a minting public key associated with the token issuer.
[0230] Statement 16. The method of any of statements 1-15, wherein the validation entity stores a record of previously validated token transactions, and wherein verifying that each token input of the target token transaction references a respective token output of the previously validated token transaction includes determining whether the referenced token output is present in the record of the previously validated token transaction.
[0231] Statement 17. The method of any of statements 1 to 16, comprising constructing a current token block, the current token block including a token block header and a set of valid token transactions including the target token transaction and / or an identifier thereof, the token block header including a Merkle root calculated based on the set of valid token transactions of the token block.
[0232] Statement 18. The method of statement 17, wherein the validation entity maintains a sequence of previously constructed token blocks, and the block header of the current token block has a hash of the block header of each of the token blocks immediately preceding the current token block in the sequence.
[0233] Each token block to be constructed other than the first has the previous block header hash, i.e., the hash of the block header of the token block that precedes the token block in the sequence.
[0234] A record of a previously validated token transaction may be a record of a token block.
[0235] Statement 19. The method of Statement 17 or Statement 18, including constructing a respective token block for each newly published block of the blockchain.
[0236] The token block header of each token block contains the respective block height of the respective blockchain.
[0237] Statement 20. The block header of the current token block includes respective signatures generated by some or all of the token issuer, validation entity, audit entity, and / or government entity, as defined in any of Statements 17-19.
[0238] Statement 21. The method of any of statements 17-20, including sending one or more token blocks and / or their respective block headers to a second requesting entity.
[0239] Statement 22. The method of any of statements 6 and 21, wherein the step of sending a confirmation to the first requesting entity includes the step of sending a Merkle path linking the target token transaction to a Merkle root stored in the block header of the current token block.
[0240] Statement 23. The validation entity is any of statements 1 through 22, including a token server.
[0241] Statement 24. The method of statement 23, wherein the first and / or second requesting entity includes a token client application, and / or wherein obtaining the target token transaction includes receiving the target token transaction from the token client application.
[0242] Statement 25. The method of any of statements 1 to 13, wherein the validation entity stores: a set of token block headers for respective token blocks, each token block header including a respective Merkle root calculated based on a respective set of valid transactions stored in the respective token block; a set of token transaction identifiers; and a set of token outputs, each token output including a respective output index and a respective token amount for one of the set of token transaction identifiers.
[0243] Statement 26. The method of statement 25, wherein the step of verifying that each token input of the target token transaction references a respective token output of a previously validated token transaction includes the step of determining whether the referenced token output is present in the set of token outputs.
[0244] Statement 27. The method of statement 26, including storing a transaction identifier of the target token transaction and one or more token outputs of the target transaction in a set of token transaction identifiers and a set of token outputs, respectively, under the condition that the target token transaction is a valid token transaction.
[0245] Statement 28. The method of statement 27, comprising constructing a current token block, the current token block including a token block header and a set of transaction identifiers of valid token transactions including the target token transaction, the token block header including a Merkle root calculated based on the set of transaction identifiers.
[0246] Statement 29. The method of statement 28, including constructing a respective token block for each newly published block of the blockchain.
[0247] Statement 30. The validation entity is any of statements 25 through 29, including a token client application.
[0248] Statement 31. The method of statement 30, wherein obtaining the target token transaction includes receiving the target token transaction as input from a user.
[0249] Statement 32. The method of statement 30 or statement 31, including the step of sending the target token transaction to the token server under the condition that the target token transaction is a valid token transaction.
[0250] Statement 33. The method of any of statements 30-32, including receiving one or more token blocks and / or their respective block headers from the token server, e.g., in response to a temporary loss of connection to the blockchain.
[0251] Statement 34. The method of any of statements 30-33, including sending one or more token blocks to a token server for validation.
[0252] Statement 35. The method of any of Statements 1 through 34, wherein the cryptographic minting data includes public information known to be relevant to the minting of the token.
[0253] Statement 36. A computer-implemented method for validating a token transaction, the token transaction being a blockchain transaction having one or more token outputs, each token output locking a respective amount of tokens, the method being executed by a validation entity and comprising: obtaining a target token transaction having one or more token inputs and one or more token outputs; and validating the target token transaction, wherein each token input of the target token transaction references a respective token output stored in a current token snapshot, the current token snapshot including a set of token unspent transaction outputs (UTXOs), each token UTXO being a token output of a respective unspent token transaction.
[0254] Statement 37. The method of statement 36, including constructing a current token snapshot.
[0255] Statement 38. The method of statement 37, wherein constructing the current token snapshot includes tracking token UTXOs on the blockchain.
[0256] Statement 39. The method of statement 36, including receiving a current token snapshot from a token server.
[0257] Statement 40. The method of any of statements 36-39, including, under the condition that the target transaction is a valid token transaction, constructing an updated token snapshot, wherein the updated token snapshot includes one or more token outputs of the target transaction but does not include one or more token outputs referenced by one or more token inputs of the target token transaction.
[0258] Statement 41. The method of any of statements 36-40, including transmitting the target token transaction to the token server and / or blockchain network, provided that the target transaction is a valid token transaction.
[0259] Statement 42. The method of any of statements 36-41, including: receiving a request from a first requesting entity for confirmation that the target token transaction is a valid token transaction; and, under the condition that the target token transaction is a valid token transaction, sending a confirmation that the target token transaction is a valid token transaction to the first requesting entity.
[0260] Statement 43. The method of statement 42, wherein the current snapshot includes a Merkle root calculated based on the respective set of token UTXOs, and wherein sending a confirmation to the first requesting entity includes sending a Merkle path linking the referenced token output to the Merkle root stored in the block header of the current snapshot.
[0261] Statement 44. A computing device comprising: a memory having one or more memory units; and a processing device having one or more processing units, wherein the memory stores code arranged for execution on the processing device, the code being configured, when executed on the processing device, to perform the method of any of statements 1 to 35.
[0262] Statement 45. A computer program embodied on computer-readable storage configured to, when executed on one or more processors, perform the method of any of statements 1-35.
[0263] Statement 46. A computing device comprising: a memory having one or more memory units; and a processing device having one or more processing units, wherein the memory stores code arranged for execution on the processing device, the code being configured, when executed on the processing device, to perform the method of any of statements 36-43.
[0264] Statement 47. A computer program embodied on computer-readable storage configured to, when executed on one or more processors, perform the method of any of statements 36-43.
[0265] According to another aspect disclosed herein, a method may be provided that includes some or all of the actions of a token server, a token UTXO client, and a token write client.
[0266] According to another aspect of the disclosure herein, a system may be provided that includes some or all of the actions of a token server, a token UTXO client, and a token write client. [Explanation of symbols]
[0267] 100 systems 101 Blockchain networks, packet-switched networks, and the Internet 102 Computer equipment, computer terminals 102a Alice's computer equipment, Alice's device 102b Bob's computer equipment, Bob's device 103 Users, Entities, Parties, and Agents 103a User, Entity, First Party, Alice 103b User, Entity, Second Party, Bob 104 Blockchain Nodes, First Nodes, Bitcoin Nodes, Transactions 105 Client Applications, Software, Clients 105a Client Applications 105b Client 106 Blockchain Network, Bitcoin Network 150 Blockchain, Client Application, Bitcoin Blockchain 151 blocks, blockchain 151n-1 Block 151n Block 152 transactions 152i Transactions 152j Transaction 153 Genesis Block (Gb) 154 Ordered Sets, Transactions, and Pools 155 Block Pointer 160 Blockchain Networks
Claims
1. 1. A computer-implemented method for validating a token transaction, the token transaction being a blockchain transaction having one or more token outputs, each token output locking a respective amount of tokens, the blockchain having token minting transactions and token setup transactions, a validation entity having access to the token minting transactions and / or the token setup transactions, the token minting transactions having cryptographic mint data and minting an initial amount of the tokens, the token setup transactions having mint data authenticated by a token issuer, the method being performed by the validation entity; obtaining a target token transaction having one or more token inputs and one or more token outputs; validating the target token transaction, wherein the validating the target token transaction comprises: verifying that each token input of the target token transaction has the mint data; and / or verifying that each token input of the target token transaction references a respective token output of either the token minting transaction or a previously validated token transaction that can be traced back to the token minting transaction.
2. 10. The method of claim 1, further comprising: transmitting the target token transaction to a blockchain network under the condition that the target token transaction is a valid token transaction.
3. 3. The method of claim 2, further comprising obtaining confirmation from the blockchain network that the target token transaction is a valid blockchain transaction.
4. 4. The method of claim 3, wherein the step of obtaining confirmation comprises verifying that the target token transaction is recorded on a blockchain.
5. The mint data is - a mint public key associated with said token issuer; - a proof of knowledge created by said token issuer; - a symmetrically signed message signed by said token issuer, and - a message encrypted by said token issuer The method according to any one of claims 1 to 4, wherein the method is one of the following:
6. receiving a request from a first requesting entity for confirmation that the target token transaction is a valid token transaction; sending a confirmation that the target token transaction is a valid token transaction to the first requesting entity, provided that the target token transaction is a valid token transaction; The method according to any one of claims 1 to 5, comprising:
7. 3. The method of claim 2, further comprising, under the condition that the target token transaction is a valid token transaction and prior to transmitting the target token transaction to the blockchain network, signing the target token transaction with a signature linked to a validation public key associated with the validation entity.
8. 8. The method of claim 1, wherein the target token transaction includes one or more non-token inputs that reference respective outputs of previous blockchain transactions, and wherein the method includes identifying the one or more non-token inputs as inputs having one or more of a predetermined set of public keys.
9. 9. The method of claim 8, wherein validating the target token transaction comprises verifying that a total amount of tokens locked by the one or more token outputs of the target token transaction is less than or equal to an amount locked by the one or more respective token outputs referenced by the one or more token inputs of the target token transaction.
10. 10. The method of claim 1, wherein the target token transaction comprises one or more non-token inputs and one or more non-token outputs, and wherein validating the target token transaction comprises verifying that a total amount of tokens locked by the one or more token outputs of the target token transaction is less than or equal to an amount locked by the token outputs referenced by the one or more token inputs.
11. The method of any one of claims 8 to 10, wherein the non-token input is identified as an input signed with a signature having a predetermined signature flag.
12. 12. The method of claim 11, wherein a non-token output is identified as an output signed with more signatures than the non-token input.
13. 13. The method of any one of claims 1 to 12, wherein validating the target token transaction comprises verifying that the token output of the previously validated token transaction is an unspent transaction output.
14. 13. The method of any one of claims 1 to 12, wherein validating the target token transaction does not include verifying that the token output of the previously validated token transaction is an unspent transaction output.
15. 15. The method of any one of claims 1 to 14, comprising validating the token minting transaction, wherein validating the token minting transaction comprises verifying that the token minting transaction comprises a minting public key associated with the token issuer.
16. 16. The method of any one of claims 1 to 15, wherein the validation entity stores a record of previously validated token transactions, and wherein verifying that each token input of the target token transaction references a respective token output of a previously validated token transaction comprises determining whether the referenced token output is present in the record of previously validated token transactions.
17. 17. The method of claim 1, comprising constructing a current token block, the current token block including a token block header and a set of valid token transactions including the target token transaction and / or identifiers of valid token transactions, the token block header including a Merkle root calculated based on the set of valid token transactions of the token block.
18. 18. The method of claim 17, wherein the validation entity maintains a sequence of previously constructed token blocks, and the block header of the current token block comprises a hash of the block header of each of the token blocks immediately preceding the current token block in the sequence.
19. 19. The method of claim 17 or claim 18, comprising constructing a respective token block for each newly published block of the blockchain.
20. 20. The method of any one of claims 17 to 19, wherein a block header of the current token block includes respective signatures generated by some or all of the token issuer, the validation entity, an auditing entity, and / or a government entity.
21. A method according to any one of claims 17 to 20, comprising the step of transmitting one or more token blocks and / or their respective block headers to a second requesting entity.
22. 22. The method of claim 6, wherein sending a confirmation to the first requesting entity includes sending a Merkle path, the Merkle path linking the target token transaction to a Merkle root stored in a block header of a current token block.
23. The method of any one of claims 1 to 22, wherein the validation entity comprises a token server.
24. 24. The method of claim 23, wherein the first and / or second requesting entity comprises a token client application, and / or wherein obtaining the target token transaction comprises receiving the target token transaction from a token client application.
25. The validation entity: a set of token block headers for respective token blocks, each token block header including a respective Merkle root calculated based on a respective set of valid transactions stored in said respective token block; a set of token transaction identifiers; 14. A method according to any preceding claim, storing a set of token outputs, each token output comprising a respective output index of one of said set of token transaction identifiers, a respective token amount.
26. 26. The method of claim 25, wherein verifying that each token input of the target token transaction references a respective token output of a previously validated token transaction comprises determining whether the referenced token output is present in the set of token outputs.
27. 27. The method of claim 26, further comprising storing a transaction identifier of the target token transaction and the one or more token outputs of the target transaction in the set of token transaction identifiers and the set of token outputs, respectively, under the condition that the target token transaction is a valid token transaction.
28. 28. The method of claim 27, comprising constructing a current token block, the current token block including a token block header and a set of transaction identifiers of valid token transactions including the target token transaction, the token block header including a Merkle root calculated based on the set of transaction identifiers.
29. 30. The method of claim 28, comprising constructing a respective token block for each newly published block of the blockchain.
30. The method of any one of claims 25 to 29, wherein the validation entity comprises a token client application.
31. 31. The method of claim 30, wherein obtaining the target token transaction comprises receiving the target token transaction as input from a user.
32. 32. A method according to claim 30 or claim 31, comprising transmitting the target token transaction to a token server under the condition that the target token transaction is a valid token transaction.
33. A method according to any one of claims 30 to 32, comprising receiving one or more token blocks and / or their respective block headers from a token server.
34. 34. The method of any one of claims 30 to 33, comprising transmitting one or more blocks of tokens to a token server for validation.
35. 35. The method of any preceding claim, wherein the cryptographic minting data comprises public information known to be relevant to the minting of tokens.
36. a memory having one or more memory units; 36. A computing apparatus comprising: a processing unit having one or more processing units; and the memory storing code arranged for execution on the processing unit, the code being configured, when executed on the processing unit, to perform the method of any one of claims 1 to 35.
37. A computer program embodied on a computer readable storage configured to perform the method of any one of claims 1 to 35 when executed on one or more processors.
Citation Information
Patent Citations
Virtual currency distribution system
JP2020123236A