Självstudie: skapa, skapa och distribuera smarta avtal i Azure blockchain-tjänstenTutorial: Create, build, and deploy smart contracts on Azure Blockchain Service

I den här självstudien använder du tillägget Azure blockchain Development Kit for Ethereum i Visual Studio Code för att skapa, bygga och distribuera ett smart kontrakt på Azure blockchain-tjänsten.In this tutorial, use the Azure Blockchain Development Kit for Ethereum extension in Visual Studio Code to create, build, and deploy a smart contract on Azure Blockchain Service. Du kan också använda utvecklings paketet för att köra en smart kontrakts funktion via en transaktion.You also use the development kit to execute a smart contract function via a transaction.

Du använder Azure blockchain Development Kit för att Ethereum:You use Azure Blockchain Development Kit for Ethereum to:

  • Skapa ett smart kontraktCreate a smart contract
  • Distribuera ett smart kontraktDeploy a smart contract
  • Köra en smart kontrakts funktion via en transaktionExecute a smart contract function via a transaction

Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.If you don't have an Azure subscription, create a free account before you begin.

FörutsättningarPrerequisites

I Windows krävs en installerad C++-kompilator för Node-Gyp-modulen.On Windows, an installed C++ compiler is required for the node-gyp module. Du kan använda MSBuild-verktygen:You can use the MSBuild tools:

  • Om Visual Studio 2017 är installerat konfigurerar du NPM att använda MSBuild-verktygen med kommandot npm config set msvs_version 2017 -gIf Visual Studio 2017 is installed, configure npm to use the MSBuild tools with the command npm config set msvs_version 2017 -g
  • Om Visual Studio 2019 är installerat ställer du in sökvägen för MS build-verktyg för NPM.If Visual Studio 2019 is installed, set the MS build tools path for npm. Till exempel npm config set msbuild_path "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"For example, npm config set msbuild_path "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"
  • Annars installerar du fristående VS build-verktyg med npm install --global windows-build-tools i ett förhöjdt Kör som administratörs kommando gränssnitt.Otherwise, install the stand-alone VS Build tools using npm install --global windows-build-tools in an elevated Run as administrator command shell.

Mer information om Node-Gyp finns i nod-Gyp-lagringsplatsen på GitHub.For more information about node-gyp, see the node-gyp repository on GitHub.

Skapa ett smart kontraktCreate a smart contract

Azure blockchain Development Kit för Ethereum använder Project-mallar och Truffle-verktyg för att hjälpa Autogenerera, bygga och distribuera kontrakt.The Azure Blockchain Development Kit for Ethereum uses project templates and Truffle tools to help scaffold, build, and deploy contracts. Innan du börjar måste du slutföra den nödvändiga snabb starten: Använd Visual Studio Code för att ansluta till ett Azure blockchain service Consortium-nätverk.Before you begin, complete the prerequisite Quickstart: Use Visual Studio Code to connect to a Azure Blockchain Service consortium network. Snabb starten guidar dig genom installationen och konfigurationen av Azure blockchain Development Kit för Ethereum.The quickstart guides you through the installation and configuration of the Azure Blockchain Development Kit for Ethereum.

  1. Från kommando paletten VS Code väljer du blockchain: nytt fast projekt.From the VS Code command palette, choose Blockchain: New Solidity Project.
  2. Välj skapa Basic-projekt.Choose Create basic project.
  3. Skapa en ny mapp med namnet HelloBlockchain och Välj ny projekt Sök väg.Create a new folder named HelloBlockchain and Select new project path.

Azure blockchain Development Kit skapar och initierar ett nytt solide-projekt åt dig.The Azure Blockchain Development Kit creates and initializes a new Solidity project for you. Det grundläggande projektet innehåller ett exempel på ett HelloBlockchain Smart-kontrakt och alla nödvändiga filer för att bygga och distribuera till din Consortium-medlem i Azure blockchain-tjänsten.The basic project includes a sample HelloBlockchain smart contract and all the necessary files to build and deploy to your consortium member in Azure Blockchain Service. Det kan ta flera minuter innan projektet skapas.It may take several minutes for the project to be created. Du kan övervaka förloppet i VS Codes Terminal-panel genom att välja utdata för Azure-blockchain.You can monitor the progress in VS Code's terminal panel by selecting the output for Azure Blockchain.

Projekt strukturen ser ut som i följande exempel:The project structure looks like the following example:

Massiv projekt

Bygg ett smart kontraktBuild a smart contract

Smarta kontrakt finns i projektets kontrakts katalog.Smart contracts are located in the project's contracts directory. Du kompilerar smarta kontrakt innan du distribuerar dem till en blockchain.You compile smart contracts before you deploy them to a blockchain. Använd kommandot Bygg kontrakt för att kompilera alla smarta kontrakt i projektet.Use the Build Contracts command to compile all the smart contracts in your project.

  1. I sido rutan i VS Code-Utforskaren expanderar du mappen kontrakt i projektet.In the VS Code explorer sidebar, expand the contracts folder in your project.

  2. Högerklicka på HelloBlockchain. sol och välj Bygg kontrakt på menyn.Right-click HelloBlockchain.sol and choose Build Contracts from the menu.

    Välj menyn Bygg kontraktChoose Build contracts menu

Azure blockchain Development Kit använder Truffle för att kompilera smarta kontrakt.Azure Blockchain Development Kit uses Truffle to compile the smart contracts.

Utdata för Truffle-kompilator

Distribuera ett smart kontraktDeploy a smart contract

Truffle använder migrations skript för att distribuera dina kontrakt till ett Ethereum-nätverk.Truffle uses migration scripts to deploy your contracts to an Ethereum network. Migreringar är JavaScript-filer som finns i projektets migrerings katalog.Migrations are JavaScript files located in the project's migrations directory.

  1. Du distribuerar ditt smarta kontrakt genom att högerklicka på HelloBlockchain. sol och välja distribuera kontrakt på menyn.To deploy your smart contract, right-click HelloBlockchain.sol and choose Deploy Contracts from the menu.
  2. Välj ditt Azure blockchain Consortium-nätverk i kommando paletten.Choose your Azure Blockchain consortium network in the command palette. Konsortiet blockchain-nätverk har lagts till i projektets Truffle-konfigurationsfil när du skapade projektet.The consortium blockchain network was added to the project's Truffle configuration file when you created the project.
  3. Välj skapa åtgärds kort.Choose Generate mnemonic. Välj ett fil namn och spara filen i projektmappen i projektmappen.Choose a filename and save the mnemonic file in the project folder. Till exempel myblockchainmember.env.For example, myblockchainmember.env. Den här filen används för att generera en privat Ethereum-nyckel för din blockchain-medlem.The mnemonic file is used to generate an Ethereum private key for your blockchain member.

Azure blockchain Development Kit använder Truffle för att köra migrations skriptet för att distribuera kontrakten till blockchain.Azure Blockchain Development Kit uses Truffle to execute the migration script to deploy the contracts to the blockchain.

Kontraktet har distribuerats

<a name="call-a-contract-function">Anropa en kontrakts funktionCall a contract function

HelloBlockchain -kontraktets SendRequest -funktion ändrar variabeln RequestMessage State.The HelloBlockchain contract's SendRequest function changes the RequestMessage state variable. Att ändra tillstånd för ett blockchain nätverk görs via en transaktion.Changing the state of a blockchain network is done via a transaction. Du kan skapa ett skript för att köra SendRequest -funktionen via en transaktion.You can create a script to execute the SendRequest function via a transaction.

  1. Skapa en ny fil i roten av Truffle-projektet och ge den namnet sendrequest.js .Create a new file in the root of your Truffle project and name it sendrequest.js. Lägg till följande Web3 JavaScript-kod i filen.Add the following Web3 JavaScript code to the file.

    var HelloBlockchain = artifacts.require(&quot;HelloBlockchain");
    
    module.exports = function(done) {
      console.log("Getting the deployed version of the HelloBlockchain smart contract")
      HelloBlockchain.deployed().then(function(instance) {
        console.log("Calling SendRequest function for contract ", instance.address);
        return instance.SendRequest("Hello, blockchain!");
      }).then(function(result) {
        console.log("Transaction hash: ", result.tx);
        console.log("Request complete");
        done();
      }).catch(function(e) {
        console.log(e);
        done();
      });
    };
    
  2. När ett projekt skapas i Azure blockchain Development Kit genereras konfigurations filen för Truffle med information om ditt konsortiums blockchain Network Endpoint.When Azure Blockchain Development Kit creates a project, the Truffle configuration file is generated with your consortium blockchain network endpoint details. Öppna truffle-config.js i projektet.Open truffle-config.js in your project. Konfigurations filen visar två nätverk: en namngiven utveckling och en med samma namn som konsortiet.The configuration file lists two networks: one named development and one with the same name as the consortium.

  3. I rutan för VS-kodens terminalfönster använder du Truffle för att köra skriptet i ditt konsortium blockchain-nätverk.In VS Code's terminal pane, use Truffle to execute the script on your consortium blockchain network. I meny raden i terminalfönstret väljer du fliken Terminal och PowerShell i list rutan.In the terminal pane menu bar, select the Terminal tab and PowerShell in the dropdown.

    truffle exec sendrequest.js --network <blockchain network>
    

    Ersätt <blockchain network> med namnet på blockchain-nätverket som definierats i truffle-config.js.Replace <blockchain network> with the name of the blockchain network defined in the truffle-config.js.

Truffle kör skriptet i ditt blockchain-nätverk.Truffle executes the script on your blockchain network.

Utdata som visar transaktionen har skickats

När du kör ett kontrakts funktion via en transaktion bearbetas inte transaktionen förrän ett block har skapats.When you execute a contract's function via a transaction, the transaction isn't processed until a block is created. Funktioner som är avsedda att köras via en transaktion returnerar ett transaktions-ID i stället för ett retur värde.Functions meant to be executed via a transaction return a transaction ID instead of a return value.

Status för fråga kontraktQuery contract state

Smarta kontrakt funktioner kan returnera det aktuella värdet för State-variabler.Smart contract functions can return the current value of state variables. Nu ska vi lägga till en funktion för att returnera värdet för en tillstånds variabel.Let's add a function to return the value of a state variable.

  1. I HelloBlockchain. sol lägger du till en GetMessage -funktion i det smarta HelloBlockchain -kontraktet.In HelloBlockchain.sol, add a getMessage function to the HelloBlockchain smart contract.

    function getMessage() public view returns (string memory)
    {
        if (State == StateType.Request)
            return RequestMessage;
        else
            return ResponseMessage;
    }
    

    Funktionen returnerar meddelandet som lagras i en tillstånds variabel baserat på kontraktets aktuella status.The function returns the message stored in a state variable based on the current state of the contract.

  2. Högerklicka på HelloBlockchain. sol och välj Bygg kontrakt på menyn för att kompilera ändringarna i det smarta kontraktet.Right-click HelloBlockchain.sol and choose Build Contracts from the menu to compile the changes to the smart contract.

  3. Du distribuerar genom att högerklicka på HelloBlockchain. sol och välja distribuera kontrakt på menyn.To deploy, right-click HelloBlockchain.sol and choose Deploy Contracts from the menu. När du uppmanas väljer du ditt Azure blockchain Consortium-nätverk i kommando paletten.When prompted, choose your Azure Blockchain consortium network in the command palette.

  4. Skapa sedan ett skript som använder för att anropa funktionen GetMessage .Next, create a script using to call the getMessage function. Skapa en ny fil i roten av Truffle-projektet och ge den namnet getmessage.js .Create a new file in the root of your Truffle project and name it getmessage.js. Lägg till följande Web3 JavaScript-kod i filen.Add the following Web3 JavaScript code to the file.

    var HelloBlockchain = artifacts.require("HelloBlockchain");
    
    module.exports = function(done) {
      console.log("Getting the deployed version of the HelloBlockchain smart contract")
      HelloBlockchain.deployed().then(function(instance) {
        console.log("Calling getMessage function for contract ", instance.address);
        return instance.getMessage();
      }).then(function(result) {
        console.log("Request message value: ", result);
        console.log("Request complete");
        done();
      }).catch(function(e) {
        console.log(e);
        done();
      });
    };
    
  5. I rutan för VS-kodens terminalfönster använder du Truffle för att köra skriptet i ditt blockchain-nätverk.In VS Code's terminal pane, use Truffle to execute the script on your blockchain network. I meny raden i terminalfönstret väljer du fliken Terminal och PowerShell i list rutan.In the terminal pane menu bar, select the Terminal tab and PowerShell in the dropdown.

    truffle exec getmessage.js --network <blockchain network>
    

    Ersätt <blockchain network> med namnet på blockchain-nätverket som definierats i truffle-config.js.Replace <blockchain network> with the name of the blockchain network defined in the truffle-config.js.

Skriptet frågar det smarta kontraktet genom att anropa funktionen getMessage.The script queries the smart contract by calling the getMessage function. Det aktuella värdet för RequestMessage status-variabeln returneras.The current value of the RequestMessage state variable is returned.

Utdata från GetMessage-frågan som visar det aktuella värdet för RequestMessage State-variabel

Observera att värdet inte är Hej, blockchain!.Notice the value is not Hello, blockchain!. I stället är det returnerade värdet en plats hållare.Instead, the returned value is a placeholder. När du ändrar och distribuerar kontraktet distribueras det ändrade kontraktet till en ny adress och State-variablerna tilldelas värden i konstruktorn för smarta kontrakt.When you change and deploy the contract, the changed contract is deployed at a new address and the state variables are assigned values in the smart contract constructor. Truffle-exemplet för 2_deploy_contracts.js migreringen distribuerar det smarta kontraktet och skickar ett värde för plats hållare som ett argument.The Truffle sample 2_deploy_contracts.js migration script deploys the smart contract and passes a placeholder value as an argument. Konstruktorn anger RequestMessage tillstånds variabeln till värdet för plats hållaren och det som returneras.The constructor sets the RequestMessage state variable to the placeholder value and that's what is returned.

  1. Om du vill ställa in RequestMessage tillstånds variabel och fråga efter värdet kör du sendrequest.js och getmessage.js skript igen.To set the RequestMessage state variable and query the value, run the sendrequest.js and getmessage.js scripts again.

    Utdata från SendRequest-och GetMessage-skript som visar RequestMessage har angetts

    sendrequest.js anger RequestMessage tillstånds variabeln till Hej, blockchain!sendrequest.js sets the RequestMessage state variable to Hello, blockchain! och getmessage.js frågar kontraktet efter värde för RequestMessage State-variabeln och returnerar Hej, blockchain!.and getmessage.js queries the contract for value of RequestMessage state variable and returns Hello, blockchain!.

Rensa resurserClean up resources

När de inte längre behövs kan du ta bort resurserna genom att ta bort myResourceGroup resurs gruppen som du skapade i snabb starten för att skapa en blockchain-medlems krav.When no longer needed, you can delete the resources by deleting the myResourceGroup resource group you created in the Create a blockchain member prerequisite quickstart.

Så här tar du bort resursgruppen:To delete the resource group:

  1. I Azure Portal navigerar du till resurs grupp i det vänstra navigerings fönstret och väljer den resurs grupp som du vill ta bort.In the Azure portal, navigate to Resource group in the left navigation pane and select the resource group you want to delete.
  2. Välj Ta bort resursgrupp.Select Delete resource group. Verifiera borttagning genom att ange resurs gruppens namn och välj ta bort.Verify deletion by entering the resource group name and select Delete.

Nästa stegNext steps

I den här självstudien har du skapat ett exempel på ett heltäckande projekt med Azure blockchain Development Kit.In this tutorial, you created a sample Solidity project using Azure Blockchain Development Kit. Du har skapat och distribuerat ett smart kontrakt, sedan kallat en funktion via en transaktion i ett blockchain Consortium-nätverk som finns i Azure blockchain-tjänsten.You built and deployed a smart contract then called a function via a transaction on a blockchain consortium network hosted on Azure Blockchain Service.