Εισαγωγή στο Ethereum Smart Contract Clients (Βιβλιοθήκη Web3js)

Μετά από μερικές συζητήσεις σχετικά με τον σχεδιασμό έξυπνων συμβάσεων σταθερότητας και ζητήματα στα δύο τελευταία άρθρα (Εδώ και Εδώ), θα ρίξουμε μια ματιά στο πώς μπορούμε να ενσωματώσουμε έξυπνες συμβάσεις με εφαρμογές εταιρικών πελατών. Υπάρχουν πολλές τεχνολογίες που μπορούν να αλληλεπιδράσουν με έναν κόμβο ethereum (ethereum blockchain client).

Η βασική αρχιτεκτονική του EVM (ethereum virtual machine) που εκτελεί έξυπνα συμβόλαια είναι ότι όλες οι κλήσεις προς τη σύμβαση εκτελούνται ως συναλλαγή όπου ο αιθέρας που απαιτείται για μια μέθοδο σύμβασης που εκτελείται μεταφέρεται από τη διεύθυνση λογαριασμού κλήσης στη διεύθυνση λογαριασμού σύμβασης. Ο κωδικός της σύμβασης βρίσκεται στη διεύθυνση της σύμβασης στο blockchain και αναμένει ότι οι κλήσεις θα πραγματοποιηθούν ως συναλλαγές που μεταφέρουν τα δεδομένα των παραμέτρων της μεθόδου μαζί με τη συναλλαγή ως «εισαγωγή». Για να ενεργοποιήσετε μια τυπική μορφή για όλους τους πελάτες, το όνομα της μεθόδου και οι παράμετροι πρέπει να αναλυθούν σε μια προτεινόμενη μορφή.

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Εισαγωγή στο Ethereum Smart Contract Clients (Βιβλιοθήκη Web3js)

JSON-RPC

Οι τυπικοί πελάτες ethereum εκθέτουν μια διεπαφή για την πραγματοποίηση του RPC (κλήση απομακρυσμένης διαδικασίας) σε κώδικα συμβολαίου που αναπτύσσεται στο blockchain. Αυτό ονομάζεται διεπαφή RPC που εξυπηρετεί ως αιτήματα ανάρτησης HTTP στην προεπιλεγμένη θύρα 8545 για τον πελάτη εν κινήσει, c ++ και parity. Αυτό συνήθως μπορεί να προσαρμοστεί ως παράμετρος εντολών ή ιδιότητα αρχείου διαμόρφωσης:

–rpc –rpcaddr <ε.π.> –rpcport <αριθμός θύρας>

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Η μορφή RPC είναι δομημένη στο δημοφιλές JSON-RPC μορφή. Η μορφή είναι περίπλοκη ειδικά για τις τιμές παραμέτρων marshaling με βάση τους τύπους. Το προτεινόμενο σχήμα κωδικοποίησης πρέπει να ακολουθείται όπως ορίζεται με τη σωστή επένδυση για να διασφαλιστεί ότι το EVM είναι σε θέση να τα αποκωδικοποιήσει.

Λόγω της πολυπλοκότητας χαμηλού επιπέδου της μορφής JSON_RPC, υπάρχουν αρκετές διαθέσιμες βιβλιοθήκες περιτυλίγματος που απλοποιούν τη μορφή κλήσης. Το παλαιότερο είναι ένα περιτύλιγμα JavaScript web3.js που λειτουργεί στο πρόγραμμα περιήγησης και σε μια παρουσία nodejs. Αυτή η συζήτηση δεν στοχεύει στην αντικατάσταση του εγγράφου αναφοράς για όλους τους ορισμούς API. Ανατρέξτε στον παραπάνω σύνδεσμο για συγκεκριμένες κλήσεις API. Εδώ θα χρησιμοποιήσουμε ένα συγκεκριμένο σύνολο API για να δημιουργήσουμε τη σύσταση για την εφαρμογή προγράμματος-πελάτη που βασίζεται σε πρόγραμμα περιήγησης για το έξυπνο συμβόλαιο.

Εγκαταστήστε το web3.js

Για να εγκαταστήσετε το web3 ως κόμβο, πρόγραμμα περιήγησης ή μετεωρίτη ακολουθήστε τις παραπάνω οδηγίες github Σε περίπτωση που εγκαταστήσετε μια μονάδα κόμβου με -g, εγκαθίσταται στη διαδρομή / usr / lib / node_modules / web3. Βεβαιωθείτε ότι αυτός ο κατάλογος υπάρχει με τις εξαρτήσεις στην ακόλουθη δομή (Αυτό είναι για το Linux OS με το οποίο έχει δοκιμαστεί, ανατρέξτε στην τεκμηρίωση του συγκεκριμένου λειτουργικού συστήματος nodejs για τη συγκεκριμένη διαδρομή του λειτουργικού συστήματος), αυτό είναι σημαντικό για τον χρόνο εκτέλεσης του nodejs να βρει όλα τα εξαρτώμενα βιβλιοθήκες.

/ usr / lib / node_modules / web3

Ower bower.json

├── bundled.js

├── circle.yml

├── coder.js

├── διαν

├── ├── web3.js

├── ├── χάρτης web3.js.map

├── ├── web3-light.js

├── ├── web3-light.min.js

└── └── web3.min.js

├── παράδειγμα

├── ├── balance.html

├── ├── contract_array.html

├── ├── contract.html

├── ├── event_inc.html

├── ├── icap.html

├── ├── namereg.html

Ode ode node-app.js

├── gulpfile.js

├── index.js

├── lib

├── ├── συμβάσεις

├── │ ├── GlobalRegistrar.json

├── │ ├── ICAPRegistrar.json

└── │ └── SmartExchange.json

├── ├── σταθερότητα

├── │ ├── address.js

Ool │ ├── bool.js

│ │ ├── bytes.js

├── │ ├── coder.js

├── │ ├── dynamicbytes.js

├── │ ├── formatters.js

├── │ ├── int.js

├── │ ├── param.js

├── │ ├── real.js

├── │ ├── string.js

. │ ├── type.js

Int │ int uint.js

│ │ └── ureal.js

Ils ├── εργαλεία

├── │ ├── πρόγραμμα περιήγησης-bn.js

├── │ ├── πρόγραμμα περιήγησης-xhr.js

├── │ ├── config.js

│ │ ├── sha3.js

│ │ └── utils.js

├── ├── version.json

├── ├── web3

├── │ ├── allevents.js

Atch │ ├── batch.js

├── │ ├── contract.js

├── │ ├── σφάλματα.js

├── │ ├── event.js

├── │ ├── επέκταση.js

├── │ ├── filter.js

├── │ ├── formatters.js

├── │ ├── function.js

├── │ ├── httpprovider.js

Ban │ ├── iban.js

│ │ ├── ipcprovider.js

Son │ son jsonrpc.js

. │ ├── method.js

├── │ ├── μέθοδοι

│ │ │ ├── db.js

├── │ │ ├── eth.js

├── │ │ ├── net.js

├── │ │ ├── personal.js

│ │ │ ├── shh.js

├── │ │ ├── swarm.js

└── │ │ └── watches.js

├── │ ├── namereg.js

├── │ ├── property.js

├── │ ├── requestmanager.js

├── │ ├── settings.js

Cing │ ├── syncing.js

└── │ └── transfer.js

└── └── web3.js

├── ΑΔΕΙΑ

├── node_modules

Ign ign bignumber.js

Ign │ ├── bignumber.js

│ │ ign bignumber.js.map

Ign │ ├── bignumber.min.js

Ower │ ├── bower.json

│ │ ├── έγγραφο

└── │ │ └── API.html

├── │ ├── ΑΔΕΙΑ

├── │ ├── package.json

AD │ └── README.md

├── ├── crypto-js

Es │ ├── aes.js

Ower │ ├── bower.json

Ip │ ip cipher-core.js

├── │ ├── ΣΥΜΒΟΛΗ.m.m

├── │ ├── core.js

├── │ ├── crypto-js.js

│ │ ├── έγγραφα

St │ │ └── QuickStartGuide.wiki

├── │ ├── enc-base64.js

├── │ ├── enc-hex.js

│ │ ├── enc-latin1.js

├── │ ├── enc-utf16.js

├── │ ├── enc-utf8.js

├── │ ├── evpkdf.js

├── │ ├── μορφή-hex.js

├── │ ├── format-openssl.js

│ │ ├── hmac.js

│ │ m hmac-md5.js

│ │ m hmac-ripemd160.js

│ │ ├── hmac-sha1.js

│ │ ├── hmac-sha224.js

│ │ m hmac-sha256.js

│ │ m hmac-sha384.js

│ │ m hmac-sha3.js

│ │ m hmac-sha512.js

├── │ ├── index.js

├── │ ├── lib-typedarrays.js

├── │ ├── ΑΔΕΙΑ

│ │ d md5.js

├── │ ├── λειτουργία-cfb.js

├── │ ├── mode-ctr-gladman.js

├── │ ├── mode-ctr.js

├── │ ├── mode-ecb.js

├── │ ├── mode-ofb.js

├── │ ├── package.json

├── │ ├── pad-ansix923.js

├── │ ├── pad-iso10126.js

├── │ ├── pad-iso97971.js

├── │ ├── pad-nopadding.js

├── │ ├── pad-pkcs7.js

├── │ ├── pad-zeropadding.js

│ │ b pbkdf2.js

├── │ ├── rabbit.js

│ │ ├── κουνέλι-legacy.js

│ │ c rc4.js

AD │ ├── README.md

│ │ ├── ripemd160.js

│ │ ├── sha1.js

│ │ ├── sha224.js

│ │ ├── sha256.js

│ │ ├── sha384.js

│ │ ├── sha3.js

│ │ ├── sha512.js

├── │ ├── tripledes.js

64 │ 64 x64-core.js

├── ├── utf8

IC │ ├── ΑΔΕΙΑ-MIT.txt

├── │ ├── package.json

AD │ ├── README.md

│ │ └── utf8.js

│ ├── xhr2

├── │ ├── Cakefile

├── │ ├── ΣΥΜΒΟΛΗ.m.m

├── │ ├── lib

├── │ │ ├── browser.js

│ │ │ └── xhr2.js

IC │ ├── LICENSE.txt

├── │ ├── package.json

AD │ ├── README.md

│ │ r src

│ │ │ ├── 000-xml_http_request_event_target.coffee

│ │ │ ├── 001-xml_http_request.coffee

├── │ │ ├── σφάλματα. Καφέ

├── │ │ ├── progress_event.coffee

│ │ │ └── xml_http_request_upload.coffee

└── │ └── δοκιμή

│ │ ├── φωτιστικά

Ello │ │ ├── hello.json

Ello │ │ ello hello.txt

│ │ │ └── xhr2.png

│ │ ├── html

└── │ │ └── browser_test.html

│ │ r src

│ │ ├── events_test.coffee

├── │ ├── event_target_test.coffee

│ │ ├── headers_test.coffee

│ │ ├── βοηθοί

├── │ │ ├── browser_mocha_runner.coffee

├── │ │ ├── browser_mocha_setup.coffee

├── │ │ ├── setup.coffee

│ │ │ └── xhr_server.coffee

│ │ ode nodejs_set_test.coffee

│ │ edi redirect_test.coffee

│ │ ├── Respons_type_test.coffee

│ │ ├── Responsurl_test.coffee

├── │ ├── send_test.coffee

├── │ ├── status_test.coffee

│ │ └── xhr_test.coffee

│ ml xmlhttprequest

├── ├── lib

│ │ └── XMLHttpRequest.js

├── ├── ΑΔΕΙΑ

├── ├── package.json

AD └── README.md

├── πακέτο-init.js

├── package.js

├── package.json

├── README.md

├── styleguide.md

└── νήματα. Κλείδωμα

Εκτελούνται τα Nodejs Web3js

Το Nodejs είναι ένα δημοφιλές πλαίσιο εκτέλεσης javascript από διακομιστή. Υποστηρίζει πολλά έργα μεσαίου λογισμικού, είναι λογικό να επιτρέπεται στα nodejs να αλληλεπιδρούν με έξυπνα συμβόλαια. Ανατρέξτε σε κάποια τεκμηρίωση κόμβου σχετικά με τον τρόπο εγκατάστασης nodejs στην πλατφόρμα σας.

Για να ελέγξετε την εγκατάσταση του web3 σας με περιβάλλον κόμβου. Αποθηκεύστε τον ακόλουθο κώδικα σε ένα αρχείο js και εκτελέστε τον μέσω του χρόνου εκτέλεσης του κόμβου σας. Βεβαιωθείτε ότι έχετε έναν κόμβο ethereum στον τοπικό υπολογιστή στη θύρα 8545 (ή αλλάξτε τον σε αυτόν που έχετε διαμορφώσει – ανατρέξτε στο προηγούμενο άρθρο σχετικά με τη δημιουργία ενός ιδιωτικού κόμβου).

console.log ("εκκίνηση…");

var Web3 = απαιτείται (‘/ usr / lib / node_modules / web3’);

web3 = νέο Web3 (νέο Web3.providers.HttpProvider (‘http: // localhost: 8545’));

console.log (web3.eth.accounts);

Εάν δεν υπάρχει πρόβλημα στην εγκατάσταση, θα υπάρξει η ακόλουθη έξοδος:

local @ local-Lenovo-G50-70: / nodeinstall / node $ node eth.js

εκκίνηση…

[‘0x81c95efa213ed798cc99e80f79eece314f76fbe8’]]

local @ local-Lenovo-G50-70: / nodeinstall / κόμβος $

Αυτό εκτυπώνει τη σειρά των λογαριασμών που διατίθενται με τον κόμβο ethereum. (Προς το παρόν, υπάρχει μόνο ένα σε αυτήν την περίπτωση) .

Όλες οι δυνατότητες web3 που θα συζητήσουμε στις ακόλουθες ενότητες θα είναι διαθέσιμες και στο περιβάλλον κόμβου. Από εδώ και στο εξής, θα επικεντρωθούμε στην εκτέλεση με βάση το πρόγραμμα περιήγησης, εάν αντιμετωπίζετε συγκεκριμένα προβλήματα στην παρουσία του κόμβου σας, επικοινωνήστε μαζί μου.

Εκτελείται στο – Browser Web3js

Το Web3 μπορεί να εισαχθεί στον κώδικα html του προγράμματος περιήγησής σας για τη δημιουργία διεπαφής χρήστη για τις συμβάσεις σας. Αυτή η προσέγγιση δεν συνιστάται, καθώς δεν θα εκθέσετε τη διεπαφή RPC για να συνδεθεί η μηχανή προγράμματος περιήγησης πελάτη. Συνήθως, θα έχετε μια εταιρική εφαρμογή που θα συνδέεται στον κόμβο ethereum αντί για το πρόγραμμα περιήγησης. Γι ‘αυτό η δοκιμή μας με τα nodejs είναι σημαντική. Υπάρχουν άλλες τεχνολογίες παλαιού τύπου, όπως η java που πρέπει να συνδεθούν με έξυπνα συμβόλαια ethereum. Υπάρχουν τρόποι για τη δημιουργία βιβλιοθηκών wrapper σε κάθε τεχνολογία εάν ακολουθήσουμε τη μορφή JSON-RPC όπως είχε συνταγογραφηθεί. Ωστόσο, θα εμμείνουμε στο περιβάλλον javascript του προγράμματος περιήγησης για να δούμε όλες τις εγκαταστάσεις και τα χαρακτηριστικά που παρέχει ένας πελάτης ethereum.

Ας δούμε μια απλή σελίδα HTML που εισάγει web3 js και κάνουμε μια απλή κλήση συμβολαίου.

&lt; html&gt;

&lt; κεφάλι&gt;

&lt; τίτλος&gt; Δοκιμαστής για eth web3&lt; / τίτλος&gt;

&lt; script src ="https://static.blockgeeks.com/usr/lib/node_modules/web3/lib/web3.js"&gt;&lt; / σενάριο&gt;

&lt; σενάριο&gt;

&nbsp;

έναρξη λειτουργίας () {

var Web3 = απαιτείται (‘web3’);

var web3 = νέο Web3 ();

web3.setProvider (νέο web3.providers.HttpProvider (‘http: // localhost: 8545’));

var abi = […];

var corecontractContract = web3.eth.contract (abi);

var corecontractContractInst = corecontractContract

.στο (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’); console.log (corecontractContract.createCustomer (287187, “custName”, 13243244,1213334));

}

&lt; / σενάριο&gt;

&lt; / κεφάλι&gt;

&lt; φόρτωση σώματος ="αρχή();"&gt;

&lt; σώμα&gt;

&lt; / html&gt;

Το web3.js μπορεί να εισαχθεί απευθείας από το φάκελο lib μέσα στην εγκατάσταση της μονάδας κόμβου. Συνιστάται να χρησιμοποιήσετε την ελαχιστοποιημένη έκδοση, αλλά χρησιμοποιώ την εκτεταμένη έκδοση για δοκιμές για να μπορέσω να εντοπίσετε σφάλματα στη βιβλιοθήκη μέσα από το πρόγραμμα περιήγησης. Μην αντιγράψετε επικολλήστε τον παραπάνω κώδικα χωρίς να αλλάξετε τον κωδικό σας και προσθέστε το συμβόλαιο σας ABI και προσθέστε ένα αντικείμενο συναλλαγής στην κλήση της μεθόδου createCustomer.

Συμβόλαιο ABI

Πρέπει να κάνουμε ένα γρήγορο segway για να κατανοήσουμε τη σύμβαση ΑΒΙ (Δυαδική διεπαφή εφαρμογής). Η προδιαγραφή συμβολαίου ABI είναι ένας πίνακας JSON της μεθόδου της σύμβασης και των μεταβλητών υπογραφών. Το ABI καθορίζει την κωδικοποίηση που απαιτείται για κάθε τύπο παραμέτρου καθώς αποτελεί μέρος της εισόδου για τη συναλλαγή που ενεργοποιεί μια μέθοδο σύμβασης.

Όπως θα διαπιστώσετε, στο τελευταίο άρθρο όπου χρησιμοποιήσατε την εφαρμογή Remix browser για να συντάξετε τη σύμβασή σας, δημιουργήθηκε ένα ABI από την εφαρμογή. Για τη σύμβαση δεδομένων, το ABU έμοιαζε με αυτό:

[{"συνεχής":αληθής,"εισόδους": [],"όνομα":"μετρώ","έξοδοι": [{"όνομα":"","τύπος":"uint256"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"υποψήφιος","τύπος":"διεύθυνση"}, {"όνομα":"μέθοδος","τύπος":"σειρά"}],"όνομα":"isUserAuthorized","έξοδοι": [{"όνομα":"","τύπος":"bool"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":αληθής,"εισόδους": [{"όνομα":"","τύπος":"uint256"}],"όνομα":"χρήστες","έξοδοι": [{"όνομα":"","τύπος":"διεύθυνση"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [],"όνομα":"σκοτώνω","έξοδοι": [],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"χρήστης","τύπος":"διεύθυνση"}],"όνομα":"πρόσθεσε χρήστη","έξοδοι": [],"πληρωτέος":αληθής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"υποψήφιος","τύπος":"διεύθυνση"}, {"όνομα":"μέθοδος","τύπος":"σειρά"}],"όνομα":"είναι Χρήστης","έξοδοι": [{"όνομα":"","τύπος":"bool"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":αληθής,"εισόδους": [{"όνομα":"Εγώ","τύπος":"uint256"}],"όνομα":"getIthUser","έξοδοι": [{"όνομα":"","τύπος":"διεύθυνση"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"δείκτης","τύπος":"uint256"}, {"όνομα":"όνομα","τύπος":"σειρά"}],"όνομα":"ενημέρωση πελάτη","έξοδοι": [],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"Εγώ","τύπος":"uint256"}],"όνομα":"deleteIthUser","έξοδοι": [],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":αληθής,"εισόδους": [],"όνομα":"ιδιοκτήτης","έξοδοι": [{"όνομα":"","τύπος":"διεύθυνση"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"δείκτης","τύπος":"uint256"}, {"όνομα":"κατάσταση","τύπος":"uint256"}],"όνομα":"ενημέρωσηCustomerStatus","έξοδοι": [],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":ψευδής,"εισόδους": [{"όνομα":"ταυτότητα","τύπος":"uint256"}, {"όνομα":"όνομα","τύπος":"σειρά"}, {"όνομα":"Ημερομηνια γεννησης","τύπος":"uint256"}, {"όνομα":"κοινωνικός","τύπος":"uint256"}],"όνομα":"createCustomer","έξοδοι": [],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":αληθής,"εισόδους": [],"όνομα":"getUserCount","έξοδοι": [{"όνομα":"","τύπος":"uint256"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":αληθής,"εισόδους": [{"όνομα":"δείκτης","τύπος":"uint256"}],"όνομα":"getCustomer","έξοδοι": [{"όνομα":"ταυτότητα","τύπος":"uint256"}, {"όνομα":"όνομα","τύπος":"σειρά"}, {"όνομα":"Ημερομηνια γεννησης","τύπος":"uint256"}, {"όνομα":"κοινωνικός","τύπος":"uint256"}, {"όνομα":"κατάσταση","τύπος":"uint256"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"συνεχής":αληθής,"εισόδους": [{"όνομα":"ταυτότητα","τύπος":"uint256"}],"όνομα":"getCustomerById","έξοδοι": [{"όνομα":"idRet","τύπος":"uint256"}, {"όνομα":"όνομα","τύπος":"σειρά"}, {"όνομα":"Ημερομηνια γεννησης","τύπος":"uint256"}, {"όνομα":"κοινωνικός","τύπος":"uint256"}, {"όνομα":"κατάσταση","τύπος":"uint256"}],"πληρωτέος":ψευδής,"τύπος":"λειτουργία"}, {"Ανώνυμος":ψευδής,"εισόδους": [{"ευρετήριο":ψευδής,"όνομα":"Τύπος συμβάντος","τύπος":"σειρά"}, {"ευρετήριο":ψευδής,"όνομα":"ταυτότητα","τύπος":"uint256"}],"όνομα":"Συναγερμός","τύπος":"Εκδήλωση"}, {"Ανώνυμος":ψευδής,"εισόδους": [{"ευρετήριο":αληθής,"όνομα":"με","τύπος":"διεύθυνση"}, {"ευρετήριο":αληθής,"όνομα":"χρόνος πρόσβασης","τύπος":"uint256"}, {"ευρετήριο":ψευδής,"όνομα":"μέθοδος","τύπος":"σειρά"}, {"ευρετήριο":ψευδής,"όνομα":"κατεβ","τύπος":"σειρά"}],"όνομα":"LogAccess","τύπος":"Εκδήλωση"}]

Όπως μπορείτε να δείτε, έχει τις μεθόδους από το σούπερ συμβόλαιο και το τρέχον συμβόλαιο με τους τύπους υπογραφής, παραμέτρων και επιστροφών. Αυτό πρέπει να περάσει απευθείας ως πίνακας json στον κατασκευαστή του συμβολαίου (abi) για να δημιουργήσει ένα σχέδιο ή κατηγορία της σύμβασης.

var abi = […];

var corecontractContract = web3.eth.contract (abi);

Αυτός ο μηχανισμός διασφαλίζει ότι οποιαδήποτε μέθοδος μπορεί να κληθεί απευθείας στην παρουσία της κατηγορίας συμβολαίου. Η επόμενη δήλωση δημιουργεί μια παρουσία του συμβολαίου classececontractContract

var corecontractContractInst = corecontractContract

.στο (‘0x0e22a4f27c2fc3b47e66b70fada85e1c4ca33681’);

Τώρα το συμβόλαιο συνδέεται με τη διεύθυνση όπου ο κωδικός σύμβασης είναι “εγκατεστημένος”. Τώρα μπορούμε να καλέσουμε μεθόδους στο συμβόλαιο.

corecontractContract.createCustomer (287187, “custName”, 13243244,1213334);

Αυτή η κλήση θα επιστρέψει ένα κατακερματισμό συναλλαγής της συναλλαγής που υποβλήθηκε στη σύμβαση.

Πρόσθετες παράμετροι:

Μαζί με την παράμετρο μεθόδου, η κλήση επιτρέπει να περάσουν επιπλέον μη λειτουργικές παράμετροι εντός της μεθόδου κλήσης.

Το αντικείμενο συναλλαγής (Αυτό είναι ένα αντίγραφο του ορισμού του αντικειμένου συναλλαγής στο έγγραφο αναφοράς με μερικά επιπλέον σχόλια):

από: String – Η διεύθυνση του λογαριασμού αποστολής. Χρησιμοποιεί το web3.eth.default λογαριασμός ιδιοκτησία, εάν δεν προσδιορίζεται. Η προεπιλεγμένη ιδιότητα λογαριασμού καθορίζεται στη φάση προετοιμασίας ως web3.eth.defaultAccount = web3.eth.accounts [0]; Αυτό δείχνει ότι θα χρησιμοποιήσουμε τον πρώτο λογαριασμό στη σειρά λογαριασμών, το αέριο που απαιτείται για τη συναλλαγή αφαιρείται από αυτόν τον λογαριασμό.

σε: Συμβολοσειρά – (προαιρετικά) Η διεύθυνση προορισμού του μηνύματος, που δεν έχει οριστεί για μια συναλλαγή δημιουργίας συμβολαίου. Επομένως, για την περίπτωσή μας όπου χρησιμοποιούμε το αντικείμενο συναλλαγής για έξυπνες κλήσεις συμβολαίου, αυτό δεν είναι απαραίτητο.

τιμή: Αριθμός | Συμβολοσειρά | BigNumber – (προαιρετικά) Η τιμή που μεταφέρεται για τη συναλλαγή στο Wei, επίσης το προνόμιο εάν πρόκειται για συναλλαγή δημιουργίας συμβολαίου. Δεδομένου ότι δεν δημιουργούμε συμβόλαιο (έχει ήδη αναπτυχθεί.

φυσικό αέριο: Αριθμός | Συμβολοσειρά | BigNumber – (προαιρετικό, προεπιλογή: To-Be-Determined) Το ποσό του αερίου που θα χρησιμοποιηθεί για τη συναλλαγή (επιστρέφεται το αχρησιμοποίητο αέριο). Αυτό είναι σημαντικό στην περίπτωσή μας καθώς πρέπει να περάσουμε λίγο αέριο, έτσι ώστε η μέθοδος ενημέρωσης της σύμβασης να πάρει το απαραίτητο αέριο για να ολοκληρωθεί η εκτέλεση. Το εκτιμώμενο αέριο ανά μέθοδο είναι διαθέσιμο στην εφαρμογή remix, πρέπει να χρησιμοποιήσουμε αυτήν την τιμή που αντιστοιχεί σε ακέραιο αριθμό, ώστε η συναλλαγή μας να μην αποτύχει λόγω σφάλματος “δεν υπάρχει αρκετό αέριο”.

gasPrice: Number | String | BigNumber – (προαιρετικό, προεπιλογή: To-Be-Determined) Η τιμή του φυσικού αερίου για αυτήν τη συναλλαγή σε wei, προεπιλογή στη μέση τιμή αερίου δικτύου.

δεδομένα: Συμβολοσειρά – (προαιρετικά) Είτε α συμβολοσειρά byte που περιέχει τα σχετικά δεδομένα του μηνύματος ή σε περίπτωση συναλλαγής δημιουργίας συμβολαίου, τον κωδικό αρχικοποίησης. Αυτό δεν είναι απαραίτητο στην περίπτωσή μας, καθώς η δική μας δεν είναι μια κλήση ανάπτυξης.

nonce: Number – (προαιρετικό) Ακέραιος ενός nonce. Αυτό επιτρέπει την αντικατάσταση των δικών σας εκκρεμών συναλλαγών που χρησιμοποιούν το ίδιο nonce.

Συνεχής κλήση σύμβασης Vs. Κλήση συναλλαγής

Ένα συμβόλαιο μπορεί να έχει δύο τύπους κλήσεων όπως εφαρμόζονται στον κώδικα σταθερότητάς του. Μια συνεχής κλήση δεν αλλάζει την κατάσταση της σύμβασης, διαβάζει μόνο το blockchain και επιστρέφει τις τιμές που φιλτράρει σύμφωνα με τη λογική της. Αυτός ο τύπος κλήσης δεν χρειάζεται αιθέρες για να εκτελεστεί, επομένως δεν χρειάζεται να περάσουμε καμία παράμετρο αερίου στην κλήση μεθόδου σύμβασης. Για παράδειγμα, π.χ..

console.log (corecontractContractInst.getCustomer (0));

Αυτό θα επιστρέψει μια σειρά BigNumbers για uints:

[Μεγάλος αριθμός, "aCust", BigNumber, BigNumber, BigNumber]

Για να μετατρέψετε BigNumbers σε δεκαδικά, χρησιμοποιήστε τη βοηθητική μέθοδο toDecimal (BigNumber):

console.log (web3.toDecimal (corecontractContractInst.getCustomer (0) [0]));

Αυτή η κλήση δεν δημιουργεί συναλλαγή στο blockchain.

Μια κλήση συναλλαγής αποσκοπεί στην ενημέρωση της κατάστασης της σύμβασης, όπως η δημιουργία μιας εγγραφής για τη χαρτογράφηση των πελατών εδώ στο DataContract.

corecontractContract.createCustomer (287187, “custName”, 13243244,1213334);

Αυτή η κλήση θα οδηγήσει σε συναλλαγή και θα καταναλώσει λίγο αέριο. Το αέριο μπορεί να παρασχεθεί μαζί με τη συναλλαγή χρησιμοποιώντας το αντικείμενο συναλλαγής:

console.log (corecontractContractInst.createCustomer (133423, “aCust”, 3334.454545), {αέριο: 20000});

Το 20000 εδώ είναι αυθαίρετο, χρησιμοποιήστε το αέριο που εκτιμάται από την εκτέλεση της μεθόδου στην εφαρμογή Remix. Εάν η ποσότητα αερίου είναι χαμηλότερη από την αναμενόμενη από την EVM, τότε θα λάβετε σφάλματα:

Σφάλμα χωρίς δέσμευση: Το αέριο συναλλαγής είναι πολύ χαμηλό. Δεν υπάρχει αρκετό αέριο για να καλύψει το ελάχιστο κόστος της συναλλαγής (ελάχιστο: 22680, πήρε: 20000). Δοκιμάστε να αυξήσετε το παρεχόμενο αέριο.

στο Object.InvalidResponse (web3.js: 3120)

στο RequestManager.send (web3.js: 6043)

0});

Φίλτρα:

Τα συμβάντα που δημιουργούμε από τη σύμβαση σταθερότητας μπορούν να ακουστούν στο επίπεδο Web3. Η βιβλιοθήκη ακολουθεί έναν μηχανισμό ψηφοφορίας για να ψάξει για συμβάντα που έχουν καταγραφεί στο blockchain και το βράζει μέχρι το επίπεδο web3 εάν δημιουργηθεί κάποιο.

Έχουμε δημιουργήσει κάποια συμβάντα που σχετίζονται με τον έλεγχο πρόσβασης στον κώδικα σύμβασης ACLC. Μπορούμε να ακούσουμε τα συμβάντα καθώς δημιουργούνται από οποιαδήποτε κλήση πελάτη εγγραφόμενοι σε αυτά χρησιμοποιώντας το API allEvents ().

var events = corecontractContractInst.allEvents ();

// προσέξτε για αλλαγές

events.watch (συνάρτηση (σφάλμα, συμβάν) {

εάν (! σφάλμα)

console.log (JSON.stringify (event));

});

Αυτό θα εμφανίσει συμβάντα όπως αυτό:

{"διεύθυνση":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","αριθμός μπλοκ": 47,"logIndex": 0,"συναλλαγή":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","transaksiIndex": 0,"transaksiLogIndex":"0x0","τύπος":"εξορύσσεται","Εκδήλωση":"LogAccess","υποστηρίζει": {"με":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","χρόνος πρόσβασης":"1494178629","μέθοδος":"createCustomer","κατεβ":"επιτυχημένη πρόσβαση"}}

{"διεύθυνση":"0x969f563858ddef891e32de8d8c9232f6f74103d0","blockHash":"0x9c44f138a2f1b3aa4a6457252e62fff56257329d17261901048b1d50176e39b4","αριθμός μπλοκ": 47,"logIndex": 0,"συναλλαγή":"0xb4ca62b604c9cd43a0125703c07c8a1624963a8fd399b38f943357549f96c90a","transaksiIndex": 0,"transaksiLogIndex":"0x0","τύπος":"εξορύσσεται","Εκδήλωση":"LogAccess","υποστηρίζει": {"με":"0x81c95efa213ed798cc99e80f79eece314f76fbe8","χρόνος πρόσβασης":"1494178629","μέθοδος":"createCustomer","κατεβ":"επιτυχημένη πρόσβαση"}}

Τα παραπάνω είναι δύο συμβάντα που δημιουργήθηκαν όταν κλήθηκε το createCustomer δύο φορές. Είναι δυνατή η λήψη συμβάντων από έναν μόνο συνδρομητή, ενώ πολλές πηγές δημιουργούν τα συμβάντα χρησιμοποιώντας τις κλήσεις συμβολαίου μέσω κλήσεων JSON-RPC. Αυτό επιτρέπει τη δημιουργία μιας μεμονωμένης εφαρμογής για τη λήψη δεδομένων ελέγχου.

Σε αυτήν την παραπάνω συζήτηση, αγγίξαμε ορισμένα πολύ βασικά στοιχεία του πελάτη javascript. Στην επόμενη, θα εξετάσουμε μερικές προηγμένες έννοιες όπως πώς να γράψετε δοκιμαστικό κώδικα για λειτουργίες μέσω της βιβλιοθήκης web3, Δημιουργία πλήρους Dapp, χρήση πλαισίου τρούφας και πολλά άλλα.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map