github.com/kaituanwang/hyperledger@v2.0.1+incompatible/docs/source/Fabric-FAQ.rst (about) 1 Frequently Asked Questions 2 ========================== 3 4 Endorsement 5 ----------- 6 7 **Endorsement architecture**: 8 9 :Question: 10 How many peers in the network need to endorse a transaction? 11 12 :Answer: 13 The number of peers required to endorse a transaction is driven by the 14 endorsement policy that is specified in the chaincode definition. 15 16 :Question: 17 Does an application client need to connect to all peers? 18 19 :Answer: 20 Clients only need to connect to as many peers as are required by the 21 endorsement policy for the chaincode. 22 23 Security & Access Control 24 ------------------------- 25 26 :Question: 27 How do I ensure data privacy? 28 29 :Answer: 30 There are various aspects to data privacy. First, you can segregate your 31 network into channels, where each channel represents a subset of participants 32 that are authorized to see the data for the chaincodes that are deployed to 33 that channel. 34 35 Second, you can use `private-data <private-data/private-data.html>`_ to keep ledger data private from 36 other organizations on the channel. A private data collection allows a 37 defined subset of organizations on a channel the ability to endorse, commit, 38 or query private data without having to create a separate channel. 39 Other participants on the channel receive only a hash of the data. 40 For more information refer to the :doc:`private_data_tutorial` tutorial. 41 Note that the key concepts topic also explains `when to use private data instead of a channel <private-data/private-data.html#when-to-use-a-collection-within-a-channel-vs-a-separate-channel>`_. 42 43 Third, as an alternative to Fabric hashing the data using private data, 44 the client application can hash or encrypt the data before calling 45 chaincode. If you hash the data then you will need to provide a means to 46 share the source data. If you encrypt the data then you will need to provide 47 a means to share the decryption keys. 48 49 Fourth, you can restrict data access to certain roles in your organization, by 50 building access control into the chaincode logic. 51 52 Fifth, ledger data at rest can be encrypted via file system encryption on the 53 peer, and data in-transit is encrypted via TLS. 54 55 :Question: 56 Do the orderers see the transaction data? 57 58 :Answer: 59 No, the orderers only order transactions, they do not open the transactions. 60 If you do not want the data to go through the orderers at all, then utilize 61 the private data feature of Fabric. Alternatively, you can hash or encrypt 62 the data in the client application before calling chaincode. If you encrypt 63 the data then you will need to provide a means to share the decryption keys. 64 65 Application-side Programming Model 66 ---------------------------------- 67 68 :Question: 69 How do application clients know the outcome of a transaction? 70 71 :Answer: 72 The transaction simulation results are returned to the client by the 73 endorser in the proposal response. If there are multiple endorsers, the 74 client can check that the responses are all the same, and submit the results 75 and endorsements for ordering and commitment. Ultimately the committing peers 76 will validate or invalidate the transaction, and the client becomes 77 aware of the outcome via an event, that the SDK makes available to the 78 application client. 79 80 :Question: 81 How do I query the ledger data? 82 83 :Answer: 84 Within chaincode you can query based on keys. Keys can be queried by range, 85 and composite keys can be modeled to enable equivalence queries against 86 multiple parameters. For example a composite key of (owner,asset_id) can be 87 used to query all assets owned by a certain entity. These key-based queries 88 can be used for read-only queries against the ledger, as well as in 89 transactions that update the ledger. 90 91 If you model asset data as JSON in chaincode and use CouchDB as the state 92 database, you can also perform complex rich queries against the chaincode 93 data values, using the CouchDB JSON query language within chaincode. The 94 application client can perform read-only queries, but these responses are 95 not typically submitted as part of transactions to the ordering service. 96 97 :Question: 98 How do I query the historical data to understand data provenance? 99 100 :Answer: 101 The chaincode API ``GetHistoryForKey()`` will return history of 102 values for a key. 103 104 :Question: 105 How to guarantee the query result is correct, especially when the peer being 106 queried may be recovering and catching up on block processing? 107 108 :Answer: 109 The client can query multiple peers, compare their block heights, compare 110 their query results, and favor the peers at the higher block heights. 111 112 Chaincode (Smart Contracts and Digital Assets) 113 ---------------------------------------------- 114 115 :Question: 116 Does Hyperledger Fabric support smart contract logic? 117 118 :Answer: 119 Yes. We call this feature :ref:`chaincode`. It is our interpretation of the 120 smart contract method/algorithm, with additional features. 121 122 A chaincode is programmatic code deployed on the network, where it is 123 executed and validated by chain validators together during the consensus 124 process. Developers can use chaincodes to develop business contracts, 125 asset definitions, and collectively-managed decentralized applications. 126 127 :Question: 128 How do I create a business contract? 129 130 :Answer: 131 There are generally two ways to develop business contracts: the first way is 132 to code individual contracts into standalone instances of chaincode; the 133 second way, and probably the more efficient way, is to use chaincode to 134 create decentralized applications that manage the life cycle of one or 135 multiple types of business contracts, and let end users instantiate 136 instances of contracts within these applications. 137 138 :Question: 139 How do I create assets? 140 141 :Answer: 142 Users can use chaincode (for business rules) and membership service (for 143 digital tokens) to design assets, as well as the logic that manages them. 144 145 There are two popular approaches to defining assets in most blockchain 146 solutions: the stateless UTXO model, where account balances are encoded 147 into past transaction records; and the account model, where account 148 balances are kept in state storage space on the ledger. 149 150 Each approach carries its own benefits and drawbacks. This blockchain 151 technology does not advocate either one over the other. Instead, one of our 152 first requirements was to ensure that both approaches can be easily 153 implemented. 154 155 :Question: 156 Which languages are supported for writing chaincode? 157 158 :Answer: 159 Chaincode can be written in any programming language and executed in 160 containers. Currently, Golang, node.js and java chaincode are supported. 161 162 :Question: 163 Does the Hyperledger Fabric have native currency? 164 165 :Answer: 166 No. However, if you really need a native currency for your chain network, 167 you can develop your own native currency with chaincode. One common attribute 168 of native currency is that some amount will get transacted (the chaincode 169 defining that currency will get called) every time a transaction is processed 170 on its chain. 171 172 Differences in Most Recent Releases 173 ----------------------------------- 174 175 :Question: 176 Where can I find what are the highlighted differences between releases? 177 178 :Answer: 179 The differences between any subsequent releases are provided together with 180 the :doc:`releases`. 181 182 :Question: 183 Where to get help for the technical questions not answered above? 184 185 :Answer: 186 Please use `StackOverflow <https://stackoverflow.com/questions/tagged/hyperledger>`__. 187 188 Ordering Service 189 ---------------- 190 191 :Question: 192 **I have an ordering service up and running and want to switch consensus 193 algorithms. How do I do that?** 194 195 :Answer: 196 This is explicitly not supported. 197 198 .. 199 200 :Question: 201 **What is the orderer system channel?** 202 203 :Answer: 204 The orderer system channel (sometimes called ordering system channel) is the 205 channel the orderer is initially bootstrapped with. It is used to orchestrate 206 channel creation. The orderer system channel defines consortia and the initial 207 configuration for new channels. At channel creation time, the organization 208 definition in the consortium, the ``/Channel`` group's values and policies, as 209 well as the ``/Channel/Orderer`` group's values and policies, are all combined 210 to form the new initial channel definition. 211 212 .. 213 214 :Question: 215 **If I update my application channel, should I update my orderer system 216 channel?** 217 218 :Answer: 219 Once an application channel is created, it is managed independently of any 220 other channel (including the orderer system channel). Depending on the 221 modification, the change may or may not be desirable to port to other 222 channels. In general, MSP changes should be synchronized across all channels, 223 while policy changes are more likely to be specific to a particular channel. 224 225 .. 226 227 :Question: 228 **Can I have an organization act both in an ordering and application role?** 229 230 :Answer: 231 Although this is possible, it is a highly discouraged configuration. By 232 default the ``/Channel/Orderer/BlockValidation`` policy allows any valid 233 certificate of the ordering organizations to sign blocks. If an organization 234 is acting both in an ordering and application role, then this policy should be 235 updated to restrict block signers to the subset of certificates authorized for 236 ordering. 237 238 .. 239 240 :Question: 241 **I want to write a consensus implementation for Fabric. Where do I begin?** 242 243 :Answer: 244 A consensus plugin needs to implement the ``Consenter`` and ``Chain`` 245 interfaces defined in the `consensus package`_. There is a plugin built 246 against raft_ . You can study it to learn more for your own implementation. The ordering service code can be found under 247 the `orderer package`_. 248 249 .. _consensus package: https://github.com/hyperledger/fabric/blob/{BRANCH}/orderer/consensus/consensus.go 250 .. _raft: https://github.com/hyperledger/fabric/tree/{BRANCH}/orderer/consensus/etcdraft 251 .. _orderer package: https://github.com/hyperledger/fabric/tree/{BRANCH}/orderer 252 253 .. 254 255 :Question: 256 **I want to change my ordering service configurations, e.g. batch timeout, 257 after I start the network, what should I do?** 258 259 :Answer: 260 This falls under reconfiguring the network. Please consult the topic on 261 :doc:`commands/configtxlator`. 262 263 BFT 264 ~~~ 265 266 :Question: 267 **When is a BFT version of the ordering service going to be available?** 268 269 :Answer: 270 No date has been set. We are working towards a release during the 1.x cycle, 271 i.e. it will come with a minor version upgrade in Fabric. Track FAB-33_ for 272 updates. 273 274 .. _FAB-33: https://jira.hyperledger.org/browse/FAB-33 275 276 .. Licensed under Creative Commons Attribution 4.0 International License 277 https://creativecommons.org/licenses/by/4.0/