Samouczek: Tworzenie, kompilowanie i wdrażanie inteligentnych kontraktów w usłudze Azure łańcucha bloków ServiceTutorial: Create, build, and deploy smart contracts on Azure Blockchain Service

W tym samouczku Użyj rozszerzenia Azure łańcucha bloków Development Kit for Ethereum w Visual Studio Code, aby utworzyć, skompilować i wdrożyć inteligentny kontrakt w usłudze Azure łańcucha bloków Service.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. Możesz również użyć zestawu deweloperskiego do wykonywania funkcji kontraktu inteligentnego za pośrednictwem transakcji.You also use the development kit to execute a smart contract function via a transaction.

Używasz zestawu Azure łańcucha bloków Development Kit dla Ethereum:You use Azure Blockchain Development Kit for Ethereum to:

  • Tworzenie kontraktu inteligentnegoCreate a smart contract
  • Wdrażanie kontraktu inteligentnegoDeploy a smart contract
  • Wykonywanie funkcji kontraktu inteligentnego za pośrednictwem transakcjiExecute a smart contract function via a transaction

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem Utwórz bezpłatne konto .If you don't have an Azure subscription, create a free account before you begin.

Wymagania wstępnePrerequisites

W systemie Windows zainstalowany kompilator języka C++ jest wymagany dla modułu Node-GYP.On Windows, an installed C++ compiler is required for the node-gyp module. Możesz użyć narzędzi MSBuild:You can use the MSBuild tools:

  • Jeśli zainstalowano program Visual Studio 2017, należy skonfigurować npm do korzystania z narzędzi MSBuild przy użyciu polecenia 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
  • Jeśli zainstalowano program Visual Studio 2019, Ustaw ścieżkę Microsoft Build Tools for npm.If Visual Studio 2019 is installed, set the MS build tools path for npm. Na przykład 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"
  • W przeciwnym razie zainstaluj autonomiczne narzędzia programu VS Build przy użyciu npm install --global windows-build-tools programu w powłoce poleceń Uruchom jako administrator z podwyższonym poziomem uprawnień.Otherwise, install the stand-alone VS Build tools using npm install --global windows-build-tools in an elevated Run as administrator command shell.

Aby uzyskać więcej informacji na temat węzła Node-GYP, zobacz repozytorium Node-GYP w witrynie GitHub.For more information about node-gyp, see the node-gyp repository on GitHub.

Tworzenie kontraktu inteligentnegoCreate a smart contract

Zestaw Azure łańcucha bloków Development Kit dla Ethereum używa szablonów projektów i narzędzi Truffle, aby pomóc w tworzeniu i wdrażaniu umów.The Azure Blockchain Development Kit for Ethereum uses project templates and Truffle tools to help scaffold, build, and deploy contracts. Przed rozpoczęciem Wypełnij wymagania wstępne przewodnika Szybki Start: użyj Visual Studio Code, aby nawiązać połączenie z siecią konsorcjum usługi Azure łańcucha bloków.Before you begin, complete the prerequisite Quickstart: Use Visual Studio Code to connect to a Azure Blockchain Service consortium network. Przewodnik Szybki Start przeprowadzi Cię przez proces instalowania i konfigurowania zestawu Azure łańcucha bloków Development Kit dla Ethereum.The quickstart guides you through the installation and configuration of the Azure Blockchain Development Kit for Ethereum.

  1. Z palety poleceń VS Code wybierz pozycję łańcucha bloków: nowy projekt o stałej wypełniania.From the VS Code command palette, choose Blockchain: New Solidity Project.
  2. Wybierz pozycję Utwórz projekt podstawowy.Choose Create basic project.
  3. Utwórz nowy folder o nazwie HelloBlockchain i Wybierz pozycję Nowy projekt ścieżka.Create a new folder named HelloBlockchain and Select new project path.

Zestaw Azure łańcucha bloków Development Kit tworzy i inicjuje nowy projekt o stałej wypełniania.The Azure Blockchain Development Kit creates and initializes a new Solidity project for you. Projekt podstawowy zawiera przykładową HelloBlockchainą umowę i wszystkie pliki niezbędne do kompilowania i wdrażania w składowej konsorcjum usługi Azure łańcucha bloków.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. Utworzenie projektu może potrwać kilka minut.It may take several minutes for the project to be created. Postęp można monitorować w panelu terminalu VS Code, wybierając dane wyjściowe dla usługi Azure łańcucha bloków.You can monitor the progress in VS Code's terminal panel by selecting the output for Azure Blockchain.

Struktura projektu wygląda podobnie do poniższego przykładu:The project structure looks like the following example:

Projekt o stałej mocy

Tworzenie kontraktu inteligentnegoBuild a smart contract

Inteligentne kontrakty znajdują się w katalogu kontraktów projektu.Smart contracts are located in the project's contracts directory. Możesz kompilować inteligentne kontrakty przed wdrożeniem ich w usłudze łańcucha bloków.You compile smart contracts before you deploy them to a blockchain. Użyj polecenia Kompiluj kontrakty , aby skompilować wszystkie inteligentne kontrakty w projekcie.Use the Build Contracts command to compile all the smart contracts in your project.

  1. Na pasku bocznym Eksploratora VS Code rozwiń folder kontrakty w projekcie.In the VS Code explorer sidebar, expand the contracts folder in your project.

  2. Kliknij prawym przyciskiem myszy HelloBlockchain. peruwiański i wybierz polecenie Kompiluj kontrakty z menu.Right-click HelloBlockchain.sol and choose Build Contracts from the menu.

    Menu wybierz kontrakty kompilacjiChoose Build contracts menu

Usługa Azure łańcucha bloków Development Kit używa Truffle do kompilowania inteligentnych kontraktów.Azure Blockchain Development Kit uses Truffle to compile the smart contracts.

Dane wyjściowe kompilatora Truffle

Wdrażanie kontraktu inteligentnegoDeploy a smart contract

Truffle używa skryptów migracji do wdrażania kontraktów w sieci Ethereum.Truffle uses migration scripts to deploy your contracts to an Ethereum network. Migracje to pliki JavaScript znajdujące się w katalogu migracji projektu.Migrations are JavaScript files located in the project's migrations directory.

  1. Aby wdrożyć kontrakt inteligentny, kliknij prawym przyciskiem myszy HelloBlockchain. peruwiański i wybierz polecenie Wdróż kontrakty z menu.To deploy your smart contract, right-click HelloBlockchain.sol and choose Deploy Contracts from the menu.
  2. Wybierz sieć Azure łańcucha bloków Consortium w palecie poleceń.Choose your Azure Blockchain consortium network in the command palette. Sieć konsorcjum łańcucha bloków została dodana do pliku konfiguracji Truffle projektu podczas tworzenia projektu.The consortium blockchain network was added to the project's Truffle configuration file when you created the project.
  3. Wybierz Generuj polecenie.Choose Generate mnemonic. Wybierz nazwę pliku i Zapisz plik w folderze projektu.Choose a filename and save the mnemonic file in the project folder. Na przykład myblockchainmember.env.For example, myblockchainmember.env. Ten plik jest używany do generowania klucza prywatnego Ethereum dla członka łańcucha bloków.The mnemonic file is used to generate an Ethereum private key for your blockchain member.

Usługa Azure łańcucha bloków Development Kit używa Truffle do wykonania skryptu migracji w celu wdrożenia umów w usłudze łańcucha bloków.Azure Blockchain Development Kit uses Truffle to execute the migration script to deploy the contracts to the blockchain.

Pomyślnie wdrożono kontrakt

<a name="call-a-contract-function">Wywoływanie funkcji kontraktuCall a contract function

Funkcja SendRequest kontraktu HelloBlockchain zmienia zmienną stanu RequestMessage .The HelloBlockchain contract's SendRequest function changes the RequestMessage state variable. Zmiana stanu sieci łańcucha bloków odbywa się za pośrednictwem transakcji.Changing the state of a blockchain network is done via a transaction. Możesz utworzyć skrypt, aby wykonać funkcję SendRequest za pośrednictwem transakcji.You can create a script to execute the SendRequest function via a transaction.

  1. Utwórz nowy plik w katalogu głównym projektu Truffle i nadaj mu nazwę sendrequest.js .Create a new file in the root of your Truffle project and name it sendrequest.js. Dodaj następujący kod JavaScript Web3 do pliku.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. Po utworzeniu projektu w usłudze Azure łańcucha bloków Development Kit zostanie wygenerowany plik konfiguracji Truffle z informacjami o szczegółach punktu końcowego sieci konsorcjum łańcucha bloków.When Azure Blockchain Development Kit creates a project, the Truffle configuration file is generated with your consortium blockchain network endpoint details. Otwórz truffle-config.js w projekcie.Open truffle-config.js in your project. Plik konfiguracji zawiera listę dwóch sieci: jeden o nazwie programowanie i jeden o takiej samej nazwie jak konsorcjum.The configuration file lists two networks: one named development and one with the same name as the consortium.

  3. W okienku terminalu VS Code Użyj Truffle, aby wykonać skrypt w sieci łańcucha bloków konsorcjum.In VS Code's terminal pane, use Truffle to execute the script on your consortium blockchain network. Na pasku menu okienka terminalu wybierz kartę Terminal i program PowerShell na liście rozwijanej.In the terminal pane menu bar, select the Terminal tab and PowerShell in the dropdown.

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

    Zamień na <blockchain network> nazwę sieci łańcucha bloków zdefiniowanej w truffle-config.js.Replace <blockchain network> with the name of the blockchain network defined in the truffle-config.js.

Truffle wykonuje skrypt w sieci łańcucha bloków.Truffle executes the script on your blockchain network.

Dane wyjściowe pokazujące transakcję zostały wysłane

Gdy wykonujesz funkcję kontraktu za pośrednictwem transakcji, transakcja nie zostanie przetworzona do momentu utworzenia bloku.When you execute a contract's function via a transaction, the transaction isn't processed until a block is created. Funkcje przeznaczone do wykonania za pośrednictwem transakcji zwracają identyfikator transakcji zamiast wartości zwracanej.Functions meant to be executed via a transaction return a transaction ID instead of a return value.

Kwerenda stanu kontraktuQuery contract state

Funkcje kontraktu inteligentnego mogą zwracać bieżącą wartość zmiennych stanu.Smart contract functions can return the current value of state variables. Dodajmy funkcję, aby zwrócić wartość zmiennej stanu.Let's add a function to return the value of a state variable.

  1. W HelloBlockchain. peruwiański Dodaj funkcję GetMessage do kontraktu inteligentnego HelloBlockchain .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;
    }
    

    Funkcja zwraca komunikat przechowywany w zmiennej stanu na podstawie bieżącego stanu kontraktu.The function returns the message stored in a state variable based on the current state of the contract.

  2. Kliknij prawym przyciskiem myszy HelloBlockchain. peruwiański i wybierz polecenie Kompiluj kontrakty z menu, aby skompilować zmiany do kontraktu inteligentnego.Right-click HelloBlockchain.sol and choose Build Contracts from the menu to compile the changes to the smart contract.

  3. Aby wdrożyć, kliknij prawym przyciskiem myszy HelloBlockchain. peruwiański i wybierz polecenie Wdróż kontrakty z menu.To deploy, right-click HelloBlockchain.sol and choose Deploy Contracts from the menu. Po wyświetleniu monitu wybierz Sieć Azure łańcucha bloków Consortium w palecie poleceń.When prompted, choose your Azure Blockchain consortium network in the command palette.

  4. Następnie utwórz skrypt, używając programu w celu wywołania funkcji GetMessage .Next, create a script using to call the getMessage function. Utwórz nowy plik w katalogu głównym projektu Truffle i nadaj mu nazwę getmessage.js .Create a new file in the root of your Truffle project and name it getmessage.js. Dodaj następujący kod JavaScript Web3 do pliku.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. W okienku terminalu VS Code Użyj Truffle, aby wykonać skrypt w sieci łańcucha bloków.In VS Code's terminal pane, use Truffle to execute the script on your blockchain network. Na pasku menu okienka terminalu wybierz kartę Terminal i program PowerShell na liście rozwijanej.In the terminal pane menu bar, select the Terminal tab and PowerShell in the dropdown.

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

    Zamień na <blockchain network> nazwę sieci łańcucha bloków zdefiniowanej w truffle-config.js.Replace <blockchain network> with the name of the blockchain network defined in the truffle-config.js.

Skrypt wysyła zapytanie do inteligentnego kontraktu przez wywołanie funkcji GetMessage.The script queries the smart contract by calling the getMessage function. Zwracana jest bieżąca wartość zmiennej stanu RequestMessage .The current value of the RequestMessage state variable is returned.

Wyniki zapytania GetMessage zawierające bieżącą wartość zmiennej stanu RequestMessage

Zwróć uwagę na to, że wartość nie jest Hello, łańcucha bloków!.Notice the value is not Hello, blockchain!. Zamiast tego zwracana wartość jest symbolem zastępczym.Instead, the returned value is a placeholder. W przypadku zmiany i wdrożenia kontraktu zmieniony kontrakt zostanie wdrożony pod nowym adresem, a zmienne stanu są przypisywane wartości w konstruktorze kontraktu inteligentnego.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. Przykładowy Truffle 2_deploy_contracts.js skrypt migracji wdraża inteligentny kontrakt i przekazuje wartość symbolu zastępczego jako argument.The Truffle sample 2_deploy_contracts.js migration script deploys the smart contract and passes a placeholder value as an argument. Konstruktor ustawia zmienną stanu RequestMessage na wartość symbolu zastępczego, co oznacza, że jest zwracana.The constructor sets the RequestMessage state variable to the placeholder value and that's what is returned.

  1. Aby ustawić zmienną stanu RequestMessage i wykonać zapytanie dotyczące wartości, uruchom ponownie skrypty sendrequest.js i getmessage.js .To set the RequestMessage state variable and query the value, run the sendrequest.js and getmessage.js scripts again.

    Ustawiono dane wyjściowe ze skryptów SendRequest i GetMessage, które pokazują RequestMessage

    sendrequest.js ustawia zmienną stanu RequestMessage na Hello, łańcucha bloków!sendrequest.js sets the RequestMessage state variable to Hello, blockchain! i getmessage.js wysyła zapytanie do kontraktu o wartość zmiennej stanu RequestMessage i zwraca Hello, łańcucha bloków!.and getmessage.js queries the contract for value of RequestMessage state variable and returns Hello, blockchain!.

Czyszczenie zasobówClean up resources

Gdy zasoby nie będą już potrzebne, można je usunąć przez usunięcie myResourceGroup grupy zasobów utworzonej w ramach przewodnika Szybki Start dotyczącego tworzenia elementu członkowskiego łańcucha bloków .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.

Aby usunąć grupę zasobów:To delete the resource group:

  1. W Azure Portal przejdź do grupy zasobów w okienku nawigacji po lewej stronie i wybierz grupę zasobów, którą chcesz usunąć.In the Azure portal, navigate to Resource group in the left navigation pane and select the resource group you want to delete.
  2. Wybierz pozycję Usuń grupę zasobów.Select Delete resource group. Sprawdź usuwanie, wprowadzając nazwę grupy zasobów i wybierz pozycję Usuń.Verify deletion by entering the resource group name and select Delete.

Następne krokiNext steps

W tym samouczku przedstawiono Tworzenie przykładowego projektu z jednolitością przy użyciu zestawu Azure łańcucha bloków Development Kit.In this tutorial, you created a sample Solidity project using Azure Blockchain Development Kit. Skompilowano i wdrożono inteligentny kontrakt o nazwie funkcja za pośrednictwem transakcji w sieci łańcucha bloków Consortium hostowanej w usłudze Azure łańcucha bloków Service.You built and deployed a smart contract then called a function via a transaction on a blockchain consortium network hosted on Azure Blockchain Service.