
# 开发前准备
链代码（Chaincode）又称智能合约，是用Go、Java或Node.js语言编写的程序，主要用于操作账本上的数据。链代码是运行在区块链上的、特定条件下自动执行的代码逻辑，是用户利用区块链实现业务逻辑的重要途径。基于区块链特点，智能合约的运行结果是可信的，其结果是无法被伪造和篡改的。
在使用区块链服务BCS时，用户需要开发自己的链代码和应用程序。用户的应用程序通过区块链网络中的Peer节点/节点调用链代码，用户链代码通过区块链网络的Peer节点/节点来操作账本数据。
![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/note_3.0-zh-cn.png)
- 智能合约由用户自行编写上传并保证安全，请务必注意命令注入等相关安全问题。
- 为了确保代码在不同用户之间的一致性运行，区块链服务参考了成熟的开源社区方案（如Hyperledger Fabric）。用户在部署智能合约时，使用预配置的容器镜像进行处理，通过预配置的开发/编译工具（例如：javac、cpp、gcc等）减少环境差异带来的问题，确保智能合约能够在区块链网络上正确运行。区块链服务通过资源隔离等方式，降低了由此带来的安全风险。
- 为了保障链上数据的机密性，建议采用以下手段进行防护：
  - 数据加密：对链上存储的数据进行加密，只允许授权的参与方解密和查看数据。常用的加密方法包括对称加密和非对称加密。
  
  - 访问控制：实施严格的访问控制机制，确保只有被授权的用户或节点才能访问敏感数据。例如：不接入公网或使用VPC安全组等网络隔离手段限制访问。
  
  - 链下数据存储：对于特别敏感的数据，可以采用链下存储的方式，将数据存储在链下，并在区块链上记录其哈希值等摘要信息，以便在需要时验证数据的一致性和完整性。
   
 
#### 开发环境准备
请根据自身业务选择Go或Java开发环境。推荐使用[CloudIDE](https://www.huaweicloud.com/product/cloudide.html)（支持在线、快速地构建链代码开发环境）。
**Go开发环境准备：**
1. 安装Go开发环境。安装包下载地址为：<https://go.dev/dl/>。（请选择1.9.2之后的版本）
   各个系统对应的包名（以1.11.12版本为例）：
   
   | 操作系统    | 包名                           |
   |:---|:---|
   | Windows | go1.11.12.windows-amd64.msi  |
   | Linux   | go1.11.12.linux-amd64.tar.gz |
      
   - Windows下您可以使用.msi后缀的安装包来安装。默认情况下.msi文件会安装在"C:\\Go"目录下。您可以将"C:\\Go\\bin"目录添加到Path环境变量中。添加后您需要重启命令窗口才能生效。
   
   - Linux下，您需要将下载的二进制包解压至/usr/local目录。将/usr/local/go/bin目录添加至Path环境变量：
     ```
     export PATH=$PATH:/usr/local/go/bin
     ```
     
   
   
   安装完go语言后可以通过命令**go version** 查看版本信息，以及通过**go env**命令来查看相关路径配置。
   
2. 安装Go编辑器。编辑器可自行选择，推荐使用Goland：<https://www.jetbrains.com/go/download>。
**Java开发环境准备：**
仅适用于Fabric架构版本的区块链实例。
1. 安装Java开发环境。下载JDK并安装（建议选择最新版本）：<https://www.oracle.com/technetwork/java/javase/downloads/index.html>。
   各个系统对应的包名（以15.0.2版本为例）：
   
   | 操作系统    | 包名                              |
   |:---|:---|
   | Windows | jdk-15.0.2_windows-x64_bin.exe  |
   | Linux   | jdk-15.0.2_linux-x64_bin.tar.gz |
      
   - Windows下您可以使用 .exe后缀的安装包来安装。
   
   - Linux下，您需要将下载的二进制包解压至/usr/local目录。
     ```
     export PATH=$PATH:/usr/local/go/bin
     ```
     
   
   
   配置环境变量（若无则新建）：
   - JAVA_HOME为jdk安装目录如"C:\\Program Files (x86)\\Java\\jdk1.8.0_91"或"/usr/java/jdk1.8.0_91"（以下均略去双引号）；
   
   - CLASSPATH为".;%JAVA_HOME%\\lib\\dt.jar;%JAVA_HOME%\\lib\\tools.jar; "；
   
   - 在Path中新增两条"%JAVA_HOME%\\bin"和"%JAVA_HOME%\\jre\\bin"。
   
   
   安装完jdk后，可以通过命令**java -version**查看版本信息。
   
2. 安装Java编辑器。编辑器可自行选择，推荐使用[IntelliJ IDEA](https://www.jetbrains.com/zh-cn/idea/download/#section=windows)。
 
#### 下载源码包
下载Fabric源码包作为三方库。仅适用于Fabric架构版本的区块链实例。
请根据实际需求，选择下载对应版本的Fabric源码包：
<https://github.com/hyperledger/fabric/tree/release-2.2>
![](https://support.huaweicloud.com/devg-bcs/public_sys-resources/note_3.0-zh-cn.png)
Fabric源码包选择和创建的区块链实例版本对应，即如果创建区块链实例时，Hyperledger Fabric增强版内核是v2.2（4.X.X版本），则Fabric源码包对应选择2.2版本。
