# SDK相关概念梳理

By [talentbuilder.eth](https://paragraph.com/@talentbuilder) · 2021-12-17

---

**一、什么是SDK**

SDK是用来帮一个产品或平台开发应用程序的工具集，包括API、开发文档、类库、编程示例、开发工具和开发组件等。 

区块链SDK是指开发区块链DAPP应用的工具集，包括编程接口(API)、开发文档、开发组件、类库、编程示例、开发编译工具、调试工具以及打包及部署工具。

**二、各平台SDK梳理**

2.1 以太坊

**(1)编程接口**:web3，通过该接口可以与以太坊节点进行交互，目前包括javascript实现([web3.js](https://github.com/ethereum/web3.js))、java实现([web3j](https://github.com/web3j/web3j))、python([web3.py](https://github.com/ethereum/web3.py))以及php实现。其原理都是通过编程语言将请求转化成JSON RPC，调用以太坊节点功能(例如调用智能合约)。

\*\*(2)文档:\*\*上述各种接口的实现都有对应的开发文档和示例代码。

\*\*(3)智能合约编程：\*\*编程语言，一般是solidity语言

\*\*(4)智能合约编程工具：\*\*使用[remix](https://remix.ethereum.org/)，这是一个网页端编写solidity的地方，可以编程、编译合约代码，编译成EVM可识别的二进制代码以及ABI文件(相当于智能合约的说明，DAPP可以通过它知道合约提供了什么功能)。

\*\*(5)智能合约编译：\*\*除了remix可以编译合约外，另一种方法就是安装solc，命令行编译solidity，生成EVM可识别和执行的二进制代码，同时会生成ABI文件。

\*\*(6)智能合约部署工具：\*\*一种方法是使用web3方式写程序部署，另一种方法是直接通过geth客户端或钱包部署(本质上部署合约其实就是发起一次交易)。 

所以综上以太坊DAPP本质就是开发的应用通过集成web3，使用web3接口调用以太坊功能或以太坊智能合约，从而使用以太坊区块链的功能。

2.2 EOSIO

\*\*(1)编程接口:\*\*EOSIO提供了与结点交互的RPC API接口，实现包括Curl、nodejs、ruby、javascript以及python方式，具体可以参考[文档](https://developers.eos.io/eosio-nodeos/reference)。

\*\*(2)文档：\*\*上述接口都有对应的文档以及示例代码。

\*\*(3)智能合约编程：\*\*编程语言C/C++，有智能合约[开发文档](https://developers.eos.io/eosio-cpp/v1.3.1/docs/c-cpp-api)。

\*\*(4)编程工具：\*\*一般文本编辑器或者C/C++开发工具都行。

\*\*(5)智能合约编译：\*\*需要安装CDT(EOSIO Contract Development Toolkit，即EOSIO智能合约开发工具集)，该工具可以将智能合约的C/C++代码编译成WASM文件并生成ABI文件。

\*\*(6)智能合约部署工具：\*\*使用cleos(本地EOS客户端安装应该就带有)，通过命令行方式部署编译后的智能合约代码到EOS结点中。

其实本质和以太坊一样，也是开发应用(web端、移动端或者其它端)，通过集成各种语言的RPC API，调用EOS节点功能或合约。

2.3 波场

\*\*(1)编程接口：\*\*tron-web，类似以太坊的web3.js，通过javascript接口与结点交互，这里是[文档地址](https://github.com/tronprotocol/tron-web)（可以切换中文版）。社区有一些[PHP](https://github.com/iexbase/tron-api)和[Python](https://github.com/iexbase/tron-api-python)的实现，但是比较简单。

\*\*(2)文档：\*\*有中文版，看[这里](https://cn.developers.tron.network/reference)。

\*\*(3)智能合约编程：\*\*solidity

\*\*(4)编程工具：\*\*remix或者Tron-Studio。官网文档推荐使用remix编写合约代码，但是编译生成ABI和二进制代码推荐使用[SimpleWebCompiler](https://github.com/tronprotocol/tron-demo/tree/master/SmartContractTools/SimpleWebCompiler)，Tron-Studio则直接提供了合约编写和编译的功能。

\*\*(5)智能合约编译：\*\*官方文档推荐使用[SimpleWebCompiler](https://github.com/tronprotocol/tron-demo/tree/master/SmartContractTools/SimpleWebCompiler)。

\*\*(6)智能合约部署工具：\*\*安装Wallet-CLI，可以在其上向主网部署合约。

目前看到波场的DAPP基本都是用nodejs开发的，基于tron-web的，基本和以太坊和EOS一样，应用通过API与主网交互，调用节点功能，执行智能合约

其它说明：

上边没有提到以太坊开发智能合约的Truffle工具，Chrome插件MetaMask以及iaas服务infura，波场对应的也提供了相应的工具，分别是tron-box，tronLink和tron-grid，这些内容之后再仔细研究下。

 RPC是指远程过程调用，可以理解为调用远端的功能，JSON RPC是指通过JSON这种数据格式来调用。

**三、基本流程说明**

开发DAPP时，开发者开发的应用在调用区块链功能时，一般需集成相应平台的开发包(例如以太坊的web3)，程序中调用的开发包接口会调用以太坊网络节点的功能或执行合约。下面是一个简单的框图：

![DAPP调用SDK示意](https://storage.googleapis.com/papyrus_images/f704192e9a968ccd89fb64f2791165016dfa3ac3983de7cd8e9ed73e44f52250.jpg)

DAPP调用SDK示意

上面的大框是DAPP，里面集成了区块链API，可以通过API访问主网功能或者节点中部署的合约。

**四、研发SDK理解**

研发SDK可能主要包含以下几大块：

(1)提供开发者编程接口，开发者使用这些接口可以方便地调用区块链网络功能

(2)提供接口文档和示例，方便开发者学a习

(3)智能合约开发、调试、测试、编译和部署工具

(4)本地测试环境，可以是为开发者提供的可测试的网络、或者可以自行搭建私链节点(便于本地调试)，这部分内容还需要再讨论

(5)其它易用的开发插件(例如MetaMask)

---

*Originally published on [talentbuilder.eth](https://paragraph.com/@talentbuilder/sdk)*
