Blockchain 运行asset_management.go与运行像chaincode_example02.go这样的简单链码有何不同

Blockchain 运行asset_management.go与运行像chaincode_example02.go这样的简单链码有何不同,blockchain,hyperledger,Blockchain,Hyperledger,据我所知,部署/调用链码的简单工作流是: 在区块链上部署链码(智能合约) 这将在运行链码的所有对等方上打开docker容器 调用一些函数 这种类型的函数更改链码状态中变量的值 例如,链码可以通过在资产管理链码目录中运行go test进行测试。但这并没有真正带来运行asset_管理链代码的docker容器 部署/调用此链码的正确方法是什么?它与使用REST接口部署/调用链码有何区别(就像我们为您所做的)您提到的链码工作流是正确的,只是关于链码状态变量的一个细节:变量存储在名为,它是通过调用

据我所知,部署/调用链码的简单工作流是:

  • 在区块链上部署链码(智能合约)

    • 这将在运行链码的所有对等方上打开docker容器
  • 调用一些函数
    • 这种类型的函数更改链码状态中变量的值
  • 例如,链码可以通过在资产管理链码目录中运行
    go test
    进行测试。但这并没有真正带来运行asset_管理链代码的docker容器


    部署/调用此链码的正确方法是什么?它与使用REST接口部署/调用链码有何区别(就像我们为您所做的)

    您提到的链码工作流是正确的,只是关于链码状态变量的一个细节:变量存储在名为,它是通过调用链码来访问的,它是

    现在,您要做的是在中运行代码。如果您查看这段代码,您将看到它基本上启动了一个VP和一个CA,然后尝试将事务发送到测试链代码是否工作。例如:

    // Now create the Transactions message and send to Peer.
    transaction, err := txHandler.NewChaincodeExecute(chaincodeInvocationSpec, tid)
    
    您还可以为chaincode_example02编写一个测试文件并对其进行测试

    或者,您也可以使用与部署链码相同的方式部署资产管理链码\u example2。可以使用a或a


    重要提示:资产管理链码用于测试,因此相当复杂。调用其方法意味着使用数字签名来检查链码调用程序的身份。您可以检查资产管理测试文件以查看它是如何完成的。

    您提到的链码工作流是正确的,只是关于链码状态变量的一个细节:变量存储在名为的全局键值集合中,该集合通过调用链码访问,并且是正确的

    现在,您要做的是在中运行代码。如果您查看这段代码,您将看到它基本上启动了一个VP和一个CA,然后尝试将事务发送到测试链代码是否工作。例如:

    // Now create the Transactions message and send to Peer.
    transaction, err := txHandler.NewChaincodeExecute(chaincodeInvocationSpec, tid)
    
    您还可以为chaincode_example02编写一个测试文件并对其进行测试

    或者,您也可以使用与部署链码相同的方式部署资产管理链码\u example2。可以使用a或a


    重要提示:资产管理链码用于测试,因此相当复杂。调用其方法意味着使用数字签名来检查链码调用程序的身份。您可以检查资产管理测试文件以查看其操作方式。

    任何想要手动运行“具有资产管理角色的资产管理”的人的步骤列表:

  • 签出结构,从“devenv”文件夹运行vagrant

  • ssh连接到已启动的容器

  • 重置结构的配置:

    rm /var/hyperledger/production
    
  • 在membersrvc.yaml中启用属性证书颁发机构

    aca.enabled: true
    
  • 在core.yaml中启用安全性

    security.enable: true
    
  • 在core.yaml中将“node”的日志级别切换为“debug”(可选。如果您知道证书,则不需要)

  • 在后台运行membersrvc:

    nohup membersrvc &> /tmp/membersrvc.log &
    
  • 运行对等服务

    peer node start
    
  • 根据本例中的注释,验证用户“assigner,bob,alice”是否在membersrvc.yaml中,我们将使用:

    //此示例使用属性支持,特别是基于属性的访问控制(ABAC)实现资产转移。
    //本例中有三个用户:
    //-爱丽丝
    //-鲍勃
    //-转让人
    // 
    //此用户在asset.yaml文件的“eca”部分中定义。
    //在asset.yaml文件的“aca”部分中,为该用户定义了两个属性:
    //第一个属性称为“角色”,具有以下值:
    //-alice拥有角色=客户端
    //-bob具有角色=客户端
    //-分配者具有角色=分配者
    // 
    //第二个属性称为“account”,其值为:
    //-alice的帐户=12345-56789
    //-bob拥有账户=23456-67890

    使用vagrant打开另一个ssh终端并登录网络:

    peer network login assigner -p Tc43PeqBl11
    peer network login bob -p NOE63pEQbL25
    peer network login alice -p CMS10pEQlB16
    
  • 8.使用“assigner”安全上下文将链码部署到网络:

    curl -XPOST -d ‘{“jsonrpc": "2.0", "method": "deploy", "params": {"type": 1,"chaincodeID": {"path": "github.com/hyperledger/fabric/examples/chaincode/go/asset_management_with_roles","language": "GOLANG"}, "ctorMsg": { "args": ["init"] }, "metadata":[97, 115, 115, 105, 103, 110, 101, 114] ,"secureContext": "assigner"} ,"id": 0}' http://localhost:7050/chaincode
    
    元数据包含utf-8编码的字符串“assigner”。此字符串将保存在分类账中,只有具有此角色的用户才能在智能合同中执行“assign”功能

    为了保持示例可读性,让我们将链码id保存在局部变量中:

    export HASH=7adc030881c07c39d2edac0b1560bf7cf2b7f0a4bce74fe7e6144e3f36e1bf2d176093d4c23ba58712a9589d9600e6d9ef596a1521a4c5227c222d8af2bf16c8
    
  • 从现在开始,用户“assigner”可以为bob和alice创建新资产,我们只需找到他们的证书。
    让我们对“bob”securityContext下的任意随机资产名称运行查询命令:

    curl -XPOST -d '{"jsonrpc": "2.0", "method": "query", "params": {"type": 1, "chaincodeID": {"name": "'"$HASH"'"}, "ctorMsg": {"args": ["query", "myasset"]}, "secureContext": "bob", "attributes": ["role", "account"]}, "id": 1}' http://localhost:7050/chaincode
    
    (重要提示:没有
    “属性”:[“角色”、“帐户”]
    交易证书中不会加载任何属性)

    只要“peer”在调试模式下启动,bob的证书将打印在peer日志输出中。请尝试查找“[client.bob]Adding new Cert”行并复制证书值:

    30 82 02 90 30 82 02 37 a0 03 02 01 02 10 2f 9e 4e da c9 e9 4e 97 b1 58 24 78 4e 15 05 f4 30 0a 06 08 2a 86 48 ce 3d 04 03 03 03 30 31 0b 30 09 06 03 55 02 53 31 14 30 12 06 03 55 04 0a 13 0b 48 79 70 72 6c 65 64 67 72 31 0c 30 03 55 04 03 03 03 13 03 74 63 30 1e 31 36 30 39 31 32 34 39 5a 17 0d 31 36 31 32 31 38 32 32 34 31 39 5a 30 45 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 14 30 12 06 03 55 04 0a 13 0b 48 79 70 65 72 6c 65 67 65 72 31 20 30 1e 06 03 55 04 03 13 17 54 72 61 6e 73 61 63 74 6 F 6e 20 43 65 72 74 69 66 61 74 65 30 59 30 06 07 2a 48 ce 03 01 06 08 2a 86 ce 3d 03 01 07 03 03 04 42 00 04 78 8f f2 11 55 a35a 8d f1 b5 4f 38 e4 94 e4 67 b0 47 7f e0 07 04 b8 fb 12 ee 86
    
    curl -XPOST -d ‘{"jsonrpc": "2.0", "method": "query", "params": {"type": 1, "chaincodeID": {"name": "'"$HASH"'"}, "ctorMsg": {"args": ["query", "myasset"]}, "secureContext": "bob", "attributes": ["role", "account"]}, "id": 1}' http://localhost:7050/chaincode