Чем запуск assets_management.go отличается от запуска простого чейнкода, такого как chaincode_example02.go

Простой рабочий процесс для развертывания/вызова чейнкода (насколько мне известно):

  1. Разверните чейнкод (смарт-контракт) на блокчейне

    • This brings up a docker container on all peers that has the chaincode running in it
  2. Invoke some function
    • This type of function changes the values of variables in chaincode state

Для asset_management.go код цепи можно проверить, запустив go test в каталоге chaincode assets_management. Но на самом деле это не вызывает док-контейнер (или не вызывает?), Который запускает код цепочки assets_management.

Каков правильный способ развертывания/вызова этого чейнкода и чем он отличается от развертывания/вызова чейнкодов с использованием интерфейса REST (как мы делаем для chaincode_example02)


person Clyde D'Cruz    schedule 04.05.2016    source источник


Ответы (2)


Упомянутый вами рабочий процесс чейнкода верен, только одна деталь относительно переменных в состоянии чейнкода: переменные хранятся в глобальной коллекции ключ-значение с именем Состояние мира, доступ к которому осуществляется через вызов чейнкода, и это доступ защищен.

Теперь с помощью go test вы запускаете код в asset_management_test.go. Если вы посмотрите на этот код, вы увидите, что он в основном запускает VP и CA, а затем пытается отправить транзакции для проверки работы чейнкода. Например:

// Now create the Transactions message and send to Peer.
transaction, err := txHandler.NewChaincodeExecute(chaincodeInvocationSpec, tid)

Вы также можете написать тестовый файл для chaincode_example02 и протестировать его.

Или вы также можете развернуть чейнкод assets_management так же, как вы использовали для развёртывания chaincode_example02. Это может быть использование среды разработки чейнкода или сеть разработки.

Важно! код цепочки assets_management используется для тестирования управление доступом к вызову, так что это довольно сложно. Вызов его методов означает использование цифровых подписей для проверки личности инициатора чейнкода. Вы можете проверить файл assets_management_test, чтобы увидеть, как это делается.

person Marc Cayuela Rafols    schedule 04.05.2016

Список шагов для тех, кто хотел бы запустить «asset_management_with_roles» вручную:

  1. Checkout Fabric, запустите vagrant из папки «devenv»

  2. ssh к запущенному контейнеру.

  3. Сбросьте конфигурацию Fabric:

    rm /var/hyperledger/production
    
  4. Включить центр сертификации атрибутов в memberrvc.yaml

    aca.enabled: true
    
  5. Включить безопасность в core.yaml

    security.enable: true
    
  6. Переключите уровень журнала для «узла» на «отладка» в core.yaml (необязательно. Необязательно, если вы знаете сертификаты)

    logging.node: debug 
    
  7. Запустите memberrvc в фоновом режиме:

    nohup membersrvc &> /tmp/membersrvc.log &
    
  8. Запустить одноранговый сервис

    peer node start
    
  9. Проверьте, есть ли пользователи «assigner, bob, alice» в memberrvc.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-терминал с vagrant и войдите в сеть:

    peer network login assigner -p Tc43PeqBl11
    peer network login bob -p NOE63pEQbL25
    peer network login alice -p CMS10pEQlB16
    

8. Разверните чейнкод в сети, используя контекст безопасности «назначающего»:

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

метаданные содержат строку «assigner» в кодировке utf-8. Эта строка будет сохранена в реестре, и только пользователь с такой ролью сможет выполнить функцию «назначить» в смарт-контракте.

Чтобы сохранить читабельность примера, давайте сохраним чейнкод в локальной переменной:

export HASH=7adc030881c07c39d2edac0b1560bf7cf2b7f0a4bce74fe7e6144e3f36e1bf2d176093d4c23ba58712a9589d9600e6d9ef596a1521a4c5227c222d8af2bf16c8
  1. Начиная с этого момента пользователь «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
    

    (ВАЖНО: без “attributes”: [“role”, “account”] никакие атрибуты не будут загружены в сертификат транзакций)

    Поскольку «пир» запущен в режиме отладки, сертификат боба будет напечатан в выводе журнала пира. Попробуйте найти строку «[client.bob] Adding new Cert» и скопировать значение сертификата:

    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. Сертификат должен быть закодирован на основе 64. Как вариант мы можем использовать http://tomeko.net/online_tools/hex_to_base64.php?lang=en

    Вставьте сертификат в поле «Hex string», нажмите кнопку «convert», и результат будет «Output (base64)»:

    MIICkjCCAjigAwIBAgIRAO9nis6q+khvv6TMvhKbmacwCgYIKoZIzj0EAwMwMTELMAkGA1UEBhMCVVMxFDASBgNVBAoTC0h5cGVybGVkZ2VyMQwwCgYDVQQDEwN0Y2EwHhcNMTYwOTE5MjAyMDE5WhcNMTYxMjE4MjAyMDE5WjBFMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLSHlwZXJsZWRnZXIxIDAeBgNVBAMTF1RyYW5zYWN0aW9uIENlcnRpZmljYXRlMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqop3N0IpJaLVaRuYioSuHPvyWX3OY9vo4I1YYw1YophcFGFt3fN0X6bDlufUZ5/u81JMmZHozduREnNzM1n+gaOCARswggEXMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMA0GA1UdDgQGBAQBAgMEMA8GA1UdIwQIMAaABAECAwQwEAYGKgMEBQYKBAZjbGllbnQwFQYGKgMEBQYLBAsyMzQ1Ni02Nzg5MDBNBgYqAwQFBgcBAf8EQNbPDmdWcOogMkZrlxbRJw/06jg4Ai88KW2+BsuxUnIH5FSa3OY7ZsXJLpceIN4SeEWKDKDsIPCo2wm6cUMYApIwOgYGKgMEBQYIBDDikSBKFYtTmYZRhtVDPhnIoSvefWHQ5Vx5oahIRbG8d/w4J1YTrtVoEwa2jikAqJowIwYGKgMEBQYJBBkwMEhFQURyb2xlLT4xI2FjY291bnQtPjIjMAoGCCqGSM49BAMDA0gAMEUCIQCrUQw2moOA5RFEx/780so4uEOV5esX3fy/It0t2la7gQIgGGVoDoM2kSxWH7TtV4T8W4pY6tN/LXu8XpKWb8+eF0k=

  3. Метод «назначить» предполагает 2 параметра: имя актива и сертификат владельца. Новый актив можно создать с помощью:

    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", "method": "query", "params": {"type": 1, "chaincodeID": {"name": "'"$HASH"'"}, "ctorMsg": {"args": ["query", "myasset"]}, "secureContext": "bob", "attributes": ["role", "account"]}, "id": 1}' http://localhost:7050/chaincode
    

    и вы увидите, что «myasset» уже создан и принадлежит аккаунту «23456-67890»

  5. Используя тот же подход, мы можем найти сертификат для Алисы и изменить владельца для «myasset».

person Sergey Balashevich    schedule 19.09.2016