我正在开发Hyperledger fabric 1.0 beta版。到目前为止,我注意到如果使用Node sdk在对等方上完成事务,它会在内部向CA发送一个调用,以获取新用户的加密资料(证书,私钥,公钥)。如果我已经拥有用户证书,私钥,公钥,我该如何使用它们向对等方发送请求,而不是使用CA提供的加密资料。 我注意到Cryptogen实用程序还为用户生成加密工件。如何使用这些工件在对等体上进行事务而不是先调用CA?
答案 0 :(得分:1)
请分享如何在GO SDK中解决此问题。我可以搬到GO 必要时应用层。
func TestExample(t *testing.T) {
conf, err := config.InitConfig("config.yaml")
assert.NoError(t, err)
cl := fabricclient.NewClient(conf)
bccspFactory.InitFactories(nil)
cryptoSuite := bccspFactory.GetDefault()
privKey := "/home/yacovm/fabricDeployment/crypto-config/peerOrganizations/hrl.ibm.il/users/Admin@hrl.ibm.il/msp/keystore/213d24d189babc01e1f2e4e4cc2fd1a68bcfe95a2bdd0981ef2f9c39a00fb3f2_sk"
pubKey := "/home/yacovm/fabricDeployment/crypto-config/peerOrganizations/hrl.ibm.il/users/Admin@hrl.ibm.il/msp/signcerts/Admin@hrl.ibm.il-cert.pem"
user ,err := fabapi.NewPreEnrolledUser(conf, privKey, pubKey, "yacov", "PeerOrg", bccspFactory.GetDefault())
cl.SetCryptoSuite(cryptoSuite)
assert.NotNil(t, user)
assert.NoError(t, err)
cl.SetUserContext(user)
o, err := orderer2.NewOrderer("vm1:7050",
"/home/yacovm/fabricDeployment/crypto-config/ordererOrganizations/hrl.ibm.il/orderers/vm1.hrl.ibm.il/tls/ca.crt",
"", conf)
assert.NoError(t, err)
p, err := peer.NewPeerTLSFromCert("vm2:7051", "/home/yacovm/fabricDeployment/crypto-config/peerOrganizations/hrl.ibm.il/peers/vm2.hrl.ibm.il/tls/ca.crt", "", conf)
assert.NoError(t, err)
ch, err := cl.NewChannel("yacov")
ch.AddOrderer(o)
ch.AddPeer(p)
cl.SaveUserToStateStore(user, true)
tp, err := ch.CreateTransactionProposal("exampleCC", "yacov", []string{"invoke", "a", "b", "1"}, true, nil)
assert.NoError(t, err)
assert.NotNil(t, tp)
resp, err := channel.SendTransactionProposal(tp, 1, []apitxn.ProposalProcessor{p})
assert.NoError(t, err)
fmt.Println(string(resp[0].TransactionProposalResult.ProposalResponse.Response.Payload))
txn, err := ch.CreateTransaction(resp)
assert.NoError(t, err)
txnResp, err := ch.SendTransaction(txn)
assert.NoError(t, err)
fmt.Println(txnResp[0])
time.Sleep(time.Second * 5)
tp, err = ch.CreateTransactionProposal("exampleCC", "yacov", []string{"query", "a"}, true, nil)
resp, err = channel.SendTransactionProposal(tp, 1, []apitxn.ProposalProcessor{p})
fmt.Println(string(resp[0].TransactionProposalResult.ProposalResponse.Response.Payload))
}
答案 1 :(得分:0)
请参阅fabric项目中的e2e_cli示例,通过使用脚本generateArtifacts.sh,您将获得证书文件和创世块。当您启动节点服务器时,您直接从现有文件读取证书而不是从CA服务器获取证书,实际上您不需要运行CA服务器。