SDK相关概念梳理

一、什么是SDK

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

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

二、各平台SDK梳理

2.1 以太坊

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

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

**(3)智能合约编程:**编程语言,一般是solidity语言

**(4)智能合约编程工具:**使用remix,这是一个网页端编写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方式,具体可以参考文档

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

**(3)智能合约编程:**编程语言C/C++,有智能合约开发文档

**(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接口与结点交互,这里是文档地址(可以切换中文版)。社区有一些PHPPython的实现,但是比较简单。

**(2)文档:**有中文版,看这里

**(3)智能合约编程:**solidity

**(4)编程工具:**remix或者Tron-Studio。官网文档推荐使用remix编写合约代码,但是编译生成ABI和二进制代码推荐使用SimpleWebCompiler,Tron-Studio则直接提供了合约编写和编译的功能。

**(5)智能合约编译:**官方文档推荐使用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示意
DAPP调用SDK示意

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

四、研发SDK理解

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

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

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

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

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

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