Inleiding: slimme contractontwikkeling

Dit is een gastpost van KC TAM over het gebruik van verschillende tools voor slimme contractontwikkeling: Remix, Web3 op TestRPC.

Ik las onlangs een goed artikel over Blockgeeks, waarin Ameer alles over het coderen van gedecentraliseerde applicaties in één meesterwerk probeert samen te brengen. Wat een zeer ambitieus en geweldig werk is het! Waarvan er verschillende componenten zijn, en ik zou graag wat uitweiden over enkele van deze tools, en hoe ze kunnen worden gebruikt voor contractontwikkeling.

Deze serie artikelen is niet bedoeld voor het Smart Contract 101- of Ethereum-platform. Bij Blockgeeks kun je zeker veel goed materiaal vinden. Maar door dit te doorlopen weet ik zeker dat je wat ideeën over deze tools zult opdoen en hoop dat dit helpt wanneer je werkt aan het Smart Contract with Solidity.

Ik zal eerst een korte omschrijving geven van het Smart Contract dat ik heb gekozen. En implementeer dit contract later in vier omgevingen. Hier is een korte samenvatting van de vier omgevingen die we hier laten zien.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Een vereenvoudigde stroom van contractcompilatie en -implementatie

slimme contractimplementatie

The Sample Smart Contract: Revenue Sharing

Deze applicatie is afkomstig uit het Smart Contract in Hoofdstuk 4: Ethereum Accounts uit het boek “Blockchain-toepassingen een praktische benadering”Door A. Bahga en V. Madisetti. Het is aangepast om te voldoen aan een of andere vereiste van de nieuwste release van Solidity.

Deze applicatie heet Revenue Sharing. Kortom, een lijst met adressen wordt gegeven wanneer het contract wordt ingezet. Iedereen kan een bepaald bedrag sturen (hier is het de waarde van ethers of ether) en dit bedrag wordt gelijkelijk verdeeld over de adressen op de lijst. Het is een vrij eenvoudig Soliditeitscontract.

Hier is de soliditeit van het slimme contract.

pragma stevigheid ^ 0.4.8;

contract Inkomsten delen {

spreek de openbare maker aan;

mapping (uint => adres) openbare aandeelhouders;

uint openbaar aantalAandeelhouders;

event Disburse (uint _amount, uint _numShareholders);

functie RevenueSharing (adres [] adressen) {

creator = msg.sender;

numShareholders = adressen.lengte;

voor (uint i = 0; i< adressen.lengte; i ++) {

aandeelhouders [i] = adressen [i];

functie shareRevenue () te betalen opbrengsten (bool success) {

uint bedrag = msg.value / numShareholders;

voor (uint i = 0; i

Enkele snelle opmerkingen over dit contract

Het contract heet RevenueSharing.

Functie RevenueSharing () heeft dezelfde naam als het contract zelf. Het is de constructeur en wordt slechts één keer gebeld wanneer het contract wordt ingezet. We zien dat in dit contract een reeks adressen wordt geleverd, en deze reeks adressen wordt opgeslagen in een andere reeks, aandeelhouders genaamd.

Functie shareRevenue () is de enige hoofdfunctie in deze contactpersoon. Bij het uitvoeren van deze functie met een aantal ethers (in msg.value), wordt het bedrag verdeeld in het aantal aandeelhouders (aantalAandeelhouders), en elk adres in de aandeelhoudersreeks krijgt het gedeelte. We zullen deze functie uitvoeren in onze demo.

Functie kill () wordt gebruikt om het contract te verwijderen. We zullen deze functie niet gebruiken in de demo.

Merk op dat alle variabelen zijn gedefinieerd met public. Dit helpt ons om meer details in het contract te observeren. In het echte leven moeten we vanwege veiligheidsoverwegingen voorzichtig zijn bij het openbaar maken van variabelen of functies.

Remixen

Overzicht

Remix is ​​een reeks tools om te communiceren met de Ethereum-blockchain om transacties te debuggen (rechtstreeks geciteerd uit hier​Er is een IDE-versie (Remix IDE) en een online-versie, die we hier zullen gebruiken.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Er zijn veel tools in Remix, maar de volgende tools zijn van ons belang,

  • Solidity Compiler. wat veel nuttige informatie oplevert die we in een andere omgeving zullen gebruiken
  • Runtime-omgeving. Remix biedt drie:
  • Injected Web3: naar provider zoals Mist of MetaMask
  • Web3-provider: naar lokale host via ipc
  • JavaScript VM: een gesimuleerde omgeving

Onder de runtime-omgevingen gebruiken we JavaScript VM. In de JavaScript-VM wordt Remix geleverd met vijf Ethereum-accounts, die elk zijn gestort met 100 ethers. Dit is goed genoeg om ons slimme contract te testen. Mijnbouw is ook niet vereist omdat het automatisch gebeurt.

Je hebt gemakkelijk toegang tot Remix vanuit elke browser (url: http://remix.ethereuem.org​Dit is een screenshot van Remix.

Het scherm is opgedeeld in verschillende gebieden.

  • Gebied voor Smart Contract: we plakken hier de Solidity-contractcode.
  • Gebied van compilatie en runtime: in compilatietag, hier worden eventuele compilatiefouten of waarschuwingen weergegeven. in Run-tag implementeren we het contract en voeren we contractfuncties uit.
  • Gebied van transactielogboeken: alle transactiegegevens kunnen hier worden bekeken.

Stel het contract samen

We plakken de Smart Contract-code in Remix.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

We merken dat de code automatisch wordt gecompileerd, en er zijn enkele waarschuwingen. Omdat het geen kritieke fouten zijn, kunnen we veilig verder gaan.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Als we op Details klikken, zien we veel informatie voor dit contract. Onder hen zijn ze,

  • Bytecode
  • ABI
  • Web3 implementeren

Ze zijn nodig bij het inzetten van dit contract in een andere omgeving. We verwijzen dit later terug.

Aangezien we geen fouten zien na het compileren, kunnen we dit contract uitvoeren in de Remix JavaScript-omgeving.

Implementeer het contract

1. Een kijkje in de Run Tag

Het is hoe het eruit ziet in de Run-tag.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Kies JavaScript VM in de omgeving.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Nadat we JavaScript VM hebben geselecteerd, zullen we zien dat sommige accounts zijn ingevuld in Account-velden.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

En zoals gezegd, die allemaal vooraf zijn gedeponeerd 100 ethers, alleen om te testen. Aangezien we deze accounts later zullen gebruiken, kunnen we ze eerst kopiëren.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

De gaslimiet is om aan te geven hoeveel gas we aan een transactie kunnen besteden. Omdat we ons in een testomgeving bevinden, maken we ons hier niet al te veel zorgen over. Ik heb een aantal grote contractimplementaties geprobeerd en de standaard gaslimiet is niet voldoende. Hoe dan ook, het kan indien nodig worden verhoogd tot elke gewenste waarde.

Het Value-gedeelte is waar we het aantal ethers naartoe sturen tijdens contractimplementatie en het uitvoeren van een functie. In ons geval hechten we geen waarde aan contractimplementatie, maar plaatsen we enkele ethers bij het uitvoeren van de functie. Zie hieronder voor meer details.

2. Implementeer het contract

Nu zien we dat het contract RevenueSharing al is geselecteerd (we hebben maar één contract in onze code). We zullen de knop Maken gebruiken om dit contract op de JavaScript-VM te implementeren.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Er is iets nodig, zoals gesuggereerd in het invoerveld: “adres [] adressen”, wanneer het contract wordt ingezet. Weet je nog dat dit contract een lijst met adressen vereist als doelen voor delen? Voor demonstratiedoeleinden gebruiken we de 3e, 4e en 5e adressen hierboven vermeld als de adressenlijst. Dus plak dit naast de knop Maken:

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Zorg er nu voor dat we hebben geselecteerd

  • Omgeving: JavaScript VM
  • Account: het eerste account bij implementatie van dit contract (begint met 0xca3…)
  • Plak de adresmatrix hierboven naast de knop Maken

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Door op Create te drukken, zien we het volgende gebeuren.

3. Nadat het contract is geïmplementeerd

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Het contract is nu geïmplementeerd in JavaScript VM (geheugen) en het contractadres wordt weergegeven (0x692…). We gebruiken dit adres niet in onze demo. Dat adres kan indien nodig in andere gevallen worden doorverwezen.

Ook zien we dat de variabelen die als “openbaar” zijn gemarkeerd, nu worden weergegeven, dat zijn ze,

  • aandeelhouders
  • aantalAandeelhouders
  • Schepper

En twee functies hebben we in dit contract gedefinieerd,

  • shareRevenue ()
  • doden()

Voor alles stellen we vast dat het rekeningsaldo met een klein aantal ethers wordt verminderd. Het verschil (417.626 weis, 1 wei = 10-18 ether) zijn de kosten voor het inzetten van dit contract. In het echte leven zijn het de echte ethers die van uw account worden afgetrokken wanneer u een contract implementeert.

Interactie met geïmplementeerd contract

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

1. Controleer variabelen

We kunnen eerst de variabelen controleren door op de variabeleknoppen te drukken. Hier onderzoeken we de numShareholders en creator. Voor aandeelhouders, aangezien het een array is, moeten we een index specificeren (0, 1 of 2), die overeenkomt met de adressen die we plaatsen toen het contract werd geïmplementeerd (gemaakt).

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Alle variabelen zijn zoals we verwachten.

2. Voer de functie shareRevenue () uit

Nu voeren we shareRevenue () uit. We gebruiken de eerste rekening om 30 ethers te storten bij het uitvoeren van deze functie (dit is alleen voor deze functie. In veel gevallen is dit niet vereist). Volgens de contractlogica moeten de 30 ethers worden verdeeld over de accountlijst, dat wil zeggen de 3e, 4e en 5e account in onze accountlijst. Vanaf nu is de balans van elk van hen nog steeds 100 ethers.

We gebruiken dezelfde plaats om de functie uit te voeren. Hier zorgen we voor,

  • kies in het veld Account het eerste account (begint met 0xca3 …)
  • plaats 30 ethers in de waarde

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Druk vervolgens op shareRevenue.

Nadat de functie is uitgevoerd, onderzoeken we het saldo van elke rekening en kijken of deze wordt uitgevoerd volgens ons ontwerp.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Ten eerste zien we dat er 30 ethers worden afgetrokken van de eerste rekening, en alle drie de rekeningen op de lijst hebben nu 110 ethers. Dus de 30 ethers die van de eerste rekening worden afgetrokken, worden nu verdeeld over de drie rekeningen. Dit onderdeel werkt perfect volgens het contract.

Als we het saldo van de 1e rekening nauwkeurig bekijken, wordt er ook een extra hoeveelheid ethers afgetrokken. Het verschil is 47.776 wei, wat de kosten zijn voor deze transactie. Elke transactie, uitvoering van functie of inzet van contract kost u een aantal ethers.

Transactielogboek

We hebben het transactielogboek tijdens onze test niet aangeraakt, maar alles wordt bijgehouden, zelfs het opvragen van een variabele. Laten we de details van twee geselecteerde logboeken eens bekijken.

1. Contractimplementatie

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

We kunnen zien wie dit contract heeft ingezet, het contractadres en de transactiekosten die nodig zijn om het te implementeren.

2. Uitvoering van shareRevenue () functie

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Opnieuw zien we het als transactiekost. In shareRevenue () is er een retour booleaanse waarde en we zien dat de “gedecodeerde” er een “echte” terugkeer is. We hebben ook een evenement voor succesvolle distributie en we zien het in “logboeken”.

Samenvatting

Dit is hoe Remix helpt bij het testen van de code die we ontwikkelen. Het wordt geleverd met zeer handige functies en een intuïtieve gebruikersinterface. In het volgende artikel zullen we een andere omgeving, testrpc, gebruiken om aan hetzelfde contract te werken en kijken hoe het werkt.

De beste tools voor slimme contractontwikkeling Deel 2: Web3 op TestRPC

Overzicht

TestRPC is een simulatie van een Ethereum-blockchain, die wordt geleverd met 10 vooraf gedefinieerde Ethereum-accounts en geheugensteuntjes ondersteunt (dat wil zeggen dat men dezelfde set accounts kan genereren met dezelfde set geheugensteuntjes). Het komt niet met een gebruikersinterface als Remix, en we hebben een knooppuntconsole plus de web3-bibliotheek nodig om met deze blockchain te communiceren.

Voorbereiding

De demo wordt gedaan via de opdrachtregel of terminal. Gebruik een terminal-tool die schermsplitsing ondersteunt. Ik gebruik iTerm2 op mijn Mac.

Installeer knooppunt en npm: raadpleeg hier voor installatie op uw platform.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Opmerking: ik heb onlangs ontdekt dat bij het installeren van web3 met npm, de 1.0.0 bètaversie is geïnstalleerd, waar de eerder gebruikte commando’s (gebaseerd op 0.20.4) niet werken. Daarom specificeren we in plaats daarvan de versie van web3.

Alle onderstaande opdrachten zijn in versie 0.20.0.

Open een terminal en splits het scherm in tweeën. De linkerkant is de knooppuntconsole, waar we het grootste deel van onze tijd zullen werken. De rechterkant is waar we de TestRPC draaien.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Start TestRPC

Start aan de rechterkant de TestRPC

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Hier hebben we wat opmerkingen

  • TestRPC is een knooppunttoepassing die een Ethereum-blockchain in het geheugen simuleert.
  • Er zijn 10 accounts vooraf gedefinieerd.
  • Deze accounts worden gegenereerd via mnemonic en zijn elke keer anders wanneer TestRPC wordt gestart. Om dezelfde set accounts te behouden, kunnen we de hierboven getoonde geheugensteun gebruiken als parameters bij het uitvoeren van TestRPC.
  • Ook wordt de RPC geopend op localhost: 8545. Web3 krijgt hierdoor toegang tot de blockchain.

We zullen dit deel niet meer bespreken, ervan uitgaande dat alles goed werkt in deze Ethereum-blockchain. Nu richten we ons meer op de knooppuntconsole (linkerkant). Tijdens de test blijven we opdrachten en logboeken zien die zijn uitgegeven aan de blockchain die worden weergegeven aan de TestRPC-kant.

Web3-object

We moeten de knooppuntconsole instrueren dat we web3 gebruiken en wijzen dat de blockchain web3 interfacing.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

dat zijn precies de accounts die in TestRPC zijn gemaakt.

Een handige functie die balans laat zien

Ik heb een handige functie gevonden (koppeling) die het saldo voor alle accounts kan weergeven. Hier is de functie.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Kopieer en plak deze functie gewoon in de knooppuntconsole. Nu kunnen we de functie checkAllBalances () op elk moment aanroepen, en het zal het saldo van alle rekeningen in ether tonen. Merk op dat deze functie verdwijnt nadat we de node-console hebben afgesloten, maar we kunnen deze op elk gewenst moment weer toevoegen.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Implementeer het contract

1. Opstellen van het contract

Nu is alles klaar. We kunnen ons Revenue Sharing-contract inzetten.

We moeten de Remix opnieuw openen omdat we de compiler op Remix gebruiken. Nadat we de contractcode in Remix hebben geplakt, wordt deze automatisch gecompileerd. Hier gebruiken we het resultaat van contractimplementatie.

Klik op Detail op Tag compileren en er is veel informatie.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Onder de informatie zijn er drie van onze interesses: bytecode, ABI en Web3Deploy

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

De bytecode is de binaire versie van ons contract na compilatie en de instructieset die moet worden uitgevoerd in Ethereum Virtual Machine (EVM), en de ABI (Application Binary Interface) is de interface waarmee we communiceren met de contractbytecode.

Remix is ​​zo vriendelijk om de code in Web3Deploy voor te bereiden, waarin de bytecode en ABI al in de commando’s zijn opgenomen. Daarom hoeven we alleen het Web3Deploy-gedeelte te gebruiken.

2. Implementeer het contract

Ten eerste moeten we, zoals vereist door het contract, een lijst met doelaccounts definiëren. Voor demonstratiedoeleinden worden de drie accounts gebruikt die beginnen bij het tweede account, dat wil zeggen, van eth.accounts [1] tot eth.accounts [3].

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Daarna volgen we wat Web3Deploy suggereert.

Maak een klasse voor het delen van inkomsten contract op basis van de ABI. Kopieer die regel gewoon vanuit Web3Deploy.

knooppunt console

> var revenuesharingContract = web3.eth.contract ([{"constante": waar,"ingangen"​,"naam"​"Schepper","uitgangen"​"naam"​"","type"​"adres"​,"te betalen": niet waar,"stateMutability"​"visie","type"​"functie"​"constante": niet waar,"ingangen"​,"naam"​"doden","uitgangen"​,"te betalen": niet waar,"stateMutability"​"onbetaalbaar","type"​"functie"​"constante": waar,"ingangen"​,"naam"​"aantalAandeelhouders","uitgangen"​"naam"​"","type"​"uint256"​,"te betalen": niet waar,"stateMutability"​"visie","type"​"functie"​"constante": waar,"ingangen"​"naam"​"","type"​"uint256"​,"naam"​"aandeelhouders","uitgangen"​"naam"​"","type"​"adres"​,"te betalen": niet waar,"stateMutability"​"visie","type"​"functie"​"constante": niet waar,"ingangen"​,"naam"​"aandeel inkomsten","uitgangen"​"naam"​"succes","type"​"bool"​,"te betalen": waar,"stateMutability"​"te betalen","type"​"functie"​"ingangen"​"naam"​"adressen","type"​"adres[]"​,"te betalen": niet waar,"stateMutability"​"onbetaalbaar","type"​"constructeur"​"anoniem": niet waar,"ingangen"​"geïndexeerd": niet waar,"naam"​"_bedrag","type"​"uint256"​"geïndexeerd": niet waar,"naam"​"_numAandeelhouders","type"​"uint256"​,"naam"​"Betalen","type"​"evenement"​

Implementeer nu het contract met de bytecode, plus de nodige informatie. Nogmaals, we kunnen die regel kopiëren van Web3Deploy. Het ingezette contract is een object dat het delen van inkomsten wordt genoemd.

knooppunt console

> var revenuesharing = revenuesharingContract.new (

adressen,

van: web3.eth.accounts [0],

gegevens: ‘0x6060604052341561000f57600080fd5b60405161049d38038061049d833981016040528080518201919050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508151600281905550600090505b81518110156100f957818181518110151561009157fe5b906020019060200201516001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061007a565b50506103938061010a6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302d05d3f1461007257806341c0e1b5146100c757806368eca613146100dc578063ab377daa14610105578063e579a0bd14610168575b600080fd5b341561007d57600080fd5b61008561018a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100d257600080fd5b6100da6101af565b005b34156100e75760008 0fd5b6100ef610240565b6040518082815260200191505060405180910390f35b341561011057600080fd5b6101266004808035906020019091905050610246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610170610279565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60025481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006002543481151561028b57fe5b049150600090505b60025481101561031d576001600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673fffffffffffff fffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561031057600080fd5b8080600101915050610293565b7f9c26340b8d01b4e039192edfd25f4a56ed070d45afe866b8685658b1ed3cd74d34600254604051808381526020018281526020019250505060405180910390a1600192505050905600a165627a7a72305820f0e717ba935e00c43896cc9266a85af91a519061c044503be0a52b93f721d1610029’,

gas: ‘4700000’

}, functie (e, contract) {

console.log (e, contract);

if (type contract.address! == ‘undefined’) {

console.log (‘Contract mined! address:’ + contract.address + ‘transactionHash:’ + contract.transactionHash);

We zullen (vrijwel onmiddellijk) zien dat het contract wordt gedolven.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Nu kunnen we het object-inkomsten delen gebruiken om met dit ingezette contract te communiceren.

Interactie met geïmplementeerd contract

Het ingezette contract is toegankelijk via het delen van inkomsten.

1. Onderzoek de openbare variabelen

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

We kunnen de variabelen onderzoeken die zijn gemarkeerd als ‘openbaar’.

2. Voer de functie shareRevenue () uit

Voordat we de functie shareRevenue () uitvoeren, kijken we eerst naar de balans.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

Merk op dat een bepaald bedrag wordt afgetrokken van rekeningen [0], die het contract hebben ingezet. De hoeveelheid ether die voor de inzet is betaald, is 417.626 weis. U kunt controleren of dit de exacte transactiekosten zijn toen we dit deden in Remix.

Nu voeren we de functie uit.

knooppunt console

> revenuesharing.shareRevenue ({from: web3.eth.accounts [0], value: web3.toWei (30), gas: 4700000});

Hier noemen we de functie shareRevenue (), en specificeren dat deze wordt uitgevoerd door accounts [0], met 30 ethers (toWei is een functie in web3 wordt gebruikt om 30 ethers om te zetten in wei, aangezien wei de eenheid is die wordt geaccepteerd in het commando ). We plaatsen ook het gas dat we mogen uitgeven (het is veel meer dan nodig, maar we krijgen een terugbetaling na uitvoering).

Nadat de transactie is uitgevoerd, kunnen we het saldo opnieuw controleren.

Verschillende tools gebruiken voor slimme contractontwikkeling: Remix, Web3 op TestRPC

We hebben bereikt wat we wilden: 30 ethers worden afgetrokken van rekeningen [0] en verdeeld over rekeningen [1] naar rekeningen [3] (nu heeft elk van hen 110 ethers). Daarnaast wordt er een bedrag betaald voor het uitvoeren van deze transactie. Het is opnieuw 47.776 weis, wat overeenkomt met wat we in Remix hebben waargenomen.

Samenvatting

We hebben met succes hetzelfde gedaan op TestRPC. De algehele stroom is bijna hetzelfde als die in Remix, behalve dat we moeten werken aan de node-console en web3 om te communiceren met de blockchain in TestRPC. De volgende keer zullen we bijna hetzelfde doen op een privé Ethereum-blockchain.

Auteur: KC TAM 

KC begon zijn blockchain-reis pas een paar maanden geleden. Zijn interesse is om meer details uit te graven ‘hoe dingen werken’, en met anderen te delen wat hij heeft geleerd. ’LinkedIn: https://www.linkedin.com/in/ktam1/

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me