2016-05-04 7 views
1

Die einfachen Workflow für die Bereitstellung/Aufrufen einer chaincode (meines Wissens) ist:Wie läuft die asset_management.go unterscheidet sich von einer einfachen chaincode wie chaincode_example02.go läuft

  1. Bereitstellen eines chaincode (Smart Vertrag) auf der blockchain

    • Dies bringt einen docker-Container auf allen Peers, die
  2. in es hat eine Funktion Invoke 012 die chaincode läuft
    • Diese Art der Funktion die Werte der Variablen in chaincode Zustand

Für asset_management.go ändert, kann die chaincode durch Ausführen go test im asset_management chaincode Verzeichnis getestet werden. Aber das bringt nicht wirklich einen Docker-Container (oder tut es?), Der den Asset-Management-Chaincode ausführt.

Was ist der richtige Weg, um diese chaincode einsetzen/aufrufen und wie unterscheidet es sich von der Bereitstellung/Aufrufen chaincodes die REST-Schnittstelle (wie wir für chaincode_example02 tun)

Antwort

3

Der chaincode Workflow erwähnt Sie richtig ist, nur ein Detail in Bezug auf Variablen im Chaincode-Status: Die Variablen werden in einer globalen Schlüsselwertauflistung mit dem Namen World State gespeichert, auf die über den Aufruf eines Chaincodes zugegriffen wird, und sie lautet access protected.

Nun, was Sie mit go test tun, führt den Code in asset_management_test.go. Wenn Sie sich diesen Code anschauen, werden Sie sehen, dass er grundsätzlich einen VP und eine CA startet und dann versucht, Transaktionen an Tests zu senden, bei denen der Chaincode funktioniert. Zum Beispiel:

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

Sie könnten auch eine Testdatei für den chaincode_example02 codieren und testen.

Oder Sie können den Chaincode asset_management genauso implementieren, wie Sie chaincode_example02 bereitstellen. Welches kann ein chaincode development environment oder ein development network sein.

Wichtig: asset_management chaincode wird verwendet, um die invocation access control zu testen, also ist es ziemlich komplex. Der Aufruf seiner Methoden bedeutet die Verwendung von digitalen Signaturen, um die Identität des Kettencode-Aufrufers zu prüfen. Sie können die Datei asset_management_test überprüfen, um zu sehen, wie es gemacht wird.

3

Die Liste der Schritte für jeden, der möchte „asset_management_with_roles“ manuell ausführen:

  1. Kasse Stoff, laufen Vagabund aus „devenv“ -Ordner

  2. ssh auf den gestarteten Container.

  3. Reset-Fabric Konfiguration:

    rm /var/hyperledger/production 
    
  4. Attributzertifikatverwaltung in membersrvc.yaml aktivieren

    aca.enabled: true 
    
  5. Sicherheit aktivieren in core.yaml

    security.enable: true 
    
  6. Schalterprotokollebene für "Knoten" zu "de Fehler "in core.yaml (optional. nicht erforderlich, wenn Sie die Zertifikate kennen)

    logging.node: debug 
    
  7. Run membersrvc im Hintergrund:

    nohup membersrvc &> /tmp/membersrvc.log & 
    
  8. Run Peer-Dienst

    peer node start 
    
  9. Überprüfen Sie, ob Benutzer „Zuweiser, bob, alice“ sind in membersrvc.yaml, nach dem Kommentar in diesem Beispiel werden wir arbeiten mit:

    // 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

    Öffnen Sie eine andere SSH-Terminal mit Vagabund und Anmeldung zum Netz:

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

8. Bereitstellen von chaincode an das Netzwerk „Zuweiser“ Sicherheitskontext mit:

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 

Metadaten enthalten die utf-8 codierte Zeichenfolge "assigner". Diese Zeichenfolge wird in einem Ledger gespeichert und nur Benutzer mit einer solchen Rolle können die Funktion "Zuweisen" im Smart-Vertrag ausführen.

Um zu halten, können beispielsweise lesbar chaincode-ID in lokalen Variablen speichern: Bob

export HASH=7adc030881c07c39d2edac0b1560bf7cf2b7f0a4bce74fe7e6144e3f36e1bf2d176093d4c23ba58712a9589d9600e6d9ef596a1521a4c5227c222d8af2bf16c8 
  1. Ab diesem Moment user „Zuweiser“ kann Neugelder erstellen und Alice, wir müssen nur ihre Zertifikate finden.
    Laufabfragebefehl Lassen Sie sich für jeden zufälligen Asset-Namen unter „bob“ Security:

    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 
    

    (WICHTIG: ohne “attributes”: [“role”, “account”] werden keine Attribute in Transaktionen Zertifikat geladen werden)

    Soweit „Peer“ gestartet Im Debug-Modus wird Bobs Zertifikat in der Peer-Log-Ausgabe gedruckt. Versuchen Reihe „[client.bob] Das Hinzufügen von neuen Cert“ und Kopie Zertifikat Wert zu finden:

    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. Zertifikat verschlüsselt werden based64 sollte.Als Option können wir http://tomeko.net/online_tools/hex_to_base64.php?lang=en

    Insert-Zertifikat in „Hex-String“ Feld verwenden, klicken Sie auf „Konvertieren“, und das Ergebnis wird in seinen „Output (base64)“:

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

  3. „zuweisen "Methode erwartet 2 Parameter den Namen für Asset- und Owner-Zertifikat. 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. Versuchen Sie, die Abfrage von Schritt 9 für Bobbahn wieder

    :: Neue Asset kann folgendermaßen angelegt werden

    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 
    

    und Sie werden, dass „myasset“ sehen ist bereits erstellt und gehört Konto "23456-67890"

  5. Mit dem gleichen Ansatz können wir Zertifikat für Alice finden und den Besitzer für "myasset" ändern.