Method, apparatus, and computer storage medium for configuring cross-network communications in a blockchain
Technical Field
Embodiments of the present disclosure relate generally to the field of information technology and, in particular, to methods and apparatus for block chain cross-network communication.
Background
Blockchain is a decentralized, distributed accounting technique derived from bitcoin that generates persistent, non-modifiable records by time-wise stacking of encrypted blockchain data and stores the records in individual nodes of the blockchain network, such that the individual nodes participating in the blockchain collectively maintain a reliable database. Therefore, the blockchain has the technical advantages of decentralization, non-tampering, transparent and traceable process and the like, and is considered to have wide application prospects in numerous fields such as finance, credit investigation, internet of things, economic trade settlement, asset management and the like.
Currently, cloud-based Blockchain as a Service (BaaS) becomes an application hotspot of the Blockchain technology. A user (e.g., each enterprise) sets a BaaS platform provided by a BaaS service provider, so that the user creates a corresponding virtual machine instance on a cloud and installs and deploys a multi-node blockchain network, thereby obtaining a blockchain meeting the application requirements of the user, and efficiently developing a blockchain service. The BaaS platform not only reduces the difficulty and cost of installing, configuring, managing and using the block chain, but also can provide personalized service for users. However, BaaS service providers lack support for deploying blockchain nodes within a private network and cannot implement efficient inter-blockchain node-to-node communication across private networks.
In view of the above, it is desirable to provide a solution for block-linked point communication across private networks that is transparent, secure and reliable in the open.
Disclosure of Invention
In general, embodiments of the present disclosure propose methods and apparatus for block chain cross-network communication.
In a first aspect of the disclosure, a method is provided for configuring block chain cross-network communications. The method comprises the following steps: receiving a connection request to a BaaS server from a block chain node device at the BaaS server, wherein the connection request comprises information indicating a first node identifier and a block chain identifier of a block chain node; determining first network configuration information associated with the block-node device based on the connection request, the first network configuration information including a public network address and a public network port number; and sending a network configuration message to the block link node based on the public network address and the public network port number, wherein the network configuration message comprises: a node identification for each of the one or more blockchain nodes having the same blockchain identification, and network configuration information associated with the one or more blockchain nodes.
In a second aspect of the disclosure, a method for cross-node communication in a blockchain is provided. The method comprises the following steps: sending a request for connecting with a BaaS server to the BaaS server at a block chain node point device, wherein the request comprises an identifier of a block chain where the block chain node point device is located; recording the port of the block chain link point device used for sending the request; and monitoring the port to receive a network configuration message of other blockchain nodes with the blockchain identifier from the BaaS server, wherein the network configuration message comprises the node identifiers of the other blockchain nodes, a public network address and a public network port number, and is used for sending data directed to the blockchain nodes with the node identifiers to the public network address and the public network port number.
In a third aspect of the present disclosure, a BaaS server is provided. The BaaS server comprises: at least one processor; at least one memory coupled to the at least one processing unit and storing instructions for execution by the at least one processing unit, the instructions when executed by the at least one processing unit, cause the apparatus to perform acts comprising: receiving a connection request to a BaaS server from a block chain node device at the BaaS server, wherein the connection request comprises information indicating a first node identifier and a block chain identifier of a block chain node; determining first network configuration information associated with the block-node device based on the connection request, the first network configuration information including a public network address and a public network port number; and sending a network configuration message to the block link node based on the public network address and the public network port number, wherein the network configuration message comprises: a node identification for each of the one or more blockchain nodes having the same blockchain identification, and network configuration information associated with the one or more blockchain nodes.
In a fourth aspect of the present disclosure, a block link point apparatus is provided. The node device includes: at least one processor; at least one memory coupled to the at least one processing unit and storing instructions for execution by the at least one processing unit, the instructions when executed by the at least one processing unit, cause the apparatus to perform acts comprising: sending a request for connecting with a BaaS server to the BaaS server at a block chain node point device, wherein the request comprises an identifier of a block chain where the block chain node point device is located; recording the port of the block chain link point device used for sending the request; and monitoring the port to receive a network configuration message of other blockchain nodes with the blockchain identifier from the BaaS server, wherein the network configuration message comprises the node identifiers of the other blockchain nodes, a public network address and a public network port number, and is used for sending data directed to the blockchain nodes with the node identifiers to the public network address and the public network port number.
According to a fifth aspect of the present invention, there is provided a computer readable storage medium having computer readable program instructions stored thereon for performing the methods described in accordance with the first and second aspects of the present disclosure.
Drawings
The above and other features, advantages and aspects of various embodiments of the present disclosure will become more apparent by referring to the following detailed description when taken in conjunction with the accompanying drawings. In the drawings, like or similar reference characters designate like or similar elements, and wherein:
fig. 1 shows a schematic diagram of a BaaS platform system architecture;
FIG. 2 shows a schematic diagram of an environment for configuring blockchain nodes in a private network;
fig. 3 shows a flow diagram of a method of configuring a blockchain for a blockchain nexus device in a private network in accordance with an embodiment of the present disclosure;
fig. 4 illustrates a flow diagram of a method for configuring cross-private network communication in a blockchain in accordance with an embodiment of the present disclosure;
FIG. 5 shows a schematic diagram of an architecture for communicating across a private network, according to an embodiment of the present disclosure;
fig. 6 shows a flow diagram of a method for configuring cross-private network communication in a blockchain according to yet another embodiment of the present disclosure;
fig. 7 illustrates a flow diagram of a method for cross-private network communication in a blockchain in accordance with an embodiment of the present disclosure; and
fig. 8 shows a block diagram of an apparatus according to an embodiment of the present disclosure.
Detailed Description
Embodiments of the present disclosure will now be described in detail with reference to the accompanying drawings. It should be noted that the same reference numerals may be used in the drawings for similar components or functional elements. The accompanying drawings are only intended to illustrate embodiments of the present disclosure. Alternative embodiments will become apparent to those skilled in the art from the following description without departing from the spirit and scope of the disclosure.
As used herein, the term "include" and its various variants are to be understood as open-ended terms, which mean "including, but not limited to. The term "based on" may be understood as "based at least in part on". The term "one embodiment" may be understood as "at least one embodiment". The term "another embodiment" may be understood as "at least one other embodiment".
As mentioned above, because the technology threshold of the blockchain is high, and the installation, configuration, management and maintenance of the blockchain are complex, many companies have developed a cloud-based blockchain as a service (BaaS) platform to help enterprises reduce the difficulty and cost of using the blockchain. Enterprises using the block chains only need to set relevant parameters on the BaaS platform according to own requirements, the BaaS platform can create corresponding virtual machine instances on the cloud within several minutes, and a multi-borrow-point block chain is installed and deployed. Therefore, enterprises do not need to pay attention to various technical details of the block chain, and only need to pay attention to the business developed in the block chain.
Fig. 1 shows a schematic architecture diagram of a BaaS platform system 100. As shown, the BaaS platform system 100 is based on a cloud 110, which includes a BaaS platform 120, a plurality of blockchain networks 130, 140, 150, and schematically illustrated storage 170 and blockchain users 160. The BaaS platform 120 may provide public, federation, or private chain services to the user 160, and also act as a portal to the user 160. The BaaS platform 120 also provides various functions such as data management and data analysis, for example, to meet user-specific role and industry requirements. The storage 170 is used to store various configuration data, user information, log data, and the like of the BaaS platform system 100.
Blockchain networks 130, 140, and 150 may be user-specific, each including several blockchain nodes. In a cloud application environment, each tile chain node may correspond to a virtual machine instance in which a corresponding node application is running. Each blockchain network has corresponding blockchain applications, such as various applications in the fields of finance, credit investigation, internet of things, economic trade settlement, asset management, and the like.
It should be noted that although the blockchain networks 130, 140, 150 are illustrated as being independent of each other, each blockchain network may also include a common blockchain link point. For example, a certain blockchain node may belong to both blockchain network 130 and blockchain network 140. In addition, the number of blockchain networks, users, and storage devices in the figure is merely illustrative and may be any number.
In the prior art, cloud hosts created based on the BaaS platform shown in fig. 1 all have a public network IP, but there is the following enterprise application scenario: host nodes in the enterprise private networks are connected by private lines to form a federation chain. Nodes need to be located in private networks because nodes exposed on the public network are more vulnerable to hackers, affecting the security of data on the blockchain. However, there is no method for effectively deploying blockchain nodes in a private network in the prior art, and there is no method for transparent and secure communication of blockchains across private networks.
In view of the above, the present disclosure proposes a scheme for cross-network communication in block chains. The method utilizes a client to realize BaaS-based block link point configuration, utilizes a system intelligent contract in a block chain to establish communication with a BaaS server, and acquires information of public network addresses and ports corresponding to other nodes from the BaaS server to realize transparent and safe inter-block chain private network communication.
First, a process of deploying a blockchain in a blockchain linked point device in a private network is described with reference to fig. 2 and 3, in particular, fig. 2 shows a schematic diagram of an environment 200 for configuring blockchain nodes in a private network, and fig. 3 shows a flowchart of a method 300 of deploying a blockchain in a blockchain linked point device in a private network according to an embodiment of the present disclosure.
Referring to fig. 2, an environment 200 may include a BaaS server 210 and a plurality of private networks 220 and 240. The private network 220 includes a plurality of blockchain node devices 222 and 224. A plurality of blockchain node devices 242 and 244 are included in the private network 240. Clients 226, 228, 246, and 248 are installed on each of the plurality of blockchain node devices 222, 224, 242, and 244. Based on such an environment 200, a method 300 of block chain deployment for block chain link point devices in a private network is shown in fig. 3.
At block 302, client software is installed at the block-link point device. In some embodiments, an installer may download client software from the BaaS server and perform the installation. For security, a dedicated account may be created on the blockchain endpoint device to perform blockchain services, the account having only read and write access to a specific way, which does not allow software to be installed or system configuration to be modified.
At block 304, a validation identity is obtained from the BaaS server. In some embodiments, the authentication identity may be a token (token). The BaaS server dynamically generates tokens corresponding to the client software, and each token can have a certain time efficiency.
At block 306, a connection is established with the BaaS server based on the validation identity. In some embodiments, the authentication identifier obtained from the BaaS server is input in the client software, and a connection with the BaaS server is established. When an installer inputs the token obtained from the BaaS server into the client software, the client software sends an authentication request to the BaaS server, the BaaS server can verify the token, and after the verification is passed, the client software establishes connection with the BaaS server. In some embodiments, the verification further includes an aging verification of the token, and when the token exceeds the aging, the installer needs to obtain a new token from the BaaS server again to perform the installation task.
At block 308, a deployment instruction is received from the BaaS server to complete deployment of the joining blockchain according to the instruction. In this step, the BaaS server sends a deployment instruction to the blockchain node device, where the instruction may cause the deployment of the blockchain service on the blockchain node device to be completed. After deployment is complete, the BaaS server may also assign a specific blockchain identity to the blockchain system, which will be referred to as an important parameter for communication across private networks as described later.
In some embodiments, an installer may shut down client software after completion of blockchain deployment to prevent potential system risks. Furthermore, the code of the client software may be open to the public to avoid user concerns about backdoor programs.
Based on the configuration process described in fig. 3, environment 200 may form a blockchain across a private network, which may include a plurality of blockchain node devices 222, 224, 242, and 244. Block- link point devices 222 and 224 are located in private network 220 and block- link point devices 242 and 244 are located in private network 240.
Based on the blockchain configured across the private network, a method of communicating nodes across the private network in the blockchain according to an embodiment of the present disclosure will be described below in conjunction with fig. 4 to 7. In particular, fig. 4 shows a flow diagram of a method 400 for configuring cross-private network communication in a blockchain in accordance with an embodiment of the present disclosure; fig. 5 shows a schematic diagram of an architecture 500 for communicating across a private network, according to an embodiment of the disclosure; fig. 6 illustrates a flow diagram of a method 600 for configuring cross-private network communication in a blockchain in accordance with yet another embodiment of the present disclosure; fig. 7 shows a flow diagram of a method 700 for cross-private network communication in a blockchain in accordance with an embodiment of the present disclosure.
Referring first to fig. 4, the method shown in fig. 4 may be performed by a BaaS server, where a connection request to the BaaS server is received at the BaaS server from a blockchain node device, the connection request including information indicating a first node identification and a blockchain identification of a blockchain node, at block 402.
Taking as an example the architecture 500 shown in fig. 5, the architecture includes a BaaS server 510, and two private networks 520 and 540. One or more blockchain node devices may be included in each private network, for example, only one blockchain node device is shown in private networks 520 and 540, respectively. Upon initiation of the block link point 1524, the system contract 530 may send a connection request to the BaaS server. In some embodiments, the request may include an identification of the blockchain in which the blockchain link point 1524 is located ("first blockchain"), and an identification of the node of the blockchain link point 1524 ("first node"). In some embodiments, the request may also include a token obtained from the BaaS server.
At block 404, the BaaS server determines first network configuration information associated with the block-node device, the first network configuration information including a public network address and a public network port number. In some embodiments, based on the connection request received from smart contract 530, BaaS server 510 may determine the public network address, IP, of the connection request1And the public network port 528 that it uses.
In some embodiments, when the BaaS server determines that the block-linked point 1524 is a first connection, the node identification ("first node"), the block chain identification ("first block chain"), and the public network address IP of the block-linked point 1524 may be identified1And the public network port 528 that it uses are stored in the network configuration information set 512.
At block 406, based on the public network address and the public network port number, the BaaS server sends a network configuration message to the block link node, where the network configuration message includes: a node identification for each of the one or more blockchain nodes having the same blockchain identification, and network configuration information associated with the one or more blockchain nodes.
Specifically, in this example, BaaS server 510 may send network configuration information associated with block-link point 2544 to block-link point 1524, since block-link node 2544 has the same block-link identification ("first block-link") as block-link point 1524. In some embodiments, the network configuration information is also stored in the network configuration information set, and the BaaS server may obtain the network configuration information associated with the blockchain node 2544 using the blockchain identifier ("first blockchain") as a query entry. In this example, BaaS server 510 may send a node identification of blockchain node 2524 ("second blockchain") to blockchain point 1524, a public network address IP of blockchain point 25242And its public network port 548.
In another embodiment, the process of sending configuration information to the block nodes in block 406 may be as shown in fig. 6. At block 602, the BaaS server may obtain a first node identification and first network configuration information. The BaaS server then determines whether the first node identification is present in the network configuration information set at block 604. Specifically, as described previously, BaaS server 510 may query in the network configuration information set using the received node identification of block chain node 1524 ("first node") as an entry.
If it is determined in block 604 that the network configuration information set does not existThe node identification, the method 600 proceeds to block 606 where the first node identification and the first network configuration information are stored in a network configuration information set. In particular, BaaS server 510, in response to the absence of a node identification of blockchain node 1524 ("first node") in the network configuration information set, may identify a node identification of blockchain node 1524 ("first node"), a blockchain identification ("first blockchain"), a public network address IP ("public network address"), and/or the like1And the public network port 528 that it uses are stored in the network configuration information set 512. The BaaS server may then send a network configuration message to all of the blockchain nodes having the blockchain identification, thereby updating the network configuration information in each blockchain node, at block 612.
In some embodiments, the BaaS server may also periodically broadcast the network configuration information stored in the network configuration information set to all the blockchain nodes, so that each blockchain node can obtain the latest network configuration information.
If it is determined in block 604 that the node identification exists in the network configuration information set, the method 600 proceeds to block 608 where the BaaS server determines whether the received first network configuration information is consistent with second network configuration information stored in the network configuration set, the second network configuration information being associated with the first node identification. Specifically, the BaaS server 510 may determine whether the received network configuration information related to the tile link point 1524 is consistent with the network configuration information stored in the network configuration information set 512, so as to determine whether the network configuration information set needs to be updated.
If it is determined in block 608 that the first network configuration information is inconsistent with the second network configuration information, the method 600 proceeds to block 610, where the BaaS server updates the second network configuration information, which is centrally stored in the network configuration information, to the first network configuration information. The BaaS server may then send a network configuration message to all of the blockchain nodes having the blockchain identification, thereby updating the network configuration information in each blockchain node, at block 612.
If it is determined in block 608 that the first network configuration information is consistent with the second network configuration information, the method 600 proceeds to block 612, i.e., without adjusting the set of network configuration information. At this time, the BaaS server may send the network configuration message to all the blockchain nodes having the blockchain identifier as needed, so as to update the network configuration information in each blockchain node.
The method for configuring inter-network communication in a block chain described above from the BaaS server side is described below with reference to fig. 7 from the block chain link point side based on the communication configuration performed by the BaaS server 700. The method 700 may be performed by a block-link point device or an intelligent contract on a block-link point device.
At block 702, a request to connect with a BaaS server is sent at a block-linked point device to the BaaS server, the request including an identification of a block chain in which the block-linked point device is located. When a block link point 1524 in the block link point device 1522 is activated, it will automatically install the system intelligence contract 530. The system intelligent contract is different from the user intelligent contract, wherein the user intelligent contract needs to be operated in a docker container and needs to be installed and triggered by a user after the blockchain system normally operates. However, before the cross-node communication is built, the blockchain system cannot operate normally, and thus the user intelligent contracts cannot be used to implement communication between cross-private networks. A system intelligence contract is another form of intelligence contract that completes initialization as blockchain nodes are started. The system intelligent contracts do not need to run in a docker container, and can run in node processes.
Specifically, in this example, the system contract 530 sends a link request to the BaaS server 510 during block link point 1530 initialization. The connection request may include an identification of the blockchain in which blockchain node device 1524 is located, e.g., as "first blockchain". In some embodiments, the connection request may also include an identification of the blockchain node, e.g., as the "first node".
At block 704, the system intelligence contract may record the port of the block-link node device used to send the request. Specifically, as shown in fig. 5, the local port 526 of the block-link node device 1522 is the local port used for connecting the BaaS server. The system intelligence contract may further modify the port number that the blockchain service listens to so that the blockchain service multiplexes local ports 526.
At block 706, the system intelligence contract may listen to the port to receive network configuration messages from the BaaS server for other blockchain nodes with blockchain identifications. Specifically, the network configuration message includes the node identifier, the public network address and the public network port number of the other blockchain node. Taking the architecture 500 shown in FIG. 5 as an example, the system intelligence contract 1530 may receive the block link point identifier (e.g., "second node") of the block link point 2544 and the public network address IP used by the block link point2And the used public network port 548.
In some embodiments, the system intelligence contract may also periodically receive broadcast messages from the BaaS server through the port, which may include network configuration information for other blockchain nodes having the same blockchain identification, thereby updating locally stored network configuration information associated with the other nodes.
In some embodiments, based on the obtained network configuration information, the system intelligence contract may, for example, modify a domain name resolution file to resolve a block link point identification ("second node") of block link point 2544 to the received public network address IP2And modifies the port serviced by block link point 2544 to be public network port 548. Based on such a configuration, data to be directed to block link point 2544 can be sent to the public network address IP2And a public network port number 548. When the private network 540 receives the data, the received data will be forwarded to the corresponding private port 546 based on the mapping between public network port-private network port stored by the Network Address Translation (NAT) mechanism, thereby enabling node communication across private networks.
Based on a similar process, the system intelligence contract 550 for block-linked point 2544 can also obtain the public network address IP for block-linked point 15241And a public network port 528, the system intelligence contract 550 may resolve the block link point identification ("first node") of block link point 2544 as connectedReceiving public network address IP1And modifies the port serviced by block-link node 1524 to public network port 528, thereby enabling communication across the private network between block-link node 1524 and block-link node 544.
FIG. 8 illustrates a schematic block diagram of an electronic device 800 that may be used to implement embodiments of the present disclosure. It should be understood that the electronic device 800 may be used to implement the BaaS server or the block-link point device described in fig. 5, or the electronic device 800 may also be used to implement any one of the modules of the BaaS server or the block-link point device described in fig. 5. As shown in fig. 8, device 800 includes a Central Processing Unit (CPU)801 (e.g., a processor) that may perform various appropriate actions and processes in accordance with computer program instructions stored in a Read Only Memory (ROM)802 or loaded from a storage unit 808 into a Random Access Memory (RAM) 803. In the RAM 803, various programs and data required for the operation of the device 800 can also be stored. The CPU 801, ROM 802, and RAM 803 are connected to each other via a bus 804. An input/output (I/O) interface 805 is also connected to bus 804.
A number of components in the device 800 are connected to the I/O interface 805, including: an input unit 806, such as a keyboard, a mouse, or the like; an output unit 807 such as various types of displays, speakers, and the like; a storage unit 808, such as a magnetic disk, optical disk, or the like; and a communication unit 809 such as a network card, modem, wireless communication transceiver, etc. The communication unit 809 allows the device 800 to exchange information/data with other devices via a computer network such as the internet and/or various telecommunication networks.
Various methods or processes described above, such as methods 300, 400, 600, or method 700, may be performed by the processing unit 801. For example, in some embodiments, the method 300, 400, 600 or the method 700 may be implemented as a computer software program tangibly embodied in a machine-readable medium, such as the storage unit 808. In some embodiments, part or all of the computer program can be loaded and/or installed onto device 800 via ROM 802 and/or communications unit 809. When loaded into RAM 803 and executed by CPU 801, a computer program may perform one or more of the acts or steps of methods 300, 400, 600 or 700 described above.
The block link point system state monitoring scheme based on the intelligent contract provided by the embodiment of the disclosure has many advantages. One is that the monitoring scheme is easy to implement. The intelligent contracts are mechanisms supported by the blockchain itself, and thus do not require additional development of a separate system monitoring agent service. Secondly, the monitoring scheme is safe and reliable. The method has the advantages of being transparent and non-falsifiable by using the state monitoring intelligent contract, ensures the privacy and safety of user data, and is easy to obtain the support and approval of the user. In addition, the scheme also ensures the original safety of the block link points, and does not cause additional safety risks. In addition, the monitoring scheme is convenient to upgrade and maintain. The functions of service software upgrading and intelligent contract upgrading of the blockchain platform can be multiplexed, so that an upgrading scheme does not need to be specially developed for the state monitoring system.
In general, the various example embodiments of this disclosure may be implemented in hardware or special purpose circuits, software, firmware, logic or any combination thereof. Certain aspects may be implemented in hardware, while other aspects may be implemented in firmware or software which may be executed by a controller, microprocessor or other computing device. While aspects of embodiments of the disclosure have been illustrated or described as block diagrams, flow charts, or using some other pictorial representation, it is well understood that the blocks, apparatus, systems, techniques or methods described herein may be implemented in, as non-limiting examples, hardware, software, firmware, special purpose circuits or logic, general purpose hardware or controller or other computing devices, or some combination thereof.
By way of example, the various illustrative logical blocks, modules, and circuits described in connection with the disclosure may be implemented or performed with a general purpose processor, a Digital Signal Processor (DSP), an Application Specific Integrated Circuit (ASIC), a Field Programmable Gate Array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
By way of example, embodiments of the disclosure may be described in the context of machine-executable instructions, such as those included in program modules, being executed in a device on a target real or virtual processor. Generally, program modules include routines, programs, libraries, objects, classes, components, data structures, etc. that perform particular tasks or implement particular abstract data types. In various embodiments, the functionality of the program modules may be combined or divided between program modules as described. Machine-executable instructions for program modules may be executed within local or distributed devices. In a distributed facility, program modules may be located in both local and remote memory storage media.
Computer program code for implementing the methods of the present disclosure may be written in one or more programming languages. These computer program codes may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus, such that the program codes, when executed by the computer or other programmable data processing apparatus, cause the functions/acts specified in the flowchart and/or block diagram block or blocks to be performed. The program code may execute entirely on the computer, partly on the computer, as a stand-alone software package, partly on the computer and partly on a remote computer or entirely on the remote computer or server.
In the context of this disclosure, a machine-readable medium may be any tangible medium that can contain, or store a program for use by or in connection with an instruction execution system, apparatus, or device. The machine-readable medium may be a machine-readable signal medium or a machine-readable storage medium. A machine-readable medium may include, but is not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, or device, or any suitable combination thereof. More detailed examples of a machine-readable storage medium include an electrical connection having one or more wires, a portable computer diskette, a hard disk, a Random Access Memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or flash memory), an optical storage device, a magnetic storage device, or any suitable combination thereof.
Additionally, while operations are depicted in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In some cases, multitasking or parallel processing may be beneficial. Likewise, while the above discussion contains certain specific implementation details, this should not be construed as limiting the scope of any invention or claims, but rather as describing particular embodiments that may be directed to particular inventions. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims.