首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行asset_management.go与运行简单的链码(如chaincode_example02.go )有何不同?

运行asset_management.go与运行简单的链码(如chaincode_example02.go )有何不同?
EN

Stack Overflow用户
提问于 2016-05-04 07:24:00
回答 2查看 1.1K关注 0票数 1

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

  1. 在区块链上部署链码(智能契约)
代码语言:javascript
复制
- This brings up a docker container on all peers that has the chaincode running in it 

  1. 调用某些函数
    • 这种类型的函数在链码状态下改变变量的值。

对于management.go,可以通过在asset_management链码目录中运行go test来测试链码。但这并不是真正的码头集装箱(或者说是吗?)它运行asset_management链代码。

部署/调用这个链码的正确方法是什么?它与使用REST接口部署/调用链码有什么不同(就像我们对example02所做的那样)

EN

回答 2

Stack Overflow用户

发布于 2016-05-04 10:58:10

您提到的链码工作流是正确的,只是有关链码状态变量的一个细节:变量存储在名为世界状况的全局键值集合中,该集合通过调用链码访问,它是存取保护

现在,您使用围棋试验所做的是在test.go中运行代码。如果您查看这段代码,您将看到它基本上启动了VP和CA,然后尝试将事务发送到测试链码是否有效。例如:

代码语言:javascript
复制
// Now create the Transactions message and send to Peer.
transaction, err := txHandler.NewChaincodeExecute(chaincodeInvocationSpec, tid)

还可以为chaincode_example02编写测试文件并对其进行测试。

或者,您也可以使用部署chaincode_example02的方式部署chaincode_example02链代码。可以使用链码开发环境开发网络

重要: asset_management链码用于测试调用访问控制,因此相当复杂。调用其方法意味着使用数字签名检查链码调用者的身份。您可以检查asset_management_test文件以查看它是如何完成的。

票数 3
EN

Stack Overflow用户

发布于 2016-09-19 22:12:58

希望手动运行“asset_management_with_roles”的任何人的步骤列表:

  1. 结帐,从“devenv”文件夹中运行“流浪者”
  2. 已启动容器的ssh。
  3. 重置织物的配置: rm /var/超级分类账/生产
  4. 在membersrvc.yaml中启用属性证书颁发机构 aca.enabled:真
  5. 在core.yaml中启用安全性 security.enable:真
  6. 在core.yaml中将“节点”的日志级别切换到“调试”(可选)。如果你知道证书,那就没有必要了) logging.node:调试
  7. 在后台运行membersrvc: &> /tmp/embersrvc.log&
  8. 运行对等服务 对等节点启动
  9. 根据本例中的注释,验证用户“转让人、bob、alice”是否在membersrvc.yaml中: // This example implements asset transfer using attributes support and specifically Attribute Based Access Control (ABAC). // There are three users in this example: // - alice // - bob // - assigner // // This users are defined in the section “eca" of asset.yaml file. // In the section “aca" of asset.yaml file two attributes are defined to this users: // The first attribute is called ‘role' with this values: // - alice has role = client // - bob has role = client // - assigner has role = assigner // // The second attribute is called ‘account' with this values: // - alice has account = 12345-56789 // - bob has account = 23456-67890 使用流浪者打开另一个ssh终端并登录到网络: 对等网络登录指定者-p Tc43PeqBl11对等网络登录bob -p NOE63pEQbL25对等网络登录alice -p CMS10pEQlB16
  10. 使用“转让人”安全上下文将链码部署到网络:
代码语言:javascript
复制
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编码的字符串“转让人”。此字符串将保存在分类账中,只有具有此角色的用户才能在智能契约中执行“分配”功能。

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

代码语言:javascript
复制
export HASH=7adc030881c07c39d2edac0b1560bf7cf2b7f0a4bce74fe7e6144e3f36e1bf2d176093d4c23ba58712a9589d9600e6d9ef596a1521a4c5227c222d8af2bf16c8
  1. 从现在开始,用户“转让人”可以为bob和alice创建新的资产,我们只需找到它们的证书即可。 让我们在“bob”securityContext下运行对任意资产名称的查询命令: curl -XPOST -d '{"jsonrpc":"2.0",“方法”:“查询”,"params":{"type":1,"chaincodeID":{"name":“‘$HASH’”},"ctorMsg":{"args":“查询”,"myasset"},"secureContext":"bob",“属性”:“角色”,“帐户”},"id":1}‘http://localhost:7050/chaincode (重要的是:没有“attributes”: [“role”, “account”],任何属性都不会加载到事务证书中) 只要在调试模式下启动“peer”,bob的证书将在对等日志输出中打印。尝试查找行“client.bob添加新证书”并复制证书值: 30 82 02 90 30 82 02 37 a0 03 02 01 02 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 30 31 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 64 67 65 72 31 0c 30 0a 06 03 55 04 03 13 03 74 63 61 30 1e 17 0d 31 36 30 39 31 39 32 31 32 34 31 39 5a 17 0d 31 36 31 32 31 38 32 31 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 64 67 65 72 31 20 30 1e 06 03 55 04 03 13 17 54 72 61 6e 73 61 63 74 69 6f 6e 20 43 65 72 74 69 66 69 63 61 74 65 30 59 30 13 06 07 2a 86 48 ce 3d 02 01 06 08 2a 86 48 ce 3d 03 01 07 03 42 00 04 78 8f f2 11 55 a3 5a 8d f1 b5 4f 38 e4 94 e4 67 b0 47 7f e0 07 04 b8 fb 12 ee 86 17 8a 05 55 e3 98 f6 c1 af 59 ee 2d 54 a9 c5 36 22 cd fa a8 1b ce ba e0 26 fd 73 40 af 20 5d 15 65 89 9c 62 64 a3 82 01 1b 30 82 01 17 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 07 80 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 0d 06 03 55 1d 0e 04 06 04 04 01 02 03 04 30 0f 06 03 55 1d 23 04 08 30 06 80 04 01 02 03 04 30 10 06 06 2a 03 04 05 06 0a 04 06 63 6c 69 65 6e 74 30 15 06 06 2a 03 04 05 06 0b 04 0b 32 33 34 35 36 2d 36 37 38 39 30 30 4d 06 06 2a 03 04 05 06 07 01 01 ff 04 40 fc c2 07 dd ee ac 8c 76 84 12 07 d2 e0 a6 da b3 06 c9 5b 5b 41 57 a3 f3 a2 f7 59 e2 ed 02 02 7e 56 46 f5 bc 24 00 0a 2e 18 b4 a6 b7 a6 c3 8d ca 15 13 a7 98 42 98 8f 9b 85 a2 d1 6a 77 0d da e8 30 3a 06 06 2a 03 04 05 06 08 04 30 ff d2 ab 7f c8 2d 98 c4 3f c9 f7 05 12 07 01 3a 36 69 f8 ee d1 c4 27 16 48 3e ee ed db b9 b6 3c d6 e5 1a 3e 0b 7d f0 19 1c 81 03 12 f6 7b d5 3e 30 23 06 06 2a 03 04 05 06 09 04 19 30 30 48 45 41 44 72 6f 6c 65 2d 3e 31 23 61 63 63 6f 75 6e 74 2d 3e 32 23 30 0a 06 08 2a 86 48 ce 3d 04 03 03 03 47 00 30 44 02 20 49 52 26 bd b8 f4 a0 98 c6 ff fc 56 3e b5 b0 12 ee ec b7 46 90 55 b1 17 99 29 fe df 80 2e 95 b9 02 20 3b 7f dd 32 88 56 ae a1 14 60 54 60 95 61 fb d1 bc 0c f7 e0 61 f2 e9 0b 46 35 6a 36 61 c9 b8 f0
  2. 证书应该是based64编码的。作为一种选择,我们可以使用base64.php?lang=en 将证书插入“十六进制字符串”字段,单击“转换”按钮,结果将出现在“Output(Base64)”中: MIICkjCCAjigAwIBAgIRAO9nis6q+khvv6TMvhKbmacwCgYIKoZIzj0EAwMwMTELMAkGA1UEBhMCVVMxFDASBgNVBAoTC0h5cGVybGVkZ2VyMQwwCgYDVQQDEwN0Y2EwHhcNMTYwOTE5MjAyMDE5WhcNMTYxMjE4MjAyMDE5WjBFMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLSHlwZXJsZWRnZXIxIDAeBgNVBAMTF1RyYW5zYWN0aW9uIENlcnRpZmljYXRlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqop3N0IpJaLVaRuYioSuHPvyWX3OY9vo4I1YYw1YophcFGFt3fN0X6bDlufUZ5/u81JMmZHozduREnNzM1n+gaOCARswggEXMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwEAYGKgMEBQYKBAZjbGllbnQwFQYGKgMEBQYLBAsyMzQ1Ni02Nzg5MDBNBgYqAwQFBgcBAf8EQNbPDmdWcOogMkZrlxbRJw/06jg4Ai88KW2+BsuxUnIH5FSa3OY7ZsXJLpceIN4SeEWKDKDsIPCo2wm6cUMYApIwOgYGKgMEBQYIBDDikSBKFYtTmYZRhtVDPhnIoSvefWHQ5Vx5oahIRbG8d/w4J1YTrtVoEwa2jikAqJowIwYGKgMEBQYJBBkwMEhFQURyb2xlLT4xI2FjY291bnQtPjIjMAoGCCqGSM49BAMDA0gAMEUCIQCrUQw2moOA5RFEx/780so4uEOV5esX3fy/It0t2la7gQIgGGVoDoM2kSxWH7TtV4T8W4pY6tN/LXu8XpKWb8+eF0k=
  3. “分配”方法需要两个参数--资产和所有者证书的名称。可以使用以下方法创建新资产: curl -XPOST -d '{"jsonrpc": "2.0", "method": "invoke", "params": {"type": 1, "chaincodeID": {"name": "'"$HASH"'"}, "ctorMsg": {"args": ["assign", "myasset", "MIICkjCCAjigAwIBAgIRAO9nis6q+khvv6TMvhKbmacwCgYIKoZIzj0EAwMwMTELMAkGA1UEBhMCVVMxFDASBgNVBAoTC0h5cGVybGVkZ2VyMQwwCgYDVQQDEwN0Y2EwHhcNMTYwOTE5MjAyMDE5WhcNMTYxMjE4MjAyMDE5WjBFMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLSHlwZXJsZWRnZXIxIDAeBgNVBAMTF1RyYW5zYWN0aW9uIENlcnRpZmljYXRlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqop3N0IpJaLVaRuYioSuHPvyWX3OY9vo4I1YYw1YophcFGFt3fN0X6bDlufUZ5/u81JMmZHozduREnNzM1n+gaOCARswggEXMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwEAYGKgMEBQYKBAZjbGllbnQwFQYGKgMEBQYLBAsyMzQ1Ni02Nzg5MDBNBgYqAwQFBgcBAf8EQNbPDmdWcOogMkZrlxbRJw/06jg4Ai88KW2+BsuxUnIH5FSa3OY7ZsXJLpceIN4SeEWKDKDsIPCo2wm6cUMYApIwOgYGKgMEBQYIBDDikSBKFYtTmYZRhtVDPhnIoSvefWHQ5Vx5oahIRbG8d/w4J1YTrtVoEwa2jikAqJowIwYGKgMEBQYJBBkwMEhFQURyb2xlLT4xI2FjY291bnQtPjIjMAoGCCqGSM49BAMDA0gAMEUCIQCrUQw2moOA5RFEx/780so4uEOV5esX3fy/It0t2la7gQIgGGVoDoM2kSxWH7TtV4T8W4pY6tN/LXu8XpKWb8+eF0k="]}, "metadata":[97, 115, 115, 105, 103, 110, 101, 114], "secureContext": "assigner", "attributes": ["role", "account"]}, "id": 1}' http://localhost:7050/chaincode
  4. 再次尝试从步骤9对bob运行查询: curl -XPOST -d‘{“jsonrpc”:"2.0",“方法”:“查询”,"params":{"type":1,"chaincodeID":{"name":“’$HASH‘”},"ctorMsg":{"args":“查询”,"myasset"},"secureContext":"bob",“属性”:“角色”,“帐户”},"id":1}’http://localhost:7050/chaincode 您将看到,“我的资产”已经创建,并属于帐户“23456-67890”。
  5. 使用同样的方法,我们可以为alice找到证书,并将所有者更改为“myasset”。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37021057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档