github.com/kaituanwang/hyperledger@v2.0.1+incompatible/docs/source/glossary.rst (about) 1 Glossary 2 =========================== 3 4 Terminology is important, so that all Hyperledger Fabric users and developers 5 agree on what we mean by each specific term. What is a smart contract for 6 example. The documentation will reference the glossary as needed, but feel free 7 to read the entire thing in one sitting if you like; it's pretty enlightening! 8 9 .. _Anchor-Peer: 10 11 Anchor Peer 12 ----------- 13 14 Used by gossip to make sure peers in different organizations know about each other. 15 16 When a configuration block that contains an update to the anchor peers is committed, 17 peers reach out to the anchor peers and learn from them about all of the peers known 18 to the anchor peer(s). Once at least one peer from each organization has contacted an 19 anchor peer, the anchor peer learns about every peer in the channel. Since gossip 20 communication is constant, and because peers always ask to be told about the existence 21 of any peer they don't know about, a common view of membership can be established for 22 a channel. 23 24 For example, let's assume we have three organizations --- ``A``, ``B``, ``C`` --- in the channel 25 and a single anchor peer --- ``peer0.orgC`` --- defined for organization ``C``. 26 When ``peer1.orgA`` (from organization ``A``) contacts ``peer0.orgC``, it will 27 tell ``peer0.orgC`` about ``peer0.orgA``. And when at a later time ``peer1.orgB`` 28 contacts ``peer0.orgC``, the latter would tell the former about ``peer0.orgA``. 29 From that point forward, organizations ``A`` and ``B`` would start exchanging 30 membership information directly without any assistance from ``peer0.orgC``. 31 32 As communication across organizations depends on gossip in order to work, there must 33 be at least one anchor peer defined in the channel configuration. It is strongly 34 recommended that every organization provides its own set of anchor peers for high 35 availability and redundancy. 36 37 .. _glossary_ACL: 38 39 ACL 40 --- 41 42 An ACL, or Access Control List, associates access to specific peer 43 resources (such as system chaincode APIs or event services) to a Policy_ 44 (which specifies how many and what types of organizations or roles are 45 required). The ACL is part of a channel's configuration. It is therefore 46 persisted in the channel's configuration blocks, and can be updated using the 47 standard configuration update mechanism. 48 49 An ACL is formatted as a list of key-value pairs, where the key identifies 50 the resource whose access we wish to control, and the value identifies the 51 channel policy (group) that is allowed to access it. For example 52 ``lscc/GetDeploymentSpec: /Channel/Application/Readers`` 53 defines that the access to the life cycle chaincode ``GetDeploymentSpec`` API 54 (the resource) is accessible by identities which satisfy the 55 ``/Channel/Application/Readers`` policy. 56 57 A set of default ACLs is provided in the ``configtx.yaml`` file which is 58 used by configtxgen to build channel configurations. The defaults can be set 59 in the top level "Application" section of ``configtx.yaml`` or overridden 60 on a per profile basis in the "Profiles" section. 61 62 .. _Block: 63 64 Block 65 ----- 66 67 .. figure:: ./glossary/glossary.block.png 68 :scale: 50 % 69 :align: right 70 :figwidth: 40 % 71 :alt: A Block 72 73 Block B1 is linked to block B0. Block B2 is linked to block B1. 74 75 ======= 76 77 A block contains an ordered set of transactions. It is cryptographically linked 78 to the preceding block, and in turn it is linked to be subsequent blocks. The 79 first block in such a chain of blocks is called the **genesis block**. Blocks 80 are created by the ordering service, and then validated and committed by peers. 81 82 83 .. _Chain: 84 85 86 Chain 87 ----- 88 89 .. figure:: ./glossary/glossary.blockchain.png 90 :scale: 75 % 91 :align: right 92 :figwidth: 40 % 93 :alt: Blockchain 94 95 Blockchain B contains blocks 0, 1, 2. 96 97 ======= 98 99 The ledger's chain is a transaction log structured as hash-linked blocks of 100 transactions. Peers receive blocks of transactions from the ordering service, mark 101 the block's transactions as valid or invalid based on endorsement policies and 102 concurrency violations, and append the block to the hash chain on the peer's 103 file system. 104 105 .. _chaincode: 106 107 Chaincode 108 --------- 109 110 See Smart-Contract_. 111 112 .. _Channel: 113 114 Channel 115 ------- 116 117 .. figure:: ./glossary/glossary.channel.png 118 :scale: 30 % 119 :align: right 120 :figwidth: 40 % 121 :alt: A Channel 122 123 Channel C connects application A1, peer P2 and ordering service O1. 124 125 ======= 126 127 A channel is a private blockchain overlay which allows for data 128 isolation and confidentiality. A channel-specific ledger is shared across the 129 peers in the channel, and transacting parties must be authenticated to 130 a channel in order to interact with it. Channels are defined by a 131 Configuration-Block_. 132 133 134 .. _Commit: 135 136 Commit 137 ------ 138 139 Each Peer_ on a channel validates ordered blocks of 140 transactions and then commits (writes/appends) the blocks to its replica of the 141 channel Ledger_. Peers also mark each transaction in each block 142 as valid or invalid. 143 144 .. _Concurrency-Control-Version-Check: 145 146 Concurrency Control Version Check 147 --------------------------------- 148 149 Concurrency Control Version Check is a method of keeping ledger state in sync across 150 peers on a channel. Peers execute transactions in parallel, and before committing 151 to the ledger, peers check whether the state read at the time the transaction was executed 152 has been modified. If the data read for the transaction has changed between execution time and 153 commit time, then a Concurrency Control Version Check violation has 154 occurred, and the transaction is marked as invalid on the ledger and values 155 are not updated in the state database. 156 157 .. _Configuration-Block: 158 159 Configuration Block 160 ------------------- 161 162 Contains the configuration data defining members and policies for a system 163 chain (ordering service) or channel. Any configuration modifications to a 164 channel or overall network (e.g. a member leaving or joining) will result 165 in a new configuration block being appended to the appropriate chain. This 166 block will contain the contents of the genesis block, plus the delta. 167 168 .. _Consensus: 169 170 Consensus 171 --------- 172 173 A broader term overarching the entire transactional flow, which serves to generate 174 an agreement on the order and to confirm the correctness of the set of transactions 175 constituting a block. 176 177 .. _Consenter-Set: 178 179 Consenter set 180 ------------- 181 182 In a Raft ordering service, these are the ordering nodes actively participating 183 in the consensus mechanism on a channel. If other ordering nodes exist on the 184 system channel, but are not a part of a channel, they are not part of that 185 channel's consenter set. 186 187 .. _Consortium: 188 189 Consortium 190 ---------- 191 192 A consortium is a collection of non-orderer organizations on the blockchain 193 network. These are the organizations that form and join channels and that own 194 peers. While a blockchain network can have multiple consortia, most blockchain 195 networks have a single consortium. At channel creation time, all organizations 196 added to the channel must be part of a consortium. However, an organization 197 that is not defined in a consortium may be added to an existing channel. 198 199 .. _Chaincode-definition: 200 201 Chaincode definition 202 -------------------- 203 204 A chaincode definition is used by organizations to agree on the parameters of a 205 chaincode before it can be used on a channel. Each channel member that wants to 206 use the chaincode to endorse transactions or query the ledger needs to approve 207 a chaincode definition for their organization. Once enough channel members have 208 approved a chaincode definition to meet the Lifecycle Endorsement policy (which 209 is set to a majority of organizations in the channel by default), the chaincode 210 definition can be committed to the channel. After the definition is committed, 211 the first invoke of the chaincode (or, if requested, the execution of the Init 212 function) will start the chaincode on the channel. 213 214 .. _Dynamic-Membership: 215 216 Dynamic Membership 217 ------------------ 218 219 Hyperledger Fabric supports the addition/removal of members, peers, and ordering service 220 nodes, without compromising the operationality of the overall network. Dynamic 221 membership is critical when business relationships adjust and entities need to 222 be added/removed for various reasons. 223 224 .. _Endorsement: 225 226 Endorsement 227 ----------- 228 229 Refers to the process where specific peer nodes execute a chaincode transaction and return 230 a proposal response to the client application. The proposal response includes the 231 chaincode execution response message, results (read set and write set), and events, 232 as well as a signature to serve as proof of the peer's chaincode execution. 233 Chaincode applications have corresponding endorsement policies, in which the endorsing 234 peers are specified. 235 236 .. _Endorsement-policy: 237 238 Endorsement policy 239 ------------------ 240 241 Defines the peer nodes on a channel that must execute transactions attached to a 242 specific chaincode application, and the required combination of responses (endorsements). 243 A policy could require that a transaction be endorsed by a minimum number of 244 endorsing peers, a minimum percentage of endorsing peers, or by all endorsing 245 peers that are assigned to a specific chaincode application. Policies can be 246 curated based on the application and the desired level of resilience against 247 misbehavior (deliberate or not) by the endorsing peers. A transaction that is submitted 248 must satisfy the endorsement policy before being marked as valid by committing peers. 249 250 .. _Follower: 251 252 Follower 253 -------- 254 255 In a leader based consensus protocol, such as Raft, these are the nodes which 256 replicate log entries produced by the leader. In Raft, the followers also receive 257 "heartbeat" messages from the leader. In the event that the leader stops sending 258 those message for a configurable amount of time, the followers will initiate a 259 leader election and one of them will be elected leader. 260 261 .. _Genesis-Block: 262 263 Genesis Block 264 ------------- 265 266 The configuration block that initializes the ordering service, or serves as the 267 first block on a chain. 268 269 .. _Gossip-Protocol: 270 271 Gossip Protocol 272 --------------- 273 274 The gossip data dissemination protocol performs three functions: 275 1) manages peer discovery and channel membership; 276 2) disseminates ledger data across all peers on the channel; 277 3) syncs ledger state across all peers on the channel. 278 Refer to the :doc:`Gossip <gossip>` topic for more details. 279 280 .. _Fabric-ca: 281 282 Hyperledger Fabric CA 283 --------------------- 284 285 Hyperledger Fabric CA is the default Certificate Authority component, which 286 issues PKI-based certificates to network member organizations and their users. 287 The CA issues one root certificate (rootCert) to each member and one enrollment 288 certificate (ECert) to each authorized user. 289 290 .. _Init: 291 292 Init 293 ---- 294 295 A method to initialize a chaincode application. All chaincodes need to have an 296 an Init function. By default, this function is never executed. However you can 297 use the chaincode definition to request the execution of the Init function in 298 order to initialize the chaincode. 299 300 Install 301 ------- 302 303 The process of placing a chaincode on a peer's file system. 304 305 Instantiate 306 ----------- 307 308 The process of starting and initializing a chaincode application on a specific 309 channel. After instantiation, peers that have the chaincode installed can accept 310 chaincode invocations. 311 312 **NOTE**: *This method i.e. Instantiate was used in the 1.4.x and older versions of the chaincode 313 lifecycle. For the current procedure used to start a chaincode on a channel with 314 the new Fabric chaincode lifecycle introduced as part of Fabric v2.0, 315 see Chaincode-definition_.* 316 317 .. _Invoke: 318 319 Invoke 320 ------ 321 322 Used to call chaincode functions. A client application invokes chaincode by 323 sending a transaction proposal to a peer. The peer will execute the chaincode 324 and return an endorsed proposal response to the client application. The client 325 application will gather enough proposal responses to satisfy an endorsement policy, 326 and will then submit the transaction results for ordering, validation, and commit. 327 The client application may choose not to submit the transaction results. For example 328 if the invoke only queried the ledger, the client application typically would not 329 submit the read-only transaction, unless there is desire to log the read on the ledger 330 for audit purpose. The invoke includes a channel identifier, the chaincode function to 331 invoke, and an array of arguments. 332 333 .. _Leader 334 335 Leader 336 ------ 337 338 In a leader based consensus protocol, like Raft, the leader is responsible for 339 ingesting new log entries, replicating them to follower ordering nodes, and 340 managing when an entry is considered committed. This is not a special **type** 341 of orderer. It is only a role that an orderer may have at certain times, and 342 then not others, as circumstances determine. 343 344 .. _Leading-Peer: 345 346 Leading Peer 347 ------------ 348 349 Each Organization_ can own multiple peers on each channel that 350 they subscribe to. One or more of these peers should serve as the leading peer 351 for the channel, in order to communicate with the network ordering service on 352 behalf of the organization. The ordering service delivers blocks to the 353 leading peer(s) on a channel, who then distribute them to other peers within 354 the same organization. 355 356 .. _Ledger: 357 358 Ledger 359 ------ 360 361 .. figure:: ./glossary/glossary.ledger.png 362 :scale: 25 % 363 :align: right 364 :figwidth: 20 % 365 :alt: A Ledger 366 367 A Ledger, 'L' 368 369 370 A ledger consists of two distinct, though related, parts -- a "blockchain" and 371 the "state database", also known as "world state". Unlike other ledgers, 372 blockchains are **immutable** -- that is, once a block has been added to the 373 chain, it cannot be changed. In contrast, the "world state" is a database 374 containing the current value of the set of key-value pairs that have been added, 375 modified or deleted by the set of validated and committed transactions in the 376 blockchain. 377 378 It's helpful to think of there being one **logical** ledger for each channel in 379 the network. In reality, each peer in a channel maintains its own copy of the 380 ledger -- which is kept consistent with every other peer's copy through a 381 process called **consensus**. The term **Distributed Ledger Technology** 382 (**DLT**) is often associated with this kind of ledger -- one that is logically 383 singular, but has many identical copies distributed across a set of network 384 nodes (peers and the ordering service). 385 386 .. _Log-entry 387 388 Log entry 389 --------- 390 391 The primary unit of work in a Raft ordering service, log entries are distributed 392 from the leader orderer to the followers. The full sequence of such entries known 393 as the "log". The log is considered to be consistent if all members agree on the 394 entries and their order. 395 396 .. _Member: 397 398 Member 399 ------ 400 401 See Organization_. 402 403 .. _MSP: 404 405 Membership Service Provider 406 --------------------------- 407 408 .. figure:: ./glossary/glossary.msp.png 409 :scale: 35 % 410 :align: right 411 :figwidth: 25 % 412 :alt: An MSP 413 414 An MSP, 'ORG.MSP' 415 416 417 The Membership Service Provider (MSP) refers to an abstract component of the 418 system that provides credentials to clients, and peers for them to participate 419 in a Hyperledger Fabric network. Clients use these credentials to authenticate 420 their transactions, and peers use these credentials to authenticate transaction 421 processing results (endorsements). While strongly connected to the transaction 422 processing components of the systems, this interface aims to have membership 423 services components defined, in such a way that alternate implementations of 424 this can be smoothly plugged in without modifying the core of transaction 425 processing components of the system. 426 427 .. _Membership-Services: 428 429 Membership Services 430 ------------------- 431 432 Membership Services authenticates, authorizes, and manages identities on a 433 permissioned blockchain network. The membership services code that runs in peers 434 and orderers both authenticates and authorizes blockchain operations. It is a 435 PKI-based implementation of the Membership Services Provider (MSP) abstraction. 436 437 .. _Ordering-Service: 438 439 Ordering Service 440 ---------------- 441 442 Also known as **orderer**. A defined collective of nodes that orders transactions into a block 443 and then distributes blocks to connected peers for validation and commit. The ordering service 444 exists independent of the peer processes and orders transactions on a first-come-first-serve basis 445 for all channels on the network. It is designed to support pluggable implementations beyond the 446 out-of-the-box Kafka and Raft varieties. It is a common binding for the overall network; it 447 contains the cryptographic identity material tied to each Member_. 448 449 .. _Organization: 450 451 Organization 452 ------------ 453 454 ===== 455 456 457 .. figure:: ./glossary/glossary.organization.png 458 :scale: 25 % 459 :align: right 460 :figwidth: 20 % 461 :alt: An Organization 462 463 An organization, 'ORG' 464 465 466 Also known as "members", organizations are invited to join the blockchain network 467 by a blockchain network provider. An organization is joined to a network by adding its 468 Membership Service Provider (MSP_) to the network. The MSP defines how other members of the 469 network may verify that signatures (such as those over transactions) were generated by a valid 470 identity, issued by that organization. The particular access rights of identities within an MSP 471 are governed by policies which are also agreed upon when the organization is joined to the 472 network. An organization can be as large as a multi-national corporation or as small as an 473 individual. The transaction endpoint of an organization is a Peer_. A collection of organizations 474 form a Consortium_. While all of the organizations on a network are members, not every organization 475 will be part of a consortium. 476 477 .. _Peer: 478 479 Peer 480 ---- 481 482 .. figure:: ./glossary/glossary.peer.png 483 :scale: 25 % 484 :align: right 485 :figwidth: 20 % 486 :alt: A Peer 487 488 A peer, 'P' 489 490 A network entity that maintains a ledger and runs chaincode containers in order to perform 491 read/write operations to the ledger. Peers are owned and maintained by members. 492 493 .. _Policy: 494 495 Policy 496 ------ 497 498 Policies are expressions composed of properties of digital identities, for 499 example: ``Org1.Peer OR Org2.Peer``. They are used to restrict access to 500 resources on a blockchain network. For instance, they dictate who can read from 501 or write to a channel, or who can use a specific chaincode API via an ACL_. 502 Policies may be defined in ``configtx.yaml`` prior to bootstrapping an ordering 503 service or creating a channel, or they can be specified when instantiating 504 chaincode on a channel. A default set of policies ship in the sample 505 ``configtx.yaml`` which will be appropriate for most networks. 506 507 .. _glossary-Private-Data: 508 509 Private Data 510 ------------ 511 512 Confidential data that is stored in a private database on each authorized peer, 513 logically separate from the channel ledger data. Access to this data is 514 restricted to one or more organizations on a channel via a private data 515 collection definition. Unauthorized organizations will have a hash of the 516 private data on the channel ledger as evidence of the transaction data. Also, 517 for further privacy, hashes of the private data go through the 518 Ordering-Service_, not the private data itself, so this keeps private data 519 confidential from Orderer. 520 521 .. _glossary-Private-Data-Collection: 522 523 Private Data Collection (Collection) 524 ------------------------------------ 525 526 Used to manage confidential data that two or more organizations on a channel 527 want to keep private from other organizations on that channel. The collection 528 definition describes a subset of organizations on a channel entitled to store 529 a set of private data, which by extension implies that only these organizations 530 can transact with the private data. 531 532 .. _Proposal: 533 534 Proposal 535 -------- 536 537 A request for endorsement that is aimed at specific peers on a channel. Each 538 proposal is either an Init or an Invoke (read/write) request. 539 540 541 .. _Query: 542 543 Query 544 ----- 545 546 A query is a chaincode invocation which reads the ledger current state but does 547 not write to the ledger. The chaincode function may query certain keys on the ledger, 548 or may query for a set of keys on the ledger. Since queries do not change ledger state, 549 the client application will typically not submit these read-only transactions for ordering, 550 validation, and commit. Although not typical, the client application can choose to 551 submit the read-only transaction for ordering, validation, and commit, for example if the 552 client wants auditable proof on the ledger chain that it had knowledge of specific ledger 553 state at a certain point in time. 554 555 .. _Quorum: 556 557 Quorum 558 ------ 559 560 This describes the minimum number of members of the cluster that need to 561 affirm a proposal so that transactions can be ordered. For every consenter set, 562 this is a **majority** of nodes. In a cluster with five nodes, three must be 563 available for there to be a quorum. If a quorum of nodes is unavailable for any 564 reason, the cluster becomes unavailable for both read and write operations and 565 no new logs can be committed. 566 567 .. _Raft: 568 569 Raft 570 ---- 571 572 New for v1.4.1, Raft is a crash fault tolerant (CFT) ordering service 573 implementation based on the `etcd library <https://coreos.com/etcd/>`_ 574 of the `Raft protocol` <https://raft.github.io/raft.pdf>`_. Raft follows a 575 "leader and follower" model, where a leader node is elected (per channel) and 576 its decisions are replicated by the followers. Raft ordering services should 577 be easier to set up and manage than Kafka-based ordering services, and their 578 design allows organizations to contribute nodes to a distributed ordering 579 service. 580 581 .. _SDK: 582 583 Software Development Kit (SDK) 584 ------------------------------ 585 586 The Hyperledger Fabric client SDK provides a structured environment of libraries 587 for developers to write and test chaincode applications. The SDK is fully 588 configurable and extensible through a standard interface. Components, including 589 cryptographic algorithms for signatures, logging frameworks and state stores, 590 are easily swapped in and out of the SDK. The SDK provides APIs for transaction 591 processing, membership services, node traversal and event handling. 592 593 Currently, the two officially supported SDKs are for Node.js and Java, while two 594 more -- Python and Go -- are not yet official but can still be downloaded 595 and tested. 596 597 .. _Smart-Contract: 598 599 Smart Contract 600 -------------- 601 602 A smart contract is code -- invoked by a client application external to the 603 blockchain network -- that manages access and modifications to a set of 604 key-value pairs in the :ref:`World-State` via :ref:`Transaction`. In Hyperledger Fabric, 605 smart contracts are packaged as chaincode. Chaincode is installed on peers 606 and then defined and used on one or more channels. 607 608 .. _State-DB: 609 610 State Database 611 -------------- 612 613 World state data is stored in a state database for efficient reads and queries 614 from chaincode. Supported databases include levelDB and couchDB. 615 616 .. _System-Chain: 617 618 System Chain 619 ------------ 620 621 Contains a configuration block defining the network at a system level. The 622 system chain lives within the ordering service, and similar to a channel, has 623 an initial configuration containing information such as: MSP information, policies, 624 and configuration details. Any change to the overall network (e.g. a new org 625 joining or a new ordering node being added) will result in a new configuration block 626 being added to the system chain. 627 628 The system chain can be thought of as the common binding for a channel or group 629 of channels. For instance, a collection of financial institutions may form a 630 consortium (represented through the system chain), and then proceed to create 631 channels relative to their aligned and varying business agendas. 632 633 .. _Transaction: 634 635 Transaction 636 ----------- 637 638 .. figure:: ./glossary/glossary.transaction.png 639 :scale: 30 % 640 :align: right 641 :figwidth: 20 % 642 :alt: A Transaction 643 644 A transaction, 'T' 645 646 Transactions are created when a chaincode is invoked from a client application 647 to read or write data from the ledger. Fabric application clients submit transaction proposals to 648 endorsing peers for execution and endorsement, gather the signed (endorsed) responses from those 649 endorsing peers, and then package the results and endorsements into a transaction that is 650 submitted to the ordering service. The ordering service orders and places transactions 651 in a block that is broadcast to the peers which validate and commit the transactions to the ledger 652 and update world state. 653 654 .. _World-State: 655 656 World State 657 ----------- 658 659 .. figure:: ./glossary/glossary.worldstate.png 660 :scale: 40 % 661 :align: right 662 :figwidth: 25 % 663 :alt: Current State 664 665 The World State, 'W' 666 667 Also known as the “current state”, the world state is a component of the 668 HyperLedger Fabric :ref:`Ledger`. The world state represents the latest values 669 for all keys included in the chain transaction log. Chaincode executes 670 transaction proposals against world state data because the world state provides 671 direct access to the latest value of these keys rather than having to calculate 672 them by traversing the entire transaction log. The world state will change 673 every time the value of a key changes (for example, when the ownership of a 674 car -- the "key" -- is transferred from one owner to another -- the 675 "value") or when a new key is added (a car is created). As a result, the world 676 state is critical to a transaction flow, since the current state of a key-value 677 pair must be known before it can be changed. Peers commit the latest values to 678 the ledger world state for each valid transaction included in a processed block. 679 680 681 .. Licensed under Creative Commons Attribution 4.0 International License 682 https://creativecommons.org/licenses/by/4.0/