Hyperledger fabric 如何在CLI容器外部查询Hyperledger结构区块链数据?

Hyperledger fabric 如何在CLI容器外部查询Hyperledger结构区块链数据?,hyperledger-fabric,Hyperledger Fabric,我正在使用fabric示例中的./byfn.sh脚本启动我的区块链。 我想从区块链中调用和查询PHP网站的数据 我知道我只能使用CLI容器中的API调用,或者使用JavaSDK/NodeSDK、RESTapi 如何以最简单的方式从区块链查询数据? 我在看NodeSDK和RestApi,但我没有看到太多的指南来帮助我,因此这个问题。 对不起,我问了一些新手问题 谢谢 调用Hyperledger结构对等方并与之交互的正确方式是通过SDK,以下是可用SDK的列表: Java SDK GoLang SD

我正在使用fabric示例中的./byfn.sh脚本启动我的区块链。 我想从区块链中调用和查询PHP网站的数据

我知道我只能使用CLI容器中的API调用,或者使用JavaSDK/NodeSDK、RESTapi

如何以最简单的方式从区块链查询数据? 我在看NodeSDK和RestApi,但我没有看到太多的指南来帮助我,因此这个问题。 对不起,我问了一些新手问题


谢谢

调用Hyperledger结构对等方并与之交互的正确方式是通过SDK,以下是可用SDK的列表:

  • Java SDK
  • GoLang SDK
  • nodejsdk
  • Python SDK

  • 更新

    根据@christo4ferris的建议,还有一个额外的项目:

  • (哪一个可能是您感兴趣的)


    例如,您可以使用golang SDK并执行以下操作:

  • 读取配置文件

    var错误
    conf,err:=config.InitConfig(“config.yaml”)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

  • 初始化结构客户端

    cl:=fabricclient.NewClient(conf)
    bccspFactory.InitFactories(conf.CSPConfig())
    cl.SetCryptoSuite(bccspFactory.GetDefault())

  • 加载客户端证书和密钥

    privKey:=filepath.Join(conf.CryptoConfigPath(),“密钥路径”)
    publikey:=filepath.Join(conf.CryptoConfigPath(),“证书路径”)

  • 读取并设置MSP ID

    mspID,err:=conf.mspID(“org1”)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

  • 将客户端用户设置到上下文中

    user,err:=fabapi.newpreenrolleuser(conf,privKey,pubKey,“user1”,mspID,cl.GetCryptoSuite())
    如果出错!=零{
    fmt.Println(错误)
    返回
    }
    cl.SetUserContext(用户)

  • 设置订购节点

    orderConf,err:=conf.orderConfig(“order0”) 如果出错!=零{ fmt.Println(错误) 返回 }

    o,err:=order.neworder(fmt.Sprintf(“%s:%d”,orderconf.Host,orderconf.Port),
    filepath.Join(conf.CryptoConfigPath(),“订购方证书路径”),
    “order.example.com”,conf)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

  • 设置并初始化通道和背书对等方

    peers,err:=conf.PeersConfig(“org1”)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

    p,err:=peer.NewPeer(fmt.Sprintf(“%s:%d”,peers[0]。主机,peers[0]。端口),conf)
    如果出错!=零{
    fmt.Println(错误)
    }

    ch,err:=cl.NewChannel(“mychannel”)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

    ch.addOrder(o)
    总会计师(p)
    首席执行官(p)
    cl.SaveUserToStateStore(用户,true)

  • 准备交易建议请求发送并提交以供订购

    txRequest:=apitxn.ChaincodeInvokeRequest{
    目标:[]apitxn.ProposalProcessor{p},
    Fcn:“myFCN”,
    Args:[]字符串{“myargs”},
    TransientMap:map[string][]字节{},
    ChaincodeID:“helloworld”,
    }

    proposalResponse,u2;,err:=ch.SendTransactionProposal(txRequest)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

    fmt.Printf(“%v\n”,proposalResponse[0]。proposalResponse)

    tx,err:=ch.CreateTransaction(proposalResponse)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

    txResponse,err:=ch.SendTransaction(tx)
    如果出错!=零{
    fmt.Println(错误)
    返回
    }

    fmt.Println(txResponse[0])


  • 这与所有SDK的工作方式非常相似。

    谢谢!我已经读了一些,并决定从fabcar node sdk查询教程开始:)有意义,让我们知道它是如何进行的:)我想在这里补充一点,REST sdk的工作已经开始