CN117033488A - 用于包括匿名条目的分布式数据库的方法和装置 - Google Patents
用于包括匿名条目的分布式数据库的方法和装置 Download PDFInfo
- Publication number
- CN117033488A CN117033488A CN202311013280.5A CN202311013280A CN117033488A CN 117033488 A CN117033488 A CN 117033488A CN 202311013280 A CN202311013280 A CN 202311013280A CN 117033488 A CN117033488 A CN 117033488A
- Authority
- CN
- China
- Prior art keywords
- computing device
- public key
- event
- distributed database
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000012546 transfer Methods 0.000 claims abstract description 159
- 230000002776 aggregation Effects 0.000 claims description 27
- 238000004220 aggregation Methods 0.000 claims description 27
- HEFNNWSXXWATRW-UHFFFAOYSA-N Ibuprofen Chemical compound CC(C)CC1=CC=C(C(C)C(O)=O)C=C1 HEFNNWSXXWATRW-UHFFFAOYSA-N 0.000 description 61
- 230000006870 function Effects 0.000 description 45
- 230000008569 process Effects 0.000 description 24
- 238000004891 communication Methods 0.000 description 17
- 108091035707 Consensus sequence Proteins 0.000 description 12
- 230000008859 change Effects 0.000 description 12
- 239000003795 chemical substances by application Substances 0.000 description 11
- 230000004044 response Effects 0.000 description 10
- 238000012545 processing Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 7
- 238000005192 partition Methods 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 6
- 238000013475 authorization Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 239000013598 vector Substances 0.000 description 5
- 230000000694 effects Effects 0.000 description 4
- 230000000644 propagated effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000008520 organization Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 241000234282 Allium Species 0.000 description 2
- 235000002732 Allium cepa var. cepa Nutrition 0.000 description 2
- 241000501754 Astronotus ocellatus Species 0.000 description 2
- 238000010367 cloning Methods 0.000 description 2
- 238000004900 laundering Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000001902 propagating effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 238000005056 compaction Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0866—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving user or device identifiers, e.g. serial number, physical or biometrical information, DNA, hand-signature or measurable physical characteristics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/04—Payment circuits
- G06Q20/06—Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme
- G06Q20/065—Private payment circuits, e.g. involving electronic currency used among participants of a common payment scheme using e-cash
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/30—Payment architectures, schemes or protocols characterised by the use of specific devices or networks
- G06Q20/36—Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes
- G06Q20/367—Payment architectures, schemes or protocols characterised by the use of specific devices or networks using electronic wallets or electronic money safes involving electronic purses or money safes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/321—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving a third party or a trusted authority
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/56—Financial cryptography, e.g. electronic payment or e-cash
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Business, Economics & Management (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computer Networks & Wireless Communication (AREA)
- Accounting & Taxation (AREA)
- Signal Processing (AREA)
- Finance (AREA)
- Computing Systems (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明涉及用于包括匿名条目的分布式数据库的方法和装置。在一些实施例中,在第一计算设备处具有分布式数据库的第一实例的至少一部分的装置被配置为被包括在一组计算设备中,所述一组计算设备经由可操作地耦合到该组计算设备的网络实现该分布式数据库。该分布式数据库使得能够经由转移协议进行计算设备之间的数字资产的匿名转移,使得与对应于逻辑上与目的地记录相关的公钥的私钥相关联的计算设备的身份被隐藏在包括第一计算设备和至少一个第二计算设备的计算设备集合中。
Description
本申请是申请号为201780069585.4、申请日为2017年11月10日、发明名称为“用于包括匿名条目的分布式数据库的方法和装置”的发明专利申请的分案申请。
对相关专利申请的交叉引用
本专利申请要求于2016年11月10日提交的标题为“METHODS AND APPARATUS FORA DISTRIBUTED DATABASE INCLUDING ANONYMOUSENTRIES”的美国临时专利申请序列No.62/420,147的优先权,该申请通过引用整体并入本文。
技术领域
本文描述的实施例一般而言涉及数据库系统,并且更特别地涉及用于实现跨网络中的多个设备的数据库系统的方法和装置。
背景技术
一些已知的分布式数据库系统试图对分布式数据库系统内的值(例如,关于事务发生的顺序)达成共识。例如,在线多人游戏可能具有用户可以访问来玩游戏的许多计算机服务器。如果两个用户试图同时拾取游戏中的特定物品,那么分布式数据库系统内的服务器最终就两个用户中的哪一个首先拾取该物品达成一致是重要的。
这种分布式共识可以通过诸如Paxos算法或其变体的方法和/或处理来进行处理。在这样的方法和/或处理中,数据库系统的一个服务器被设置为“领导者”,并且领导者决定事件的顺序。事件(例如,在多人游戏中)被转发给领导者,领导者选择事件的排序,并且领导者向数据库系统的其它服务器广播该排序。
但是,这样的已知方法使用由数据库系统的用户(例如,游戏玩家)信任的一方(例如,中央管理服务器)操作的服务器。因此,存在对用于分布式数据库系统的、不需要领导者或可信的第三方来操作数据库系统的方法和装置的需求。
其它分布式数据库被设计为不具有领导者,但是这种分布式数据库内的事务是公开的。因此,分布式数据库的其它实例可以识别分布式数据库的哪些实例发起了特定的事务。
因此,存在对一种分布式数据库系统的需求,该系统在没有领导者的情况下实现共识并且能够维持事务的匿名性。
发明内容
在一些实施例中,一种装置包括在第一计算设备处的分布式数据库的第一实例的至少一部分,该第一计算设备被配置为被包括在一组计算设备内,该分布式数据库经由可操作地耦合到该组计算设备的网络实现。该分布式数据库包括逻辑上与第一计算设备相关联的第一公钥相关的第一记录。该装置还包括可操作地耦合到分布式数据库的第一实例的所述部分的处理器。该处理器被配置为从所述一组计算设备中的第二计算设备接收第一公钥,该第一公钥与第二计算设备相关联,并且(1)用与第一计算设备相关联的第一公钥加密,以及(2)逻辑上与分布式数据库的第二记录相关。该处理器被配置为利用与和第一计算设备相关联的第一公钥配对的私钥来解密与第二计算设备相关联的第一公钥。该处理器被配置为向第二计算设备发送与第一计算设备相关联并且用与第二计算设备相关联的第二公钥加密的第二公钥。第一计算设备和第二计算设备两者都被配置为对来自与和第一计算设备相关联的第一公钥相关联的源记录以及与和第二计算设备相关联的第二公钥相关联的源记录进行数字签名或授权转移到与和第一计算设备相关联的第二公钥相关联的目的地记录以及与和第二计算设备相关联的第一公钥相关联的目的地记录。然后该转移将值从两个源记录转移到两个目的地记录。
附图说明
图1是图示根据实施例的分布式数据库系统的高层(high level)框图。
图2是图示根据实施例的分布式数据库系统的计算设备的框图。
图3至图6图示了根据实施例的散列图(hashgraph)的示例。
图7是图示根据实施例的第一计算设备和第二计算设备之间的通信流程的流程图。
图8是根据实施例的散列图的示例。
图9是根据实施例的散列图的示例。
图10是根据实施例的两个计算设备之间的匿名数据库事务的图形表示的示例。
图11图示了根据实施例的、遍及表示不同计算设备之间的匿名数据库事务的树的多个级别的匿名数据库事务的图形表示。
图12图示了根据实施例的在不同计算设备之间并行执行的匿名数据库事务的图形表示。
图13A至图13B图示了根据实施例的与散列图一起使用的示例共识方法。
图14A至图14B图示了根据另一个实施例的与散列图一起使用的示例共识方法。
具体实施方式
在一些实施例中,一种装置包括在第一计算设备处的分布式数据库的第一实例的至少一部分,该第一计算设备被配置为被包括在一组计算设备内,该分布式数据库经由可操作地耦合到该组计算设备的网络实现。该分布式数据库包括逻辑上与第一计算设备相关联的第一公钥相关的第一记录。该装置还包括可操作地耦合到分布式数据库的第一实例的所述部分的处理器。该处理器被配置为从所述一组计算设备中的第二计算设备接收第一公钥,该第一公钥与第二计算设备相关联,并且(1)用与第一计算设备相关联的第一公钥加密,以及(2)逻辑上与分布式数据库的第二记录相关。该处理器被配置为利用与和第一计算设备相关联的第一公钥配对的私钥来解密与第二计算设备相关联的第一公钥。该处理器被配置为向第二计算设备发送与第一计算设备相关联并且用与第二计算设备相关联的第二公钥加密的第二公钥。第一计算设备和第二计算设备两者都被配置为对来自与和第一计算设备相关联的第一公钥相关联的源记录以及与和第二计算设备相关联的第二公钥相关联的源记录进行数字签名或授权转移到与和第一计算设备相关联的第二公钥相关联的目的地记录以及与和第二计算设备相关联的第一公钥相关联的目的地记录。然后该转移将值从两个源记录转移到两个目的地记录。
在一些实施例中,一种装置包括在第一计算设备处的分布式数据库的至少一部分的第一实例,该第一计算设备被配置为被包括在一组计算设备内,该分布式数据库经由可操作地耦合到该组计算设备的网络实现。该分布式数据库包括逻辑上与第一计算设备相关联的第一公钥相关的第一记录。第一计算设备的处理器可操作地耦合到分布式数据库的至少一部分的第一实例。该处理器被配置为从该组计算设备中的第二计算设备接收与第二计算设备相关联的用与第一计算设备相关联的第一公钥加密的第一公钥,以及请求从逻辑上与和第二计算设备相关联的第二公钥相关的第二记录转移到要在分布式数据库中创建的目的地记录的值。第一计算设备和第二计算设备都被配置为发送信号以向分布式数据库发布转移命令,该转移命令被配置为将值从第一记录和第二记录转移到第三记录和第四记录,从而创建分布式数据库中的第三和第四记录。第三记录在逻辑上与和第一计算设备相关联的第二公钥相关,并且第四记录在逻辑上与和第二计算设备相关联的第一公钥相关。转移命令用与和第一计算设备相关联的第一公钥配对的私钥签名,并且还用与和第二计算设备相关联的第二公钥配对的私钥签名,并且被配置为被执行使得在与包括第一计算设备和第二计算设备的计算设备集合之中隐藏与对应于与第一计算设备相关联的第二公钥的私钥相关联的计算设备的身份。
在一些实施例中,一种装置包括在第一计算设备处的分布式数据库的至少一部分的第一实例,该第一计算设备被配置为包括在一组计算设备中,该分布式数据库经由可操作地耦合到该组计算设备的网络实现。该分布式数据库包括逻辑上与第一公钥相关的第一记录、逻辑上与第二公钥相关的第二记录、逻辑上与第三公钥相关的第三记录和逻辑上与第四公钥相关的第四记录。第一计算设备的处理器可操作地耦合到分布式数据库的至少一部分的第一实例。处理器被配置为接收数据库操作的指示,该指示包括将与第一记录相关联的值和与第二记录相关联的值转移到第三记录和第四记录两者的请求。转移命令被配置为被执行使得转移命令隐藏与对应于第三公钥的私钥相关联的计算设备的身份以及与对应于第四公钥的私钥相关联的计算设备的身份。
如本文所使用的,模块可以是例如与执行特定功能相关联的任何组件和/或可操作地耦合的电子部件集合,并且可以包括例如存储器、处理器、电迹线、光连接器、软件(在硬件中执行)等等。
如本说明书中所使用的,除非上下文另外明确指出,否则单数形式“一”、“一个”和“该”包括复数指示物。因此,例如,术语“模块”旨在表示单个模块或模块的组合。例如,“网络”旨在表示单个网络或网络的组合。
图1是图示根据实施例的分布式数据库系统100的高层框图。图1图示了跨四个计算设备(计算设备110、计算设备120、计算设备130和计算设备140)实现的分布式数据库100,但是应该理解的是,分布式数据库100可以使用任意数量的计算设备集合,包括图1中未示出的计算设备。网络105可以是实现为有线网络和/或无线网络并且用于可操作地耦合计算设备110、120、130、140的任何类型的网络(例如,局域网(LAN)、广域网(WAN)、虚拟网络、电信网络)。如本文进一步详细描述的,在一些实施例中,例如,计算设备是经由互联网服务提供商(ISP)和互联网(例如,网络105)相互连接的个人计算机。在一些实施例中,可以经由网络105在任何两个计算设备110、120、130、140之间定义连接。例如,如图1所示,可以在计算设备110与计算设备120、计算设备130或计算设备140中的任何一个之间定义连接。
在一些实施例中,计算设备110、120、130、140可以经由中间网络和/或替代网络(图1中未示出)彼此通信(例如,向彼此发送数据和/或从彼此接收数据)以及与网络通信。这样的中间网络和/或替代网络可以是与网络105相同类型和/或不同类型的网络。
每个计算设备110、120、130、140可以是被配置为通过网络105发送数据和/或从其它计算设备中的一个或多个接收数据的任何类型的设备。在图1中示出计算设备的示例。计算设备110包括存储器112、处理器111和输出设备113。存储器112可以是例如随机存取存储器(RAM)、存储器缓冲器、硬盘驱动器、数据库、可擦除可编程只读存储器(EPROM)、电可擦除只读存储器(EEPROM)、只读存储器(ROM)等。在一些实施例中,计算设备110的存储器112包括与分布式数据库的实例(例如,分布式数据库实例114)相关联的数据。在一些实施例中,存储器112存储指令,该指令使处理器执行与向分布式数据库的另一个实例(例如,在计算设备120处的分布式数据库实例124)发送和/或从其接收同步事件的记录、与其它计算设备的先前同步事件的记录、同步事件的顺序、参数(例如,量化事务的数据库字段、量化事件发生的顺序的数据库字段和/或可以存储在数据库中的值的任何其它合适的字段)的值相关联的模块、处理和/功能。
分布式数据库实例114可以例如被配置为操纵数据,包括存储、修改和/或删除数据。在一些实施例中,分布式数据库实例114可以是关系数据库、对象数据库、后关系数据库和/或任何其它合适类型的数据库。例如,分布式数据库实例114可以存储与任何特定功能和/或行业有关的数据。例如,分布式数据库实例114可以存储(例如,计算设备110的用户的)金融事务,包括与特定金融工具的所有权历史有关的值和/或值的向量。通常,向量可以是参数的值的任何集合,并且参数可以是能够取不同值的任何数据对象和/或数据库字段。因此,分布式数据库实例114可以具有多个参数和/或字段,每个参数和/或字段与值的向量相关联。值的向量用于确定该数据库实例114内的参数和/或字段的实际值。
在一些情况下,分布式数据库实例114也可以用于实现其它数据结构,诸如(键,值)对集合。由分布式数据库实例114记录的事务可以是例如添加、删除或修改(键,值)对集合中的(键,值)对。
在一些情况下,可以查询分布式数据库系统100或任何分布式数据库实例114、124、134、144。例如,查询可以由键组成,并且从分布式数据库系统100或分布式数据库实例114、124、134、144的返回结果可以是与该键相关联的值。在一些情况下,分布式数据库系统100或任何分布式数据库实例114、124、134、144也可以通过事务来修改。例如,修改数据库的事务可以包含授权修改事务的一方的数字签名。
分布式数据库系统100可以用于许多目的,诸如例如将与各种用户相关联的属性存储在分布式身份系统中。例如,这样的系统可以使用用户的身份作为“密钥(key)”,并且与用户相关联的属性的列表作为“值”。在一些情况下,身份可以是具有与该用户已知的私钥对应的密码公钥。例如,每个属性可以由有权声明该属性的授权机构进行数字签名。例如,每个属性也可以用与有权读取属性的个人或个人组相关联的公钥进行加密。一些密钥或值也可以具有附加到它们的被授权修改或删除键或值的各方的公钥列表。
在另一个示例中,分布式数据库实例114可以存储与大型多玩家游戏(MMG)有关的数据,诸如游戏玩法物品的当前状态和所有权。在一些情况下,分布式数据库实例114可以在计算设备110内实现,如图1所示。在其它情况下,分布式数据库的实例可由计算设备(例如,经由网络)访问,但不在计算设备中实现(图1中未示出)。
计算设备110的处理器111可以是被配置为运行和/或执行分布式数据库实例114的任何合适的处理设备。例如,处理器111可以被配置为响应于从计算设备120接收到信号而更新分布式数据库实例114,和/或使信号被发送到计算设备120,如本文进一步详细描述的。更具体而言,如本文进一步详细描述的,处理器111可以被配置响应于接收到与来自另一个计算设备的事务相关联的同步事件、与同步事件的顺序相关联的记录等而执行模块、功能和/或过程,以更新分布式数据库实例114。在其它实施例中,处理器111可以被配置为响应于接收到存储在分布式数据库的另一个实例(例如,计算设备120处的分布式数据库实例124)中的参数的值而执行模块、功能和/或过程以更新分布式数据库实例114,和/或使存储在计算设备110处的分布式数据库实例114中的参数的值被发送到计算设备120。在一些实施例中,处理器111可以是通用处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、数字信号处理器(DSP)等等。
显示器113可以是任何合适的显示器,诸如例如液晶显示器(LCD)、阴极射线管显示器(CRT)等。在其它实施例中,代替显示器113、123、133、143或作为显示器113、123、133、143的附加,计算设备110、120、130、140中的任何一个还包括另一个输出设备。例如,计算设备110、120、130、140中的任何一个可以包括音频输出设备(例如,扬声器)、触感输出设备等。在还有的其它实施例中,代替显示器113、123、133、143或作为显示器113、123、133、143的附加,计算设备110、120、130、140中的任何一个还包括输入设备。例如,计算设备110、120、130、140中的任何一个可以包括键盘、鼠标等等。
计算设备120具有处理器121、存储器122和显示器123,其可以在结构上和/或功能上分别类似于处理器111、存储器112和显示器113。而且,分布式数据库实例124可以在结构上和/或功能上类似于分布式数据库实例114。
计算设备130具有处理器131、存储器132和显示器133,其可以在结构上和/或功能上分别类似于处理器111、存储器112和显示器113。而且,分布式数据库实例134可以在结构上和/或功能上类似于分布式数据库实例114。
计算设备140具有处理器141、存储器142和显示器143,其可以在结构上和/或功能上分别类似于处理器111、存储器112和显示器113。而且,分布式数据库实例144可以在结构上和/或功能上类似于分布式数据库实例114。
虽然计算设备110、120、130、140被示出为彼此相似,但分布式数据库系统100的每个计算设备可以与其它计算设备不同。分布式数据库系统100的每个计算设备110、120、130、140可以是例如计算实体(例如,个人计算设备,诸如台式计算机,膝上型计算机等)、移动电话、个人数字助理(PDA)等中的任何一个。例如,计算设备110可以是台式计算机,计算设备120可以是智能电话,并且计算设备130可以是服务器。
在一些实施例中,计算设备110、120、130、140的一个或多个部分可以包括基于硬件的模块(例如,数字信号处理器(DSP)、现场可编程门阵列(FPGA))和/或基于软件的模块(例如,存储在存储器中和/或在处理器上执行的计算机代码的模块)。在一些实施例中,与计算设备110、120、130、140相关联的功能中的一个或多个功能(例如,与处理器111、121、131、141相关联的功能)可以被包括在一个或多个模块中(参见例如图2)。
分布式数据库系统100的属性,包括计算设备(例如,计算设备110、120、130、140)的属性,计算设备的数量和网络105可以以任何数量的方式来选择。在一些情况下,分布式数据库系统100的属性可以由分布式数据库系统100的管理员来选择。在其它情况下,分布式数据库系统100的属性可以由分布式数据库系统100的用户共同选择。
由于使用了分布式数据库系统100,因此在计算设备110、120、130和140之间不指定领导者。具体而言,没有识别和/或选择计算设备110、120、130或140作为解决计算设备110、120、130、140的分布式数据库实例111、12、131、141中存储的值之间的争议的领导者。替代地,使用事件同步过程、本文描述的投票过程和/或方法,计算设备110、120、130、140可以共同地聚合于参数的值。
在分布式数据库系统中没有领导者会增加分布式数据库系统的安全性。具体而言,在具有领导者的情况下,存在单一的攻击点和/或故障点。如果恶意软件感染领导者和/或领导者的分布式数据库实例中参数的值被恶意更改,则故障和/或不正确的值会传播到遍布其它分布式数据库实例。但是,在无领导者系统中,没有单一的攻击点和/或故障点。具体而言,如果无领导者系统的分布式数据库实例中的参数包含值,则该值将在分布式数据库实例与系统中的其它分布式数据库实例交换值之后改变,如本文进一步详细描述的。此外,本文描述的无领导者分布式数据库系统增加了聚合(convergence)的速度,同时减少了设备之间发送的数据量,如本文进一步详细描述的。
图2图示根据实施例的分布式数据库系统(例如,分布式数据库系统100)的计算设备200。在一些实施例中,计算设备200可以类似于关于图1示出和描述的计算设备110、120、130、140。计算设备200包括处理器210和存储器220。处理器210和存储器220可操作地耦合到彼此。在一些实施例中,处理器210和存储器220可分别类似于关于图1详细描述的处理器111和存储器112。如图2所示,处理器210包括数据库聚合模块211和通信模块210,并且存储器220包括分布式数据库实例221。通信模块212使得计算设备200能够与其它计算设备通信(例如,向其发送数据和/或从其接收数据)。在一些实施例中,通信模块212(图1中未示出)使得计算设备110能够与计算设备120、130、140通信。通信模块210可以包括和/或启用例如网络接口控制器(NIC)、无线连接、有线端口等等。如此,通信模块210可以建立和/或维持计算设备200与另一个设备之间(例如,经由诸如图1的网络105或互联网(未示出)的网络)的通信会话。类似地陈述,通信模块210可以使得计算设备200能够向另一个设备发送数据和/或从其接收数据。
在一些情况下,数据库聚合模块211可以与其它计算设备交换事件和/或事务、存储数据库聚合模块211接收的事件和/或事务、并且基于由事件之间的引用模式定义的部分顺序来计算事件和/或事务的排序。每个事件都可以是包含两个较早事件的密码散列的记录(将事件链接到两个较早的事件及其祖先事件,反之亦然)、有效载荷数据(诸如要记录的事务)、诸如当前时间的其它信息、其创建者声明是事件第一次被定义的时间的时间戳(例如,日期和UTC时间)。在一些情况下,由成员定义的第一事件仅包含由另一个成员定义的单个事件的散列。在这种情况下,成员还没有先前的自散列(例如,由该成员先前定义的事件的散列)。在一些情况下,分布式数据库中的第一事件不包含任何先前事件的散列(因为不存在该分布式数据库的先前事件)。
在一些实施例中,两个较早事件的这种密码散列可以是基于使用事件作为输入的密码散列函数定义的散列值。具体而言,在这样的实施例中,事件包括特定序列或字节的串(其表示该事件的信息)。事件的散列值可以是从使用该事件的字节序列作为输入的散列函数返回的值。在其它实施例中,与事件相关联的任何其它合适的数据(例如,标识符、序列号、表示事件的特定部分的字节等)可以用作散列函数的输入来计算事件的散列。任何合适的散列函数都可以用于定义散列。在一些实施例中,每个成员使用相同的散列函数,使得在每个成员处为给定事件生成相同的散列。然后事件可以由定义和/或创建事件的成员进行数字签名。
在一些情况下,事件集合及其互连可以形成有向无环图(DAG)。在一些情况下,DAG中的每个事件引用两个较早的事件(将该事件链接到两个较早的事件及其祖先事件,反之亦然),并且每个引用严格限定于较早的事件,使得不存在循环。在一些实施例中,DAG基于密码散列,因此数据结构可以被称为散列图(本文也称为“hashDAG”)。散列图直接对部分顺序进行编码,这意味着如果Y包含X的散列,或者如果Y包含包含X的散列的事件的散列或者对于任意长度的这些路径,则已知事件X在事件Y之前到来。但是,如果从X到Y或从Y到X没有路径,则部分顺序不会定义哪个事件先到来。因此,数据库聚合模块可以根据部分顺序计算总顺序。这可以通过由计算设备使用的任何合适的确定性函数来完成,使得计算设备计算相同的顺序。在一些实施例中,每个成员可以在每次同步之后重新计算该顺序,并且最终这些顺序可以聚合,使得出现共识。
可以使用共识算法来确定散列图中事件的顺序和/或事件内存储的事务的顺序。事务的顺序又可以由于根据顺序执行那些事务的结果来定义数据库的状态。所定义的数据库的状态可以存储为数据库状态变量。
在一些情况下,数据库聚合模块可以使用以下函数来从散列图中的部分顺序计算总顺序。对于其它计算设备(称为“成员”)中的每个计算设备,数据库聚合模块可以检查散列图以发现由该成员接收到的事件(和/或那些事件的指示)的顺序。然后,数据库聚合模块可以进行计算,就好像该成员向每个事件分配了数字“排名”,其中对于成员接收到的第一事件排名为1,对于成员接收到的第二事件排名为2,等等。数据库聚合模块可以为散列图中的每个成员这样做。然后,对于每个事件,数据库聚合模块可以计算所分配的排名的中值,并且可以按它们的中值对事件排序。这种排序可以以确定性的方式打破平局(ties),诸如按照它们的散列的数字顺序或者按照一些其它方法对两个平局事件进行排序,其中每个成员的数据库聚合模块使用相同的方法。这种排序的结果是总顺序。
图6图示了用于确定总顺序的一个示例的散列图640。散列图640图示了两个事件(最低的条纹圆和最低的虚线圆),以及每个成员第一次接收到这些事件的指示(其它条纹和虚线圆)。顶部的每个成员的名称都是按照哪个事件在其慢顺序中是第一个来进行着色。初始的条纹投票比虚线投票更多,因此每个成员的共识投票被加条纹。换句话说,这些成员最终会达成协议,即,条纹事件在虚线事件之前发生。
在这个示例中,成员(标记为爱丽丝(Alice)、鲍勃(Bob)、Carol(卡罗尔)、戴夫(Dave)和艾德(Ed)的计算设备)将工作以定义事件642还是事件644首先发生的共识。每个条纹圆指示成员第一次接收到事件644的事件(和/或该事件644的指示)。类似地,每个虚线圆指示成员第一次接收到事件642的事件(和/或该事件642的指示)。如散列图640中所示,Alice、Bob和Carol各自在事件642之前接收到事件644(和/或事件644的指示)。Dave和Ed两者在事件644(和/或事件644的指示)之前接收到事件642(和/或事件642的指示)。因此,由于更多数量的成员在事件642之前接收到事件644,因此总顺序可以由每个成员来确定以指示事件644在事件642之前发生。
在其它实例中,数据库聚合模块可以使用不同的函数来从散列图中的部分顺序计算总顺序。在这样的实施例中,例如,数据库聚合模块可以使用以下函数来计算总顺序,其中正整数Q是由成员共享的参数。
creator(x)=创建事件x的成员
anc(x)=作为x的祖先(包括x本身)的事件集合
other(x)=由刚好在x被创建之前同步的成员创建的事件
self(x)=具有相同创建者的x之前的最后一个事件
self(x,0)=self(x)
self(x,n)=self(self(x),n-1)
order(x,y)=k,其中y是creator(x)从以下获知的第k个事件
fast(x,y)=在排序列表中y的位置,其中元素z∈anc(x)通过中值slow(w,z)进行排序并且平局由每个事件的散列打破w∈last(x)。
在这个实施例中,基本上立即在x被创建和/或被定义之后,fast(x,y)给出基于creator(x)的观点y在事件的总顺序中的位置。如果Q是无穷大,则以上计算出与前述实施例中相同的总顺序。如果Q是有限的,并且所有成员都在线,则以上计算出与前述实施例中相同的总顺序。如果Q是有限的,并且在给定的时间内少数成员在线,则这个函数允许在线成员在它们之间达成共识,该共识将随着新成员缓慢地一个接一个地上线而保持不变。但是,如果网络存在分区(partition),那么每个分区的成员可以达成其自己的共识。然后,当分区愈合时,较小分区的成员将采用较大分区的共识。
在还有的其它实例中,如关于图8、9和13A-14B所描述的,数据库聚合模块可以使用还有的不同函数来从散列图中的部分顺序计算总顺序。如图8-9所示,每个成员(Alice、Bob、Carol、Dave和Ed)创建和/或定义事件(如图8中所示的1401-1413;如图9中所示的1501-1506)。使用关于图8、9和13A-14B描述的函数和子函数,事件的总顺序可以通过按照其接收轮次对事件进行排序、通过其接收时间戳打破平局、以及通过其签名打破这些平局来计算,如本文进一步详细描述的。在其它情况下,事件的总顺序可以通过按照其接收轮次对事件进行排序、通过其接收世代(而不是其接收时间戳)打破平局、以及通过其签名打破这些平局来计算。以下段落指定用于计算和/或定义事件的接收轮次和接收世代来确定事件的顺序的函数。以下术语结合图8、9和13A-14B使用和图示。
“父亲(Parent)”:如果Y包含X的散列,则事件X是事件Y的父亲。例如,在图8中,事件1412的父亲包括事件1406和事件1408。
“祖先(Ancestor)”:事件X的祖先是X、其父亲、其父亲的父亲等等。例如,在图8中,事件1412的祖先是事件1401、1402、1403、1406、1408和1412。事件的祖先可以被称为链接到该事件,反之亦然。
“后代(Descendant)”:事件X的后代是X、其孩子、其孩子的孩子,等等。例如,在图8中,事件1401的后代是图中示出的每个事件。又例如,事件1403的后代是事件1403、1404、1406、1407、1409、1410、1411、1412和1413。事件的后代可以被称为链接到该事件,反之亦然。
“N”:总体中成员的总数。例如,在图8中,成员是标记为Alice、Bob、Carol、Dave和Ed的计算设备,并且N等于五。
“M”:大于N的某个百分比(例如,大于N的2/3)的最小整数。例如,在图8中,如果百分比定义为2/3,则M等于四。在其它情况下,例如,M可以被定义为N的不同百分比(例如,1/3、1/2等)、特定的预定义的数量和/或以任何其它合适的方式。
“自父亲(Self-parent)”:事件X的自父亲是由同一成员创建和/或定义的其父亲事件Y。例如,在图8中,事件1405的自父亲是1401。
“自祖先(Self-ancestor)”:事件X的自我祖先是X、其自父亲、其自父亲的自父亲,等等。
“序列号(Sequence Number)”(或“SN”):事件的整数属性,被定义为事件的自父亲的序列号加1。例如,在图8中,事件1405的自父亲为1401。由于事件1401的序列号是1,因此事件1405的序列号是2(即,1加1)。
“世代号(Generation Number)”(或“GN”):事件的整数属性,被定义为事件的父亲的世代号的最大值加1。例如,在图8中,事件1412具有两个父亲:事件1406和1408,分别具有世代号四和二。因此,事件1412的世代号是五(即,四加一)。
“轮增量(Round Increment)”(或“RI”):可以是或者零或者一的事件的属性。
“轮号(Round Number)”(或“RN”):事件的整数属性。在一些情况下,轮号可以被定义为事件的父亲的轮号的最大值加上事件的轮增量。例如,在图8中,事件1412具有两个父亲:事件1406和1408,两者都具有一的轮号。事件1412也具有一的轮增量。因此,事件1412的轮号是两(即,一加一)。在其它实例中,如果R是最小整数,则事件可以具有轮号R,使得事件可以强烈地看到(如本文所述)由不同成员定义和/或创建的至少M个事件,这些事件都具有轮号R-1。如果不存在这样的整数,则事件的轮号可以是默认值(例如,0,1等)。在这种情况下,可以不使用轮增量来计算事件的轮号。例如,在图8中,如果M被定义为大于N的1/2倍的最小整数,则M是三。然后,事件1412强烈地看到M个事件1401、1402和1408,其中每个事件由不同的成员定义并且具有1的轮号。事件1412不能强烈地看到由不同的成员定义的具有2的轮号的至少M个事件。因此,事件1412的轮号是2。在一些情况下,分布式数据库中的第一事件包括1的轮号。在其它情况下,分布式数据库中的第一事件可以包括0或任何其它合适的数的轮号。
“分叉(Forking)”:如果事件X和事件Y由同一成员定义和/或创建,则事件X是与事件Y的分叉,并且任一个都不是另一个的自祖先。例如,在图9中,成员Dave通过创建和/或定义具有同一自父亲(即,事件1501)的事件1503和1504来分叉,使得事件1503不是事件1504的自祖先,并且事件1504不是事件1503的自祖先。
分叉的“识别”:分叉可以由在彼此分叉的两个事件之后创建和/或定义的第三事件“识别”,如果这两个事件都是第三事件的祖先的话。例如,在图9中,成员Dave通过创建事件1503和1504来分叉,这两事件都不是另一个的自祖先。由于事件1503和1504两者都是事件1506的祖先,因此该分叉可以由后来的事件1506来识别。在一些情况下,分叉的识别可以指示特定的成员(例如,Dave)已经作弊。
事件的“识别”:如果X没有与Y分叉的祖先事件Z,则事件X“识别”或“看到(see)”祖先事件Y。例如,在图8中,事件1412识别(也称为“看到”)事件1403,因为事件1403是事件1412的祖先,并且事件1412没有与事件1403分叉的祖先事件。在一些情况下,如果X在事件Y之前未识别分叉,则事件X可以识别事件Y。在这种情况下,即使事件X在事件Y之后通过定义事件Y的成员识别分叉,事件X也可以看到事件Y。事件X不会识别该分支在分支之后发生的事件。而且,如果成员定义了两个不同的事件,这两个事件都是该成员历史中的第一事件,则事件X可以识别分叉并且不识别该成员的任何事件。
事件的“强烈识别(strong identification)”(本文也称为“强烈地看到(strongly seeing)”):如果X识别Y,则事件X“强烈地识别”(或“强烈地看到”)由与X相同的成员创建和/或定义的祖先事件Y。如果存在(1)包括X和Y两者并且(2)是事件X的祖先并且(3)是祖先事件Y的后代并且(4)由X识别并且(5)可以各自识别Y并且(6)由至少M个不同的成员创建和/或定义的事件集合S,则事件X“强烈地识别”不是由与X相同的成员创建和/或定义的祖先事件Y。例如,在图8中,如果M被定义为大于N的2/3的最小整数(即,M=1+floor(2N/3),其在这个示例中将是四),则事件1412强烈地识别祖先事件1401,因为事件集合1401、1402、1406和1412是作为事件1412的祖先和事件1401的后代的至少四事件的集合,并且它们由四个成员Dave、Carol、Bob和Ed分别创建和/或定义,并且事件1412识别事件1401、1402、1406和1412中的每一个,并且事件1401、1402、1406和1412中的每一个识别事件1401。类似地陈述,如果X可以看到由不同成员(其中每一个可以看到Y)创建或定义的至少M个事件(例如,事件1401、1402、1406和1412),则事件X(例如,事件1412)可以“强烈地看到”事件Y(例如,事件1401)。
“轮R第一(Round R first)”事件(在本文中也称为“证人(witness)”):如果事件(1)具有轮号R,并且(2)具有其轮号小于R的自父亲或者没有自父亲,则事件是“轮R第一”事件(或“证人”)。例如,在图8中,事件1412是“轮2第一”事件,因为它具有二的轮号,并且它的自父亲是事件1408,其具有一的轮号(即,小于二)。
在一些情况下,当且仅当X“强烈地识别”至少M个“R轮第一”事件时,事件X的轮增量被定义为1,其中R是其父亲的最大轮号。例如,在图8中,如果M被定义为大于N的1/2倍的最小整数,则M是三。然后,事件1412强烈地识别M个事件1401、1402和1408,所有这些事件都是轮1第一事件。1412的两个父亲都是轮1,并且1412强烈地识别至少M个轮1第一,因此用于1412的轮增量为一。图中标记有“RI=0”的事件每个都不能强烈地识别至少M个轮1第一,因此它们的轮增量为0。
在一些情况下,可以使用以下方法来确定事件X是否可以强烈地识别祖先事件Y。对于每个轮R第一祖先事件Y,保持整数的数组A1(每个成员一个),从而给出其中该成员创建和/或定义的事件X的最低序列号,并且X可以识别Y。对于每个事件Z,维护整数的数组A2,每个成员一个,从而给出由该成员创建和/或定义的事件W的最高序列号,使得Z可以识别W。为了确定Z是否可以强烈地识别祖先事件Y,对元素位置的数量E计数,使得A1[E]<=A2[E]。当且仅当该计数大于M时,事件Z可以强烈地识别Y。例如,在图8中,成员Alice、Bob、Carol、Dave和Ed可以各自识别事件1401,其中可以这样做的最早事件分别是它们的事件{1404,1403,1402,1401,1408}。这些事件具有序列号A1={1,1,1,1,1,1}。类似地,由事件1412识别的它们中的每一个的最近事件是事件{NONE,1406,1402,1401,1412},其中Alice被列为“NONE”,因为1412不能识别Alice的任何事件。这些事件分别具有序列号A2={0,2,1,1,2},其中所有事件都具有正序列号,因此0意味着Alice没有由1412识别的事件。将列表A1与列表A2进行比较给出结果{1<=0,1<=2,1<=1,1<=1,1<=2},其相当于具有四个真值的{假,真,真,真,真}。因此,存在作为1412的祖先和1401的后代的四个事件的集合S。四至少是M,因此1412强烈地识别1401。
实现用A1和A2确定事件X是否可以强烈地识别祖先事件Y的方法的还有的另一个变型如下。如果两个数组中的整数元素小于128,则有可能将每个元素存储在单个字节中,并将8个这样的元素打包到单个64位字中,并让A1和A2为这些字的数组。A1中每个字节的最高有效位可以被设置为0,并且A2中每个字节的最高有效位可以被设置为1。两个对应的字相减,然后用掩码执行按位与(bitwise AND)以将除最高有效位之外的其它位清零,然后右移7位的位置,以得到用C编程语言表达如下的值:((A2[i]-A1[i])&0x8080808080808080)>>7)。这可以被添加到被初始化为零的正在运行的累加器S。在多次这样做之后,通过移位和添加字节来将累加器转换为计数,以得到:((S&0xff)+((S>>8)&0xff)+((S>>16)&0xff)+((S>>24)&0xff)+((S>>32)&0xff)+((S>>40)&0xff)+((S>>48)&0xff)+((S>>56))&0xff))。在一些情况下,这些计算可以用诸如C、Java等的编程语言来执行。在其它情况下,可以使用特定于处理器的指令来执行,诸如由Intel和AMD提供的高级向量扩展(AVX)指令或者在图形处理单元(GPU)或通用图形处理单元(GPGPU)中的等效指令。在一些体系架构中,可以通过使用大于64位的字(诸如128、256、512或更多位)更快地执行计算。
“著名(Famous)”事件:如果(1)事件X是“轮R第一”事件(或“证人”)并且(2)经由如下所述的执行拜占庭(Byzantine)一致性协议达到“是”的决定,则轮R事件X是“著名的”。在一些实施例中,拜占庭一致性协议可以由分布式数据库的实例(例如,分布式数据库实例114)和/或数据库聚合模块(例如,数据库聚合模块211)来执行。例如,在图8中,示出了五个轮1第一:1401、1402、1403、1404和1408。如果M被定义为大于N的1/2倍的最小整数(其是3),那么1412是轮2第一。如果协议运行时间更长,那么散列图将向上增长,并且最终其它四个成员也将在这个图的顶部之上具有轮2第一。每个轮2第一将具有关于轮1第一中的每一个是否是“著名的”“投票”。事件1412将对于1401、1402和1403是著名的投票为“是”(YES),因为这些是它可以识别的轮1第一。事件1412将对于1404是著名的投票为“否”(NO),因为1412不能识别1404。对于给定的轮1第一,诸如1402,它是否著名的状态将通过计算对于其是否“著名”的每个轮2第一的投票来决定。然后,这些投票将传播到轮3第一,然后传播到轮4第一,等等,直到最终关于1402是否著名达成一致性。对于其它第一重复相同的过程。
拜占庭一致性协议可以收集和使用“轮R第一”事件的投票和/或决定来识别“著名”事件。例如,如果Y可以“识别”事件X,则“轮R+1第一”Y将投票“是”,否则它投票“否”。然后对于每轮G,对于G=R+2,R+3,R+4等计算投票,直到由任何成员做出决定。在做出决定之前,对于每轮G计算投票。其中一些轮可以是“多数”轮,而一些其它轮可以是“币(coin)”轮。在一些情况下,例如,轮R+2是多数轮,并且未来轮被指定为或者多数轮或者币轮(例如,根据预定义的时间表)。例如,在一些情况下,未来轮是多数轮还是币轮可以被任意确定,但条件是不能有两次连续的币轮。例如,可能预定义的是,将有五个多数轮,然后是一个币轮,然后是五个多数轮,然后是一个币轮,在达成一致性之前一直重复。
在一些情况下,如果轮G是多数轮,则可以如下计算投票。如果存在强烈地识别至少M个轮G-1第一投票V(其中V或者是“是”或者是“否”)的轮G事件,则共识决定为V,并且拜占庭一致性协议结束。否则,每个轮G第一事件计算作为每个轮G第一事件可以强烈识别的轮G-1第一的多数的新的投票。在存在平局而非多数的情况下,投票可以被指定为“是”。
类似地陈述,如果X是轮R证人(或轮R第一),那么可以计算轮R+1、R+2等中的投票结果,其中每轮中证人都对于X是否著名进行投票。在轮R+1中,可以看到X的每个证人投票“是”,并且其它证人投票“否”。在轮R+2中,每个证人根据它可以强烈地看到的轮R+1证人的多数投票进行投票。类似地,在轮R+3中,每个证人根据它可以强烈地看到的轮R+2证人的多数投票进行投票。这可以持续多轮。在平局的情况下,投票可以被设置为“是”。在其它情况下,平局可以被设置为“否”或者可以被随机设置。如果任何轮具有至少M个证人投票“否”,则选举结束,并且X不是著名的。如果任何轮具有至少M个证人投票“是”,则选举结束,并且X是著名的。如果“是”和“否”都没有至少M个投票,则选举继续到下一轮。
作为示例,在图8中,考虑所示图下方的一些轮第一事件X。然后,每个轮1第一将关于X是否著名进行投票。事件1412可以强烈地识别轮1第一事件1401、1402和1408。因此,事件1412的投票将基于它们的投票。如果这是多数轮,则1412将检查{1401,1402,1408}中的至少M个是否具有“是”的投票。如果它们确实具有,则决定是“是”,并且一致性已经实现。如果它们中至少M个投票“否”,则决定为“否”,并且一致性已经实现。如果投票在任一方向上都不是具有至少M个,则1412被给予作为1401、1402和1408投票的多数的投票(如果存在平局,则将通过投票“是”来打破平局)。该投票然后将在下一轮中使用,一直继续到达成一致性为止。
在一些情况下,如果轮G是币轮,则可以如下计算投票。如果事件X可以识别至少M个轮G-1第一投票V(其中V或者是“是”或者是“否”),则事件X将把其投票改变为V。否则,如果轮G是币轮,则每个轮G第一事件X将把其投票改变为伪随机确定的结果(类似于在一些情况下的币翻转),其被定义为事件X的签名的最低有效位。
类似地陈述,在这种情况下,如果选举达到轮R+K(币轮),其中K是指定因子(例如,诸如3、6、7、8、16、32的数字的倍数,或任何其它合适的数字),则选举不会在那一轮结束。如果选举达到这一轮,则它可以继续至少更多的一轮。在这一轮中,如果事件Y是轮R+K证人,则如果它可以强烈地看到轮R+K-1中至少M个证人投票V,则Y将投票V。否则,Y将根据随机值进行投票(例如,根据事件Y的签名的位(例如,最低有效位、最高有效位、随机选择的位),其中1=“是”且0=“否”,或者反之亦然,根据事件Y的时间戳,使用密码“共享币”协议和/或任何其它随机确定)。在Y被创建之前,这种随机确定是不可预测的,并且因此可以提高事件和共识协议的安全性。
例如,在图8中,如果轮2是币轮,并且投票是轮1之前的某个事件是否是著名的,则事件1412将首先检查是否{1401,1402,1408}中至少M个投票为“是”,或者它们中至少M个投票为“否”。如果是这种情况,则1412将以相同的方式投票。如果在任一方向上都没有至少M个投票,则1412将具有随机或伪随机投票(例如,基于当ED创建和/或定义事件1412时对事件1412签名时,Ed为事件1412创建的数字签名的最低有效位)。
在一些情况下,伪随机确定的结果可以是密码共享币协议的结果,例如,其可以被实现为轮号的阈值签名的最低有效位。
可以从用于计算上述伪随机确定的结果的任何一种方法来构建系统。在一些情况下,系统按某种顺序循环使用不同的方法。在其它情况下,系统可以根据预定义的模式在不同的方法之间进行选择。
“接收轮(Received round)”:如果R是最小整数,则事件X具有R的“接收轮”,使得具有轮号R的著名轮R第一事件(或著名证人)中的至少一半是X的后代/或可以看到X。在其它情况下,可以使用任何其它合适的百分比。例如,在另一个实例中,如果R是最小整数,则事件X具有R的“接收轮”,使得具有轮号R的著名轮R第一事件(或著名证人)的至少预定百分比(例如,40%、60%、80%等)是X的后代和/或可以看到X。
在一些情况下,事件X的“接收世代”可以如下计算。找出哪个成员创建和/或定义了可以识别事件X的每个轮R第一事件。然后确定该成员可以识别X的最早事件的世代号。然后将X的“接收世代”定义为该列表的中值。
在一些情况下,事件X的“接收时间戳”T可以是包括识别和/或看到X的每个成员的第一事件的事件中的时间戳的中值。例如,事件1401的接收时间戳可以是事件1402、1403、1403和1408的时间戳的值的中值。在一些情况下,事件1401的时间戳可以被包括在中值计算中。在其它情况下,X的接收时间戳可以是作为识别或看到X的每个成员的第一事件的事件中的时间戳的值中的任何其它值或组合。例如,X的接收时间戳可以基于时间戳的平均值、时间戳的标准偏差、修改后的平均值(例如,通过从计算中去除最早和最近的时间戳),等等。在还有的其它情况下,可以使用扩展的中值。
在一些情况下,事件的总顺序和/或共识顺序通过按照它们的接收轮次对事件进行排序、通过它们的接收时间戳打破平局、以及通过它们的签名打破那些平局来计算。在其它情况下,事件的总顺序可以通过按它们的接收轮对事件进行排序、通过它们的接收世代打破平局、以及通过它们的签名打破那些平局来计算。以上段落指定了用于计算和/或定义事件的接收轮、接收时间戳和/或接收世代的函数。
在其它情况下,不是使用每个事件的签名,而是可以使用该事件的签名与该轮中具有相同的接收轮和/或接收世代的著名事件或著名证人的签名进行异或(XOR)。在其它情况下,可以使用任何其它合适的事件签名的组合来打破平局以定义事件的共识顺序。
在还有的其它情况下,不是将“接收世代”定义为列表的中值,而是可以将“接收世代”定义为列表本身。然后,当按接收世代进行排序时,两个接收世代可以通过它们列表的中间元素进行比较,从而通过紧接中间之前的元素打破平局,通过紧接中间之后的元素打破平局,以及通过在到目前为止使用的元素之前的元素和之后的元素之间交替来继续,直到平局被打破。
在一些情况下,中值时间戳可以用“扩展中值”来代替。在这种情况下,可以为每个事件定义时间戳列表,而不是单个接收时间戳。事件X的时间戳列表可以包括识别和/或看到X的每个成员的第一事件。例如,在图8中,事件1401的时间戳列表可以包括事件1402、1403、1403、1408的时间戳。在一些情况下,还可以包括事件1401的时间戳。当打破时间戳列表的平局(即,两个事件具有相同的接收轮)时,每个事件的列表的中间时间戳(或者预定的两个中间时间戳的第一个或第二个,如果甚至长度)可以进行比较。如果这些时间戳相同,则可以比较紧接在中间时间戳之后的时间戳。如果这些时间戳相同,则可以比较紧接在中间时间戳之前的时间戳。如果这些时间戳也相同,则比较三个已比较的时间戳之后的时间戳。这可以继续交替,直到平局被打破。与以上讨论类似,如果两个列表完全相同,则可以通过两个元素的签名来打破平局。
在还有的其它情况下,可以使用“截断的扩展中值”来代替“扩展中值”。在这种情况下,不存储每个事件的整个时间戳列表。相反,只有靠近列表中间的几个值被存储并用于比较。
除了计算事件的总顺序之外,接收到的中值时间戳还可以潜在地用于其它目的。例如,当且仅当存在包含其中Alice签署同一合同的事务的事件X时,Bob可能签署声明他同意受合同约束的合同,其中X的接收时间戳为在某个截止日期或之前。在这种情况下,如以上所述,如果Alice在截止日期之后签署合同,则Bob将不受合同约束,如“接收中值时间戳”所指示的。
在一些情况下,可以在达成共识之后定义分布式数据库的状态。例如,如果S(R)是轮R中著名证人可以看到的事件集合,则最终S(R)中的所有事件都将具有已知的接收轮和接收时间戳。此时,S(R)中事件的共识顺序是已知的并且将不改变。一旦达到这一点,成员就可以计算和/或定义事件及其顺序的表示。例如,成员可以按照其共识顺序计算S(R)中事件的散列值。然后,成员可以对散列值进行数字签名,并将散列值包含在成员定义的下一个事件中。这可以用于通知其它成员该成员已经确定S(R)中的事件具有将不会改变的给定顺序。在至少M个成员(或任何其它合适数量或百分比的成员)已签署S(R)的散列值(并且因此同意由散列值表示的顺序)之后,事件的那个共识列表以及成员的签名列表可以形成单个文件(或其它数据结构),其可以用于证明在S(R)中声明了事件的共识顺序。在其它情况下,如果事件包含更新分布式数据库系统的状态的事务(如本文所述),则散列值可以是在以共识顺序应用S(R)中的事件的事务之后分布式数据库系统的状态。
在一些情况下,M(如上所述)可以基于分配给每个成员的权重值,而不仅仅是总成员数的一部分、百分比和/或值。在这种情况下,每个成员具有与其在分布式数据库系统中的利益和/或影响相关联的权益。这样的权益可以是权重值。由该成员定义的每个事件都可以被称为具有其定义成员的权重值。然后,M可以是所有成员的总权益的一部分。以上描述为取决于M的事件将在具有至少M的权益总和的成员集合同意时发生。因此,基于其权益,某些成员可以对系统以及如何得出共识顺序产生更大的影响。在一些情况下,事件中的事务可以改变一个或多个成员的权益、添加新成员和/或删除成员。如果这样的事务具有R的接收轮,则在接收轮已被计算出之后,轮R证人之后的事件将使用修改后的权益和修改后的成员列表重新计算它们的轮号和其它信息。关于轮R事件是否著名的投票将使用旧的权益和成员列表,但关于R之后的轮的投票将使用新的权益和成员列表。关于使用权重值来确定共识的附加细节在于2016年12月21日提交的标题为“Method and Apparatus For ADistributed Database With Consensus Determined Based on Weighted Stakes”的美国专利申请No.15/387,048中描述,该申请通过引用整体并入本文。
在图2中,数据库聚合模块211和通信模块212被示出为在处理器210中实现。在其它实施例中,数据库聚合模块211和/或通信模块212可以在存储器220中实现。在还有的其它实施例中,数据库聚合模块211和/或通信模块212可以是基于硬件的(例如,ASIC、FPGA等)。
在一些情况下,分布式数据库(例如,关于图1示出和描述的)可以允许处理“代理事务”。在一些情况下,这样的代理事务可以由分布式数据库的成员(例如,具有分布式数据库的至少一部分的实例的计算设备)代表分布式数据库的非成员(例如,不具有分布式数据库的实例的计算设备)、具有少于完全权限的分布式数据库的成员(例如,具有读取但不具有写入权限,没有在共识决定中加以考虑等)等来执行。例如,假设Alice想要将事务TR提交给分布式数据库,但她不是分布式数据库的完全成员(例如,Alice不是成员或具有有限的权限)。假设Bob是完全成员并且在分布式数据库中拥有完全权限。在这种情况下,Alice可以将事务TR发送给Bob,并且Bob可以将TR提交给网络以影响分布式数据库。在一些情况下,Alice可以对TR进行数字签名。在一些情况下,TR可以包括例如对Bob的支付(例如,他向分布式数据库提交TR的服务的费用)。在一些情况下,Alice可以通过匿名网络(诸如TOR洋葱路由网络)将TR传送给Bob,使得Bob和其它观察者都将无法确定TR来自Alice。
在一些情况下,可以使用分布式数据库(例如,关于图1示出和描述的)来实现加密货币。在这样的情况下,每个分布式数据库实例114、124、134、144可以定义一个或多个钱包数据结构(本文也称为钱包)来存储加密货币。钱包数据结构可以包括密钥对(公钥和私钥)。在一些情况下,钱包的密钥对可以由该钱包源自的计算设备生成。例如,如果Alice定义钱包(W,K),其中W是公钥(其也可以充当钱包的标识符)并且K是私钥,那么她可以将W发布(例如,在事件中)到分布式数据库的其余实例,但保持她的身份匿名,使得分布式数据库的其它实例(或其用户)无法识别钱包W与Alice相关联。但是,在一些情况下,加密货币转移是公开的。因此,如果她的雇主将钱转移到W(例如,使用事件内的事务),并且后来Alice通过将钱从W转移到商店来进行购买(例如,在不同事件中使用不同的事务),那么雇主和商店可以串通来确定W属于Alice,并且是Alice进行购买。因此,为了避免这种情况,Alice将钱转移到新的匿名钱包以保持她的事务匿名会是有益的。
在一些实现中,WALLET_ADD操作可以用于在分布式数据库中存储对(W,D),并且WALLET_DEL可以用于删除钱包。在一些情况下,用户可以通过支付费用将钱包添加到分布式数据库,并且这样的钱包可以在分布式数据库中保持活动由支付的费用所涵盖的一段时间。对W(W,D)中的参数W对应于钱包的公钥,并且参数D是可以包括公钥列表的数据结构,每个公钥对应于私钥,其中这样的私钥中的任何一个都可以用于例如签署WALLET_DEL操作。在其它情况下,可以使用任何足够大的这种私钥集合来签署WALLET_DEL操作。例如,在这样的情况下,签署WALLET_DEL的这样的私钥的数量必须高于预定阈值。
在其它实现中,WALLET_ADD(W,D)可以是将数字证书添加和/或绑定到公钥W的操作或函数。数字证书是通过提供关于证书的主题的信息以及可以使用证书的应用和服务来将用户、计算机或服务的身份绑定到公钥的电子凭证。因此,在一些情况下,数据结构D可以包括W的公钥证书(例如,X.509证书),以及被允许从公钥W解绑证书的公钥列表。在这样的列表中,公钥可以包含W和公钥证书链中的密钥两者。
成员(例如Alice)可以经由WALLET_ADD(W,D)操作创建和/或定义新钱包。这样的钱包包括公钥W。在默认情况下,新创建的钱包是匿名的,因为钱包中没有任何内容将钱包链接到成员Alice(即,表示为Alice的计算设备)。分布式数据库还使成员能够创建非匿名钱包,以例如防止洗钱操作、逃税,遵守了解您的客户(Know Your Customer,KYC)法律或其它合适的政策和做法。因此,Alice和分布式数据库的其它成员可以:(1)使用可信证书颁发机构(CA)来验证成员的身份(例如,Alice身份)并获得将成员绑定到钱包W的证书(例如,X.509证书)和/或(2)使用可信身份托管机构(IEA)来验证成员的身份(例如,Alice)、执行由该成员创建的身份托管文件(IEF)的盲化签名,并获得用于IEA的签名密钥的证书(例如,X.059证书)。
在一些情况下,分布式数据库的成员可以使用操作WALLET_ADD(A,D)将例如由CA或IEF创建的证书D附加到钱包并最终使用操作WALLET_DEL(A,D)删除此类证书。在这种情况下,证书链可以扩展到颁发证书的CA或IEA和/或还可以扩展到批准要在分布式数据库中使用的CA或IEA的实体,例如,扩展到政府代理或其它合适的机构。
在一些情况下,当通过分布式数据库执行的事务必须遵守KYC法律或政策时,那么钱包、银行账户和/或商品和服务的私人卖家之间的事务可以在验证由CA颁发的证书之后被执行。在这种情况下,证书链可以扩展到批准CA的代理(例如,政府代理)。因此,这样的事务可以由代理跟踪。在一些情况下,用户可以通过支付费用将证书绑定到钱包,并且这样的钱包可以在分配的数据库中保持活动由支付的费用所涵盖的一段时间。
在一些情况下,通过分布式数据库执行的事务可以符合KYC和隐私法律或政策。在这种情况下,例如,商品和服务的私人卖家之间的事务可以在验证由IEA颁发的证书之后被执行。在这种情况下,证书链可以扩展到批准IEA的代理。例如,IEF可以包括用由批准IEA的代理所拥有的公钥加密的W以及用户的姓名和地址。因此,这样的代理可以解密对应的W以及用户姓名和地址的字段,并识别钱包的所有者。但是,用户的身份不能被分布式数据库或其它代理的其它成员和/或用户访问。
在一些情况下,例如,成员可以创建和/或定义随机钱包的数量(例如,100个随机钱包)并将其对应的身份托管文件(例如,100个文件)的盲化版本发送到IEA,并且然后向IEA发送信息以使由IEA随机选择的那些文件(例如,99个文件)的子集去盲化并解密。这样的成员可以丢弃与99个文件相关联的99个钱包,并从IEA接收剩余身份托管文件的盲化签名。然后,该成员可以使剩余的身份托管文件去盲化并将其附加到剩余的钱包。因此,IEA可以保证这样的成员将托管身份附加到剩余的钱包上。因此,该会员可以获得IEA的隐私,并且只有批准IEA的代理才能访问托管信息。
在一些情况下,例如,当国家或其它机构具有隐私法律框架时,可以进一步增强该系统,使得政府或其它机构不是具有用于解密身份托管文件的单个密钥,而是可以具有合作以解密成员的身份的若干代理(例如,每个代理和/或机构具有密钥的一部分,该部分与密钥的其它部分组合来解密身份托管文件)。因此,可以在多个代理之间进行用于公开成员的身份的协议或合作操作。因此,分布式数据库用作可以同等地提供分布式数据库的成员或用户的隐私与经由分布式数据库执行的事务的透明度之间的平衡权衡的工具。此外,划分单个密钥来解密身份托管文件增强了实现分布式数据库的计算设备的安全性和隐私性。
以下示例假设如果以下事务被发布(例如,在事件中),那么加密货币的C个币从钱包W中转移到钱包R,其中末尾处的_K意味着事务用私钥K进行数字签名。可以使用以下表示法:
TRANSFER(C,W,R)_K
在一些情况下,为了实现加密货币转移的匿名性,可以定义新的事务类型和/或分布式数据库函数。例如,以下事务将把C1币从钱包W1移动到钱包R1,并且还把C2币从钱包W2移动到钱包R2。在一些情况下,例如,钱包W1和R1可以与分布式数据库的第一实例相关联,并且钱包W2和R2可以与分布式数据库的第二实例相关联,如本文进一步详细描述的。在一些情况下,事务可以包括用于连接它们的任意标识符N(例如,对话标识符和/或进程标识符)。
TRANSFER_DOUBLE(N,C1,W1,R1,C2,W2,R2,T)_K1
TRANSFER_DOUBLE(N,C1,W1,R1,C2,W2,R2,T)_K2
在一些情况下,除非发布两个相同的副本并将其分发给分布式数据库的其它实例(例如,在一个或多个事件中),其中一个由K1签名(使用与公钥W1相关联的私钥),另一个由K2签名(使用与公钥W2相关联的私钥),否则这些事务没有效果。在一些情况下,每个事务还可以包括安全时间戳,如上所述。该安全时间戳可以是与事务相关联的事件的安全时间戳或者是事务的单独的安全时间戳。如果两个事务都以彼此的T秒内的时间戳发布(例如,事务的安全时间戳在彼此的预定时间段内),则发生两个货币转移。否则,不会发生转移。
在其它情况下,不使用T并且仅当两个事务在任一方发布取消转移的事务之前发生时,才发生货币转移。例如,Alice可以发布她签名的事务(例如,她的TRANSFER_DOUBLE事务),然后发布包含针对该第一事务的取消消息的另一个签名事务,然后Bob发布其签名的事务。如果Bob的事务晚于Alice的取消消息,则不会发生转移,但如果Bob的事务早于Alice的取消消息,则转移将发生。以这种方式,系统可以使用事务的共识排序,在没有T且没有时间戳的情况下工作。在其它情况下,可以支持T和取消消息两者。
以下示例图示了如何使用“TRANSFER_DOUBLE”事务类型和/或分布式数据库函数来匿名且安全地发起数据(诸如货币)的转移。在下面的示例中,Alice具有她的雇主向其转移钱的钱包W1。她希望将C个币从W1转移到她创建的匿名钱包W2,该钱包W2将在以后用于购买。但是她想要保证匿名性,使得看到事务的人将不知道W1与匿名钱包W2相关联。即使她的雇主与商店串通来攻击匿名性,事务也应该是安全的。此外,例如,当将币从Bob的钱包W3转移到他创建的匿名钱包W4时,他想要相同的安全匿名性。
Alice和Bob可以通过执行以下协议来实现匿名形式。它可以涉及任何形式的彼此联系,诸如彼此直接通过电子邮件联系、通过聊天站点或通过在线论坛站点或者通过在托管加密货币的相同公共分类账中发布的事务(例如,在事件内)彼此发送消息。以下示例假设协议是经由公共分类帐执行的。假设Alice和Bob最初是陌生人,但他们都有能力将事务发布到公共分类账,并且可以读取其它人发布到公共分类账的事务。Alice和Bob可以将以下事务发布到公共分类账(例如,在一个或多个事件中):
Alice发布:Anonymize1(N,C,W1)_K1
Bob计算: B=encrypt(W4,W1)
Bob发布:Anonymize2(N,W3,B)_K3
Alice计算: A=encrypt(W2,W3)
Alice发布:Anonymize3(N,A)_K1
两者计算: MIN=min(W2,W4)
两者计算: MAX=max(W2,W4)
Bob发布:TRANSFER_DOUBLE(N,C,W1,MIN,C,W3,MAX,T)_K3
Alice发布:TRANSFER_DOUBLE(N,C,W1,MIN,C,W3,MAX,T)_K1
在该示例中,Alice想要将C个币从钱包W1转移到W2,并且Bob想要将C个币从钱包W3转移到W4。Alice和Bob中的每一个通过为每个钱包生成(公钥,私钥)密钥对来生成他们自己的钱包。这里,钱包的公钥也用作钱包的名称(在其它情况下,可以使用单独的标识符来识别钱包)。Alice和Bob希望以观察者可以识别钱包W1的所有者也是W2或W4任一个的所有者,但是不能识别是哪一个的方式来完成这些转移。类似地,Alice和Bob希望以观察者可以识别钱包W3的所有者也是W2或W4任一个的所有者,但是不能识别是哪一个的方式来完成这些转移。具有公钥W1的钱包具有私钥K1。类似地,钱包W2、W3和W4分别具有私钥K2、K3和K4。上面的每个事务或指令都用末尾列出的私钥进行签名。例如,初始事务或指令用私钥K1进行数字签名。
第一事务(Anonymize1(N,C,W1)_K1)用于通告Alice想要将C个币从W1转移到匿名钱包。该事务包括标识符号N,其可以是事务的散列、包括在事务中的随机数和/或任何其它合适的标识符。该N(例如,对话标识符和/或进程标识符)可以用在后续事务中以回引发起该处理的事务,以当一次发生若干类似的处理和/或对话时避免混淆(和能够识别处理或对话)。在一些情况下,N可以包括超时期限(例如,T),之后包括N的事务被忽略。该事务由K1进行数字签名。
函数encrypt(W4,W1)使用公钥W1加密W4(由Bob拥有和定义作为其目标匿名钱包的钱包的公钥),从而给出只能用对应的私钥K1(由Alice持有)解密的结果B。这确保了除W1的所有者(本例中为Alice)之外,查看事务的分布式数据库的其它实例都不能识别W4。
事务Anonymize2(N,W3,B)_K3指示作为处理或对话N的一部分,Bob想要将C个币从W3转移到由B识别的匿名钱包。该事务使用私钥K3进行数字签名。然后,Alice可以使用私钥K1解密B,以将Bob的目标匿名钱包识别为W4。
Alice可以执行函数encrypt(W2,W3)。这用公钥W3(Bob的初始钱包)加密W2(由Alice拥有和定义作为她的目标匿名钱包的钱包的公钥)。然后,Alice可以发布事务Anonymize3(N,A)_K1。Bob可以通过用私钥K3解密A来将W2识别为Alice的目标匿名钱包。
函数min(W2,W4)返回两个公钥W3和W4中按字典顺序(lexicographically)(按字母顺序)在前面的任一个。函数max(W2,W4)返回两个公钥W3和W4中按字典顺序(按字母顺序)在后面的任一个。因此,MIN可以是W2或W4,并且MAX可以是W2或W4。该min和max函数允许Alice和Bob两者可以识别,但其它人无法识别的钱包W2和W4的排序。在其它情况下,可以使用任何其它确定性函数来向Alice和Bob识别如何对匿名钱包W2和W4进行排序,诸如散列函数、排名等。
TRANSFER_DOUBLE事务可以由Bob和Alice两者发布,并由它们各自的数字签名K1和K3签名。因为Bob和Alice两者都将相同数量的币C转移到每个它们各自的匿名钱包中,因此哪个源钱包W1或W3将币转移到哪个目的地钱包W2或W4无关紧要。因此,在一些情况下,Alice将C个币转移到她自己的匿名钱包,并且Bob将C个币转移到他自己的匿名钱包。在其它情况下,Alice将C个币转移到Bob的匿名钱包,并且Bob将C个币转移到Alice的匿名钱包。这是由MIN和MAX函数确定的。这也确保观察者可以识别W2和W4两者,但是将不能识别哪个钱包由W1的所有者定义,以及哪个钱包由W3的所有者定义。在事务已发布之后,观察者知道钱包W1和W3的所有者正在合作将C个币转移到钱包W2和W4中的每一个,但是观察者将不知道哪个发送者拥有哪个接收钱包,因此钱包W2和W4将比钱包W1和W3稍微更加匿名。
在一些情况下,事务可以是“代理事务”,这意味着网络中的节点代表另一方提交事务。在上面的示例中,Alice拥有钱包W1和W2,并且想要发布若干个事务。如果Carol是具有完全权限的分布式数据库的成员,那么Alice可以将事务发送给Carol以代表Alice提交给分布式数据库。在一些情况下,代理事务可以包括从钱包W1向Carol转移少量费用以支付该服务的授权。在一些情况下,Alice可以通过匿名通信的网络(诸如TOR洋葱路由网络)与Carol通信。
在一些情况下,然后Alice可以与Dave重复上述匿名协议,并且Bob可以与Ed重复该协议。此时,分布式数据库的其它实例将能够识别Alice拥有4个钱包中的一个,但不知道是哪个。在10次这样的运行之后,Alice拥有210(即1024)个钱包中的一个钱包。在20次运行之后,该集合超过一百万。在30次运行以后,它超过十亿。在40次运行之后,它超过万亿。该协议应该花费一秒钟的若干分之几来运行。但即使每个协议花费一整秒运行,任何试图匿名其钱包的人也将会在远不到一分钟的时间内彼此随机交换。观察者知道Alice拥有所产生的钱包中的一个,但不知道是哪一个。
如果只有少数人试图匿名他们的钱包,那么该系统不太安全。为了附加的安全性,Alice可以等待一段时间(例如,一天、一小时、一周等),然后进一步匿名化她的最终钱包。以这种方式,她最终可以在包含试图在很长一段时间内匿名化的分布式数据库的其它实例的人群中隐藏。使用该系统的分布式数据库的实例越多,她实现目标的速度就越快。
如果攻击者能够在Alice与实现分布式数据库的网络(例如,互联网)通信时识别Alice的IP地址,那么该系统可能潜在地被损害。如果攻击者识别出Alice从给定IP地址运行协议,然后立即从同一地址看到有人在钱包W2上运行该协议,那么他们可以断定Alice拥有钱包W2。在一些情况下,IP地址可以是匿名的。例如,匿名通信网络(例如,Tor网络)可以用于实现匿名通信。然后,分布式数据库的其余实例可以识别W2运行协议并签署了事务,但将无法识别W2是使用Alice的计算机还是Bob的计算机。
在一些司法管辖区,政府可能希望通过立法确保其能够监控货币流动以防止诸如洗钱和逃税等罪行,同时仍然允许公民匿名以防止(例如,被他们的邻居、罪犯、外国政府等)暗中侦察。在一些情况下,上述匿名方法和系统可以支持这种立法。在这样的情况下,政府可以创建或批准某个证书颁发机构(CA)或若干个CA来创建和/或定义证明钱包与某个人相关联的加密证书。加密可以使得只有政府可以解密它(可能只在法院命令的情况下)。如果Alice创建和/或定义钱包,那么她可以选择性地将这样的证书附加到钱包,这意味着她的邻居不能看到钱包属于Alice,但政府可以解密证书并将Alice识别为钱包所有者。政府可能要求其国家内的雇主只能将钱存入具有此类证书的钱包,并且该国家中的商店只接受带有此类证书的钱包的支付。然后,Alice可以重复执行上述协议以创建和/或定义钱包链,并获得链中第一个和最后一个钱包的适当证书。
虽然以上描述为具有单个公钥-私钥对的每个钱包数据结构,但在其它情况下,钱包数据结构可以包括两个公钥-私钥对:一个用于签名,一个用于加密。在这种情况下,可以修改上述方法以使用签名密钥用于签名和加密密钥用于加密。
虽然以上描述为使用散列图并在事件内存储和交换事务,但在其它情况下,可以使用任何其它合适的分布式数据库和/或分布式账本技术来实现上述方法以促进安全和匿名事务。例如,在其它情况下,诸如区块链、PAXOS、RAFT等技术可以用于实现这样的方法。在一些情况下,可以将安全时间戳添加到这些技术(例如,构建在它们之上)以实现上述方法来促进安全和匿名事务。在其它情况下,如上所述,不使用时间戳。
虽然以上描述为在分布式数据库的两个不同实例之间实现,但在其它情况下,匿名化方法可以由分布式数据库的两个以上实例来实现。例如,在其它情况下,“TRANSFER_DOUBLE”事务可以支持附加数量的事务。例如,可以定义TRANSFER_TRIPLE事务以支持三个不同钱包数据结构之间的数据的转移。
虽然以上描述为实现加密货币,但在其它情况下,任何其它类型的分布式数据库内的事务可以被匿名化。例如,可以匿名化商品交换的记录、个人身份的认证、使用特定资源的授权等。在这些情况下,这可以增加分布式数据库内的事务的安全性。
图3-6图示了根据实施例的散列图的示例。存在五个成员,每个成员都用深色垂直线表示。每个圆圈表示事件。来自事件的两条向下线段表示两个先前事件的散列。在这个示例中,除了每个成员的第一事件之外,每个事件具有两条向下线段(一条深色线到同一成员,并且一条浅色线到另一个成员)。时间向上进展。在图3-6中,分布式数据库的计算设备被指示为Alice、Bob、Carol、Dave和Ed。应当理解的是,这样的指示是指结构上和功能上类似于关于图1示出和描述的计算设备110、120、130和140的计算设备。
图7图示了根据实施例的两个计算设备同步事件的信号流程图。具体而言,在一些实施例中,分布式数据库实例703和803可以交换事件以获得聚合。计算设备700可以基于与计算设备700的关系、基于与计算设备700的接近度、基于与计算设备700相关联的有序列表等随机地选择与计算设备800同步。在一些实施例中,由于计算设备800可以由计算设备700从属于分布式数据库系统的计算设备集合中选择,因此计算设备700可以连续多次选择计算设备800或者可以在一段时间内不选择计算设备800。在其它实施例中,先前选择的计算设备的指示可以存储在计算设备700处。在这样的实施例中,计算设备700可以在能够再次选择计算设备800之前等待预定数量的选择。如上所述,分布式数据库实例703和803可以分别在计算设备700的存储器和计算设备800的存储器中实现。
前述术语、定义和算法用于图示图8-12中描述的实施例和概念。图13A和13B图示了以数学形式示出的共识方法和/或处理的第一示例应用。图14A和14B图示了以数学形式示出的共识方法和/或处理的第二示例应用。
示例系统1:如果计算设备700被称为Alice,并且计算设备800被称为Bob,则它们之间的同步可以如图7中所示。Alice和Bob之间的同步可以如下:
-Alice向Bob发送存储在分布式数据库703中的事件。
-Bob创建和/或定义新事件,该新事件包含:
--Bob创建和/或定义的最后事件的散列
--Alice创建和/或定义的最后事件的散列
--以上Bob的数字签名
-Bob向Alice发送存储在分布式数据库803中的事件。
-Alice创建和/或定义新事件。
-Alice向Bob发送那个事件。
-Alice根据散列图计算事件的总顺序
-Bob根据散列图计算事件的总顺序
在任何给定时间,成员可以存储到目前为止接收到的事件以及与创建和/或定义每个事件的计算设备和/或分布式数据库实例相关联的标识符。除了初始事件(其没有父亲散列)和每个新成员的第一事件(其具有单个父亲事件散列,表示邀请它们加入的现有成员的事件)之外,每个事件包含两个较早事件的散列。可以绘制表示这个事件集合的图。它可以为每个成员显示垂直线,并为由该成员创建和/或定义的每个事件显示该线上的点。每当事件(较高的点)包含较早事件(较低的点)的散列时,就在两个点之间绘制一条对角线。如果事件可以经由该事件的散列(或者直接或者通过中介事件)引用其它事件,则该事件可以被称为链接到另一个事件。
例如,图3图示了散列图600的示例。作为Bob与Carol同步的结果并且在同步之后,事件602由Bob创建和/或定义。事件602包括事件604(由Bob创建和/或定义的先前事件)的散列和事件606(由Carol创建和/或定义的先前事件)的散列。在一些实施例中,例如,包括在事件602内的事件604的散列包括指向其直接祖先事件,即事件608和610的指针。由此,Bob可以使用事件602来引用事件608和610并且使用指向先前事件的指针来重建散列图。在一些实例中,事件602可以被称为链接到散列图600中的其它事件,因为事件602可以经由较早祖先事件引用散列图600中的每个事件。例如,事件602经由事件604链接到事件608。又例如,事件602经由事件606和事件612链接到事件616。
示例系统2:来自示例系统1的系统,其中事件还包括要记录的事务或其它信息的“有效载荷”。这样的有效载荷可以用于利用自从计算设备的直接先前事件以来发生和/或定义的任何事务和/或信息来更新事件。例如,事件602可以包括自从事件604被创建和/或定义以来由Bob执行的任何事务。因此,当将事件602与其它计算设备同步时,Bob可以共享该信息。相应地,由Bob执行的事务可以与事件相关联并且使用事件与其它成员共享。
示例系统3:来自示例系统1的系统,其中事件还包括用于调试、诊断和/或其它目的的当前时间和/或日期。时间和/或日期可以是当计算设备(例如,Bob)创建和/或定义事件时的本地时间和/或日期。在这样的实施例中,这样的本地时间和/或日期不与其余设备同步。在其它实施例中,时间和/或日期可以跨设备同步(例如,当交换事件时)。在还有的其它实施例中,可以使用全局计时器来确定时间和/或日期。
示例系统4:来自示例系统1的系统,其中Alice既不向Bob发送由Bob创建和/或定义的事件,也不发送这种事件的祖先事件。如果y包含x的散列,或者y包含作为x的祖先的事件的散列,则事件x是事件y的祖先。类似地陈述,在这样的实施例中,Bob向Alice发送尚未由Alice存储的事件,并且不发送已经由Alice存储的事件。
例如,图4图示了示例散列图620,其图示事件622(黑色圆圈)的祖先事件(虚线圆圈)和后代事件(条纹圆圈)。线段建立事件的部分顺序,其中祖先出现在黑色事件之前,而后代出现在黑色事件之后。部分顺序不指示白事件是在黑事件之前还是之后,因此总顺序用于决定它们的序列。又例如,图5图示了示例散列图,其图示一个特定事件(实心圆圈)以及每个成员第一次接收该事件的指示(条纹圆圈)。当Carol与Dave同步以创建和/或定义事件624时,Dave不向Carol发送事件622的祖先事件,因为Carol已经知道并且已经接收到这种事件。相反,Dave向Carol发送Carol尚未接收和/或存储在Carol的分布式数据库实例中的事件。在一些实施例中,Dave可以基于Dave的散列图揭示的关于Carol先前接收到哪些事件来识别要发送给Carol的事件。事件622是事件626的祖先。因此,在事件626时,Dave已经接收到事件622。图4示出了Dave从Ed接收到事件622,ED从Bob接收到事件622,Bob从Carol接收到事件622。此外,在事件624时,事件622是Dave接收到的由Carol创建和/或定义的最后一个事件。因此,Dave可以向Carol发送除了事件622及其祖先之外的Dave已存储的事件。此外,在接收到来自Dave的事件626之后,Carol可以基于存储在Carol的分布式数据库实例中的事件中的指针来重建散列图。在其它实施例中,基于Carol向Dave发送事件622(图4中未示出)以及Dave使用事件622(以及其中的引用)来识别Carol已经接收到的事件,Dave可以识别要发送给Carol的事件。
示例系统5:来自示例系统1的系统,其中两个成员以一定顺序向另一个成员发送事件,使得直到接收者接收和/或存储该事件的祖先之后才发送事件。因此,发送者从最旧到最新来发送事件,使得接收者可以在接收到事件时通过将两个散列与已经接收到的两个祖先事件进行比较来检查每个事件的两个散列。发送者可以基于发送者的散列图的当前状态(例如,由发送者定义的数据库状态变量)以及该散列图指示接收者已经接收到的内容来识别要发送给接收者的事件。参考图3,例如,当Bob正在与Carol同步以定义事件602时,Carol可以识别事件619是Carol接收到的由Bob创建和/或定义的最后一个事件。因此,Carol可以确定Bob知道该事件及其祖先。因此,Carol可以首先向Bob发送事件618和事件616(即,Carol接收到的Bob尚未接收到的最旧事件)。Carol然后可以向Bob发送事件612并且然后发送事件606。这允许Bob轻松地链接事件并重建Bob的散列图。使用Carol的散列图来识别Bob尚未接收到的事件可以提高同步的效率,并且可以减少网络流量,因为Bob不会从Carol请求事件。
在其它实施例中,可以首先发送最近的事件。如果接收者确定(基于最近事件中两个先前事件的散列和/或最近事件中指向先前事件的指针)它们还没有接收到两个先前事件中的一个事件,则接收者可以请求发送者发送这种事件。这可以一直发生,直到接收者已接收到和/或存储最近事件的祖先为止。参考图3,在这样的实施例中,例如,当Bob从Carol接收到事件606时,Bob可以识别事件606中事件612和事件614的散列。Bob可以确定事件614是先前在创建和/或定义事件604时从Alice接收到的。因此,Bob不需要从Carol请求事件614。Bob还可以确定事件612尚未被接收到。Bob然后可以从Carol请求事件612。然后Bob可以基于事件612内的散列确定Bob尚未接收到事件616或618并且可以相应地从Carol请求这些事件。基于事件616和618,Bob然后将能够确定他已接收到事件606的祖先。
示例系统6:来自示例系统5的系统,其具有附加的限制,即,当成员已在接下来要发送的几个事件之间选择时,选择使由该成员创建和/或定义的到目前为止发送的字节总数最小化的事件。例如,如果Alice只有两个事件要发送给Bob,并且一个是100个字节并且由Carol创建和/或定义,以及一个是10个字节并且由Dave创建和/或定义,并且到目前为止在这个同步中Alice已经发送了Carol的事件的200个字节和Dave的事件的210个字节,那么Alice应该首先发送Dave事件,然后随后发送Carol事件。因为210+10<100+200。这可以用于解决其中单个成员或者发送出单个巨大事件或者大量微小事件的攻击。在其中流量超过大多数成员的字节限制的情况下(如关于示例系统7所讨论的),示例系统6的方法可以确保攻击者的事件被忽略而不是合法用户的事件。类似地陈述,通过在较大事件之前发送较小的事件(以防止一个巨大事件形成连接),可以减少攻击。此外,如果成员不能在单个同步中发送每个事件(例如,由于网络限制、成员字节限制等),那么该成员可以从每个成员发送几个事件,而不是仅仅发送由攻击者定义和/或创建的事件而不发送(仅发送少量)由其它成员创建和/或定义的事件。
示例系统7:来自示例系统1的系统,其具有附加的第一步骤,其中Bob向Alice发送指示他愿意在该同步期间接收的最大字节数的数字,并且Alice用她的限制进行回复。当下一个事件超过这个限制时,然后Alice停止发送。Bob也这样做。在这样的实施例中,这限制了传送的字节的数量。这可能会增加聚合时间,但将减少每次同步的网络流量。
示例系统8:来自示例系统1的系统,其中在同步过程开始时添加了以下步骤:
-Alice识别S,即,她已经接收到和/或存储的事件集合,从而跳过由Bob创建和/或定义的或者作为由Bob创建和/或定义的事件的祖先的事件。
-Alice识别在S中创建和/或定义每个事件的成员,并向Bob发送成员的ID号码列表。Alice还发送了一些由她已经收到和/或存储的每个成员创建和/或定义的事件。
-Bob利用他已经接收到的由其它成员创建和/或定义的事件的列表进行回复。
-Alice然后只向Bob发送他尚未接收到的事件。例如,如果Alice向Bob指示她已接收到由Carol创建和/或定义的100个事件,并且Bob回复他已经接收到由Carol创建和/或定义的95个事件,则Alice将仅发送由Carol创建和/或定义的最近5个事件。
示例系统9:来自示例系统1的系统,具有用于识别和/或处理作弊者的附加机制。每个事件包含两个散列,一个来自由该成员创建和/或定义的最后一个事件(“自散列”),另一个来自由另一个成员创建和/或定义的最后一个事件(“外散列”)。如果成员创建和/或定义具有相同自散列的两个不同事件,那么该成员是“作弊者”。如果Alice通过接收由Dave创建和/或定义的两个不同事件具有相同自散列发现Dave是作弊者,则她存储他是作弊者的指示符,并且避免将来与他同步。如果她发现他是作弊者但仍然再次与他同步并创建和/或定义记录该事实的新事件,那么Alice也变为作弊者,并且知道Alice还与Dave同步的其它成员停止与Alice同步。在一些实施例中,这仅单方面影响同步。例如,当Alice发送标识符列表以及她接收到的每个成员的事件的数量时,她不会发送作弊者的ID或计数,因此Bob将不会利用任何对应的数字进行回复。然后,Alice向Bob发送她接收到的并且她没有接收到Bob已接收到这种事件的指示的作弊者的事件。在同步完成之后,Bob也将能够确定Dave是作弊者(如果他还没有将Dave识别为作弊者),并且Bob也将拒绝与作弊者同步。
示例系统10:示例系统9中的系统,其中添加了Alice通过向Bob发送她已识别出的并且她仍存储其事件的作弊者列表开始同步过程,并且Bob利用除了Alice识别出的作弊者之外还有他已识别出的任何作弊者进行回复。然后他们继续照常,但是在彼此同步时没有考虑作弊者。
示例系统11:示例系统1中的系统,其具有基于在同步期间接收到的任何新事件内的事务重复地更新(例如,由系统的成员定义的数据库状态变量所捕获的)当前状态的过程。这也可以包括第二过程,该第二过程每当事件的序列改变时通过返回到早先状态的副本并且通过以新顺序处理事件来重新计算目前状态来重复地再建该状态(例如,事件的顺序)。在一些实施例中,当前状态是与事务的结果相关联的状态、余额、条件等。类似地陈述,状态可以包括由事务修改的数据结构和/或变量。例如,如果事务是银行账户之间的汇款,那么当前状态可以是账户的当前余额。又例如,如果事务与多人游戏相关联,则当前状态可以是与游戏相关联的位置、生命的数量、获得的物品、游戏的状态等等。
示例系统12:示例系统11中的系统,通过使用“快速克隆”arrayList维持状态(例如,银行账户余额、游戏状态等)来使得更快。快速克隆arrayList是一种数据结构,它像数组一样工作,但具有一个附加特征:它支持“克隆”操作,该操作看起来是创建和/或定义作为原件副本的新对象。克隆就好像它是真正的副本一样,因为对克隆的改变不会影响原件。但是,克隆操作比创建真正副本更快,因为创建克隆实际上不涉及将一个arrayList的全部内容复制和/或更新到另一个arrayList。可以使用两个小对象,每个对象具有散列表和指向原始列表的指针,而不是具有两个克隆和/或原始列表的副本。当对克隆进行写入时,散列表记住哪个元素被修改,以及新的值。在对某个位置执行读取操作时,首先检查散列表,并且如果该元素被修改,则返回散列表中的新值。否则,返回原始arrayList中的那个元素。以这种方式,两个“克隆”初始地仅仅是指向原始arrayList的指针。但是,由于每个都被重复地修改,因此它会长成具有存储自身与原始列表之间的差异的大型散列表。克隆本身可以被克隆,从而导致数据结构扩展到对象树,每个对象具有其自己的散列表和指向其父亲的指针。因此,读取会导致在树上向上行走,直到找到具有所请求的数据的顶点或到达根。如果顶点变得太大或太复杂,那么它可以用父亲的真实副本替代,散列表中的变化可以对副本进行,并且散列表被丢弃。此外,如果不再需要克隆,那么在垃圾收集期间,它可以从树中去除,并且树可以被收缩。
示例系统13:示例系统11中的系统,通过使用“快速克隆”散列表维持状态(例如,银行账户余额、游戏状态等)使得更快。除了树的根是散列表而不是arrayList之外,其余与系统12相同。
示例系统14:示例系统11中的系统,通过使用“快速克隆”关系数据库维持状态(例如,银行账户余额、游戏状态等)使得更快。这是充当现有关系数据库管理系统(RDBMS)的包装的对象。每个明显的“克隆”实际上是具有ID号的对象和指向包含数据库的对象的指针。当用户的代码尝试对数据库执行结构查询语言(SQL)查询时,该查询首先被修改,然后发送到真正的数据库。真正的数据库与客户端代码看到的数据库相同,只是每个表具有一个用于克隆ID的附加字段。例如,假设存在具有克隆ID 1的原始数据库,并且然后创建数据库的两个克隆,具有ID 2和3。每个表中的每一行将在克隆ID字段中具有1、2或3。当来自用户代码的查询针对克隆2时,查询被修改,使得查询将只能从该字段中具有2或1的行中读取。类似地,对3的读取查找具有3或1ID的行。如果结构化查询语言(SQL)命令转到克隆2并说要删除一行,并且该行具有1,那么该命令应该仅将1改变为3,这将把该行标记为不再被克隆2和3共享,并且现在只能由3看到。如果在操作中存在若干克隆,那么可以插入行的若干副本,并且每个副本可以被改变为不同克隆的ID,使得新行对除了刚刚“删除”该行的克隆以外的其它克隆可见。类似地,如果向克隆2添加行,则该行被添加到具有ID为2的表。行的修改相当于删除然后插入。和以前一样,如果有若干克隆被垃圾收集,那么树可以被简化。该树的结构将存储在克隆不能访问的附加表中,而纯粹在内部使用。
示例系统15:示例系统11中的系统,通过使用“快速克隆”文件系统维持状态来使得更快。这是充当文件系统的包装的对象。文件系统建立在现有文件系统之上,使用快速克隆关系数据库来管理不同版本的文件系统。底层文件系统将大量文件或者存储在一个目录中,或者根据文件名进行划分(以保持目录小)。目录树可以存储在数据库中,而不是提供给主机文件系统。当文件或目录被克隆时,“克隆”只是带有ID号的对象,并且数据库被修改以反映该克隆现在存在。如果快速克隆文件系统被克隆,则对于用户看起来像是整个新硬盘驱动器已被创建和/或定义,并利用现有硬盘驱动器的副本进行了初始化。对一个副本的改变对其它副本可以没有影响。实际上,每个文件或目录只有一个副本,并且当通过一个克隆修改文件时,会发生复制。
示例系统16:示例系统15中的系统,其中在主机操作系统上为文件的每个N字节部分在快速克隆文件系统中创建和/或定义单独的文件。N可以是一些合适的大小,诸如例如4096或1024。以这种方式,如果一个字节在大文件中被改变,那么只有大文件的一个块被复制和修改。当在驱动器上存储许多仅有几个字节不同的文件时,这也提高了效率。
示例系统17:示例系统11中的系统,其中每个成员在他们创建和/或定义的一些或全部事件中包括在某个先前时间的状态的散列,以及直到那一点发生的事件的数量,指示该成员认识到和/或识别现在关于事件的顺序存在共识。在成员收集到包含来自多数用户针对给定状态的这种散列的签名事件之后,成员然后可以将其存储为在那一点时的共识状态证明,并从存储器中删除在那一点之前的事件和事务。
示例系统18:示例系统1中的系统,其中计算中值或多数的操作被替换为加权中值或加权多数,其中成员通过它们的“权益”进行加权。权益是指示该成员的投票计数多少的数字。权益可以是以加密货币形式的持有股份,或只是当成员首次被邀请加入时被分配的并且然后在成员邀请加入的新成员之间进行划分的任意数字。如果有足够的成员同意共识状态时,旧的事件可以被丢弃,使得它们的总权益是现有权益的多数。如果总顺序是使用成员贡献的排名的中值计算的,那么结果是其中一半的成员具有较高的排名并且一半的成员具有较低的排名的数字。另一方面,如果总顺序是使用加权中值计算的,那么结果是其中大约一半的总权益与低于该中值的排名相关联并且大约一半的总权益与高于该中值的排名相关联的数字。加权投票和中值在防止Sybil攻击时是有用的,在Sybil攻击中,一个成员邀请大量的“马甲”用户加入,其中每一个只是由邀请成员控制的假名。如果邀请成员被迫与受邀者划分其权益,那么马甲将对企图控制共识结果的攻击者是没有用的。因此,在一些情况下,权益证明可能是有用的。
示例系统19:示例系统1中的系统,其中代替单个分布式数据库,在层次结构中存在多个数据库。例如,可能存在用户是其成员的单个数据库,然后是若干较小的数据库或“块”,每个较小的数据库或“块”都具有成员的子集。当事件在块中发生时,它们在该块的成员之间而不是在该块之外的成员之间同步。然后,不时地,在块内已经确定共识顺序之后,可以与大数据库的全部成员共享结果得到的状态(或具有其共识总顺序的事件)。
示例系统20:示例系统11中的系统,其具有更新用于更新(例如,如由系统的成员定义的数据库状态变量所捕获的)状态的软件的事件的能力。例如,根据读取这些事件中的事务的软件代码,事件X和Y可以包含修改状态的事务,并且然后适当地更新状态。然后,事件Z可以包含软件的新版本现在可用的通知。如果总顺序告诉事件以顺序X,Z,Y发生,那么可以通过用旧软件处理X中的事务,然后用新软件处理Y中的事务来更新状态。但是如果共识顺序是X,Y,Z,那么X和Y两者都可以用旧软件来更新,这可能会给出不同的最终状态。因此,在这样的实施例中,升级代码的通知可以在事件内发生,使得社区可以关于何时从旧版本切换到新版本达成共识。这确保了成员将维持同步状态。它还确保了系统即使在升级期间也能保持运行,而无需重新引导或重新启动过程。
示例系统21:预期上述系统将创建和/或实现分布式共识的高效聚合机制,并具有最终的共识。关于此可以证明若干个定理,如下所示。
图10图示了具有第一数据库记录(例如,钱包1002A)和第二数据库记录(例如,钱包1002B)的成员Alice以及具有第一数据库记录(例如,钱包1004A)和第二数据库记录(例如,钱包1004B)的成员Bob。如以上所讨论的,Alice和Bob可以通过用公钥-私钥对作为参数发布诸如wallet(W,K)的命令来经由计算设备实例化或定义新的数据库记录(例如,W是逻辑上与新记录相关的公钥,K是逻辑上与新记录相关的私钥)。分布式数据库可以跟踪和/或保持与存储在例如Alice的第一钱包1002A和Bob的第一钱包1004A中的数字资产(例如,加密货币)的金额对应的值的记录。在一些情况下,分布式数据库的成员或用户可以识别钱包1002A属于Alice并且钱包1004A属于Bob。在这种情况下,Alice可以实例化和/或定义第二钱包(例如,钱包1002B),使得分布式数据库的其它成员或用户不能识别钱包1002B属于Alice。换句话说,Alice可以定义或实例化匿名钱包1002B,以使对钱包1002B进行的事务对于分布式数据库的其它成员或用户保持匿名。同样地,Bob可以实例化匿名钱包1004B并且使对钱包1004B进行的事务保持匿名。
Alice的第二钱包1002B和Bob的第二钱包1004B在实例化之后是空的,并且还不是分布式数据库的一部分。如果Alice从她的第一钱包1002A发布直接加密货币转移到她的第二钱包1002B,那么这种直接转移对于分布式数据库的其它成员或用户将是可见的。同样地,从Bob的第一钱包1004A到他的第二钱包1004B的加密货币的直接转移对于分布式数据库的其它成员或用户将是可见的。
有利地,在一些情况下,Alice和Bob可以进行从其第一钱包到其第二钱包的匿名转移,从而执行图10中所示的转移协议或操作的序列。上面已经讨论了图10中所示的一些操作(例如,上面描述的TRANSER_DOUBLE在功能上类似于图10中所示的TRANSFER2)。在这种情况下,Alice可以向Bob发送交换请求1001。交换请求1001可以包括Alice的第一钱包1002A的公钥A1、指示Alice想要转移到她的第二钱包1002B的数字资产(例如,加密货币)的金额的值C、随机数标识符N(例如,以识别与匿名转移相关联的一系列相关事务),以及到期时间戳T。交换请求1001可以由Alice经由给Bob的私人消息和/或通过将交换请求发布到公共论坛、公共分类帐、分布式数据库或其它合适的通信介质来进行。在一些情况下,Alice可以用与她的第一钱包1002A对应的私钥A1'签署交换请求,因此,Bob可以使用Alice的公钥A1来验证例如Alice正在进行交换请求。
在一些情况下,Bob可以用交换响应1003来回复交换请求1001。交换响应1003可以包括Bob的公钥B1、随机数N(在1001处接收),以及用Alice的第一钱包的公钥A1加密的Bob的第二钱包1004B的公钥B2。因此,只有Alice可以解密Bob的第二钱包1004B的公钥,因为只有Alice具有与她的第一钱包的公钥(即A1)配对的私钥A1'。同样,Bob可以用与他的第一钱包1004A的公钥(即B1)配对的私钥B1'签署交换响应1003。Bob可以使用由Alice使用的相同通信介质来发布或发送交换响应1003,以发送交换请求1001或发送到地址,例如,由Alice指示的通用资源定位符的地址。在一些情况下,Alice还可以向Bob发送用Bob的第一钱包1002A的公钥加密的Alice的第二钱包1002B的公钥A2,使得Bob可以私自识别Alice的第二钱包1002B的公钥A2。
一旦Alice接收到交换响应1003,她就可以在分布式数据库中发布用与她的第一钱包1002A对应的私钥A1'签名的转移命令1005。转移命令1005可以包括Alice的第一钱包1002A的公钥A1和Bob的第一钱包1004A的公钥B1、表示要转移的数字资产C的金额或值、随机数N和到期时间戳T。如以上所讨论的,时间戳T指示如果在T之前没有经由共识协议在分布式数据库中达到聚合,那么使转移命令1005被解除或无效的时间阈值。转移命令1005被配置为识别或确定第一记录或钱包1102A和第二记录或钱包1104A是否具有至少值C的数字资产。数字资产的值C可以是在执行转移命令1005时从源记录(例如,钱包1002A或1004A)中减去并且合计到目的地记录(例如,钱包1002B或1004B)的数值。转移命令1005还可以包括Alice的第二钱包1002B的公钥A2和Bob的第二钱包1004B的公钥B2。
Alice的第二钱包1002B的公钥A2和Bob的第二钱包1004B的公钥B2可以各自表示为字符串。每个字符串可以具有相关联的词典值。在发布转移命令1005之前,Alice可以将公钥A2和B2分类为字典顺序。在转移命令指示min(A2,B2)的情况下,Alice可以包括两个字符串中的最小值。因此,如果Alice确定串A2在字典顺序中位于B2的串之前,则Alice将在转移命令1005中包括A2(即,代替图10中指示min(A2,B2)的地方)。类似地,在发布转移命令1005之前,Alice可以将公钥A2和B2分类为字典顺序以找到两个字符串中的最大值。在转移命令指示max(A2,B2)的情况下,Alice可以包括两个字符串中的最大值。因此,如果Alice确定串B2在字典顺序中位于A2的串之后,则Alice将在转移命令1005中包括B2(即,代替图10中指示max(A2,B2)的地方)。换句话说,函数min和max执行它们作为参数接收到的公钥的字典顺序比较。因此,虽然A2和B2都将被包括在转移命令1005中,但是转移命令中的列表A2和B2的顺序将不基于与A2和B2相关联的钱包的所有权或关联。
因此,转移命令1005可以指示分布式数据库进行转移,使得可以从两个源记录中的每一个(例如,Alice的第一钱包1002A和Bob的第一钱包1002A)中扣除金额C的数字资产,并且可以将金额C的数字资产记入到两个目的地记录中的每一个(例如,Alice的第二钱包1002B和Bob的第二钱包1004B)。确定公钥A2和B2的最小值和最大值确保金额C的数字资产被转移到Alice的第二钱包1002B和Bob的第二钱包1004B中的每一个,同时隐藏目的地钱包1002B或1004B中的哪一个与源钱包1002A或1004A中的哪一个相关联(和/或目的地钱包1002B或1004B中的哪一个与Alice相关联以及哪个目的地钱包与Bob相关联)。由min和max函数给出的排序顺序与谁拥有每个钱包无关,因此向分布式数据库的其它成员或用户隐藏了该信息。因此,在Alice发布转移命令1005之后,分布式数据库的其它成员或用户最多可以推断Alice拥有正在向其转移金额C的数字资产的目的地钱包之一(即,1002B或1004B)但是不知道两个目的地钱包1002B或1004B中的哪一个实际上由Alice(或与由Alice表示的计算设备相关联的用户)拥有。换句话说,与和逻辑上与目的地记录(例如,1002B或1004B)相关的公钥(例如,A2或B2)配对的私钥(例如,A2'或B2')相关联的计算设备(例如,Alice或Bob)的身份被隐藏在包括Alice和Bob的计算设备集合中。
Bob可以发布与由Alice发布的转移命令1005对应和/或相同的转移命令1007,但是用与对应于Bob的第一钱包的私钥B1'签名。具体而言,Bob可以执行与Alice相同的排序(例如,公钥A2和B2的按字典顺序排序)以发布与Alice相同的事务。替代地,Alice可以仅将转移命令1005发送给Bob,然后Bob可以将单个转移命令1007与两个签名一起发布到分布式数据库。此后,如果两个签名都有效,那么一旦达成共识,分布式数据库就可以执行发布的转移命令。因此,在转移协议的一些实例中,可以将转移命令1005和1007两者发布到分布式数据库,而在其它实例中,只将转移命令1007连同两个签名一起发布到分布式数据库。
虽然上面讨论了Alice和Bob确定第二钱包的公钥A2和B2的最小值和最大值,但是在其它实现中,可以使用任何其它确定性排序来识别呈现与目的地记录相关联的公钥A2和B2的顺序。因此,Alice和Bob两者都可以执行以下操作:
S={A1,B1}
D=sortList({A2,B2})
发布/发送:Transfer2(S,D,C,N,T)
在一些其它情况下,Alice和Bob可以向第三方(例如,图10中未示出的Carol)发送消息,使得Carol代表Bob和/或Alice将转移命令发布到分布式数据库。在还有的一些其它情况下,第三方充当与Alice和Bob之间的匿名转移相关联的通信的中介。因此,当Alice和/或Bob使用第三方作为中介时,即使当与Alice和Bob对应的计算设备没有实现分布式数据库(或仅实现分布式数据库的子集和/或部分)时,他们的记录(即,钱包)也可以被包括在分布式数据库中并且它们的相关联的公钥可以被分布式数据库使用。在这种情况下,分布式数据库的另一个成员(例如,Carol)可以接收数据库操作的指示,例如,从Alice转移值C(指示数字资产的金额)的请求(类似于交换请求1001),并且Carol可以将该请求传递给Bob。然后,Bob可以通过经由Carol向Alice发送交换响应(类似于交换响应1003)来回复Alice。然后,Alice和Bob可以向Carol提供数据库操作的指示,诸如他们的转移命令(类似于转移命令1005和1007),并且Carol可以将所请求的数据库操作(例如,转移命令)发布到分布式数据库。
作为另一个示例,在一些情况下,与Alice对应的计算设备没有实现分布式数据库,但是,与Bob对应的计算设备确实实现分布式数据库。在这种情况下,Alice可以向Carol发送数据库操作的指示,并且Carol可以代表Alice将对应的转移命令发布到分布式数据库。换句话说,分布式数据库可以包括由没有实现分布式数据库的计算设备所拥有的记录(即,钱包),并且经由作为分布式数据库的成员和/或实现分布式数据库的第三方计算设备使用那些记录来执行转移协议。
作为又一个示例,在一些情况下,Alice和/或Bob可以实现和/或存储分布式数据库的一部分。具体而言,如果第三方计算设备(Carol)是分布式数据库的成员和/或实现和/或存储整个分布式数据库,那么Alice和/或Bob可以存储和/或维护Carol所存储的一部分。作为示例,Alice可以存储与她的公钥相关联的记录,但不存储与分布式数据库的其它用户相关联的记录。类似地,Bob可以存储与他的公钥相关联的记录,但不存储与分布式数据库的其它用户相关联的记录。在这种情况下,当Alice和Bob存储分布式数据库的一部分时,Carol可以充当Alice和Bob的代理来访问完全的分布式数据库。
在一些实现中,分布式数据库可以存储每个钱包的整数“池大小”,表示在其中隐藏给定钱包的钱包集合中的钱包的数量。因此,如果观察者只知道钱包X由N个不同成员中的一个拥有,那么N的池大小可以被附加到该钱包,从而指示它被匿名化的强烈程度。非匿名化的钱包(诸如1002A和1004A)可以具有1的池大小,因为所有者是已知的,因此观察者可以将身份缩小到仅仅1个个体的集合。如果协议已经针对这样的钱包被执行多次,那么其它钱包可能会更加匿名化。例如,如果观察者可以识别钱包A1由PA1个体之一拥有,并且B1由PB1个体之一拥有,那么整数PA1可以与A1相关联并且整数PB1可以与B1相关联。
在一些情况下,消息1001、1003、1005和/或1007中的一个或多个可以包括PA1和PB1。Alice和Bob可以使用PA1和PB1来决定是否继续数字资产的转移。例如,如果Alice已经执行了10次该处理,那么PA1可能是1024。如果Bob尚未执行该处理,那么PB1可能是1。因此,Alice可能拒绝与Bob执行协议,因为结果将只会略微增加她的匿名性,从在1024个钱包池中隐藏增加到在1025个钱包池中隐藏。而是,Alice可能更想用1024的池大小与钱包结合,使得单次迭代可以将PA1从1024增加到2048。在一些情况下,钱包可能与钱包集合而不是整数相关联。将是钱包集合使得观察者只能知道给定的成员拥有集合中的一个钱包,但不知道是哪一个。因此在后一个示例中,PA1将是1024个钱包的集合,并且PB1将是1024个钱包的集合。在协议完成之后,PA1将扩展为集合PA1和PB1的并集。Alice可能只同意与钱包结合,使得这个并集将比PA1大得多,因此她不会在仅将她的匿名性增加少量的处理上浪费时间。
在一些情况下,消息1001可以包括指示用于PB2的例如Alice将愿意接受的最小阈值的参数。因此,如果例如PB1低于该最小阈值,那么Alice可以决定不继续与Bob的交换。
在一些实现中,消息1001、1003、1005和/或1007中的一个或多个可以包括:(1)表示用户评论的串值;(2)当提交信息时的日期和时间;(3)将费用从用户的(一个或多个)钱包转到提交或发布消息或事务的计算设备的钱包的授权;(4)将费用从用户的钱包转到有助于计算设备互联网协议(IP)地址的匿名化的(一个或多个)计算设备(例如,TOR网络中的计算设备)的授权;和/或任何其它合适的元数据。
在其它实现中,转移命令可以用转移事务来实现,诸如:
TRANSFER2(S,W,R,D,N,T)
其中:
K=发送钱包的数量
S=具有公钥的发送钱包的列表{S1,S2,...,SK)
W=要从每个钱包{W1,W2,...,WK)中提取的币的数量或数字资产的金额
M=接收钱包的数量
R=具有公钥的接收钱包的列表{R1,R2,...,RM}
D=在每个钱包中存放的币的数量或数字资产的金额:{D1,D2,...,WM}
N=随机数
T=到期时间戳
其中要提取的币的数量或数字资产W的金额之和对应于要存放在每个钱包D中的币的数量或数字资产的金额之和,并且在S中存在与和公钥相关联的私钥的签名。单个事务TRANSFER2(S,W,R,D,N,T)可以包括由这样的私钥签名的附件。在一些情况下,可能存在多个相同的事务(具有相同的N),每个事务具有一个或多个签名,并且它们一起具有所需的签名。可以被包括在TRANSFER2命令中的其它参数可以包括(1)传送评论的串;(2)指示发布转移命令时的时间的日期/时间;(3)指示将费用从记录(即,钱包)转到用作第三方的计算设备的记录(即,钱包)以发布转移命令的授权的参数;以及其它合适的元数据。
在其它实现中,可以修改转移命令1005和1007以包括比图10中所示的参数更少的参数。例如,转移命令1005可以作为TRANSFER2(min(A2,B2),max(A2,B2),N,T)A1'发布到分布式数据库,并且转移命令1007可以作为TRANSFER2(N,T)B1'发布。在这种情况下,通过依赖随机数N的唯一性来减少由过多的参数消耗的带宽,随机数N唯一地识别与匿名转移相关联的一系列相关事务。
图11示出了通过重复应用参考图10讨论的转移协议以匿名化钱包之间的转移而产生的四级树结构。如以上所讨论的,在执行图10的转移协议的四个消息之后,钱包1002A和1004A中的币已经被转移到钱包1002B和1004B。分布式数据库的成员或用户可以从记录在分布式数据库中的事务的历史中推断出例如从Alice的第一钱包1101向或者Bob的第二钱包1104或者Alice的第二钱包1105执行了转移。同样地,可以推断出从Bob的第一钱包1103向或者Bob的第二钱包1104或者Alice的第二钱包1105执行了转移。因此,在树结构的级别1处,Alice的第二钱包1105在两个钱包(即,钱包1104和1105)的池中对分布式数据库的其它成员或用户隐藏。
在级别2处,Alice与Dave重复参考图10讨论的转移协议。Bob重复与Carol的转移协议。因此,在级别2处,从Alice的第二钱包1105向钱包1107或1109中的一个转移币的数量或数字资产的金额,并且Alice的钱包在四个钱包(即,钱包1107、1109、1111和1113)中对分布式数据库的其它成员或用户隐藏。Alice可以继续重复参考图10讨论的转移协议。在每个级别处,Alice的钱包都被隐藏在指数级增加的钱包池中。例如,在级别3处,Alice重复与Hank的转移协议,并且她的钱包1115被隐藏在八个钱包的池中。在级别4处,Alice重复与Oscar的转移协议,并且她的钱包1117被隐藏在十六个钱包的池中。在级别四十(图11中未显示),Alice的钱包被隐藏在超过一万亿钱包的池中。
图11中所示的转移协议可以类似地并行执行,如图12所示。例如,Alice可以与Bob、Dave、Hank和Oscar执行转移协议,使得转移可以同时或几乎同时执行。因此,Alice可以同时执行和/或发布在1201、1203、1205和1207处示出的转移协议的操作。如果在达到共识顺序时,被配置为转移金额C的数字资产的所有钱包都具有至少这些金额,那么所有转移被并行执行。如果被配置为转移金额C的数字资产的钱包中的至少一个没有这些金额,那么在1201、1203、1205和1207处示出的转移协议的一个或多个操作可以以“活动”状态被存储在分布式数据库中。因此,在1201、1203、1205和1207处示出的以“活动”状态存储的转移协议的操作可以在共识历史中的第一点处执行,在该点处,原先没有金额C的数字资产的钱包现在至少具有这些金额。
如以上所讨论的,发布到分布式数据库的转移命令可以包括指示到期时间的参数T。如果在执行1201、1203、1205和/或1207处示出的转移协议的操作之前达到时间T,那么这些操作被撤销而不被执行。如果在某一点处,在1201、1203、1205和/或1207处示出的转移协议的操作在分布式数据库中是“活动的”,正在等待钱包具有足够金额的数字资产(例如,金额C)以被执行,那么一旦将足够金额的数字资产放入这样的钱包中,在1201、1203、1205和/或1207处示出的转移协议的一个或多个操作就以其共识顺序被触发。在这种情况下,在1201、1203、1205和/或1207处示出的转移协议的操作的共识顺序可以是包括在这种转移协议的操作中的签名操作的最新共识顺序。因此,转移协议的操作可以被延迟或保持在“活动”状态,直到达到时间T。如果在时间T之前没有将用于执行处于“活动”状态的操作的足够金额的数字资产放置在记录中,则在1201、1203、1205和/或1207处示出的转移协议的操作被撤销。
在图12所示的示例中,Alice基本上并行并且基本上同时向分布式数据库发布在1201、1203、1205和1207中示出的转移协议的操作。一旦达到共识顺序并且在源记录或钱包在时间段T内具有至少金额C的数字资产之后,将执行这样的操作,如在发布的转移命令中所指定的。换句话说,如果与1201处的公钥(A1,B1)、1203处的(A2,D2)、1205处的(O4,A4)和1207处的(A3,H3)相关联的记录在时间段T内的任何点处与至少金额C的数字资产相关联,那么一旦公钥与金额C相关联,就执行转移协议的操作1201、1203、1205和1207。但是,如果与事务中涉及的公钥相关联的记录之一在时间段T内的某一点处不包括至少金额C的数字资产,那么该转移被取消(在时间段T到期之后),而任何其它事务仍将执行,只要与该事务的公钥相关联的记录在时间段T内的点处与金额C相关联即可。因此,在1201、1203、1205、1207处示出的转移协议的操作的执行可以基于源记录或钱包是否具有被配置为要转移的金额C,如果没有,那么源记录或钱包是否在时间T过去之前获得金额C的数字资产。这允许成员(例如,Alice)同时向分布式数据库发布多个连续事务,同时仍然允许事务串行执行。
例如,如果Alice基本上并行并且基本上同时向分布式数据库发布1201、1203、1205和1207中所示的转移协议的操作,但仅记录A1和B1在发布时包括金额C,那么将仅执行事务1201。这会将金额C转移到与A2和B2相关联的记录。如果与D2相关联的记录也在时间段T内获得金额C,那么将执行事务1203(因为与A2相关联的记录经事务1201接收到金额C)。类似地,然后,事务1207并且然后事务1205可以执行。因此,事务1201、1203、1205和1207可以各自同时发布到分布式数据库,但仍然基于在记录中接收到金额C的时间(在时间段T内)按连续顺序执行。
示例定理1:如果事件x在部分顺序中在事件y之前,那么在给定时间给定成员对其它成员的知识中,每个其它成员或者将接收到x在y之前的指示,或者还没有接收到y的指示。
证明:如果事件x在部分顺序中在事件y之前,那么x是y的祖先。当成员第一次接收到y的指示时,该成员或者已经早先接收到x的指示(在这种情况下,他们听到x在y之前),或者将是这种情况,即,同步为该成员提供x和y两者(在这种情况下,他们将在该同步期间听到x在y之前,因为在单次同步期间接收到的事件被认为是按照关于示例系统5所描述的与祖先关系一致的顺序接收到的)。QED
示例定理2:对于任何给定的散列图,如果x在部分顺序中在y之前,则x将在针对该散列图计算出的总顺序中在y之前。
证明:如果x在部分顺序中在y之前,则通过定理1:
对于所有的i,rank(i,x)<rank(i,y)
其中rank(i,x)是由成员i分配给事件x的排名,如果x是成员i接收到的第一事件,则其为1,如果是第二事件则为2,以此类推。令med(x)为所有i上的rank(i,x)的中值,并且对于med(y)也类似。
对于给定的k,选择i1和i2,使得rank(i1,x)是第k个最小的x排名,并且rank(i2,y)是第k个最小的y排名。然后:
rank(i1,x)<rank(i2,y)
这是因为rank(i2,y)大于或等于y排名的k,其中每一个严格地大于对应的x排名。因此,rank(i2,y)严格地大于至少k个x排名,因此严格大于第k个最小的x排名。这个论点适用于任何k。
令n是成员的数量(这是i值的数量)。那么n必须是奇数或偶数。如果n是奇数,则令k=(n+1)/2,并且第k个最小的排名将是中值。因此med(x)<med(y)。如果n是偶数,那么当k=n/2时,第k个最小的x排名将严格小于第k个最小y排名,并且第(k+1)个最小x排名将严格小于第(k+1)个最小y排名。因此两个x排名的平均值将小于两个y排名的平均值。因此,med(x)<med(y)。因此在这两种情况下,x排名的中值都严格小于y排名的中值。因此,如果总顺序通过按中值排名排序动作来定义,则x将在总顺序中在y之前。QED
示例定理3:如果“流言(gossip)时间段”是现有事件通过同步传播到所有成员的时间量,则:
在1个流言时间段之后:所有成员都接收到事件
在2个流言时间段之后:所有成员都同意这些事件的顺序
在3个流言时间段之后:所有成员都知道已达成一致性
在4个流言时间段之后:所有成员都从所有其它成员获得数字签名,从而认可这个共识顺序。
证明:令S0是由给定时间T0创建和/或定义的事件的集合。如果每个成员将最终无限次地经常与每个其它成员同步,那么以概率1最终会有时间T1,其中S0中的事件已经传播到每个成员,使得每个成员都知道所有事件。这是第一流言时间段的结束。令S1是在时间T1存在并且在T0尚不存在的事件集合。那么将以概率1最终存在时间T2,其中每个成员已接收到集合S1中的每个事件,其是在时间T1存在的那些事件。这是第二流言时间段的结束。类似地,T3是当S2中的所有事件,即到T2时存在但在T1之前不存在的那些事件,已传播到所有成员的时间。注意的是,每个流言时间段最终以概率1结束。平均而言,如果存在n个成员,则每个流言时间段将持续它执行log2(n)同步所花费的时间。
到时间T1时,每个成员将在S0中已经接收到每个事件。
到时间T2时,给定的成员Alice将已经接收到接收S0中的每个事件的每个其它成员的记录。因此,Alice可以为每个成员计算S0中每个动作的排名(这是该成员接收到该动作的顺序),并且然后按照排名的中值对事件进行排序。对于S0中的事件,结果产生的总顺序不会改变。这是因为结果产生的顺序是其中每个成员第一次接收到这些事件中的每个事件的指示的顺序的函数,这不会改变。有可能Alice计算出的顺序将有一些来自S1的事件穿插在S0事件中。这些S1事件可能仍然改变,其中它们落在S0事件的序列内。但S0中事件的相对顺序将不会改变。
到时间T3时,Alice将已经学习到S0和S1的联合的总顺序,并且该联合中的事件的相对顺序将不会改变。此外,她可以在这个序列中找到来自S1的最早事件,并且可以得出S1之前的事件的序列将不会改变,甚至在S0外部插入新事件也将不会改变的结论。因此,到时间T3时,Alice可以确定,对于在第一S1事件之前的历史中的事件的顺序已经达成共识。她可以对由以这个顺序发生的这些事件产生的(例如,由Alice定义的数据库状态变量所捕获的)状态的散列进行数字签名,并将签名作为她创建和/或定义的下一个事件的一部分发出。
到时间T4时,Alice将已经从其它成员接收到类似的签名。那时,她可以简单地保留签名列表连同它们所证实的状态,并且她可以丢弃她在第一S1事件之前已存储的事件。QED
本文描述的系统描述了快速且安全地实现共识的分布式数据库。这对许多应用来说可能是有用的构建块。例如,如果事务描述从一个加密货币钱包向另一个加密货币钱包转移加密货币,并且如果状态仅仅是每个钱包中当前金额的声明,那么该系统将构成避免现有系统中昂贵的工作证明的加密货币系统。自动规则实施允许这样添加在当前加密货币中不普遍的特征。例如,可以恢复丢失的币以避免通货紧缩,这是通过实施规则:即,如果钱包在某个时间段内既没有发送也没有接收加密货币,那么该钱包被删除,并且其值被分配给另一个现有的、与他们当前包含的金额成比例的钱包。以这种方式,即使钱包的私钥丢失,货币供应量也不会增长或减少。
另一个示例是分布式游戏,其就像在服务器上玩的大型多人在线(MMO)游戏,但是在不使用中央服务器的情况下实现。可以在没有任何中央服务器的控制之下就达成共识。
另一个示例是建立在这样的数据库之上的用于社交媒体的系统。由于事务是数字签名的,并且成员接收关于其它成员的信息,因此与当前系统相比,这提供了安全性和便利性优势。例如,由于电子邮件不能伪造返回地址,因此可以实现具有强大反垃圾邮件政策的电子邮件系统。这样的系统也可以成为统一的社交系统,在单个分布式数据库中组合当前通过电子邮件、推文、文本、论坛、维基和/或其它社交媒体完成的功能。
其它应用可以包括更复杂的密码功能,诸如组数字签名,其中整个组合作以签署合同或文件。这种以及其它形式的多方计算可以使用这样的分布式共识系统来实现。
另一个示例是公共记帐系统。任何人都可以支付以在系统中存储一些信息,每年每字节支付少量的加密货币(或现实世界货币)以在系统中存储信息。然后,这些资金可以被自动分发给存储该数据的成员,以及重复同步以工作来达成共识的成员。它可以在他们每次同步时自动向成员转移少量的加密货币。
这些示例显示分布式共识数据库作为许多应用的部件是有用的。由于数据库不使用昂贵的工作证明,而是可能使用更便宜的权益证明,因此数据库可以与运行在较小计算机或甚至移动和嵌入式设备上的全节点一起运行。
虽然以上作为包含两个先前事件的散列(一个自散列和一个外散列)的事件进行描述,但是在其它实施例中,成员可以与两个其它成员同步以创建和/或定义包含三个先前事件的散列(一个自散列和两个外散列)的事件。在还有的其它实施例中,来自任何数量的成员的先前事件的任何数量的事件散列可以被包括在事件内。在一些实施例中,不同的事件可以包括先前事件的不同数量的散列。例如,第一事件可以包括两个事件散列,并且第二事件可以包括三个事件散列。
虽然以上将事件描述为包括先前事件的散列(或密码散列值),但是在其它实施例中,事件可以被创建和/或定义为包括指针、标识符和/或任何其它合适的对先前事件的引用。例如,事件可以被创建和/或定义为包括与先前事件相关联和用于识别先前事件的序列号,从而链接事件。在一些实施例中,这样的序列号可以包括例如与创建和/或定义事件的成员相关联的标识符(例如,介质访问控制(MAC)地址、互联网协议(IP)地址、分配的地址等)和由该成员定义的事件的顺序。例如,具有10的标识符并且事件是由其创建和/或定义的第15个事件的成员可以为该事件分配1015的标识符。在其它实施例中,可以使用任何其它合适的格式来为事件分配标识符。
在其它实施例中,事件可以包含完整的密码散列,但是在同步期间仅传输那些散列的部分。例如,如果Alice向Bob发送包含散列H的事件,并且J是H的前3个字节,并且Alice确定她已存储的事件和散列,H是以J开头的唯一散列,则她可以在同步期间发送J而不是H。如果Bob然后确定他具有另一个以J开头的散列,则他可以回复Alice以请求完整的H。以这种方式,散列可以在传输期间被压缩。
虽然以上示出和描述的示例系统是参考其它系统描述的,但是在其它实施例中,可以实现示例系统及其相关联的功能的任何组合以创建和/或定义分布式数据库。例如,示例系统1、示例系统2和示例系统3可以被组合以创建和/或定义分布式数据库。又例如,在一些实施例中,示例系统10可以用示例系统1而没有示例系统9来实现。还例如,示例系统7可以与示例系统6组合和实现。在还有的其它实施例中,可以实现任何其它合适的示例系统的组合。
虽然以上已经描述了各种实施例,但是应该理解的是,它们仅作为示例给出,而不是限制。在上述方法指示某些事件按某种顺序发生的情况下,某些事件的排序可以被修改。此外,如果可能的话,事件中的某些事件可以在并行过程中同时执行,以及如上所述顺序地执行。
本文描述的一些实施例涉及具有非瞬态计算机可读介质(也可称为非瞬态处理器可读介质)的计算机存储产品,该非瞬态计算机可读介质具有其上用于执行各种计算机实现的操作的指令或计算机代码。计算机可读介质(或处理器可读介质)在其本身不包括瞬态传播信号(例如,在诸如空间或电缆的传输介质上携带信息的传播电磁波)的意义上是非瞬态的。介质和计算机代码(也可以称为代码)可以是为特定的一个或多个目的设计和构造的那些代码。非瞬态计算机可读介质的示例包括但不限于:磁存储介质,诸如硬盘、软盘和磁带;光存储介质,诸如紧凑盘/数字视频盘(CD/DVD)、紧凑盘只读存储器(CD-ROM)和全息设备;磁光存储介质,诸如光盘;载波信号处理模块;专门被配置为存储和执行程序代码的硬件设备,诸如专用集成电路(ASIC)、可编程逻辑器件(PLD)、只读存储器(ROM)和随机存取存储器(RAM)设备。本文描述的其它实施例涉及计算机程序产品,其可以包括例如本文讨论的指令和/或计算机代码。
计算机代码的示例包括但不限于微代码或微指令、诸如由编译器产生的机器指令、用于产生web服务的代码、以及包含由计算机使用解释器执行的更高级指令的文件。例如,可以使用命令式编程语言(例如,C、Fortran等)、函数式编程语言(Haskell、Erlang等)、逻辑编程语言(例如,Prolog)、面向对象的编程语言(例如,Java、C++等)或其它合适的编程语言和/或开发工具来实现实施例。计算机代码的附加示例包括但不限于控制信号、加密代码和压缩代码。
虽然以上已经描述了各种实施例,但是应该理解的是,它们仅作为示例而不是限制给出,并且可以进行形式和细节上的各种改变。本文所述的装置和/或方法的任何部分可以以除互相排斥的组合之外的任何组合进行组合。本文描述的实施例可以包括所描述的不同实施例的功能、部件和/或特征的各种组合和/或子组合。
Claims (27)
1.一种装置,包括:
第一计算设备处的分布式数据库的实例的一部分,所述第一计算设备被配置为被包括在多个计算设备内,所述多个计算设备经由可操作地耦合到所述多个计算设备的网络实现所述分布式数据库,所述分布式数据库包括逻辑上与和第一计算设备相关联的第一公钥相关的第一源记录以及逻辑上与和第一计算设备相关联的第二公钥相关的第一目的地记录;以及
所述第一计算设备的处理器,可操作地耦合到所述分布式数据库的实例的所述部分,所述处理器被配置为:
从第二计算设备接收(1)与第二计算设备相关联并且逻辑上与第二源记录相关的第一公钥,以及(1)与第二计算设备相关联并且逻辑上与第二目的地记录相关的第二公钥;
通过执行与第一计算设备相关联的第二公钥和与第二计算设备相关联的第二公钥之间的确定性排序来定义转移命令;以及
发送信号以向分布式数据库中发布所述转移命令,所述转移命令被配置为(1)基于所述确定性排序将值从第一源记录转移到第一目的地记录和第二目的地记录中的一个,以及(2)基于所述确定性排序将所述值从第二源记录转移到第一目的地记录和第二目的地记录中的另一个。
2.如权利要求1所述的装置,其中,所述确定性排序是按字典顺序的排序。
3.如权利要求1所述的装置,其中,所述处理器被配置为定义所述转移命令以包括时间阈值的指示,所述时间阈值调节当在所述时间阈值之前还没有经由共识协议达到所述分布式数据库的聚合时,使所述转移命令无效。
4.如权利要求1所述的装置,其中,所述处理器被配置为定义所述转移命令以包括所述值的指示。
5.如权利要求1所述的装置,其中,所述值对应于数字资产的金额。
6.如权利要求1所述的装置,其中,所述处理器被配置为在执行所述转移命令之前验证第一源记录和第二源记录均至少具有所述值。
7.如权利要求1所述的装置,其中,所述转移命令被用和与第一计算设备相关联的第一公钥配对的私钥以及和与第二计算设备相关联的第一公钥配对的私钥签名。
8.如权利要求1所述的装置,其中,所述处理器被配置为接收作为利用与第一计算设备相关联的第一公钥加密的加密公钥的、与第二计算设备相关联的第二公钥。
9.一种装置,包括:
计算设备处的分布式数据库的实例,所述计算设备被配置为被包括在多个计算设备内,所述多个计算设备经由可操作地耦合到所述多个计算设备的网络实现所述分布式数据库,所述分布式数据库包括逻辑上与第一公钥相关的第一源记录、逻辑上与第二公钥相关的第一目的地记录、逻辑上与第三公钥相关的第二源记录、以及逻辑上与第四公钥相关的第二目的地记录;以及
所述计算设备的处理器,可操作地耦合到所述分布式数据库的所述实例,
所述处理器被配置为:
接收包括转移命令的数据库操作的指示,所述转移命令用于(1)基于第二公钥和第四公钥的确定性排序将值从第一源记录转移到第一目的地记录和第二目的地记录中的一个,以及(2)基于所述确定性排序将所述值从第二源记录转移到第一目的地记录和第二目的地记录中的另一个,以及
在所述分布式数据库的所述实例处执行所述转移命令,使得所述值被从第一源记录和第二源记录中减去,并且所述值被加到第一目的地记录和第二目的地记录。
10.如权利要求9所述的装置,其中,所述计算设备是第一计算设备,
第一公钥与第二计算设备的第一私钥配对,第二公钥与第二计算设备的第二私钥配对,第三公钥与第三计算设备的第一私钥配对,并且第四公钥与第三计算设备的第二私钥配对。
11.如权利要求9所述的装置,其中,所述确定性排序是按字典顺序的排序。
12.如权利要求9所述的装置,其中,所述转移命令包括所述值的指示。
13.如权利要求9所述的装置,其中,所述值对应于数字资产的金额。
14.如权利要求9所述的装置,其中,所述转移命令包括时间阈值的指示,所述时间阈值调节当在所述时间阈值之前还没有经由共识协议达到所述分布式数据库的聚合时,使所述转移命令无效。
15.一种方法,包括:
在第一计算设备的处理器处并从多个计算设备中的第二计算设备接收第二计算设备的第一公钥以及被请求从逻辑上与第二计算设备的第一公钥相关的第一源记录转移的值的指示,所述第一计算设备具有分布式数据库的实例的一部分并且被配置为被包括在经由可操作地耦合到所述多个计算设备的网络实现所述分布式数据库的所述多个计算设备内,所述分布式数据库包括逻辑上与第一计算设备的第一公钥相关的第二源记录;
利用第二计算设备的第一公钥加密第一计算设备的第二公钥,以定义第二计算设备的经加密的第二公钥,第一计算设备的第二公钥逻辑上与第一目的地记录相关;
向第二计算设备发送第一计算设备的经加密的第二公钥;
通过执行第一计算设备的第二公钥与第二计算设备的第二公钥之间的确定性排序,定义包括第一计算设备的第一公钥、第二计算设备的第一公钥、第一计算设备的第二公钥和第二计算设备的第二公钥的转移命令,第二计算设备的第二公钥逻辑上与第二目的地记录相关;以及
发送信号以向分布式数据库中发布所述转移命令,所述转移命令被配置为(1)将所述值从第一源记录转移到第一目的地记录和第二目的地记录中的一个,以及(2)将所述值从第二源记录转移到第一目的地记录和第二目的地记录中的另一个。
16.如权利要求15所述的方法,其中,所述确定性排序是第一计算设备的第二公钥和第二计算设备的第二公钥之间的按字典顺序的排序。
17.如权利要求15所述的方法,其中,所述定义包括定义所述转移命令以包括时间阈值的指示,所述时间阈值调节当在所述时间阈值之前还没有经由共识协议达到所述分布式数据库的聚合时,使所述转移命令无效。
18.如权利要求15所述的方法,其中,所述定义包括定义所述转移命令以包括所述值的指示。
19.如权利要求15所述的方法,其中,所述值对应于数字资产的金额。
20.如权利要求15所述的方法,其中,所述转移命令在被执行之前被用和与第一计算设备相关联的第一公钥配对的私钥以及和与第二计算设备相关联的第一公钥配对的私钥签名。
21.一种存储代码的非瞬态处理器可读介质,所述代码表示要由处理器执行的指令,所述代码包括使处理器执行以下操作的代码:
在被配置为被包括在实现分布式数据库的多个计算设备内的第一计算设备处并从第二计算设备接收(1)与第二计算设备相关联并且逻辑上与第一目的地记录相关的第一公钥,以及(1)与第二计算设备相关联并且逻辑上与第一源记录相关的第二公钥;
通过执行与第一计算设备相关联的公钥和与第二计算设备相关联的第一公钥之间的确定性排序来定义转移命令,所述与第一计算设备相关联的公钥与第二目的地记录相关联;以及
发送信号以向分布式数据库中发布所述转移命令,所述转移命令被配置为(1)基于所述确定性排序将值从第一源记录转移到第一目的地记录和第二目的地记录中的一个,以及(2)基于所述确定性排序将所述值从第二源记录转移到第一目的地记录和第二目的地记录中的另一个。
22.如权利要求21所述的非瞬态处理器可读介质,其中,所述确定性排序是按字典顺序的排序。
23.如权利要求21所述的非瞬态处理器可读介质,其中,使处理器定义所述转移命令的代码包括使处理器定义所述转移命令以包括时间阈值的指示的代码,所述时间阈值调节当在所述时间阈值之前还没有经由共识协议达到所述分布式数据库的聚合时,使所述转移命令无效。
24.如权利要求21所述的非瞬态处理器可读介质,其中,所述代码还包括使处理器执行以下操作的代码:
在执行所述转移命令之前验证第一源记录和第二源记录均至少具有所述值。
25.如权利要求21所述的非瞬态处理器可读介质,其中,所述与第一计算设备相关联的公钥是与第一计算设备相关联的第一公钥,所述转移命令被用和与第一计算设备相关联的第二公钥配对的私钥以及和与第二计算设备相关联的第二公钥配对的私钥签名。
26.如权利要求21所述的非瞬态处理器可读介质,其中,所述与第一计算设备相关联的公钥是与第一计算设备相关联的第一公钥,使处理器接收与第二计算设备相关联的第一公钥的代码包括使处理器接收作为利用与第一计算设备相关联的第二公钥加密的加密公钥的、与第二计算设备相关联的第一公钥的代码。
27.如权利要求21所述的非瞬态处理器可读介质,其中,所述与第一计算设备相关联的公钥是与第一计算设备相关联的第一公钥,所述转移命令包括第一计算设备相关联的第一公钥、与第二计算设备相关联的第一公钥、与第一计算设备相关联的第二公钥、以及与第二计算设备相关联的第二公钥。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662420147P | 2016-11-10 | 2016-11-10 | |
US62/420,147 | 2016-11-10 | ||
PCT/US2017/061135 WO2018089815A1 (en) | 2016-11-10 | 2017-11-10 | Methods and apparatus for a distributed database including anonymous entries |
CN201780069585.4A CN109923536B (zh) | 2016-11-10 | 2017-11-10 | 用于包括匿名条目的分布式数据库的方法和装置 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780069585.4A Division CN109923536B (zh) | 2016-11-10 | 2017-11-10 | 用于包括匿名条目的分布式数据库的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117033488A true CN117033488A (zh) | 2023-11-10 |
Family
ID=62110079
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311013280.5A Pending CN117033488A (zh) | 2016-11-10 | 2017-11-10 | 用于包括匿名条目的分布式数据库的方法和装置 |
CN201780069585.4A Active CN109923536B (zh) | 2016-11-10 | 2017-11-10 | 用于包括匿名条目的分布式数据库的方法和装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780069585.4A Active CN109923536B (zh) | 2016-11-10 | 2017-11-10 | 用于包括匿名条目的分布式数据库的方法和装置 |
Country Status (13)
Country | Link |
---|---|
US (2) | US10887096B2 (zh) |
EP (2) | EP3539026B1 (zh) |
JP (2) | JP6966544B2 (zh) |
KR (1) | KR102443888B1 (zh) |
CN (2) | CN117033488A (zh) |
AU (2) | AU2017357770B2 (zh) |
CA (1) | CA3042255A1 (zh) |
LT (1) | LT3539026T (zh) |
PT (1) | PT3539026T (zh) |
RU (1) | RU2746446C2 (zh) |
SG (1) | SG11201903278YA (zh) |
SI (1) | SI3539026T1 (zh) |
WO (1) | WO2018089815A1 (zh) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9529923B1 (en) | 2015-08-28 | 2016-12-27 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US9390154B1 (en) | 2015-08-28 | 2016-07-12 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US10747753B2 (en) | 2015-08-28 | 2020-08-18 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
PT3539026T (pt) * | 2016-11-10 | 2022-03-08 | Swirlds Inc | Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas |
KR102433285B1 (ko) | 2016-12-19 | 2022-08-16 | 스월즈, 인크. | 이벤트들의 삭제를 가능하게 하는 분산 데이터베이스를 위한 방법 및 장치 |
CN107450979B (zh) * | 2017-03-28 | 2020-06-02 | 创新先进技术有限公司 | 一种区块链共识方法及装置 |
US11488144B2 (en) | 2017-06-20 | 2022-11-01 | nChain Holdings Limited | System and method of multi-round token distribution using a blockchain network |
KR102348418B1 (ko) | 2017-07-11 | 2022-01-07 | 스월즈, 인크. | 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치 |
US10425335B2 (en) * | 2017-09-19 | 2019-09-24 | Sap Se | Reconstructing message flows based on hash values |
CA3076257A1 (en) | 2017-11-01 | 2019-05-09 | Swirlds, Inc. | Methods and apparatus for efficiently implementing a fast-copyable database |
CN108416675A (zh) * | 2018-02-14 | 2018-08-17 | 阿里巴巴集团控股有限公司 | 资产管理方法及装置、电子设备 |
US11341467B2 (en) * | 2018-05-15 | 2022-05-24 | Comcast Cable Communications, Llc | Systems and methods for monitoring content consumption |
US10671370B2 (en) * | 2018-05-30 | 2020-06-02 | Red Hat, Inc. | Distributing file system states |
US10754693B2 (en) * | 2018-07-05 | 2020-08-25 | Vmware, Inc. | Secure transfer of control over computational entities in a distributed computing environment |
JP7389114B2 (ja) | 2018-10-23 | 2023-11-29 | ティーゼロ・アイピー,エルエルシー | 取引システムを実施するネットワークノードのサブセット内の文脈ベースのフィルタリング |
US11899817B2 (en) | 2019-01-31 | 2024-02-13 | Salesforce, Inc. | Systems, methods, and apparatuses for storing PII information via a metadata driven blockchain using distributed and decentralized storage for sensitive user information |
US11811769B2 (en) | 2019-01-31 | 2023-11-07 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative, metadata driven, cryptographically verifiable multi-network (multi-tenant) shared ledger |
US11824864B2 (en) | 2019-01-31 | 2023-11-21 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing a declarative and metadata driven blockchain platform using distributed ledger technology (DLT) |
US11803537B2 (en) * | 2019-01-31 | 2023-10-31 | Salesforce, Inc. | Systems, methods, and apparatuses for implementing an SQL query and filter mechanism for blockchain stored data using distributed ledger technology (DLT) |
EP3948573A1 (en) * | 2019-03-23 | 2022-02-09 | British Telecommunications public limited company | Distributed sequential transactional database selection |
WO2020193337A1 (en) * | 2019-03-23 | 2020-10-01 | British Telecommunications Public Limited Company | Configuring distributed sequential transactional databases |
WO2020212784A1 (en) | 2019-04-15 | 2020-10-22 | nChain Holdings Limited | Destination addressing associated with a distributed ledger |
US11995647B2 (en) | 2019-04-30 | 2024-05-28 | Salesforce, Inc. | System and method of providing interoperable distributed and decentralized ledgers using consensus on consensus and delegated consensus |
US11296867B2 (en) * | 2019-05-01 | 2022-04-05 | Intuit Inc. | Systems and methods for hash chain migration |
KR20220011161A (ko) | 2019-05-22 | 2022-01-27 | 스월즈, 인크. | 분산 데이터베이스에서 상태 증명들 및 원장 식별자들을 구현하기 위한 방법들 및 장치 |
CN110674110B (zh) * | 2019-09-09 | 2022-07-05 | 中国建设银行股份有限公司 | 银行分布式数据库的构建方法及装置 |
KR102097651B1 (ko) * | 2019-11-06 | 2020-04-06 | 주식회사엔클라우드 | 멀티캐스트를 이용한 암호화 영상 전송 장치 |
US12099997B1 (en) | 2020-01-31 | 2024-09-24 | Steven Mark Hoffberg | Tokenized fungible liabilities |
US11722589B2 (en) | 2020-04-08 | 2023-08-08 | Huawei Technologies Co., Ltd. | Rapid ledger consensus system and method for distributed wireless networks |
JP7016389B1 (ja) * | 2020-08-04 | 2022-02-04 | 株式会社三菱Ufj銀行 | システム及びプログラム |
CN111930847B (zh) * | 2020-09-16 | 2021-01-08 | 深圳壹账通智能科技有限公司 | 基于区块链的数据处理方法、装置及存储介质 |
JP2023544422A (ja) * | 2020-10-06 | 2023-10-23 | ヘデラ ハッシュグラフ,エルエルシー | ネットワーク内の分散データベースのための方法及び装置 |
US11756117B2 (en) * | 2021-07-20 | 2023-09-12 | Progrexion IP, Inc. | Electronic certification data structures for verifying resource integrity |
CN114844891B (zh) * | 2022-04-21 | 2024-04-12 | 浪潮云信息技术股份公司 | 基于Raft算法的区块链共识方法及系统 |
Family Cites Families (156)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4309569A (en) | 1979-09-05 | 1982-01-05 | The Board Of Trustees Of The Leland Stanford Junior University | Method of providing digital signatures |
US5701480A (en) | 1991-10-17 | 1997-12-23 | Digital Equipment Corporation | Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing |
JPH0798669A (ja) | 1993-08-05 | 1995-04-11 | Hitachi Ltd | 分散データベース管理システム |
US5495607A (en) | 1993-11-15 | 1996-02-27 | Conner Peripherals, Inc. | Network management system having virtual catalog overview of files distributively stored across network domain |
US6446092B1 (en) * | 1996-11-01 | 2002-09-03 | Peerdirect Company | Independent distributed database system |
US5991414A (en) | 1997-09-12 | 1999-11-23 | International Business Machines Corporation | Method and apparatus for the secure distributed storage and retrieval of information |
US6728713B1 (en) | 1999-03-30 | 2004-04-27 | Tivo, Inc. | Distributed database management system |
US6594328B1 (en) | 1999-07-28 | 2003-07-15 | Motorola, Inc. | Method and apparatus for facilitating an estimation of a carrier frequency error in a receiver of a wireless communication system |
AU6620000A (en) | 1999-08-06 | 2001-03-05 | Frank W Sudia | Blocked tree authorization and status systems |
US6754845B2 (en) | 2000-01-14 | 2004-06-22 | International Business Machines Corporation | Method of achieving optimistic multiple processor agreement in potentially asynchronous networks |
US6584476B1 (en) | 2000-04-22 | 2003-06-24 | Oracle Corp. | System and method for enforcing referential constraints between versioned database tables |
EP1152330A1 (en) | 2000-05-04 | 2001-11-07 | Carels Innovative Software, BVBA/SPRL | Process for automatically creating and controlling a set of graphical objects in a client server environment |
US6966836B1 (en) | 2000-11-16 | 2005-11-22 | Ea.Com, Inc. | Positive-return gambling |
US6931431B2 (en) | 2001-01-13 | 2005-08-16 | International Business Machines Corporation | Agreement and atomic broadcast in asynchronous networks |
US20020143800A1 (en) | 2001-01-24 | 2002-10-03 | Henrik Lindberg | Model view controller |
US7711122B2 (en) * | 2001-03-09 | 2010-05-04 | Arcot Systems, Inc. | Method and apparatus for cryptographic key storage wherein key servers are authenticated by possession and secure distribution of stored keys |
US7062490B2 (en) | 2001-03-26 | 2006-06-13 | Microsoft Corporation | Serverless distributed file system |
US7088821B2 (en) | 2001-05-03 | 2006-08-08 | Cheman Shaik | Absolute public key cryptographic system and method surviving private-key compromise with other advantages |
US8868467B2 (en) | 2002-10-23 | 2014-10-21 | Oleg Serebrennikov | Method for performing transactional communication using a universal transaction account identifier assigned to a customer |
JP2003202964A (ja) | 2002-01-09 | 2003-07-18 | Hitachi Ltd | 計算機システムの制御方法、計算機システム、記憶装置の制御方法及び記憶装置 |
US7146009B2 (en) * | 2002-02-05 | 2006-12-05 | Surety, Llc | Secure electronic messaging system requiring key retrieval for deriving decryption keys |
US7558883B1 (en) | 2002-06-28 | 2009-07-07 | Microsoft Corporation | Fast transaction commit |
RU2376635C2 (ru) | 2002-10-23 | 2009-12-20 | Закрытое акционерное общество "МедиаЛингва" | Способ и система проведения транзакций в сети с использованием сетевых идентификаторов |
US8311980B2 (en) | 2002-12-09 | 2012-11-13 | Hewlett-Packard Development Company, L.P. | Namespace consistency for a wide-area file system |
FI118619B (fi) * | 2003-05-16 | 2008-01-15 | Jarmo Talvitie | Menetelmä ja järjestelmä tiedon salaamiseksi ja tallentamiseksi |
US7873684B2 (en) | 2003-08-14 | 2011-01-18 | Oracle International Corporation | Automatic and dynamic provisioning of databases |
JP4189332B2 (ja) | 2004-01-30 | 2008-12-03 | 株式会社東芝 | データベース管理システム、データベース管理方法、データベース登録要求プログラムおよびデータベース管理プログラム |
US20090193260A1 (en) | 2004-02-06 | 2009-07-30 | Gentry Craig B | Method and apparatus for secure and small credits for verifiable service provider metering |
CA2469598A1 (en) | 2004-06-01 | 2005-12-01 | Daniel W. Onischuk | Computerized voting system |
US7844745B1 (en) | 2004-08-19 | 2010-11-30 | Nortel Networks Limited | Alternate home subscriber server (HSS) node to receive a request if a first HSS node cannot handle said request |
US7389314B2 (en) | 2004-08-30 | 2008-06-17 | Corio, Inc. | Database backup, refresh and cloning system and method |
US7590632B1 (en) | 2004-10-12 | 2009-09-15 | Sun Microsystems, Inc. | Method for serializer maintenance and coalescing |
US7555516B2 (en) | 2004-11-23 | 2009-06-30 | Microsoft Corporation | Fast Paxos recovery |
US7783664B2 (en) | 2004-12-17 | 2010-08-24 | Microsoft Corporation | Method and system for protecting the consistency of information in a distributed file system |
US9361311B2 (en) | 2005-01-12 | 2016-06-07 | Wandisco, Inc. | Distributed file system using consensus nodes |
US7890508B2 (en) | 2005-08-19 | 2011-02-15 | Microsoft Corporation | Database fragment cloning and management |
US7636704B2 (en) | 2005-08-26 | 2009-12-22 | Emc Corporation | Methods and apparatus for scheduling an action on a computer |
US8533169B1 (en) | 2005-09-21 | 2013-09-10 | Infoblox Inc. | Transactional replication |
US7797457B2 (en) | 2006-03-10 | 2010-09-14 | Microsoft Corporation | Leaderless byzantine consensus |
GB2446199A (en) * | 2006-12-01 | 2008-08-06 | David Irvine | Secure, decentralised and anonymous peer-to-peer network |
JP5211342B2 (ja) | 2007-01-12 | 2013-06-12 | 国立大学法人山梨大学 | 秘匿通信方法 |
US9104962B2 (en) | 2007-03-06 | 2015-08-11 | Trion Worlds, Inc. | Distributed network architecture for introducing dynamic content into a synthetic environment |
US20080256078A1 (en) * | 2007-04-10 | 2008-10-16 | Venkat Bhashyam | Secure distributed computing engine and database system |
US7899188B2 (en) | 2007-05-31 | 2011-03-01 | Motorola Mobility, Inc. | Method and system to authenticate a peer in a peer-to-peer network |
US8825743B2 (en) | 2007-07-12 | 2014-09-02 | Cornell University | Semantic transactions in online applications |
US7877331B2 (en) | 2007-09-06 | 2011-01-25 | King Fahd University Of Petroleum & Minerals | Token based new digital cash protocols with combined blind digital signature and pseudonym authentication |
US7849223B2 (en) | 2007-12-07 | 2010-12-07 | Microsoft Corporation | Virtually synchronous Paxos |
US8176497B2 (en) | 2008-01-16 | 2012-05-08 | Dell Products, Lp | Method to dynamically provision additional computer resources to handle peak database workloads |
US8370391B2 (en) | 2008-03-25 | 2013-02-05 | Microsoft Corporation | Functional updates for tree processing |
US8037279B2 (en) | 2008-06-12 | 2011-10-11 | Oracle America, Inc. | Method and system for cross-domain data sharing |
JP5407209B2 (ja) | 2008-07-28 | 2014-02-05 | 富士ゼロックス株式会社 | 文書管理装置、文書管理プログラム、及び文書管理システム |
CN101334797B (zh) | 2008-08-04 | 2010-06-02 | 中兴通讯股份有限公司 | 一种分布式文件系统及其数据块一致性管理的方法 |
US9253154B2 (en) | 2008-08-12 | 2016-02-02 | Mcafee, Inc. | Configuration management for a capture/registration system |
US8533582B2 (en) | 2009-03-20 | 2013-09-10 | Xerox Corporation | Trail-based data content discovery, organization, and processing |
US8713038B2 (en) | 2009-04-02 | 2014-04-29 | Pivotal Software, Inc. | Integrating map-reduce into a distributed relational database |
US8571519B2 (en) | 2009-05-07 | 2013-10-29 | Nokia Corporation | Method and apparatus for using pseudonyms |
CN103488680B (zh) | 2009-06-19 | 2017-09-29 | 国际商业机器公司 | 在数据库系统中计数项目的方法 |
JP5278219B2 (ja) | 2009-07-17 | 2013-09-04 | ヤマハ株式会社 | ハウリングキャンセラ |
GB0914815D0 (en) | 2009-08-25 | 2009-09-30 | Univ City | Improvements relating to database replication protocols |
EP2348450B1 (en) | 2009-12-18 | 2013-11-06 | CompuGroup Medical AG | Database system, computer system, and computer-readable storage medium for decrypting a data record |
US8356007B2 (en) | 2010-10-20 | 2013-01-15 | Microsoft Corporation | Distributed transaction management for database systems with multiversioning |
US8862617B2 (en) | 2010-02-09 | 2014-10-14 | Google Inc. | System and method for replicating objects in a distributed storage system |
US8380659B2 (en) | 2010-02-09 | 2013-02-19 | Google Inc. | Method and system for efficiently replicating data in non-relational databases |
US20130145426A1 (en) | 2010-03-12 | 2013-06-06 | Michael Wright | Web-Hosted Self-Managed Virtual Systems With Complex Rule-Based Content Access |
US20110250974A1 (en) | 2010-04-07 | 2011-10-13 | Gary Stephen Shuster | Simulated gaming using prior game outcome |
US8654650B1 (en) | 2010-04-30 | 2014-02-18 | Amazon Technologies, Inc. | System and method for determining node staleness in a distributed system |
JP5431261B2 (ja) | 2010-07-23 | 2014-03-05 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報管理システム、方法及びプログラム |
US8880486B2 (en) | 2010-07-27 | 2014-11-04 | Sap Ag | Distributed database system utilizing an extended two-phase-commit process |
US20140310243A1 (en) | 2010-08-16 | 2014-10-16 | Mr. Steven James McGee | Heart beacon cycle |
US8600944B2 (en) | 2010-09-24 | 2013-12-03 | Hitachi Data Systems Corporation | System and method for managing integrity in a distributed database |
US8818963B2 (en) | 2010-10-29 | 2014-08-26 | Microsoft Corporation | Halloween protection in a multi-version database system |
GB2499547B (en) | 2010-11-22 | 2020-04-22 | Ibm | Load balancing in distributed database |
CN103221924B (zh) | 2010-11-22 | 2016-03-30 | 日立数据系统工程英国有限公司 | 数据存储系统中的文件克隆和去克隆 |
US9805108B2 (en) | 2010-12-23 | 2017-10-31 | Mongodb, Inc. | Large distributed database clustering systems and methods |
EP2663891A4 (en) * | 2011-01-10 | 2017-07-19 | Storone Ltd. | Large scale storage system |
US8612386B2 (en) | 2011-02-11 | 2013-12-17 | Alcatel Lucent | Method and apparatus for peer-to-peer database synchronization in dynamic networks |
US8799247B2 (en) | 2011-02-11 | 2014-08-05 | Purdue Research Foundation | System and methods for ensuring integrity, authenticity, indemnity, and assured provenance for untrusted, outsourced, or cloud databases |
US8712975B2 (en) | 2011-03-08 | 2014-04-29 | Rackspace Us, Inc. | Modification of an object replica |
US8577873B2 (en) | 2011-03-30 | 2013-11-05 | Indian Statistical Institute | Determining a relative importance among ordered lists |
US8799248B2 (en) | 2011-04-26 | 2014-08-05 | Brian J. Bulkowski | Real-time transaction scheduling in a distributed database |
US8732140B2 (en) | 2011-05-24 | 2014-05-20 | Red Lambda, Inc. | Methods for storing files in a distributed environment |
EP2740055A4 (en) | 2011-08-01 | 2015-09-09 | Tagged Inc | SYSTEMS AND METHOD FOR ASYNCHRONOUS DISTRIBUTED DATABASE MANAGEMENT |
US20130110767A1 (en) | 2011-10-26 | 2013-05-02 | Nec Laboratories America, Inc. | Online Transaction Processing |
JP5701398B2 (ja) | 2011-11-16 | 2015-04-15 | 株式会社日立製作所 | 計算機システム、データ管理方法及びプログラム |
US9244717B2 (en) | 2012-03-29 | 2016-01-26 | Vmware, Inc. | Method and system for visualizing linked clone trees |
US9710501B2 (en) | 2012-03-30 | 2017-07-18 | Kinaxis Inc. | Enhanced performance for large versioned databases |
RU2510623C2 (ru) | 2012-04-19 | 2014-04-10 | Государственное казенное образовательное учреждение высшего профессионального образования Академия Федеральной службы охраны Российской Федерации (Академия ФСО России) | Способ репликации информации в распределенных базах данных с конкурентным распределением потоков |
US20150172412A1 (en) | 2012-07-06 | 2015-06-18 | Cornell University | Managing dependencies between operations in a distributed system |
CN102819585B (zh) | 2012-07-31 | 2015-04-22 | 北大方正集团有限公司 | 一种xml数据库文档控制方法 |
FR2995437B1 (fr) | 2012-09-07 | 2014-10-10 | Commissariat Energie Atomique | Dispositif de controle nucleaire pour reacteur refroidi au metal liquide de type rnr. |
US8775464B2 (en) | 2012-10-17 | 2014-07-08 | Brian J. Bulkowski | Method and system of mapreduce implementations on indexed datasets in a distributed database environment |
US9760596B2 (en) | 2013-05-13 | 2017-09-12 | Amazon Technologies, Inc. | Transaction ordering |
US8886601B1 (en) | 2013-06-20 | 2014-11-11 | Palantir Technologies, Inc. | System and method for incrementally replicating investigative analysis data |
US10354325B1 (en) * | 2013-06-28 | 2019-07-16 | Winklevoss Ip, Llc | Computer-generated graphical user interface |
WO2015008377A1 (ja) | 2013-07-19 | 2015-01-22 | 富士通株式会社 | 状態復元プログラム、装置、及び支援方法 |
US20150046337A1 (en) | 2013-08-06 | 2015-02-12 | Chin-hao Hu | Offline virtual currency transaction |
US9241044B2 (en) | 2013-08-28 | 2016-01-19 | Hola Networks, Ltd. | System and method for improving internet communication by using intermediate nodes |
US9251235B1 (en) | 2013-09-11 | 2016-02-02 | Amazon Technologies, Inc. | Log-based synchronization |
US9280591B1 (en) | 2013-09-20 | 2016-03-08 | Amazon Technologies, Inc. | Efficient replication of system transactions for read-only nodes of a distributed database |
RU2560810C2 (ru) | 2013-11-01 | 2015-08-20 | Илья Самуилович Рабинович | Способ и система защиты информации от несанкционированного использования (ее варианты) |
WO2015094329A1 (en) | 2013-12-20 | 2015-06-25 | Hitachi Data Systems Engineering UK Limited | System for queue based object cloning |
WO2015106248A1 (en) | 2014-01-13 | 2015-07-16 | Visa International Service Association | Efficient methods for protecting identity in authenticated transmissions |
WO2015108520A1 (en) | 2014-01-16 | 2015-07-23 | Hewlett-Packard Development Company, L. P. | Node cluster synchronization |
US20150244795A1 (en) | 2014-02-21 | 2015-08-27 | Solidfire, Inc. | Data syncing in a distributed system |
US9495478B2 (en) | 2014-03-31 | 2016-11-15 | Amazon Technologies, Inc. | Namespace management in distributed storage systems |
US9519510B2 (en) | 2014-03-31 | 2016-12-13 | Amazon Technologies, Inc. | Atomic writes for multiple-extent operations |
US10334037B2 (en) | 2014-03-31 | 2019-06-25 | Yaana Technologies, Inc. | Peer-to-peer rendezvous system for minimizing third party visibility and method thereof |
US11270298B2 (en) * | 2014-04-14 | 2022-03-08 | 21, Inc. | Digital currency mining circuitry |
US10419457B2 (en) | 2014-04-30 | 2019-09-17 | Hewlett Packard Enterprise Development Lp | Selecting from computing nodes for correlating events |
US9189342B1 (en) | 2014-05-29 | 2015-11-17 | Emc Corporation | Generic process for determining child to parent inheritance for fast provisioned or linked clone virtual machines |
US10111071B2 (en) | 2014-09-19 | 2018-10-23 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Bluetooth low energy automation mesh network |
US10025802B2 (en) | 2014-09-19 | 2018-07-17 | Amazon Technologies, Inc. | Automated configuration of log-coordinated storage groups |
WO2016053760A1 (en) * | 2014-09-30 | 2016-04-07 | Raistone, Inc. | Systems and methods for transferring digital assets using a de-centralized exchange |
EP3002661A1 (en) | 2014-09-30 | 2016-04-06 | Advanced Digital Broadcast S.A. | System and method for controlling a virtual input interface |
KR101544722B1 (ko) * | 2014-11-13 | 2015-08-18 | 주식회사 엘지씨엔에스 | 부인 방지 방법, 이를 위한 결제 관리 서버 및 사용자 단말기 |
US9842031B1 (en) | 2014-12-08 | 2017-12-12 | Amazon Technologies, Inc. | Incremental updates to user transaction state at read-only nodes of a distributed database |
US11012806B2 (en) | 2015-01-09 | 2021-05-18 | Ariba, Inc. | Multi-adapter support in the cloud |
WO2016123264A1 (en) | 2015-01-27 | 2016-08-04 | Visa International Service Association | Methods for secure credential provisioning |
US9967091B2 (en) * | 2015-02-12 | 2018-05-08 | Xerox Corporation | Method for enhancing security in distributed systems |
US20160328429A1 (en) | 2015-03-17 | 2016-11-10 | Cloudera, Inc. | Mutations in a column store |
US20160283920A1 (en) | 2015-03-28 | 2016-09-29 | Justin Fisher | Authentication and verification of digital data utilizing blockchain technology |
WO2016161073A1 (en) | 2015-03-31 | 2016-10-06 | Nasdaq, Inc. | Systems and methods of blockchain transaction recordation |
WO2016160416A1 (en) | 2015-04-01 | 2016-10-06 | Ab Inito Technology Llc | Processing database transactions in a distributed computing system |
US9568943B1 (en) | 2015-04-27 | 2017-02-14 | Amazon Technologies, Inc. | Clock-based distributed data resolution |
US10026082B2 (en) * | 2015-05-21 | 2018-07-17 | Mastercard International Incorporated | Method and system for linkage of blockchain-based assets to fiat currency accounts |
EP3317775B1 (en) * | 2015-07-02 | 2022-02-16 | Nasdaq, Inc. | Systems and methods of secure provenance for distributed transaction databases |
WO2017040313A1 (en) | 2015-08-28 | 2017-03-09 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US9390154B1 (en) * | 2015-08-28 | 2016-07-12 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US10747753B2 (en) | 2015-08-28 | 2020-08-18 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US9529923B1 (en) | 2015-08-28 | 2016-12-27 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US10303887B2 (en) | 2015-09-14 | 2019-05-28 | T0.Com, Inc. | Data verification methods and systems using a hash tree, such as a time-centric merkle hash tree |
US9836366B2 (en) | 2015-10-27 | 2017-12-05 | Netapp, Inc. | Third vote consensus in a cluster using shared storage devices |
US20170300550A1 (en) | 2015-11-02 | 2017-10-19 | StoreReduce | Data Cloning System and Process |
US20170180367A1 (en) | 2015-12-16 | 2017-06-22 | ClearChat, Inc. | System And Method For Encrypted And Authenticated Electronic Messaging Using A Central Address Book |
CN105681301B (zh) * | 2016-01-16 | 2019-03-12 | 杭州复杂美科技有限公司 | 区块链上的结算方法 |
US11423053B2 (en) | 2016-01-30 | 2022-08-23 | Micro Focus Llc | Log event cluster analytics management |
KR20190013729A (ko) | 2016-04-04 | 2019-02-11 | 포뮬루스 블랙 코포레이션 | 고속 시스템 상태 클로닝 |
CN106022917A (zh) * | 2016-05-08 | 2016-10-12 | 杭州复杂美科技有限公司 | 区块链撮合交易所方案 |
TW201810989A (zh) | 2016-05-18 | 2018-03-16 | 納格維遜股份有限公司 | 用以保護密碼指數的方法及系統 |
US9646029B1 (en) | 2016-06-02 | 2017-05-09 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
WO2018006072A1 (en) | 2016-06-30 | 2018-01-04 | Clause, Inc. | Systems and method for forming, storing, managing,and executing contracts |
US10396991B2 (en) | 2016-06-30 | 2019-08-27 | Microsoft Technology Licensing, Llc | Controlling verification of key-value stores |
US10956400B2 (en) | 2016-07-15 | 2021-03-23 | Sap Se | Query processing using primary data versioning and secondary data |
US10367637B2 (en) | 2016-07-22 | 2019-07-30 | Qualcomm Incorporated | Modular exponentiation with transparent side channel attack countermeasures |
US20180101777A1 (en) | 2016-10-12 | 2018-04-12 | Anuthep Benja-Athon | EM Oracle |
PT3539026T (pt) * | 2016-11-10 | 2022-03-08 | Swirlds Inc | Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas |
KR102433285B1 (ko) | 2016-12-19 | 2022-08-16 | 스월즈, 인크. | 이벤트들의 삭제를 가능하게 하는 분산 데이터베이스를 위한 방법 및 장치 |
EP3340084A1 (en) | 2016-12-22 | 2018-06-27 | Dassault Systèmes | Replica selection |
CN110445619B (zh) | 2017-03-30 | 2020-10-16 | 腾讯科技(深圳)有限公司 | 区块链系统、消息处理方法及存储介质 |
KR102348418B1 (ko) | 2017-07-11 | 2022-01-07 | 스월즈, 인크. | 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치 |
CA3076257A1 (en) | 2017-11-01 | 2019-05-09 | Swirlds, Inc. | Methods and apparatus for efficiently implementing a fast-copyable database |
US20210209885A1 (en) | 2018-05-23 | 2021-07-08 | Centiglobe Ab | A system and a method for achieving consensus between multiple parties on an event |
US11379515B2 (en) | 2018-07-09 | 2022-07-05 | Prescient Innovations Inc. | Media attribution systems and methods |
US11334439B2 (en) | 2018-08-29 | 2022-05-17 | International Business Machines Corporation | Checkpointing for increasing efficiency of a blockchain |
KR20220011161A (ko) | 2019-05-22 | 2022-01-27 | 스월즈, 인크. | 분산 데이터베이스에서 상태 증명들 및 원장 식별자들을 구현하기 위한 방법들 및 장치 |
JP2023544422A (ja) | 2020-10-06 | 2023-10-23 | ヘデラ ハッシュグラフ,エルエルシー | ネットワーク内の分散データベースのための方法及び装置 |
-
2017
- 2017-11-10 PT PT178705653T patent/PT3539026T/pt unknown
- 2017-11-10 AU AU2017357770A patent/AU2017357770B2/en not_active Ceased
- 2017-11-10 LT LTEPPCT/US2017/061135T patent/LT3539026T/lt unknown
- 2017-11-10 CN CN202311013280.5A patent/CN117033488A/zh active Pending
- 2017-11-10 WO PCT/US2017/061135 patent/WO2018089815A1/en unknown
- 2017-11-10 JP JP2019520639A patent/JP6966544B2/ja active Active
- 2017-11-10 KR KR1020197016554A patent/KR102443888B1/ko active IP Right Grant
- 2017-11-10 RU RU2019115233A patent/RU2746446C2/ru active
- 2017-11-10 CN CN201780069585.4A patent/CN109923536B/zh active Active
- 2017-11-10 EP EP17870565.3A patent/EP3539026B1/en active Active
- 2017-11-10 EP EP21212979.5A patent/EP4027251A1/en active Pending
- 2017-11-10 SG SG11201903278YA patent/SG11201903278YA/en unknown
- 2017-11-10 SI SI201731099T patent/SI3539026T1/sl unknown
- 2017-11-10 CA CA3042255A patent/CA3042255A1/en active Pending
-
2019
- 2019-05-07 US US16/405,069 patent/US10887096B2/en active Active
-
2021
- 2021-01-04 US US17/140,351 patent/US11677550B2/en active Active
- 2021-01-14 AU AU2021200222A patent/AU2021200222B2/en not_active Ceased
- 2021-10-21 JP JP2021172145A patent/JP7221355B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
RU2019115233A3 (zh) | 2020-11-17 |
AU2017357770A1 (en) | 2019-05-09 |
CN109923536A (zh) | 2019-06-21 |
KR20190079671A (ko) | 2019-07-05 |
LT3539026T (lt) | 2022-03-25 |
US11677550B2 (en) | 2023-06-13 |
SG11201903278YA (en) | 2019-05-30 |
EP3539026A4 (en) | 2020-06-24 |
US10887096B2 (en) | 2021-01-05 |
RU2019115233A (ru) | 2020-11-17 |
RU2021109425A3 (zh) | 2022-03-10 |
RU2021109425A (ru) | 2021-04-29 |
US20210126780A1 (en) | 2021-04-29 |
US20190268147A1 (en) | 2019-08-29 |
AU2017357770B2 (en) | 2020-12-24 |
CN109923536B (zh) | 2023-08-18 |
JP6966544B2 (ja) | 2021-11-17 |
PT3539026T (pt) | 2022-03-08 |
AU2021200222A1 (en) | 2021-03-18 |
JP2022020684A (ja) | 2022-02-01 |
CA3042255A1 (en) | 2018-05-17 |
RU2746446C2 (ru) | 2021-04-14 |
EP4027251A1 (en) | 2022-07-13 |
SI3539026T1 (sl) | 2022-05-31 |
AU2021200222B2 (en) | 2022-11-17 |
EP3539026B1 (en) | 2021-12-08 |
JP7221355B2 (ja) | 2023-02-13 |
EP3539026A1 (en) | 2019-09-18 |
KR102443888B1 (ko) | 2022-09-16 |
JP2020504916A (ja) | 2020-02-13 |
WO2018089815A1 (en) | 2018-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109923536B (zh) | 用于包括匿名条目的分布式数据库的方法和装置 | |
JP6745004B1 (ja) | ネットワーク内に分散データベースを効率的に実装するための方法及び機器 | |
RU2775263C2 (ru) | Способы и устройство для распределенной базы данных, содержащей анонимные входные данные | |
RU2775994C2 (ru) | Способы и устройство эффективной реализации распределенной базы данных в сети |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |