Självstudie: skapa ett blockchain-program för Azure blockchain Workbench
Du kan använda Azure Blockchain Workbench för att skapa blockkedjeprogram som representerar arbetsflöden med flera parter som definieras av konfiguration och smart kontaktkod.
Du lär dig följande:
- Konfigurera ett blockkedjeprogram
- Skapa en fil med smart kontraktkod
- Lägga till ett blockkedjeprogram i Blockchain Workbench
- Lägga till medlemmar i blockkedjeprogrammet
Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.
Förutsättningar
- En Blockchain Workbench-distribution. Mer information om distributioner finns i avsnittet om Azure Blockchain Workbench-distributioner.
- Azure Active Directory-användare i klientorganisationen som är associerade med Blockchain Workbench. Mer information finns i avsnittet om att lägga till Azure AD-användare i Azure Blockchain Workbench.
- Ett Blockchain Workbench-administratörskonto. Mer information finns i avsnittet om att lägga till Blockchain Workbench-administratörer i Azure Blockchain Workbench.
Hej blockkedjan!
Nu skapar vi ett grundläggande program där en begärare skickar en begäran och en svarare skickar ett svar på begäran. En ansökan kan till exempel vara ”Hej! Hur är det?”, och svaret kan vara ”Det är toppen!”. Både begäran och svaret registreras på den underliggande blockkedjan.
Följ stegen för att skapa programfilerna, eller så kan du ladda ned exemplet från GitHub.
Konfigurationsfil
Konfigurationsmetadata definierar avancerade arbetsflöden och interaktionsmodellen för blockkedjeprogrammet. Konfigurationsmetadata definierar arbetsflödesstegen och interaktionsmodellen för blockkedjeprogrammet. Mer information om innehållet i konfigurationsfiler finns i referensen för konfiguration av Azure-blockkedjearbetsflöden.
Använd det redigeringsprogram du föredrar och skapa en fil med namnet
HelloBlockchain.json.Lägg till följande JSON för att definiera konfigurationen av blockkedjeprogrammet.
{ "ApplicationName": "HelloBlockchain", "DisplayName": "Hello, Blockchain!", "Description": "A simple application to send request and get response", "ApplicationRoles": [ { "Name": "Requestor", "Description": "A person sending a request." }, { "Name": "Responder", "Description": "A person responding to a request" } ], "Workflows": [ { "Name": "HelloBlockchain", "DisplayName": "Request Response", "Description": "A simple workflow to send a request and receive a response.", "Initiators": [ "Requestor" ], "StartState": "Request", "Properties": [ { "Name": "State", "DisplayName": "State", "Description": "Holds the state of the contract.", "Type": { "Name": "state" } }, { "Name": "Requestor", "DisplayName": "Requestor", "Description": "A person sending a request.", "Type": { "Name": "Requestor" } }, { "Name": "Responder", "DisplayName": "Responder", "Description": "A person sending a response.", "Type": { "Name": "Responder" } }, { "Name": "RequestMessage", "DisplayName": "Request Message", "Description": "A request message.", "Type": { "Name": "string" } }, { "Name": "ResponseMessage", "DisplayName": "Response Message", "Description": "A response message.", "Type": { "Name": "string" } } ], "Constructor": { "Parameters": [ { "Name": "message", "Description": "...", "DisplayName": "Request Message", "Type": { "Name": "string" } } ] }, "Functions": [ { "Name": "SendRequest", "DisplayName": "Request", "Description": "...", "Parameters": [ { "Name": "requestMessage", "Description": "...", "DisplayName": "Request Message", "Type": { "Name": "string" } } ] }, { "Name": "SendResponse", "DisplayName": "Response", "Description": "...", "Parameters": [ { "Name": "responseMessage", "Description": "...", "DisplayName": "Response Message", "Type": { "Name": "string" } } ] } ], "States": [ { "Name": "Request", "DisplayName": "Request", "Description": "...", "PercentComplete": 50, "Value": 0, "Style": "Success", "Transitions": [ { "AllowedRoles": ["Responder"], "AllowedInstanceRoles": [], "Description": "...", "Function": "SendResponse", "NextStates": [ "Respond" ], "DisplayName": "Send Response" } ] }, { "Name": "Respond", "DisplayName": "Respond", "Description": "...", "PercentComplete": 90, "Value": 1, "Style": "Success", "Transitions": [ { "AllowedRoles": [], "AllowedInstanceRoles": ["Requestor"], "Description": "...", "Function": "SendRequest", "NextStates": [ "Request" ], "DisplayName": "Send Request" } ] } ] } ] }Spara filen
HelloBlockchain.json.
Konfigurationsfilen har flera avsnitt. Information om varje avsnitt är följande:
Programmetadata
Början av konfigurationsfilen innehåller information om programmet, däribland programnamn och beskrivning.
Programroller
Avsnittet med programroller definierar de användarroller som kan agera eller delta i blockkedjeprogrammet. Du definierar en uppsättning med olika roller som baseras på funktionalitet. I scenariot med begäran–svar finns det en distinktion mellan funktionaliteten hos entiteten begärare, som skapar begäranden, och entiteten svarare, som skapar svar.
Arbetsflöden
Arbetsflöden definierar en eller flera steg och åtgärder i kontraktet. I scenariot med begäran–svar är det första steget (tillståndet) i arbetsflödet att en begärare (roll) vidtar en åtgärd (övergång) för att skicka en begäran (funktion). Nästa steg (tillstånd) är att en svarare (roll) vidtar en åtgärd (övergång) för att skicka ett svar (funktion). Arbetsflödet för ett program kan omfatta egenskaper, funktioner och tillstånd som krävs för att beskriva flödet i ett kontrakt.
Fil med smart kontraktkod
Smarta kontrakt representerar affärslogiken i blockkedjeprogrammet. För närvarande har Blockchain Workbench stöd för Ethereum för blockkedjeregistret. Ethereum använder Solidity som programmeringsspråk för att skriva självtillämpande affärslogik för smarta kontrakt.
Smarta kontrakt i Solidity liknar klasser i objektorienterade språk. Varje kontrakt innehåller tillstånd och funktioner för att implementera steg och åtgärder i det smarta kontraktet.
Använd det redigeringsprogram du föredrar och skapa en fil som heter HelloBlockchain.sol.
Pragmaversion
Som bästa praxis anger du den version av Solidity som du har som mål. Genom att ange versionen minskar du risken för inkompatibiliteter med framtida Solidity-versioner.
Lägg till följande pragmaversion längst upp i filen HelloBlockchain.sol med smart kontraktkod.
pragma solidity >=0.4.25 <0.6.0;
Konfiguration och kodrelation i smart kontrakt
Blockchain Workbench använder konfigurationsfilen och filen med smart kontraktkod för att skapa ett blockkedjeprogram. Det finns en relation mellan det som definieras i konfigurationen och koden i det smarta kontraktet. Kontraktsinformation, funktioner, parametrar och typer krävs för matchning för att skapa programmet. Blockchain Workbench verifierar filerna innan programmet skapas.
Kontrakt
Lägg till huvudet kontrakt i filen HelloBlockchain.sol med smart kontraktkod.
contract HelloBlockchain {
Tillståndsvariabler
Tillståndsvariabler lagrar värden för tillståndet för varje kontraktsinstans. Tillståndsvariablerna i ditt kontrakt måste matcha de arbetsflödesegenskaper som definieras i konfigurationsfilen.
Lägg till tillståndsvariablerna i ditt kontrakt i filen HelloBlockchain.sol med smart kontraktkod.
//Set of States
enum StateType { Request, Respond}
//List of properties
StateType public State;
address public Requestor;
address public Responder;
string public RequestMessage;
string public ResponseMessage;
Konstruktor
Konstruktorn definierar indataparametrar för en ny instans med smart kontrakt för ett arbetsflöde. Obligatoriska parametrar för konstruktorn definieras som konstruktorparametrar i konfigurationsfilen. Antalet, ordningen och typen av parametrar måste stämma överens i båda filerna.
I konstruktorfunktionen skriver du eventuell affärslogik som du vill utföra innan du skapar kontraktet. Till exempel initierar du tillståndsvariablerna med startvärden.
Lägg till konstruktorfunktionen i ditt kontrakt i filen HelloBlockchain.sol med smart kontraktkod.
// constructor function
constructor(string memory message) public
{
Requestor = msg.sender;
RequestMessage = message;
State = StateType.Request;
}
Functions
Funktioner är körbara enheter med affärslogik i ett kontrakt. Obligatoriska parametrar för funktionen definieras som funktionsparametrar i konfigurationsfilen. Antalet, ordningen och typen av parametrar måste stämma överens i båda filerna. Funktioner är associerade med övergångar i ett Blockchain Workbench-arbetsflöde i konfigurationsfilen. En övergång är en åtgärd som utförs för en flytt till nästa steg i ett programs arbetsflöde enligt vad som bestäms av kontraktet.
Skriva eventuell affärslogik som du vill utföra i funktionen. Till exempel kan du ändra värdet för en tillståndsvariabel.
Lägg till följande funktioner i ditt kontrakt i filen
HelloBlockchain.solmed smart kontraktkod.// call this function to send a request function SendRequest(string memory requestMessage) public { if (Requestor != msg.sender) { revert(); } RequestMessage = requestMessage; State = StateType.Request; } // call this function to send a response function SendResponse(string memory responseMessage) public { Responder = msg.sender; ResponseMessage = responseMessage; State = StateType.Respond; } }Spara filen
HelloBlockchain.solmed smart kontraktkod.
Lägga till ett blockkedjeprogram i Blockchain Workbench
Om du vill lägga till ett blockkedjeprogram i Blockchain Workbench laddar du upp konfigurationen och filer för smarta kontrakt för att definiera programmet.
- I en webbläsare går du till webbadressen för Blockchain Workbench. Till exempel
https://{workbench URL}.azurewebsites.net/skapas webbprogrammet när du distribuerar Blockchain Workbench. Information om hur du hittar webbadressen för Blockchain Workbench finns i Webbadress för Blockchain Workbench - Logga in som Blockchain Workbench-administratör.
- Välj program > ny. Fönsterrutan Nytt program visas.
- Välj överför kontrakts konfigurationen > Bläddra för att hitta HelloBlockchain.jsi konfigurations filen som du har skapat. Konfigurationsfilen verifieras automatiskt. Välj länken Visa för att visa verifieringsfel. Åtgärda verifieringsfel innan du distribuerar programmet.
- Välj överför kontrakt koden > Bläddra för att leta reda på filen HelloBlockchain. sol Smart kontrakt kod. Kodfilen verifieras automatiskt. Välj länken Visa för att visa verifieringsfel. Åtgärda verifieringsfel innan du distribuerar programmet.
- Välj Distribuera för att skapa blockkedjeprogrammet baserat på konfigurationen och filerna för smart kontrakt.
Distributionen av blockkedjeprogrammet tar några minuter. När distributionen är klar visas det nya programmet i Program.
Anteckning
Du kan även skapa blockkedjeprogram med hjälp av Azure Blockchain Workbench REST API.
Lägga till blockkedjeprogrammedlemmar
Lägga till programmedlemmar i programmet för att initiera och utföra åtgärder på kontrakt. För att kunna lägga till programmedlemmar måste du vara Blockchain Workbench-administratör.
- Välj program > Hej, blockchain!.
- Det antal medlemmar som är associerade med programmet visas i det övre högra hörnet på sidan. För ett nytt program är antalet medlemmar noll.
- Välj länken för medlemmar i det övre högra hörnet på sidan. En aktuell lista över medlemmar för programmet visas.
- I medlemskapslistan väljer du Lägg till medlemmar.
- Välj eller ange namnet på den medlem som du vill lägga till. Endast Azure AD-användare som finns i Blockchain Workbench-klientorganisationen visas. Om användaren inte hittas behöver du lägga till Azure AD-användare.
- Välj Roll för medlemmen. För den första medlemmen väljer du Begärare som roll.
- Välj Lägg till för att lägga till medlemmen med den tillhörande rollen i programmet.
- Lägg till en till medlem i programmet med rollen Svarare.
Mer information om hur du hanterar användare i Blockchain Workbench finns i avsnittet om att hantera användare i Azure Blockchain Workbench
Nästa steg
I den här instruktionsartikeln har du skapat ett grundläggande program med begäran och svar. Om du vill lära dig hur du använder programmet fortsätter till nästa instruktionsartikel.