Freigeben über



Juli 2018

Band 33, Nummer 7

Blockchain: Dezentralisierte Anwendungen mit Azure Blockchain-as-a-Service

Durch Stefano Tempesta

Blockchain hat als eine Möglichkeit, Geschäftsprozesse zu optimieren, Transaktionen überprüfen und verhindern, dass betrug die Aufmerksamkeit des Unternehmens und des technologiewelt erfasst. Dieser Artikel informiert Blockchain als Dienst (BaaS) in Microsoft Azure zeigt, wie sie eine geschützte Datenstruktur zu erstellen, und erstellen einen verteilten Ledger des transaktionalen digitale verwendet werden kann.

Es gibt zahlreiche Literatur über das Internet zu Blockchain und wie sie als ein digitales Hauptbuch für Bitcoin gestartet. Ein guter einführender Artikel, welche Blockchain ist finden Sie unter bit.ly/2IsoWeJ, und eine weitere technische Übersicht zur Funktionsweise von Blockchain finden Sie in Jonathan Waldmans "Grundlagen von Blockchains" Artikel in der März 2018 Ausgabe des MSDN Magazine (msdn.com/magazine/mt845650).

Blockchain ist ein gesichertes, freigegebenes und verteiltes Sachkonto, die öffentliche, Private oder Consortium (die auf benannte Elemente nur eingeschränkt ist,) werden können. Es ist sicher, da sie Kryptografie verwendet, um Transaktionen zu erstellen, die schwierig (wenn nicht sogar unmöglich mit aktuellen IT-Infrastruktur) sind mit dem manipulieren. Für alle Knoten oder Peers freigegeben in der Kette ist ein Datenspeicher und, wie Sie gleich sehen werden, Geschäftslogik in Form von Verträgen. Ein Blockchain-Wert ist in der Tat direkt auf die Anzahl der Entitäten verknüpft, an denen sie teilnehmen. Ausgesprochen, sind Blockchain-Daten und Verträgen verteilt und was bedeutet, dass viele Replikate der Datenbank vorhanden sind. Und je mehr Replikate vorhanden sind, desto authentifiziert wird. Und schließlich Blockchain ist ein digitales Hauptbuch, einer transaktionalen Datenbank, die nur unveränderlichen Datensätze für jede Transaktion, die auftritt, fügt.

Ich möchte diesen Punkt zu Blockchain wird einen verteilten Ledger zu verstärken. Herkömmliche Ledger werden zentral und Systeme von Drittanbietern oder Zwischenhändler, genehmigen und Transaktionen aufzeichnen. Stellen Sie sich Kreditkarten, Banken, Identity Management-Systemen und ähnliches. Dieser Ansatz erstellt eine Herausforderung der Vertrauensstellung und Skalierung. Vertrauen Sie Ihren Vermittler Agent fungieren als Vermittler für alle Ihre Transaktionen? Kann der Agent eine einzelne Fehlerquelle werden? Kann diese gefährdet sein?

In einer Blockchain Ledger im gesamten Netzwerk verteilt werden und besteht keine Notwendigkeit für alle Systeme von Drittanbietern in der Mitte einer Transaktion sein. Die Technologie verwaltet mehrere Replikate der Daten, wie in einem Peer-zu-Peer-Dateifreigabe-System wie jeden Peer auf eine Kopie des gesamten Datasets abgerufen. Niemand besitzt die ganze Sache, aber jeder besitzt eine Kopie der Datei. Abbildung 1 veranschaulicht diese Anordnung.

Eine dezentralisierte verteilten Ledger
Abbildung 1: eine dezentralisierte verteilten Ledger

Die erste Blockchain, Bitcoin, hat sich in 2009 mit unterschiedlichen Grenzwerte. Als ein digitales Hauptbuch, zeichnet er einfach Transaktionen und nicht nachverfolgen Kontostand für digitalen Objekts. Den Besitz der Bitcoins wird von Links zu vorherigen Transaktionen, befolgen die unveränderlichen Verlauf von Blöcken in der Kette der aufgezeichneten Transaktionen überprüft. Darüber hinaus Bitcoin keine spezifische Logik für das Durchführen einer Transaktion und die Bedingungen definieren, z. B., dass die beiden Parteien beteiligt muss einverstanden kryptowährung Austausch.

Blockchain-Technologie ständig weiterentwickelt, durch das Hinzufügen von intelligenten Vertrag, die kleine Teile des Codes sind, die Transaktionen Logik hinzufügen. Intelligente Verträge als eine Computer-Code-Darstellung der rechtlichen Bedingungen in einem Vertrag für Waren oder Dienstleistungen vorstellen. Neue Blockchain Ledger hat sich auf dem Markt, die meisten gängigen wird Ethereum (ethereum.org) und Hyperledger Fabric (hyperledger.org), smart Contract-Funktion mit dem Netzwerk hinzufügen. In diesen (nennen wir sie Blockchain-2.0) digitale Ledgers, intelligente Verträge sind nun in einem Block gespeichert und auf alle Knoten zusammen mit verwandten Daten verteilt werden.

Blockchain 3.0

Die Bitcoin-Blockchain wird häufig als Blockchain 1.0 bezeichnet. Es ist eine einfache Hauptdatei, die Transaktionen nacheinander aufzeichnet, und den Status des Netzwerks zu einem bestimmten Zeitpunkt darstellt. Stellen sie einfach als eine verteilte Datenbank.

Aber genauso, wie Datenbanken im Laufe der Zeit entwickelt haben, durch das Hinzufügen der Funktion der Logik-Ausführung – in Form von gespeicherten Prozeduren, z. B. – Blockchain wurde eingeführt, intelligente Verträge, die Ebene für die Anwendungslogik zu behandeln. Intelligente Verträge können jedoch verwendet werden, auf Daten nur in den Block, in denen diese gespeichert sind. Nicht auf externe Daten zugreifen oder Systemen, wie das Aufrufen eines Diensts außerhalb der Blockchain-unterbricht die "Vertrauenskreises", Blockchain für kryptografische Sicherheit und Unveränderlichkeit von Transaktionen enthält. CRM, ERP und Gehaltsabrechnungen-Systeme, die alle externe Entitäten darstellen, die nicht Teil einer Blockchain, aber möglicherweise den Austausch von Daten innerhalb einer Transaktion beteiligt. Blockchains benötigen eine Möglichkeit zum sicheren empfangen von externen Daten als auch Zugriff auf sichere Ausführung von off-Chain-Code.

Um diese Anforderung zu beheben, führte Microsoft Cryptlets als Teil des "Blockchain 3.0", der Blockchain-Daten, Logik und Cloud-Dienste. Abbildung 2 zeigt den Fortschritt des Features.

Entwicklung von Blockchain
Abbildung 2-Entwicklung von Blockchain

Cryptlets sind Module mit off-Chain-Code in jeder beliebigen Sprache, die in einem sicheren, isolierten und vertrauenswürdigen Container ausführen kann und über sichere Kanäle kommunizieren kann. Cryptlets erweitern intelligente Verträge nach außen durch die Bereitstellung von Diensten wie Verschlüsselung, Datum und die Ereignisse, Zugriff auf externe Daten und Authentifizierung der Identität. Microsoft führte Cryptlets als Teil der open Source-Projekt ""bletchley "" Codename (bit.ly/2Iv9VZz), hat die in das angezeigt wird, klicken Sie auf der Microsoft Build-Entwicklerkonferenz in Azure Blockchain Workbench-Produkt entwickelt Möglicherweise ist.

Wie auf der Website beschrieben wird, ist "bletchley" ein architekturbezogenes Konzept zum Erstellen einer Blockchain-Ökosystems in Unternehmen Consortium. Um klar gesagt werden, ist dies keine blockchainstapel. Es ist Microsofts Ansatz zum Einbinden von verteilten Ledger (Blockchain)-Plattformen in Unternehmen und Erstellen von echten Lösungen, die echte geschäftliche Probleme, Adressierung, die Plattform jedoch gleichzeitig öffnen.

Azure Blockchain Workbench (aka.ms/abcworkbench) nutzt verschiedene Blockchain Ledger und vorhandene Cloud-Dienste, um eine stabile Blockchain-Ökosystem für das Unternehmen zu aktivieren. Es ist ein einfach zu verwendendes Tool bietet eine vereinfachte Benutzeroberfläche, die es Benutzern die ermöglicht Erstellung von End-to-End-Blockchain-Anwendungen, die das beste aus Azure-Dienste wie Azure Active Directory (Azure AD), Azure Key Vault, Azure SQL-Datenbank, Application Insights nutzen , Azure Functions und Servicebus. Und zwar um gängige Blockchains sowie in eine Referenzarchitektur, die zum Erstellen von Blockchain-basierten Anwendungen verwendet werden kann.

Sie können weitere Informationen zu Azure Blockchain Workbench im Artikel "Einführung in Azure Blockchain Workbench" ich für die Juni-Ausgabe des MSDN Magazine schrieb (msdn.com/magazine/mt846726)

Rückkehr zum Cryptlets, bieten diese eine bequeme Möglichkeit für Entwickler übergreifende Funktionen wie die Integration in Drittanbieter-Systeme und für den Datenzugriff verwenden. Aber bevor ich den Fokus für die Entwicklung von dezentralisierte Anwendungen in einer Blockchain verschieben, benötige eine Plattform für die Bereitstellung einer sicheren und integrierte Lösung für öffentliche oder private distributed Ledgers. Microsoft Azure bietet eine weltweite Präsenz, mit dem eine überaus skalierbare, sichere Daten und die Ausführung-Plattform zum Übermitteln von den Anwendungen der nächsten Generation auf einer beliebigen Plattform Blockchain.

Blockchain-as-Dienst

Blockchain in Azure (bit.ly/2rQUO5q) bietet eine schnelle, kostengünstige, mit niedrigem Risiko Plattform zum Erstellen und Bereitstellen von Blockchain-Anwendungen. Azure bietet im Grunde Blockchain als Dienst (BaaS) durch mehrere einfach bereitzustellenden, unternehmensgerechte Vorlagen für die am häufigsten verwendeten Ledgers, einschließlich Ethereum, Quorum, Hyperledger Fabric, Corda und mehr.

Genug mit den Verkäufen überzeugt, lassen Sie uns einige wichtigsten Funktionen von Azure BaaS, vor dem Einstieg in die Konfiguration von einem bestimmten Ledger im Azure-Portal untersuchen. Azure-Blockchain besteht aus:

  • Einzelknoten-Ledger produktionsumgebung für mehrere Abteilungen innerhalb einer Organisation zu simulieren.
  • Mit mehreren Knoten Ledgers, Produktion mehrerer Abteilungen mehrere Organisationen zu simulieren.
  • Tools für die Entwicklung von dezentralisierte verteilt, die in einer Blockchain-Anwendungen.

Dezentralisierte Anwendungen (dApps) sind Anwendungen, die in einem Peer-zu-Peer-Netzwerk, Computer statt von einem einzelnen Computer ausgeführt werden. Im Kontext der Blockchain stellen Sie sich eine dApp als Client-Anwendung, die an einen smart Contract für die Interaktion mit der Blockchain-Netzwerk kommuniziert. Eine gute Einführung in dApps befinden sich BlockchainHub am bit.ly/2rRkijj.

Sind sich mit zentralen Aspekten der Erstellung einer Blockchain-Infrastruktur in Azure:

  • Richten Sie, dass eine sichere Umgebung, die verfügbar macht Endpunkte geschützt. Dies kann über Azure Virtual Network, VNet-Integration für Azure App Services oder Netzwerksicherheitsgruppen erfolgen.
  • Entwickeln Sie intelligente Verträge, die mit einer der verfügbaren Entwicklungstools, z. B. Blockstack Core, Ethereum Studio oder Truffle.
  • Automatisieren der Bereitstellung der Teilnehmerkomponenten, virtuelle Maschinen und Platform-as-a-Service-Komponenten. Dies kann durch Azure Resource Manager und PowerShell-Skripts aktiviert werden.
  • Schützen des Zugriffs auf Daten und Logik, mit benutzerbasierten Authentifizierung und Autorisierung durch Implementieren von Azure AD zum Schützen von apps und APIs.
  • Im Allgemeinen erstellen Sie eine Architektur für die Lösung Unternehmensintegration mit einem blockchainledger, die Nutzung von Azure Enterprise-Funktionen und weltweite Verteilung.

Kurz gesagt, stellt Azure BaaS, dar, nicht nur eine öffentliche Cloud-hosting-Anbieter für distributed Ledgers, aber eine organischen und integrierte Plattform für Entwicklung und Bereitstellung von dezentralisierte Anwendungen, die auf einer blockchaintechnologie ausgeführt werden können. Abbildung 3 veranschaulicht die Plattformarchitektur.

Azure Blockchain-as-a-Service-Stapel
Abbildung 3 Azure Blockchain-as-a-Service-Stapel

Jetzt sehen wir uns die Bereitstellung der Funktionen von Azure BaaS digitale Hauptbuch. Ich zunächst den Zugriff auf Azure-Portal (unter "Portal.Azure.com"), und erstellen Sie einen neuen Dienst aus dem Azure Marketplace | Blockchain-Abschnitt. Kann ich mehrere digitales Hauptbuch Technologien auswählen – in diesem Fall erstelle ich eine Ethereum Consortium-Ledger mit mehreren Knoten – und schnellen Bereitstellen von meiner blockchainnetzwerk in Azure.

Ethereum Consortium

Die Ethereum Consortium-Vorlage stellt ein Netzwerk Ethereum Multi-Element, aus einem Satz von Mining und Transaktion Knoten bereit. Bereitstellen kann je nach Größe des Netzwerks bis zu 20 Minuten in Anspruch nehmen, ich an diesem Punkt können zusätzliche Ethereum-Konten konfigurieren und erste Schritte mit smart Contract und dApp Entwicklung über die Administrator-Webseite.

Im Rahmen des Bereitstellungsprozesses führt Sie durch die folgenden fünf Schritte die erforderlichen Konfigurationseinstellungen geben für die Bereitstellung im ledgers Ethereum in Azure:

Schritt 1: Konfigurieren Sie die grundlegende Einstellungen, darunter ein ressourcenpräfix für die Benennung von alle generierten Azure-Ressourcen, die in der zugewiesenen Ressourcengruppe Authentifizierungsanmeldeinformationen als Administrator, der alle bereitgestellten virtuellen Computer, und der Bereitstellung der Azure-Region bereitgestellt.

Schritt 2: Netzwerkgröße und Leistung zu beheben. Sie möchten die Anzahl der Elemente in der Instanz des Konsortiums (bis zu 12), geben die Anzahl der Mining-Knoten pro Element (Mining Knoten Datensatz Transaktionen in einem blockchainnetzwerk), die Speicherreplikation (lokal redundanten oder georedundanten) und Leistung. Sie können auch die Anzahl der Knoten der Transaktion mit Lastenausgleich, festlegen, die den Punkt der Interaktion von Benutzern oder Anwendungen mit der bereitgestellten blockchain-Komponente darstellt.

Schritt 3: Dieser Schritt ist für Knoten von Ethereum spezifisch. Ich kann die Ethereum-Netzwerk-ID, einen eindeutigen Wert, der im Netzwerk identifiziert angeben und wird von Knoten verwendet werden, um miteinander zu verknüpfen. Darüber hinaus kann ich angeben, wie der erste Block, Genesis, aufgerufen, entweder automatisch von der Plattform oder manuell durch die Bereitstellung meiner eigenen JSON-Datei generiert wird.

Schritt 4: Bevor ich die Ressourcen in den Ethereum Consortium Ledger bereitstellen, bin ich eine Zusammenfassung der Konfigurationseinstellungen angezeigt, die ich eingegeben. Von hier aus kann ich eine JSON-Vorlagendatei zum Automatisieren der Bereitstellung eine ähnliche Ressource legen Sie mit Azure Resource Manager herunterladen. Abbildung 4 einschätzt, die Azure-Ressourcen bereitgestellt werden, in der Bereitstellung des ledgers Ethereum, sowie einen Ausschnitt der Vorlagendatei verwendet werden.

Ressourcenvorlagendatei für Ethereum Konsortium mit mehreren Knoten Ledger
Abbildung 4 Ressourcenvorlagendatei für Ethereum Konsortium mit mehreren Knoten Ledger

Diese Vorlagendatei dienen zum Automatisieren der Bereitstellung in der Zukunft ähnlicher Ressourcen mithilfe einer Kombination von .NET oder PowerShell-Skripts.

Der C#-Code in Abbildung 5 beschreibt die DeploymentHelper-Klasse, die von der Vorlage zur Automatisierung der Bereitstellung der angegebenen Azure-Ressourcen generiert. Sie müssen die folgenden Pakete zum Ausführen des Codes zu verweisen:

  • Microsoft.Azure.Management.Authorization
  • Microsoft.Azure.Management.ResourceManager
  • Microsoft.Rest.ClientRuntime.Azure.Authentication

Abbildung 5: die DeploymentHelper-Klasse

class DeploymentHelper
{
  string subscriptionId = "your-subscription-id";
  string clientId = "your-service-principal-clientId";
  string clientSecret = "your-service-principal-client-secret";
  string resourceGroupName = "resource-group-name";
  string deploymentName = "deployment-name";
  string resourceGroupLocation = "resource-group-location";
  // Must be specified for creating a new resource group
  string pathToTemplateFile = "path-to-template.json-on-disk";
  string pathToParameterFile = "path-to-parameters.json-on-disk";
  string tenantId = "tenant-id";
  public async void Run()
  {
    // Try to obtain the service credentials
    var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(
      tenantId, clientId, clientSecret);
    // Read the template and parameter file contents
    JObject templateFileContents =
      GetJsonFileContents(pathToTemplateFile);
    JObject parameterFileContents =
      GetJsonFileContents(pathToParameterFile);
    // Create the resource manager client
    var resourceManagementClient =
      new ResourceManagementClient(serviceCreds);
    resourceManagementClient.SubscriptionId = subscriptionId;
    // Create or check that resource group exists
    EnsureResourceGroupExists(resourceManagementClient, resourceGroupName,
      resourceGroupLocation);
    // Start a deployment
    DeployTemplate(resourceManagementClient, resourceGroupName, deploymentName,
      templateFileContents, parameterFileContents);
  }

Auf ähnliche Weise das PowerShell-Skript in ein Azure-Abonnement registriert und die erforderlichen-Ressourcenanbieter registriert startet dann die Bereitstellung von Ressourcen in der Vorlagendatei identifiziert, siehe Abbildung 6.

Abbildung 6: Starten der Bereitstellung

# sign in
Write-Host "Logging in...";
Login-AzureRmAccount;
# select subscription
Write-Host "Selecting subscription '$subscriptionId'";
Select-AzureRmSubscription -SubscriptionID $subscriptionId;
# Register RPs
$resourceProviders = @("microsoft.compute","microsoft.resources","microsoft.network");
if($resourceProviders.length) {
  Write-Host "Registering resource providers"
  foreach($resourceProvider in $resourceProviders) {
    RegisterRP($resourceProvider);
  }
}
#Create or check for existing resource group
$resourceGroup = Get-AzureRmResourceGroup -Name $resourceGroupName -ErrorAction SilentlyContinue
if(!$resourceGroup)
{
  Write-Host "Resource group '$resourceGroupName' does not exist.
    To create a new resource
    group, please enter a location.";
  if(!$resourceGroupLocation) {
    $resourceGroupLocation = Read-Host "resourceGroupLocation";
  }
  Write-Host "Creating resource group '$resourceGroupName' in location
    '$resourceGroupLocation'";
  New-AzureRmResourceGroup -Name $resourceGroupName
    -Location $resourceGroupLocation
}
else{
  Write-Host "Using existing resource group '$resourceGroupName'";
}
# Start the deployment
Write-Host "Starting deployment...";
if(Test-Path $parametersFilePath) {
  New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName
    -TemplateFile $templateFilePath -TemplateParameterFile $parametersFilePath;
} else {
  New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName
    -TemplateFile $templateFilePath;
}

Die gesamte Projektmappe, bestehend aus Vorlage und Skript-Dateien steht zum Download von meinem GitHub-Repository unter bit.ly/2INgNEP.

Sobald das geschehen ist, überprüfen Sie die Nutzungsbedingungen und Lizenzierung von Bedingungen, und klicken Sie auf erstellen, um die Ressourcen bereitzustellen. In weniger als 20 Minuten müssen Sie eine voll funktionsfähige blockchainledger einrichten und ausführen. Vergessen Sie nicht, um wichtige Informationen, die erforderlich sind, für die Entwicklung von dApps, einschließlich zu speichern:

  • RPC-Endpunkt: Sie benötigen diese Adresse zu, um die Kommunikation zwischen einer Entwicklungsumgebung dApp wie Ethereum Remix und der Blockchain Consortium herzustellen.
  • SSH Informationen: Sie benötigen Anmeldeinformationen, melden Sie sich die Blockchain-Umgebungen und konfigurieren die Parameter, z. B. i. d. r. zum Entsperren des Kontos Coinbase und Mining neue Blöcke zu starten.

Coinbase ist meine digitale Portemonnaie, die meine Signature-Schlüssel verwendet, um einen Block, und Meine Ether, der kryptowährung von Ethereum als Teil des Mining-Prozesses, die durch hash enthält. Wenn Sie einen neuen Ethereum Consortium Ledger in Azure bereitstellen, wird dieses Konto zunächst gesperrt, sodass muss ich es entsperren, um intelligente Verträge veröffentlichen zu können. Mithilfe von SSH, ich eine Verbindung mit einem Transaktionsknoten des Netzwerks Ethereum Consortium herstellen, und entsperren Sie das Konto Coinbase wie folgt:

geth attach -- opens the Geth console
personal.unlockAccount(eth.coinbase)

Wenn Sie nach einer Passphrase aufgefordert werden, gebe ich das Gethadmin-Kennwort, das ich in Schritt 1 des Konfigurations-Assistenten (nicht die Ethereum Passphrase für privaten Schlüssel) angegeben. In der Standardeinstellung die Sperre aufhebt dadurch Coinbase für 5 Minuten. Sie können die Dauer, die über eine andere Signatur der Methode UnlockAccount ändern, wie hier gezeigt:

eth.coinbase -- address of the coinbase account
personal.unlockAccount('address', 'passphrase', 'duration') --
  unlocking the account for a longer time period

Wenn Sie wissen möchten, was der Befehl "Geth" steht für, ist es ein Befehlszeilentool "multipurpose", die im Go implementiert einen vollständigen Ethereum-Knoten ausgeführt wird.

Sobald das Coinbase Konto entsperrt ist, stellt dies Zeitpunkt null, wenn das Netzwerk gestartet wird. Nach diesem Zeitpunkt können Knoten Transaktionen akzeptieren. Transaktionen können in Form von die Erstellung von Konten, die Verschiebung von Ether, Erstellung von intelligenten Verträgen oder Änderungen an den Status der blockchain-Komponente sein. Klicken Sie dann jeweils regelmäßige Netzwerk Minen den nächsten Block für das Netzwerk so konfiguriert. Dieser Block wird ein Hash berechnet, indem die Transaktionen ausgeführt, zwischen den letzten Block und nun sowie den Hash aus dem vorherigen Block und eine Nonce-Hashes kombiniert – eine Sequenz von Bits in einem Block, der angepasst werden kann, um zu versuchen die Proof of Work-Bedingung erfüllen.

Dies ist im Wesentlichen Mining. Dieser Wert stellt zufriedenstellendes "Proof of Work" Compute schwierig, die von Glück oder brute-Force-abhängt. Der Block wird dann über das Netzwerk Konsens akzeptiert, und daher haben Sie die ersten beiden Blöcke in der Kette, und so weiter.

Entwickeln intelligente Verträge

Es würde ein ganzes Buch durchlaufen, die Details der Entwicklung von smart Contracts in Ethereum. In diesem Artikel möchte ich Zeiger für den Einstieg anzubieten und zu verstehen, die Landschaft der Technologien und Frameworks verwendet.

Zum Schreiben und intelligente Verträge in Ethereum bereitgestellt haben, können Sie verwenden den entwicklungsumgebungen in Azure verfügbar sind oder Zugriff auf eine vollständig extern browserbasierte IDE wie dieses Camp (ether.camp) oder Ethereum Remix (Remix.ethereum.org).

Im Hinblick auf Programmiersprachen Solidity (solidity.readthedocs.io) ist eine beliebte Vertrag-orientierten Sprache für Blockchain-Programmierung mit einer JavaScript-ähnliche Syntax.

Auf der Clientseite enthalten Programmiersprachen, die unterstützen die Interaktion mit einem Knoten von Ethereum, c#, C++, JavaScript und mehr. Es ist möglich, mithilfe einer Bibliothek wie NEthereum c#-Code zu schreiben (nethereum.com), einer vollständig verwalteten .NET Integration-Bibliothek für Ethereum, die Interaktion mit Ethereum-Clients wie Geth, Eth oder Parität mit RPC ermöglicht. Die Bibliothek enthält sehr ähnliche Funktionen, die JavaScript Ethereum Web 3 RPC-Client-Bibliothek, die de-Facto ist für Blockchain-Client-Interoperabilität.

Um einen Smart Contract-Aufruf über NEthereum machen zu können, muss ich z. B. die folgenden Schritte ausführen:

  • Rufen Sie die smart Contract-Adresse und die Application Binary Interface (ABI). Eine ABI ist die Schnittstelle zum Aufrufen von Funktionen in einen smart Contract und Abrufen von Daten aus einem Knoten von Ethereum zurück.
  • Rufen Sie die Funktionssignatur für den smart Contract aufgerufen werden.
  • Entsperren Sie das Ethereum-Konto, das den Aufruf des Kontos-Passphrase.
  • Stellen Sie den Aufruf an den smart Contract an.

Der Codeausschnitt in abbildung7 zeigt einige sehr einfache Schritte, mit der NEthereum-Bibliothek.

Abbildung 7: Aufrufen eines intelligenten Vertrags

// Obtain the contract ABI
abi = db.GetContract(ballot.ContractID);
// Get the function address to call on the smart contract
var func = web3.Eth.GetContract(
              abi,
              ballot.ContractID).GetFunction("vote");
// Unlock the account so you can call the smart contract
string passphrase = db.GetAccountPassphrase(agreement.OriginatorAccount);
bool success = await web3.Personal.UnlockAccount.SendRequestAsync(
                        ballot.OriginatorAccount,
                        passphrase,
                        120);
// Make the smart contract call
if (success)
{
  object[] args = new object[] {
     id,
     ballot.OriginatorAccount,
     ballot.CounterSigAccount,
     123 /* sample proposal number to vote for */ };
  // Call the "vote" function on the smart contract
  await func.SendTransactionAsync(ballot.OriginatorAccount, args);
}

Aufgerufene smart Contract, geschrieben in Solidity, sieht wie ein Vertrag Stimmzetteln, die eine Vote-Methode verfügbar macht, die zahlreiche Vorschlag in der Eingabe akzeptiert. Wenn eine Stimme umgewandelt wird, wird das Flag für den Wähler (Absender), die abgestimmt haben auf "true", um zu verhindern, dass doppelte voting festgelegt ist, und der Vorschlags-Indikator wird erhöht, erwägen eine Gewichtung für die Abstimmung selbst. Abbildung 8 zeigt den Code für diese.

Abbildung 8: Stimmzettel Vertrag in Solidity-Code

pragma solidity ^0.4.0;
contract Ballot {
  struct Voter {
    uint weight;
    bool voted;
    uint8 vote;
  }
  struct Proposal {
    uint voteCount;
  }
  address chairperson;
  mapping(address => Voter) voters;
  Proposal[] proposals;
  /// Create a new ballot with different proposals
  function Ballot(uint8 _numProposals) public {
    chairperson = msg.sender;
    voters[chairperson].weight = 1;
    proposals.length = _numProposals;
  }
  /// Give a single vote to the given proposal
  function vote(uint8 toProposal) public {
    Voter storage sender = voters[msg.sender];
    if (sender.voted || toProposal >= proposals.length) return;
    sender.voted = true;
    sender.vote = toProposal;
    proposals[toProposal].voteCount += sender.weight;
  }
}

Beachten Sie, dass es sich um eine stark typisierte Sprache mit JavaScript-ähnliche Syntax, mit ein paar Varianten, z. B. den Vertrag, die Struktur und die Adresse Schlüsselwörter oder die drei Schrägstrichen ("/ / /") für einen Kommentar Solidity Code handelt. Ich verwende Ethereum Remix für die Entwicklung von intelligente Verträge in Solidity, bietet eine webbasierte IDE für die Entwicklung, Tests und Bereitstellung.

Azure Blockchain-vNext

Sehen wir uns, was die Zukunft in die Vision von Microsoft für die Blockchain-Technologie aussieht. In Kürze verfügbar, ist das Microsoft vertraulich Consortium (Coco)-Framework ein open-Source-System, das hochgradig skalierbare, vertrauliche Blockchain-Netzwerken ermöglicht, die alle Schlüssel unternehmensanforderungen für Vertraulichkeit, Governance und hoher Leistung und gleichzeitig erfüllen. Zeit stellen eine Möglichkeit zur Produktion Enterprise-Einführung von Blockchain-Technologie zu beschleunigen.

Coco (bit.ly/2Ior8YA) kombiniert die Leistungsfähigkeit von vorhandenen Blockchain-Protokollen vertrauenswürdigen ausführungsumgebungen, verteilte Systeme und Kryptografie, um unternehmensgerechte Blockchain zu aktivieren, Netzwerke, liefern:

  • Durchsatz und Latenz annähert, die Datenbank-Geschwindigkeit
  • Umfangreichere, flexible und unternehmensspezifische Vertraulichkeit Modelle
  • Netzwerkrichtlinienverwaltung über verteilte governance
  • Unterstützung für nicht-deterministische Transaktionen
  • Reduzierte Energieverbrauch

Es ist wichtig zu beachten, dass Coco ein eigenständiges Blockchain-Protokoll ist nicht. Stattdessen bietet es eine vertrauenswürdige Grundlage der vorhandenen Blockchain-Protokollen wie Ethereum, Quorum, Corda und andere integriert werden können, um vollständige, unternehmensgerechte Ledger-Lösungen zu liefern. Coco wird geöffnet und mit jedem Blockchain-Protokoll kompatibel sein soll. Er erreicht dies durch die Verwendung von vertrauenswürdigen ausführungsumgebungen (TEE), z. B. Intel Software Guard Extensions (SGX) und Windows virtuellen sicheren Modus (VSM), um die Erstellung von einem vertrauenswürdigen Netzwerk der physischen Knoten, führen Sie einen verteilten Ledger zu aktivieren. Abbildung 9 zeigt die Architektur dem Coco-Framework.

Allgemeine Übersicht über das Coco-Framework
Abbildung 9 allgemeinen Überblick über das Coco-Framework

Microsoft plant, Quelle Coco-Framework-Code weiter unten in 2018 zu öffnen.

Schließlich ein Wort in Azure Blockchain Workbench, die der primäre Mechanismus für Unternehmenskunden, erste Schritte mit Blockchain ist. Azure-Blockchain ist eine Sammlung von Azure-Dienste und-Funktionen zum Unternehmen erstellen und Bereitstellen einer neuen Klasse von Anwendungen für die Freigabe von Geschäftsprozesse und Daten mit mehreren halb-vertrauenswürdigen Organisationen. Kunden können derzeit diese Dienste in ihren Abonnements bereitstellen und integrieren Blockchains, die im Azure Marketplace verfügbar. Mit Azure Blockchain Workbench, die die Schwerstarbeit für sie ausgeführt wird, sodass sie weniger Gerüstbau und mehr auf die Geschäftslogik und smart Contracts sich konzentrieren können.

Azure Blockchain Workbench ist jetzt erhältlich im Azure Marketplace (aka.ms/tryworkbench).


Stefano Tempestaist ein Microsoft Regional Director und MVP, als auch Kapitel Leiter für CRMUG in der Schweiz der größten Community von Dynamics 365 / CRM-Experten in der ganzen Welt. Tempesta ist ein Dozent zu Dynamics 365, Blockchain und Machine Learning-Kursen und regelmäßiger Referent bei Konferenzen für internationale IT, einschließlich Microsoft Ignite und Tech Summit. Er gründete Blogchain-Speicherplatz (blogchain.space), ein Blog zur blockchaintechnologien schreibt für MSDN Magazine und MS Dynamics Welt*, und Computer veröffentlicht Learning-Experimente in Azure AI-Katalog (gallery.azure.ai).*

Unser Dank gilt den folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: James McCaffrey
Dr. James McCaffrey ist in Redmond (Washington) für Microsoft Research tätig. Er hat an verschiedenen Microsoft-Produkten mitgearbeitet, unter anderem an Internet Explorer und Bing. Dr. McCaffrey erreichen Sie unter jamccaff@microsoft.com.


Diesen Artikel im MSDN Magazine-Forum diskutieren