github.com/kaituanwang/hyperledger@v2.0.1+incompatible/docs/source/smartcontract/smartcontract.md (about)

     1  # Smart Contracts and Chaincode
     2  
     3  **Audience**: Architects, application and smart contract developers,
     4  administrators
     5  
     6  From an application developer's perspective, a **smart contract**, together with
     7  the [ledger](../ledger/ledger.html), form the heart of a Hyperledger Fabric
     8  blockchain system. Whereas a ledger holds facts about the current and historical
     9  state of a set of business objects, a **smart contract** defines the executable
    10  logic that generates new facts that are added to the ledger. A **chaincode**
    11  is typically used by administrators to group related smart contracts for
    12  deployment, but can also be used for low level system programming of Fabric. In
    13  this topic, we'll focus on why both **smart contracts** and **chaincode** exist,
    14  and how and when to use them.
    15  
    16  In this topic, we'll cover:
    17  
    18  * [What is a smart contract](#smart-contract)
    19  * [A note on terminology](#terminology)
    20  * [Smart contracts and the ledger](#ledger)
    21  * [How to develop a smart contract](#developing)
    22  * [The importance of endorsement policies](#endorsement)
    23  * [Valid transactions](#valid-transactions)
    24  * [Channels and chaincode definitions](#channels)
    25  * [Communicating between smart contracts](#intercommunication)
    26  * [What is system chaincode?](#system-chaincode)
    27  
    28  ## Smart contract
    29  
    30  Before businesses can transact with each other, they must define a common set of
    31  contracts covering common terms, data, rules, concept definitions, and
    32  processes. Taken together, these contracts lay out the **business model** that
    33  govern all of the interactions between transacting parties.
    34  
    35  ![smart.diagram1](./smartcontract.diagram.01.png) *A smart contract defines the
    36  rules between different organizations in executable code. Applications invoke a
    37  smart contract to generate transactions that are recorded on the ledger.*
    38  
    39  Using a blockchain network, we can turn these contracts into executable programs
    40  -- known in the industry as **smart contracts** -- to open up a wide variety of
    41  new possibilities. That's because a smart contract can implement the governance
    42  rules for **any** type of business object, so that they can be automatically
    43  enforced when the smart contract is executed. For example, a smart contract
    44  might ensure that a new car delivery is made within a specified timeframe, or
    45  that funds are released according to prearranged terms, improving the flow of
    46  goods or capital respectively. Most importantly however, the execution of a
    47  smart contract is much more efficient than a manual human business process.
    48  
    49  In the [diagram above](#smart-contract), we can see how two organizations,
    50  `ORG1` and `ORG2` have defined a `car` smart contract to `query`, `transfer` and
    51  `update` cars.  Applications from these organizations invoke this smart contract
    52  to perform an agreed step in a business process, for example to transfer
    53  ownership of a specific car from `ORG1` to `ORG2`.
    54  
    55  
    56  ## Terminology
    57  
    58  Hyperledger Fabric users often use the terms **smart contract** and
    59  **chaincode** interchangeably. In general, a smart contract defines the
    60  **transaction logic** that controls the lifecycle of a business object contained
    61  in the world state. It is then packaged into a chaincode which is then deployed
    62  to a blockchain network.  Think of smart contracts as governing transactions,
    63  whereas chaincode governs how smart contracts are packaged for deployment.
    64  
    65  ![smart.diagram2](./smartcontract.diagram.02.png) *A smart contract is defined
    66  within a chaincode.  Multiple smart contracts can be defined within the same
    67  chaincode. When a chaincode is deployed, all smart contracts within it are made
    68  available to applications.*
    69  
    70  In the diagram, we can see a `vehicle` chaincode that contains three smart
    71  contracts: `cars`, `boats` and `trucks`.  We can also see an `insurance`
    72  chaincode that contains four smart contracts: `policy`, `liability`,
    73  `syndication` and `securitization`.  In both cases these contracts cover key
    74  aspects of the business process relating to vehicles and insurance. In this
    75  topic, we will use the `car` contract as an example. We can see that a smart
    76  contract is a domain specific program which relates to specific business
    77  processes, whereas a chaincode is a technical container of a group of related
    78  smart contracts.
    79  
    80  
    81  ## Ledger
    82  
    83  At the simplest level, a blockchain immutably records transactions which update
    84  states in a ledger. A smart contract programmatically accesses two distinct
    85  pieces of the ledger -- a **blockchain**, which immutably records the history of
    86  all transactions, and a **world state** that holds a cache of the current value
    87  of these states, as it's the current value of an object that is usually
    88  required.
    89  
    90  Smart contracts primarily **put**, **get** and **delete** states in the world
    91  state, and can also query the immutable blockchain record of transactions.
    92  
    93  * A **get** typically represents a query to retrieve information about the
    94    current state of a business object.
    95  * A **put** typically creates a new business object or modifies an existing one
    96    in the ledger world state.
    97  * A **delete** typically represents the removal of a business object from the
    98    current state of the ledger, but not its history.
    99  
   100  Smart contracts have many
   101  [APIs](../developapps/transactioncontext.html#structure) available to them.
   102  Critically, in all cases, whether transactions create, read, update or delete
   103  business objects in the world state, the blockchain contains an [immutable
   104  record](../ledger/ledger.html) of these changes.
   105  
   106  ## Development
   107  
   108  Smart contracts are the focus of application development, and as we've seen, one
   109  or more smart contracts can be defined within a single chaincode.  Deploying a
   110  chaincode to a network makes all its smart contracts available to the
   111  organizations in that network. It means that only administrators need to worry
   112  about chaincode; everyone else can think in terms of smart contracts.
   113  
   114  At the heart of a smart contract is a set of `transaction` definitions. For
   115  example, look at
   116  [`fabcar.js`](https://github.com/hyperledger/fabric-samples/blob/master/chaincode/fabcar/javascript/lib/fabcar.js#L93),
   117  where you can see a smart contract transaction that creates a new car:
   118  
   119  ```javascript
   120  async createCar(ctx, carNumber, make, model, color, owner) {
   121  
   122      const car = {
   123          color,
   124          docType: 'car',
   125          make,
   126          model,
   127          owner,
   128      };
   129  
   130      await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
   131  }
   132  ```
   133  
   134  You can learn more about the **Fabcar** smart contract in the [Writing your
   135  first application](../write_first_app.html) tutorial.
   136  
   137  A smart contract can describe an almost infinite array of business use cases
   138  relating to immutability of data in multi-organizational decision making. The
   139  job of a smart contract developer is to take an existing business process that
   140  might govern financial prices or delivery conditions, and express it as
   141  a smart contract in a programming language such as JavaScript, GOLANG or Java.
   142  The legal and technical skills required to convert centuries of legal language
   143  into programming language is increasingly practiced by **smart contract
   144  auditors**. You can learn about how to design and develop a smart contract in
   145  the [Developing applications
   146  topic](../developapps/developing_applications.html).
   147  
   148  
   149  ## Endorsement
   150  
   151  Associated with every chaincode is an endorsement policy that applies to all of
   152  the smart contracts defined within it. An endorsement policy is very important;
   153  it indicates which organizations in a blockchain network must sign a transaction
   154  generated by a given smart contract in order for that transaction to be declared
   155  **valid**.
   156  
   157  ![smart.diagram3](./smartcontract.diagram.03.png) *Every smart contract has an
   158  endorsement policy associated with it. This endorsement policy identifies which
   159  organizations must approve transactions generated by the smart contract before
   160  those transactions can be identified as valid.*
   161  
   162  An example endorsement policy might define that three of the four organizations
   163  participating in a blockchain network must sign a transaction before it is
   164  considered **valid**. All transactions, whether **valid** or **invalid** are
   165  added to a distributed ledger, but only **valid** transactions update the world
   166  state.
   167  
   168  If an endorsement policy specifies that more than one organization must sign a
   169  transaction, then the smart contract must be executed by a sufficient set of
   170  organizations in order for a valid transaction to be generated. In the example
   171  [above](#endorsement), a smart contract transaction to `transfer` a car would
   172  need to be executed and signed by both `ORG1` and `ORG2` for it to be valid.
   173  
   174  Endorsement policies are what make Hyperledger Fabric different to other
   175  blockchains like Ethereum or Bitcoin. In these systems valid transactions can be
   176  generated by any node in the network. Hyperledger Fabric more realistically
   177  models the real world; transactions must be validated by trusted organizations
   178  in a network. For example, a government organization must sign a valid
   179  `issueIdentity` transaction, or both the `buyer` and `seller` of a car must sign
   180  a `car` transfer transaction. Endorsement policies are designed to allow
   181  Hyperledger Fabric to better model these types of real-world interactions.
   182  
   183  Finally, endorsement policies are just one example of
   184  [policy](../access_control.html#policies) in Hyperledger Fabric. Other policies
   185  can be defined to identify who can query or update the ledger, or add or remove
   186  participants from the network. In general, policies should be agreed in advance
   187  by the consortium of organizations in a blockchain network, although they are
   188  not set in stone. Indeed, policies themselves can define the rules by which they
   189  can be changed. And although an advanced topic, it is also possible to define
   190  [custom endorsement policy](../pluggable_endorsement_and_validation.html) rules
   191  over and above those provided by Fabric.
   192  
   193  ## Valid transactions
   194  
   195  When a smart contract executes, it runs on a peer node owned by an organization
   196  in the blockchain network. The contract takes a set of input parameters called
   197  the **transaction proposal** and uses them in combination with its program logic
   198  to read and write the ledger. Changes to the world state are captured as a
   199  **transaction proposal response** (or just **transaction response**) which
   200  contains a **read-write set** with both the states that have been read, and the
   201  new states that are to be written if the transaction is valid. Notice that the
   202  world state **is not updated when the smart contract is executed**!
   203  
   204  ![smart.diagram4](./smartcontract.diagram.04.png) *All transactions have an
   205  identifier, a proposal, and a response signed by a set of organizations. All
   206  transactions are recorded on the blockchain, whether valid or invalid, but only
   207  valid transactions contribute to the world state.*
   208  
   209  Examine the `car transfer` transaction. You can see a transaction `t3` for a car
   210  transfer between `ORG1` and `ORG2`. See how the transaction has input `{CAR1,
   211  ORG1, ORG2}` and output `{CAR1.owner=ORG1, CAR1.owner=ORG2}`, representing the
   212  change of owner from `ORG1` to `ORG2`. Notice how the input is signed by the
   213  application's organization `ORG1`, and the output is signed by *both*
   214  organizations identified by the endorsement policy, `ORG1` and `ORG2`.  These
   215  signatures were generated by using each actor's private key, and mean that
   216  anyone in the network can verify that all actors in the network are in agreement
   217  about the transaction details.
   218  
   219  A transaction that is distributed to all peer nodes in the network is
   220  **validated** in two phases by each peer. Firstly, the transaction is checked to
   221  ensure it has been signed by sufficient organizations according to the endorsement
   222  policy. Secondly, it is checked to ensure that the current value of the world state
   223  matches the read set of the transaction when it was signed by the endorsing peer
   224  nodes; that there has been no intermediate update. If a transaction passes both
   225  these tests, it is marked as **valid**. All transactions are added to the
   226  blockchain history, whether **valid** or **invalid**, but only **valid**
   227  transactions result in an update to the world state.
   228  
   229  In our example, `t3` is a valid transaction, so the owner of `CAR1` has been
   230  updated to `ORG2`. However, `t4` (not shown) is an invalid transaction, so while
   231  it was recorded in the ledger, the world state was not updated, and `CAR2`
   232  remains owned by `ORG2`.
   233  
   234  Finally, to understand how to use a smart contract or chaincode with world
   235  state, read the [chaincode namespace
   236  topic](../developapps/chaincodenamespace.html).
   237  
   238  ## Channels
   239  
   240  Hyperledger Fabric allows an organization to simultaneously participate in
   241  multiple, separate blockchain networks via **channels**. By joining multiple
   242  channels, an organization can participate in a so-called **network of networks**.
   243  Channels provide an efficient sharing of infrastructure while maintaining data
   244  and communications privacy. They are independent enough to help organizations
   245  separate their work traffic with different counterparties, but integrated enough
   246  to allow them to coordinate independent activities when necessary.
   247  
   248  ![smart.diagram5](./smartcontract.diagram.05.png) *A channel provides a
   249  completely separate communication mechanism between a set of organizations. When
   250  a chaincode definition is committed to a channel, all the smart contracts within
   251  the chaincode are made available to the applications on that channel.*
   252  
   253  While the smart contract code is installed inside a chaincode package on an
   254  organizations peers, channel members can only execute a smart contract after
   255  the chaincode has been defined on a channel. The **chaincode definition** is a
   256  struct that contains the parameters that govern how a chaincode operates. These
   257  parameters include the chaincode name, version, and the endorsement policy.
   258  Each channel member agrees to the parameters of a chaincode by approving a
   259  chaincode definition for their organization. When a sufficient number of
   260  organizations (a majority by default) have approved to the same chaincode
   261  definition, the definition can be committed to the channel. The smart contracts
   262  inside the chaincode can then be executed by channel members, subject to the
   263  endorsement policy specified in the chaincode definition. The endorsement policy
   264  applies equally to all smart contracts defined within the same chaincode.
   265  
   266  In the example [above](#channels), a `car` contract is defined on the `VEHICLE`
   267  channel, and an `insurance` contract is defined on the `INSURANCE` channel.
   268  The chaincode definition of `car` specifies an endorsement policy that requires
   269  both `ORG1` and `ORG2` to sign transactions before they can be considered valid.
   270  The chaincode definition of the `insurance` contract specifies that only `ORG3`
   271  is required to endorse a transaction. `ORG1` participates in two networks, the
   272  `VEHICLE` channel and the `INSURANCE` network, and can coordinate activity with
   273  `ORG2` and `ORG3` across these two networks.
   274  
   275  The chaincode definition provides a way for channel members to agree on the
   276  governance of a chaincode before they start using the smart contract to
   277  transact on the channel. Building on the example above, both `ORG1` and `ORG2`
   278  want to endorse transactions that invoke the `car` contract. Because the default
   279  policy requires that a majority of organizations approve a chaincode definition,
   280  both organizations need to approve an endorsement policy of `AND{ORG1,ORG2}`.
   281  Otherwise, `ORG1` and `ORG2` would approve different chaincode definitions and
   282  would be unable to commit the chaincode definition to the channel as a result.
   283  This process guarantees that a transaction from the `car` smart contract needs
   284  to be approved by both organizations.
   285  
   286  ## Intercommunication
   287  
   288  A Smart Contract can call other smart contracts both within the same
   289  channel and across different channels. It this way, they can read and write
   290  world state data to which they would not otherwise have access due to smart
   291  contract namespaces.
   292  
   293  There are limitations to this inter-contract communication, which are described
   294  fully in the [chaincode namespace](../developapps/chaincodenamespace.html#cross-chaincode-access) topic.
   295  
   296  ## System chaincode
   297  
   298  The smart contracts defined within a chaincode encode the domain dependent rules
   299  for a business process agreed between a set of blockchain organizations.
   300  However, a chaincode can also define low-level program code which corresponds to
   301  domain independent *system* interactions, unrelated to these smart contracts
   302  for business processes.
   303  
   304  The following are the different types of system chaincodes and their associated
   305  abbreviations:
   306  
   307  * `_lifecycle` runs in all peers and manages the installation of chaincode on
   308    your peers, the approval of chaincode definitions for your organization, and
   309    the committing of chaincode definitions to channels. You can read more about
   310    how `_lifecycle` implements the Fabric chaincode lifecycle [process](../chaincode4noah.html).
   311  
   312  * Lifecycle system chaincode (LSCC) manages the chaincode lifecycle for the
   313    1.x releases of Fabric. This version of lifecycle required that chaincode be
   314    instantiated or upgraded on channels. You can read more about how the LSCC
   315    implements this [process](../chaincode4noah.html).
   316    You can still use LSCC to manage your chaincode if you have the channel
   317    application capability set to V1_4_x or below.
   318  
   319  * **Configuration system chaincode (CSCC)** runs in all peers to handle changes to a
   320    channel configuration, such as a policy update.  You can read more about this
   321    process in the following chaincode
   322    [topic](../configtx.html#configuration-updates).
   323  
   324  * **Query system chaincode (QSCC)** runs in all peers to provide ledger APIs which
   325    include block query, transaction query etc. You can read more about these
   326    ledger APIs in the transaction context
   327    [topic](../developapps/transactioncontext.html).
   328  
   329  * **Endorsement system chaincode (ESCC)** runs in endorsing peers to
   330    cryptographically sign a transaction response. You can read more about how
   331    the ESCC implements this [process](../peers/peers.html#phase-1-proposal).
   332  
   333  * **Validation system chaincode (VSCC)** validates a transaction, including checking
   334    endorsement policy and read-write set versioning. You can read more about the
   335    LSCC implements this [process](../peers/peers.html#phase-3-validation).
   336  
   337  It is possible for low level Fabric developers and administrators to modify
   338  these system chaincodes for their own uses. However, the development and
   339  management of system chaincodes is a specialized activity, quite separate from
   340  the development of smart contracts, and is not normally necessary. Changes to
   341  system chaincodes must be handled with extreme care as they are fundamental to
   342  the correct functioning of a Hyperledger Fabric network. For example, if a
   343  system chaincode is not developed correctly, one peer node may update its copy
   344  of the world state or blockchain differently compared to another peer node. This
   345  lack of consensus is one form of a **ledger fork**, a very undesirable situation.
   346  
   347  <!--- Licensed under Creative Commons Attribution 4.0 International License
   348  https://creativecommons.org/licenses/by/4.0/ -->