区块链 节点专题(3)SPV轻节点怎么用 chainmaker为例
  DJsdk34H4Gbu 2023年11月02日 54 0


9.1.1. SPV轻节点概述​​​

SPV轻节点在​​spv​​​和​​light​​两种模式下,支持独立部署和作为组件集成的方式使用:

  • 独立部署,单独一个进程。在​​spv​​模式下,作为验证节点,通过同步区块头和部分其他数据,可对外提供交易存在性及有效性证明服务;在​​light​​模式下,作为轻节点,可同步区块及同组织内的交易。
  • 作为组件集成进其他项目,与其他项目在一个进程中。在​​spv​​模式下,调用启动以获取业务链的数据,可提供交易存在性及有效性证明功能;在​​light​​模式下,可同步和查询区块和同组织内的交易数据,并支持用户注册回调函数,在提交区块后将被执行。

SPV模式独立部署时,Client端通过grpc验证交易有效性示例

package usecase

import (
"context"
"log"

"chainmaker.org/chainmaker/spv/v2/pb/api"
"google.golang.org/grpc"
)

func useCase() {
// 1.构造Client
conn, err := grpc.Dial("127.0.0.1:12308", grpc.WithInsecure())
if err != nil {
log.Fatal(err)
return
}
client := api.NewRpcProverClient(conn)

// 2.构造交易验证信息
request := &api.TxValidationRequest{
ChainId: "chainId", // 链Id
BlockHeight: 1, // 交易所在区块高度
//Index: -1, // 此版本未验证该字段,不需要填写
TxKey: "TxId", // 交易Id
ContractData: &api.ContractData{
Name: "contractName", // 合约名
Method: "method", // 方法名
Version: "version", // 合约版本
Params: []*api.KVPair{
{Key: "argName1", Value: []byte("argValue1")}, // Key是所调用合约方法的参数名,Value是参数值
{Key: "argName2", Value: []byte("argValue2")},
{Key: "argName3", Value: []byte("argValue3")},
},
Extra: nil, // 预留扩展字段
},
Timeout: 5000, // 验证超时时间
Extra: nil, // 预留扩展字段
}

// 3.验证交易有效性
response, err := client.ValidTransaction(context.Background(), request)
if err != nil {
log.Fatal(err)
}

if int32(response.Code) != 0 {
log.Fatal(err)
}

// 4.用户其他逻辑

}

​9. SPV轻节点 部署和使用文档 — chainmaker-docs v2.2.1 documentation​


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
DJsdk34H4Gbu