腾讯云区块链服务平台TBaaS对接使用完全指南
一、TBaaS产品概述
腾讯云区块链服务平台(Tencent Blockchain as a Service,简称TBaaS)是腾讯云推出的企业级区块链基础设施服务。TBaaS集成了多种区块链底层引擎,包括Hyperledger Fabric腾讯增强版、长安链·ChainMaker以及FISCO BCOS,为用户提供一站式的区块链网络构建、部署与运维管理能力。TBaaS的核心价值在于极大降低了企业使用区块链底层技术的成本,简化了区块链构建和运维管控工作。
TBaaS具备跨域组网、多底层引擎、云链结合、原生数据安全护航等优势。平台提供全生命周期完备的可视化操作能力,支持一键式自动化部署搭建区块链网络,并可增配新组织加入网络。在安全方面,TBaaS采用基于数字证书的PKI身份管理、多链隔离、信息加密等手段保护私密信息。
TBaaS广泛适用于供应链金融、可信存证、电子凭证、身份管理、溯源管理、数字资产交易、跨境贸易、数据交换等多种业务场景。在金融业务典型的大数据交易、资产交易、共享经济和积分流通与通兑的场景下,TBaaS提供价值流通能力,能够让区块链在数字资产发行与流通中扮演资产确权、交易确认、记账、对账和清算的角色。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
二、对接方式全面解析
合约是应用系统与区块链网络进行交互的唯一途径。TBaaS为用户提供了两种主要的对接方式:云API和区块链SDK。两种方式均通过区块链SDK与区块链网络进行交互,云API可视为对区块链SDK的封装。在实际业务中,选择合适的对接方式至关重要,以下对两种方式进行详细对比分析。
2.1 云API对接方式
云API方式的显著优势在于配置简单,使用SecretID和SecretKey即可接入网络。用户无需深入了解区块链底层的复杂机制,只需通过标准的HTTP API调用即可完成与区块链网络的交互。这种方式特别适合以下场景:用户侧应用系统希望以最快的速度或最小的开发时间对接云上的区块链网络;应用系统对区块链的调用频率低于一定阈值(不同文档分别提及20笔/秒或50笔/秒);应用系统无法固定部署在与区块链所在地域相同的云上私有网络(VPC)中,或用户不打算购买腾讯云服务器。云API方式的功能相对有限,主要包含调用、查询和发起交易等基础操作。目前云API同时支持长安链·ChainMaker和Fabric两种区块链引擎。
2.2 区块链SDK对接方式
区块链SDK方式虽然配置相对繁琐,但功能更加强大。TBaaS对原生社区SDK进行了封装,在简化配置流程的同时保留了丰富的功能支持。例如,tbaas-fabric-sdk-java在原生Fabric社区SDK基础上进行了封装优化;chainmaker-sdk-go-demo则详细介绍了如何使用SDK对接长安链网络,并提供完整的Demo帮助用户快速上手。区块链SDK方式适用于以下场景:应用系统对区块链的调用频率超过一定阈值(20笔/秒或50笔/秒);应用系统已经基于区块链原生的SDK进行了相关开发,迁移至云上时希望改动尽可能少;若需内网服务,用户侧服务器所在VPC与区块链网络需要在同一地域。目前Fabric同时支持内网和外网服务,而长安链·ChainMaker仅支持外网服务。
三、对接前的准备工作
3.1 开通TBaaS服务
使用TBaaS服务的第一步是在腾讯云控制台中开通产品。用户需要先注册腾讯云账号并完成企业实名认证。登录腾讯云控制台后,在服务列表中找到区块链服务TBaaS并进入其管理界面。根据业务需求选择合适的区块链底层技术,如Hyperledger Fabric或长安链·ChainMaker。
3.2 创建区块链网络实例
在TBaaS控制台中,用户可以通过一键式自动化部署搭建区块链网络。以Hyperledger Fabric为例,操作步骤如下:选择左侧导航栏中的"Fabric > 区块链网络",进入区块链网络页面;单击"新建",进入区块链服务TBaaS-Fabric购买页面;按照页面提示填写基本信息、组织及节点配置。平台提供了快速配置和自定义配置两种模式,快速配置模式下默认采购1个节点,自定义配置中则可根据需要自定义节点数量。主要配置参数包括:联盟(需先建立联盟后方可购买区块链网络)、地域(建议选择就近地域以减少延迟)、组织名称(以字母开头,12位以内数字和字母组成)、CA机构(默认支持Fabric CA)、证书加密方式(默认支持ECC证书)、状态数据库类型(支持LevelDB和CouchDB,默认为LevelDB)。配置完成后单击"立即购买"即可成功部署Fabric网络。
3.3 获取API密钥
无论选择云API还是区块链SDK方式对接,都需要获取腾讯云API密钥,即SecretID和SecretKey。SecretID用于标识API调用者的身份,SecretKey用于加密签名字符串和服务器端验证签名字符串的密钥。SecretKey必须严格保管,避免泄露。用户可以在腾讯云控制台的访问管理(CAM)中申请并获取安全凭证。API调用地址为tbaas.tencentcloudapi.com。
四、智能合约开发
TBaaS用户需要自行开发符合业务场景的智能合约,并在TBaaS上进行安装部署。TBaaS会提供典型的合约代码模板供业务侧参考,以提高开发效率。用户需要对所选区块链底层技术(如Hyperledger Fabric、长安链·ChainMaker)的运行机制以及智能合约有所了解。
4.1 智能合约开发语言
TBaaS目前支持Hyperledger Fabric版本2.3,智能合约支持Golang、Java和NodeJS三种高级语言进行开发。Fabric合约的详细开发说明可参考官方开发指南。
4.2 智能合约代码示例(Golang)
以下是一个基于Hyperledger Fabric的简单智能合约示例,实现了文件存证的基本功能:
package main
import (
"encoding/json"
"fmt"
"time"
"github.com/hyperledger/fabric-contract-api-go/contractapi"
)
// Fact 存证数据结构
type Fact struct {
FileHash string `json:"fileHash"`
FileName string `json:"fileName"`
Timestamp int64 `json:"timestamp"`
Uploader string `json:"uploader"`
}
// EvidenceContract 存证合约
type EvidenceContract struct {
contractapi.Contract
}
// Save 保存存证信息
func (e *EvidenceContract) Save(ctx contractapi.TransactionContextInterface, fileHash string, fileName string) error {
// 获取交易提交者信息
uploader, err := ctx.GetClientIdentity().GetID()
if err != nil {
return fmt.Errorf("获取提交者信息失败: %v", err)
}
// 构造存证数据
fact := Fact{
FileHash: fileHash,
FileName: fileName,
Timestamp: time.Now().Unix(),
Uploader: uploader,
}
// 序列化为JSON
factBytes, err := json.Marshal(fact)
if err != nil {
return fmt.Errorf("序列化数据失败: %v", err)
}
// 以文件哈希为键存储到世界状态
return ctx.GetStub().PutState(fileHash, factBytes)
}
// Query 根据文件哈希查询存证信息
func (e *EvidenceContract) Query(ctx contractapi.TransactionContextInterface, fileHash string) (*Fact, error) {
// 从世界状态获取数据
factBytes, err := ctx.GetStub().GetState(fileHash)
if err != nil {
return nil, fmt.Errorf("查询数据失败: %v", err)
}
if factBytes == nil {
return nil, fmt.Errorf("未找到文件哈希为 %s 的存证记录", fileHash)
}
// 反序列化JSON
var fact Fact
err = json.Unmarshal(factBytes, &fact)
if err != nil {
return nil, fmt.Errorf("解析数据失败: %v", err)
}
return &fact, nil
}
func main() {
chaincode, err := contractapi.NewChaincode(&EvidenceContract{})
if err != nil {
fmt.Printf("创建链码失败: %v", err)
return
}
if err := chaincode.Start(); err != nil {
fmt.Printf("启动链码失败: %v", err)
}
}4.3 合约的安装与实例化
在TBaaS控制台中进行合约管理:在TBaaS控制台中选择左侧导航中的"Fabric > 区块链网络",进入网络卡片页面,单击对应的卡片进入网络详情页。选择"合约管理"页签,进入对应页面可选择通道ID切换至对应需要新建合约的通道。单击"新建合约",在弹窗中填写对应的合约名称、版本等信息,并上传合约文件。Fabric合约支持Go、Java、NodeJs三种语言。
新建完成的合约需要安装到Peer节点中,并进行实例化后才可运行调用。在合约管理页面中新建完成合约后,在合约列表中即可看到新建的合约,状态处于"未实例化"。单击列表操作列的"安装",在弹窗中选择需要安装的Peer节点,勾选后单击"安装"即可完成。完成安装的合约即可进行实例化,在合约管理页面中点击合约列表操作列的"实例化",在实例化弹窗中可根据需要设置背书策略及私有数据集等信息,确认后即可开始实例化。在合约列表中单击合约的名称可进入对应合约的合约详情页,查看合约的基本信息、安装的节点、合约日志等信息。合约也支持升级操作,在合约管理页签中单击合约列表右侧列中的"升级",填写新的版本号、上传新的合约文件后即可完成合约的升级。
五、Python SDK调用实战
TBaaS提供了适用于Python的开发工具包(SDK 3.0),方便Python开发者调试和接入TBaaS产品API。
5.1 环境依赖与安装
Python SDK依赖Python 2.7或3.6至3.12版本。推荐通过pip安装:
pip install tencentcloud-sdk-python如果项目中同时设置了Python2和Python3环境,应使用pip3命令在Python3环境中安装。
5.2 Python SDK调用示例
以下以调用InvokeFabricChaincode接口执行Fabric用户合约交易为例:
# -*- coding: utf-8 -*-
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.tbaas.v20180416 import tbaas_client, models
def invoke_contract():
try:
# 实例化认证对象,传入腾讯云账号的SecretId和SecretKey
cred = credential.Credential("your-secret-id", "your-secret-key")
# 实例化HTTP选项
httpProfile = HttpProfile()
httpProfile.endpoint = "tbaas.tencentcloudapi.com"
# 实例化客户端选项
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化TBaaS客户端对象
client = tbaas_client.TbaasClient(cred, "ap-guangzhou", clientProfile)
# 实例化请求对象
req = models.InvokeFabricChaincodeRequest()
# 填写请求参数
params = {
"ClusterId": "your-cluster-id", # 区块链网络ID
"ChannelId": "your-channel-id", # 通道ID
"ChaincodeName": "evidence", # 合约名称
"FuncName": "Save", # 合约方法名
"ArgsParam": [ # 合约参数
"0x9f86d081884c7d659a9fe1", # fileHash
"document.pdf" # fileName
]
}
req.from_json_string(json.dumps(params))
# 发起调用
resp = client.InvokeFabricChaincode(req)
# 输出响应结果
print(resp.to_json_string())
except TencentCloudSDKException as err:
print(f"调用失败: {err}")
if __name__ == "__main__":
invoke_contract()六、Java SDK调用实战
TBaaS同样提供了适用于Java的开发工具包(SDK 3.0),方便Java开发者调试和接入TBaaS产品API。
6.1 环境依赖与安装
Java SDK依赖JDK 7版本及以上。推荐通过Maven安装,在pom.xml中添加以下依赖:
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.0.1</version>
</dependency>版本号请以Maven仓库中的最新版本为准。
6.2 Java SDK调用示例
以下以调用Invoke接口发起交易为例:
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.tbaas.v20180416.TbaasClient;
import com.tencentcloudapi.tbaas.v20180416.models.InvokeRequest;
import com.tencentcloudapi.tbaas.v20180416.models.InvokeResponse;
public class InvokeTransaction {
public static void main(String[] args) {
try {
// 实例化认证对象,传入腾讯云账号的SecretId和SecretKey
Credential cred = new Credential("your-secret-id", "your-secret-key");
// 设置访问域名
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("tbaas.tencentcloudapi.com");
// 实例化客户端配置
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化TBaaS客户端对象
TbaasClient client = new TbaasClient(cred, "ap-guangzhou", clientProfile);
// 实例化请求对象
InvokeRequest req = new InvokeRequest();
req.setClusterId("your-cluster-id");
req.setChannelId("your-channel-id");
req.setChaincodeName("evidence");
req.setFuncName("Save");
// 设置合约参数
String[] argsParam = {"0x9f86d081884c7d659a9fe1", "document.pdf"};
req.setArgsParam(argsParam);
// 发起调用
InvokeResponse resp = client.Invoke(req);
// 输出响应结果
System.out.println(InvokeResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) {
System.out.println("调用失败: " + e.toString());
}
}
}七、对接最佳实践
7.1 性能优化
根据业务的实际调用频率选择合适的对接方式。如果调用频率低于20笔/秒,云API方式足以满足需求且开发效率更高;如果调用频率超过20笔/秒,建议使用区块链SDK方式以获得更好的性能。对于需要内网服务的情况,需确保用户侧服务器所在VPC与区块链网络在同一地域。建议选择就近地域部署区块链网络以减少网络延迟。
7.2 安全管控
SecretKey必须严格保管,避免泄露。建议使用RAM子账号进行最小权限授权,避免主账号密钥泄露带来的风险。TBaaS采用基于数字证书的PKI身份管理机制,可有效保障链上交互的安全性。在数据隐私保护方面,Hyperledger Fabric提供了多种手段:根据业务类型或参与者接入需求将区块链划分为多个通道,每个通道的数据与其他通道的数据隔离存储和传输,数据只能由该通道的参与者访问;在单个通道中,可使用"私有数据集"功能管理数据的访问范围,定义为仅允许部分参与者访问,其他参与者只能看到数据的摘要值;参与者也可以仅将数据的摘要值或加密密文上链。
7.3 成本控制
TBaaS公有云版本为全托管服务,用户无需预先购买任何腾讯云资源,只需根据实际需求和页面指引点击购买即可。用户可以通过控制台查看底层资源(包括CPU、内存、磁盘、网络)的使用情况,并根据实际需要进行扩容操作。在智能合约设计上,应合理选择上链数据,并非所有数据都适合上链。通常适合上链存储的数据包括:需要多方共同查询、修改(以新增方式)和共享的数据;需要特定参与者背书其真实性的数据;具有直接或间接价值的数据。同时需要考虑数据的隐私和安全问题。
八、总结
腾讯云区块链服务平台TBaaS为企业提供了快速构建和部署区块链网络的能力。通过云API和区块链SDK两种对接方式,用户可以根据自身业务场景灵活选择最适合的集成方案。云API方式配置简单、开发效率高,适合调用频率较低的场景;区块链SDK方式功能强大、性能优越,适合高频调用和已有区块链应用迁移的场景。智能合约作为应用系统与区块链网络交互的桥梁,需要用户根据业务需求自行开发,TBaaS提供了多语言支持和合约模板参考。通过Python和Java SDK的实战示例,开发者可以快速上手TBaaS的对接开发。在性能优化、安全管控和成本控制方面遵循最佳实践,能够帮助企业安全、高效、经济地使用区块链服务,推动业务创新与数字化转型。
常见问题解答
问1:TBaaS支持哪些区块链底层技术?
答:TBaaS目前支持Hyperledger Fabric腾讯增强版、长安链·ChainMaker和FISCO BCOS等多种区块链底层引擎。用户可以根据自己的业务需求选择合适的区块链类型。
问2:云API和区块链SDK两种对接方式有什么区别?
答:云API配置简单,使用SecretID和SecretKey即可接入,功能相对基础,适合调用频率较低的场景。区块链SDK配置稍复杂但功能更强大,支持更丰富的操作,适合高频调用场景。
问3:TBaaS用户是否需要自己开发智能合约?
答:需要。用户需要自行开发符合业务场景的智能合约,并在TBaaS上进行安装部署。TBaaS会提供典型的合约代码模板供参考,帮助提高开发效率。
问4:智能合约支持哪些开发语言?
答:TBaaS目前支持Hyperledger Fabric版本2.3,智能合约支持Golang、Java和NodeJS三种高级语言进行开发。
问5:如何保证链上数据的隐私安全?
答:Hyperledger Fabric提供了多种隐私保护手段:通过划分通道实现数据隔离;使用私有数据集功能控制数据访问范围;将数据摘要值或加密密文上链。
问6:TBaaS支持内网访问吗?
答:Fabric引擎同时支持内网和外网服务。如需内网服务,需购买腾讯云服务器,且用户侧服务器所在VPC与区块链网络需要在同一地域。长安链·ChainMaker目前仅支持外网服务。




