Panduan ini akan menuntun anda langkah demi langkah dalam mempelajari Kesungguhan. Untuk penerokaan ketekunan yang mendalam, sila lihat kursus blockchain kami.

Ethereum Foundation telah menggegarkan dunia blockchain sejak awal-awal projek ini, sekitar akhir 2013 dan awal 2014. Ethereum benar-benar memulakan “Bitcoin 2.0” dan apa yang kami fikirkan sebagai gerakan “blockchain”, setelah besar pertama Bitcoin “bubble” hingga $ 1000 USD di pasaran mendapat perhatian semua orang. Ethereum adalah projek blockchain dengan cryptocurrency, Ether, serupa dengan Bitcoin, tetapi Ethereum mempunyai ciri tambahan (hampir) bahasa mesin maya Turing yang lengkap dan kemampuan pemprosesan yang disertakan dalam pelaksanaan nod.

Mesin Maya Ethereum (EVM) membolehkan nod Ethereum untuk benar-benar menyimpan dan memproses data sebagai pertukaran untuk pembayaran, bertindak balas terhadap peristiwa di dunia nyata dan membolehkan banyak peluang baru untuk menyokong aplikasi dalam rangkaian yang belum pernah tersedia untuk pemaju dan pengguna dunia. Saya beruntung benar-benar berada di Switzerland pada awal tahun 2014, dan berkunjung ke “holon” Ethereum dan bergaul dengan beberapa pengasas Ethereum sebelum penjualan token Ether, ketika mereka “dibiayai sendiri”.

Saya bertanya kepada Mihai Alisie apa kontrak pintar ethereum, dan dia menjelaskan:

“Kontrak pintar adalah cara bagi semua orang di seluruh dunia untuk berniaga satu sama lain walaupun mereka tidak bercakap bahasa yang sama atau menggunakan mata wang yang sama.”

Oleh itu, inilah perspektif yang saya mulakan, idea bahawa kita dapat menentukan secara teratur peraturan kontrak perniagaan, dalam bahasa mesin yang mudah, untuk menyatukan orang dan membolehkan mereka menjalankan perniagaan dengan cara yang boleh dipercayai, selamat, dan automatik.

Bahasa Soliditi itu sendiri adalah alat yang kami gunakan untuk menghasilkan kod tahap mesin yang dapat dijalankan pada EVM, itu adalah bahasa dengan penyusun yang mengambil kod tahap tinggi yang dapat dibaca manusia dan memecahnya menjadi petunjuk mudah seperti “memasukkan data ke dalam daftar”, “menambah data dari dua daftar”, “melompat kembali ke arahan pada titik memori xxxxx”, yang membentuk dasar sebarang program yang boleh dilaksanakan mikropemproses.

Oleh itu, bahasa Soliditi adalah salah satu daripada beberapa bahasa yang dapat disusun menjadi EVM bytecode, bahasa lain yang melakukan perkara yang sama disebut Serpent. Setiap bahasa mungkin mempunyai beberapa alat penyusun tetapi semuanya melakukan perkara yang sama, iaitu untuk menghasilkan bytecode peringkat mesin EVM yang akan dijalankan pada nod ethereum, untuk pembayaran.

Cara Belajar Ketahanan

Kesunyian itu sendiri adalah bahasa yang cukup mudah, sejauh bahasa pengaturcaraan berlaku.

Sebenarnya, ia adalah sengaja dilangsingkan, bahasa yang ditaip longgar dengan sintaks yang sangat mirip dengan ECMAScript (Javascript). Terdapat beberapa perkara penting yang perlu diingat dari Rasional Reka Bentuk Ethereum dokumen, iaitu bahawa kita bekerja dalam model tumpukan dan memori dengan ukuran kata arahan 32-byte, EVM memberi kita akses ke program “timbunan” yang seperti ruang daftar di mana kita juga dapat melekat alamat memori untuk menjadikan Program Counter loop / jump (untuk kawalan program yang berurutan), sementara yang dapat diperluas “Ingatan” dan lebih kekal “penyimpanan” yang sebenarnya ditulis ke dalam blockchain kekal, dan yang paling penting, EVM memerlukan jumlah keseluruhan determinisme dalam kontrak pintar.

Keperluan untuk determinisme ini adalah sebab anda tidak akan melihat fungsi “acak ()” dalam bahasa Soliditi. Apabila blok ethereum “ditambang”, penyebaran kontrak pintar dan fungsi dalam blok itu (yang bermaksud yang berbaris berlaku dalam tempoh blok terakhir) dilaksanakan pada simpul yang menambang blok tersebut, dan keadaan baru berubah kepada mana-mana ruang penyimpanan atau urus niaga dalam kontrak pintar itu sebenarnya berlaku pada nod pelombong itu. Kemudian blok baru disebarkan ke semua nod lain dan setiap nod cuba mengesahkan blok secara bebas, termasuk melakukan perubahan keadaan yang sama pada salinan blockchain tempatan mereka juga. Di sinilah ia akan gagal sekiranya kontrak pintar bertindak secara tidak menentu. Sekiranya node lain tidak dapat mencapai kata sepakat mengenai keadaan blockchain setelah blok baru dan kontraknya dilaksanakan, rangkaian secara harfiah dapat menghentikan.

Inilah sebabnya mengapa kontrak pintar ethereum (dan kontrak pintar pada umumnya di mana-mana sistem blockchain) mesti bersifat deterministik: supaya rangkaian nod sentiasa dapat mengesahkan dan mengekalkan konsensus mengenai blok baru yang masuk, agar dapat terus berjalan.

Batasan lain yang anda dapati dalam kontrak pintar EVM adalah ketidakupayaan untuk mengakses data di luar “memori”, dan “penyimpanan”, (kami tidak mahu kontrak pintar dapat membaca atau memadam cakera keras nod yang dijalankan), dan ketidakupayaan untuk membuat pertanyaan sumber luar seperti dengan JQuery. Kami tidak benar-benar mempunyai akses ke banyak fungsi perpustakaan seperti menguraikan struktur JSON atau melakukan aritmetik floating-point, dan sebenarnya melarang kos untuk melakukan sub-rutin tersebut atau menyimpan banyak data di blockchain ethereum itu sendiri.

Apabila anda memanggil kontrak pintar yang melakukan beberapa kerja atau pengiraan yang mengubah keadaan (tindakan apa pun selain daripada hanya membaca dari simpanan), anda akan dikenakan gas “kos” untuk kerja yang dilakukan oleh kontrak pintar, dan kos gas ini berkaitan dengan jumlah kerja komputasi yang diperlukan untuk melaksanakan fungsi anda. Ini adalah sistem “pembayaran mikro untuk komputer mikro”, di mana anda boleh mengharapkan untuk membayar sejumlah gas untuk jumlah pengiraan yang ditetapkan, selama-lamanya.

Harga gas itu sendiri dimaksudkan untuk tetap umum, yang bermaksud bahawa ketika Ether naik di pasaran global, harga harga gas terhadap Ether harus turun. Oleh itu, apabila anda melakukan panggilan fungsi ke kontrak pintar, anda dapat memperoleh anggaran jumlah gas yang harus anda bayar sebelumnya, tetapi anda juga harus menentukan harga (dalam ether per gas) yang anda mahu bayar, dan nod perlombongan dapat memutuskan apakah itu kadar yang cukup baik bagi mereka untuk menerima panggilan fungsi kontrak pintar anda di blok mereka yang seterusnya.

Kontrak pintar mempunyai alamat mereka sendiri, dari mana mereka dapat menerima dan menghantar Ether. Kontrak pintar dapat melacak “pemanggil” fungsi dengan cara yang dapat diverifikasi, sehingga dapat menentukan apakah salah satu fungsinya dipanggil oleh akaun “pemilik” atau “pentadbir” istimewa, dan bertindak sesuai untuk fungsi pentadbiran. Mereka memiliki kemampuan untuk membaca data dari blockchain ethereum, dan mengakses maklumat mengenai transaksi di blok lama. Tetapi adakah kontrak pintar “terkunci” ke dalam dunia deterministik mereka sendiri, hanya dapat mengetahui data yang tersimpan di blockchain ethereum itu sendiri?

Tidak sama sekali! Di situlah “Oracle” masuk. Kita boleh membuat panggilan ke oracle yang akan memberitahu kita tentang dunia luar dengan cara yang boleh dipercayai, dan bertindak berdasarkan data tersebut dalam kontrak pintar. Perkara penting di sini adalah bahawa walaupun peristiwa di dunia nyata sendiri tidak deterministik, Oracle dapat dipercayai untuk selalu menjawab setiap permintaan node tentang apa yang terjadi dengan cara deterministik, sehingga semua node masih dapat mencapai kata sepakat. Oleh itu, inilah cara Oracle yang dipercayai berfungsi secara teori: “oracle” akan mengambil beberapa data, mengatakan bahawa harga ticker mengenai harga saham dunia nyata, dan merekodkan data tersebut ke dalam “penyimpanan” dalam kontrak pintar Oracle yang mudah, sesuatu seperti ini

(lihat juga penjelasannya di sini):

fungsi storeTickerData (simbol bytes8, terbuka, tidak tinggi, rendah, dekat)

hanya Oracle

pulangan (kejayaan bool)

{

# simpan data ticker dalam rantaian

tickerData [simbol] [block.number] = [terbuka, tinggi, rendah, tutup]

# tickerData adalah peta peta, rentetan => uint => susunan [uint, uint, uint, uint]

kembali benar;

}

Ada syarikat yang mengkhususkan diri dalam menjadi oracle yang dipercayai, dan merancang sistem untuk memisahkan diri mereka daripada harus dipercayai dengan penyediaan data. Sekiranya kita melihat Oraclize dokumentasi kita melihat petikan menarik ini:

Khususnya, tujuannya adalah untuk tidak memaksa pemaju kontrak pintar untuk mempercayai Oraclize dengan data yang mereka perlukan. Tanpa sokongan keaslian, Oraclize dapat dengan mudah merosakkan data. Inilah sebabnya, untuk menyelesaikan tugas yang rumit ini, Oraclize mengembalikan data yang diminta bersama dengan bukti keasliannya: iaitu data tersebut berasal dari penyedia data yang telah dituntut oleh kontrak pintar.

Oleh itu, anda harus melihat bahagian dokumen mengenai “bukti keaslian” untuk maklumat lebih lanjut, tetapi idenya adalah bahawa walaupun kutu buku baru, pada masa yang jauh di masa depan, putarkan nod ethereum mereka dan mula menyegerakkan rantai blok mereka ke rangkaian , semua data yang mereka perlukan untuk melaksanakan semua kontrak pintar “bergantung pada oracle” itu selamat dalam talian untuk mereka muat turun, selama-lamanya. Masalah siapa yang membayar “gas” untuk oracle untuk melakukan semua penulisan data ini mengenai peristiwa di dunia nyata (penyimpanan blockchain “mengubah keadaan” dengan gas) adalah topik lain, tetapi pada dasarnya, ia mendapat prabayar oleh pemohon data di salah satu daripada beberapa cara. Perkara yang menarik di sini ialah walaupun kita tidak dapat menulis kontrak pintar yang “melempar dadu” dalam arti termasuk keacakan yang sebenarnya, ia adalah sebenarnya mungkin untuk menulis kontrak pintar yang bertindak balas terhadap lemparan mati, seperti yang dirasmikan oleh oracle.

Tutorial Asas Ketahanan

Latar Belakang dan Persediaan Kod Asas

Jadi mari kita mulakan dengan kontrak pintar ethereum asas, ditulis dalam bahasa Soliditi. Kaedah terbaik untuk belajar adalah dengan melakukan! Kita dapat melihat dari potongan kecil kod di atas bahawa kita mempunyai sintaks deklarasi fungsi yang cukup mudah, dan beberapa asas jenis data seperti ‘uint’ (integer yang tidak ditandatangani) dan ‘string’, dan kita lihat dalam dokumen kita juga mempunyai jenis pemboleh ubah seperti ‘address’, yang mengandungi kaedah ‘.balance’ dan ‘.transfer’, yang diramalkan akan mengembalikan baki di Ethereum alamat, dan membenarkan kontrak pintar untuk benar-benar menghantar Ether ke alamat itu, dengan unit dalam Wei.

Kami mempunyai susunan asas, enum, operator, struktur data hash yang disebut ‘pemetaan’, dan beberapa pra-ditentukan khas unit dan vars global yang merangkumi perkara seperti blockheight, cap masa blok terakhir dan beberapa fungsi manipulasi SHA-hash dan alamat / kunci yang berguna. Satu kebiasaan penting mengenai Soliditi ketika bekerja dengan tatasusunan pelbagai dimensi: pengindeksan dalam urutan “terbalik” dari kebanyakan bahasa semasa pengisytiharan sahaja, seperti yang dinyatakan dalam dokumen:

Susunan ukuran tetap k dan elemen elemen T ditulis sebagai T [k], susunan ukuran dinamik sebagai T []. Sebagai contoh, susunan 5 tatasusunan dinamik uint adalah uint [] [5] (perhatikan bahawa notasi terbalik jika dibandingkan dengan beberapa bahasa lain). Untuk mengakses uint kedua dalam array dinamik ketiga, anda menggunakan x [2] [1] (indeks berasaskan sifar dan akses berfungsi dengan cara yang berlawanan dari deklarasi…)

Ok, kita mempunyai alat asas yang cukup di sini untuk menjadi berbahaya, mari kita mulakan. Mari buat semacam aplikasi sosial asas di mana orang boleh mempunyai beberapa gambar dan beberapa maklumat asas mengenai diri mereka yang disiarkan dalam blockchain. Setiap pengguna akan mempunyai alamat ethereum dan “pemegang” atau nama pengguna yang dikaitkan dengan akaun mereka. Kami akan mempunyai beberapa data demografi asas yang mungkin dimasuki atau tidak oleh orang, dan kemudian kami akan mempunyai halaman carian mudah di mana anda dapat mencari pengguna di direktori asas, dan melihat gambar yang telah mereka tambahkan / notari kepada pengguna mereka profil.

Berikut adalah gambaran bagaimana produk antara muka Pengguna Decentralized App (Ðapp) kontrak pintar Ethereum Solidity akhir kami akan kelihatan, dengan pengguna dan gambar notari ditambahkan:

Cara Belajar Kesungguhan: Panduan Pengkodan Ethereum Terunggul

Saya telah memberi gambaran tentang gambar diri saya yang bagus untuk anda semua, dan gambar struktur Galium Arsenide Crystal dari zaman sekolah lulusan saya untuk anda. Anda dapat melihat hash not notasi SH256 dan cap waktu untuk setiap gambar dan tanda semak kecil yang menunjukkan bahawa data gambar notari masih sesuai dengan hash notari yang dibuat pada cap waktu yang ditunjukkan. Oleh itu, saya akan membimbing anda bagaimana saya membina aplikasi ini, menunjukkan berita menarik untuk anda, dengan semua pautan dan contoh kod yang mungkin anda perlukan untuk rujukan masa depan. Bunyi baik? Mari pergi!

Perkara pertama yang akan saya lakukan ialah menyediakan a Truffle “Test-bed” yang akan membolehkan saya dengan mudah menguji menyusun kontrak pintar saya. Menyusun dan menggunakan kontrak pintar melibatkan menghasilkan transaksi yang ditandatangani lama, tetapi Truffle akan membolehkan saya menyusun / menggunakan dan menguji kontrak pintar saya menggunakan perintah mudah. Terdapat sekumpulan alat yang dapat melakukan ini, tetapi kebetulan saya suka tutorial video kontrak pintar Soliditi ini yang menggunakan Truffle alat. saya mempunyai projek demo github folder yang saya buat hanya untuk tutorial ini untuk diikuti oleh semua orang. Saya akan mulakan dengan beberapa perintah penyediaan yang mudah (di bawah persekitaran linen Debian):

tectract @ blockgeeks / ethereum-demo-tools> npm i -g truffle

# jika anda mengalami ralat kebenaran memasang modul nod secara global, lihat di sini

tectract @ blockgeeks / ethereum-demo-tools> mkdir Geekt # Saya akan menghubungi aplikasi sosial saya "Geekt"

tectract @ blockgeeks / ethereum-demo-tools> cd Geekt

tectract @ blockgeeks / ethereum-demo-tools / Geekt> truffle init # ini membuat beberapa folder dan fail persediaan, di dalam folder Geekt /

tectract @ blockgeeks / ethereum-demo-tools / Geekt > ls

kontrak migrasi menguji truffle.js # kami telah membuat tiga folder, dan satu fail baru yang disebut truffle.js

tectract @ blockgeeks / ethereum-demo-tools / Geekt > kontrak /

ConvertLib.sol MetaCoin.sol Migrations.sol # kami mempunyai beberapa kontrak templat asas yang dihasilkan oleh Truffle

tectract @ blockgeeks / ethereum-demo-tools / Geekt > Adakah migrasi /

1_initial_migration.js 2_deploy_contracts.js # beberapa fail untuk tetapan kompilasi / migrasi dengan Truffle

Contoh Kontrak Pintar Kesederhanaan

Baiklah, saya akan membuat kontrak bernama Geekt.sol, di folder / Geekt / kontrak yang dihasilkan semasa saya memanggil ‘truffle init’. Anda boleh melihat kod kontrak penuh di sini, dan saya akan menunjukkan bit yang paling menarik di sini. Di bahagian atas fail kami garis yang menentukan versi penyusun dan beberapa sintaks definisi kontrak asas dan definisi pemboleh ubah.

pepejal pragma ^ 0.4.4;

kontrak Geekt {

alamat GeektAdmin;

pemetaan (bytes32 => notarizedImage) notarizedImages; // ini memungkinkan untuk mencari Gambar yang disahkan oleh SHA256notaryHash mereka

bytes32 [] imagesByNotaryHash; // ini seperti gambar putih semua gambar, oleh SHA256notaryHash

pemetaan (alamat => Pengguna) Pengguna; // ini memungkinkan untuk mencari Pengguna dengan alamat ethereum mereka

alamat [] usersByAddress; // ini seperti halaman putih semua pengguna, berdasarkan alamat ethereum

Apabila anda memanggil fungsi yang mengubah keadaan di dunia nyata, anda perlu menentukan berapa banyak eter yang akan anda bayar untuk itu, tetapi mujurlah anda dapat meminta anggaran kos dari segi kos gas dan harga gas ( dalam gas / eter) sebelumnya, dan biasanya sangat tepat. Pelombong ethereum akan memutuskan sama ada anda membayar cukup, dan memasukkan transaksi yang mengubah keadaan anda di blok seterusnya, jadi anda sebenarnya harus menunggu fungsi tersebut kembali ketika blok berikutnya dijumpai. Membaca data dari struktur “penyimpanan” ini adalah percuma dan anda juga tidak perlu menunggu blok seterusnya, node hanya akan membaca data dan mengembalikannya kepada anda dengan segera.

Jadi Pengguna pemetaan adalah objek penyimpanan utama kami yang membolehkan kami membuat objek Pengguna dan mencarinya berdasarkan alamat. Pemetaan sangat efisien untuk menyimpan data dan mengambilnya dengan cepat, tetapi tidak ada cara mudah untuk mengulang peta, jadi anda dapat melihat saya juga membuat penggunaByAddress susunan alamat yang menyimpan setiap alamat pengguna yang diketahui dalam sistem kami, seperti halaman putih semua pengguna. Saya mencipta

Saya mencipta Gambar yang disahkan pemetaan untuk membolehkan kita membuat objek “gambar” dalam simpanan dan mencarinya dengan hash SHA256 yang berkaitan dengan data gambar, dan indeks notarisHash panjang 32-byte.

Kami juga mempunyai ImagesByNotaryHash array bytes32 yang merupakan senarai semua notarisHash, seperti halaman putih yang membolehkan kita mengulangi semua gambar yang telah disahkan.

struktur notarizedImage {

rentetan gambarURL;

uint timeStamp;

}

Pengguna struktur {

pemegang tali;

bandar bytes32;

keadaan bytes32;

negara bytes32;

bytes32 [] myImages;

}

Ini (di atas) adalah struktur yang sangat asas, dan mereka juga mewakili objek “penyimpanan”, sehingga harganya eter sebenar untuk “membuat” dan data di dalamnya sebenarnya disimpan di blockchain ethereum, dan harganya eter sebenar untuk mengubah “keadaan Pemboleh ubah dalaman mereka. Kami benar-benar hanya menggunakan pemetaan luar dan susunan untuk mengesan di mana dalam memori blockchain di mana struktur gambar / pengguna ini berada. Kami Gambar notari struct menyimpan hanya URL ke gambar, di suatu tempat di web mungkin, dan cap waktu yang memberitahu ketika gambar itu disahkan. Kami Pengguna struct menyimpan beberapa pengguna asas: pegangan, kota, negara bagian, negara, dan juga menyimpan susunan semua gambar yang telah disahkan oleh pengguna ini dan “ditambahkan” ke akaun pengguna mereka, seperti versi global pengguna-pengguna-pengguna global gambarByNotaryHash objek halaman putih.

fungsi registerNewUser (string handle, bytes32 city, bytes32 state, bytes32 country) kembali (kejayaan bool) {

alamatkan iniNewAddress = msg.sender;

// jangan ganti entri yang ada, dan pastikan pengendaliannya tidak kosong

jika (bait (Pengguna [msg.sender] .handle) .length == 0 && bait (pemegang). panjang! = 0) {

Pengguna [thisNewAddress] .handle = handle;

Pengguna [thisNewAddress] .city = bandar;

Pengguna [thisNewAddress] .state = state;

Pengguna [thisNewAddress] .country = negara;

usersByAddress.push (iniNewAddress); // menambahkan entri untuk pengguna ini ke ‘whitepages’ pengguna

kembali benar;

} lain {

kembali palsu; // sama ada pemegang tidak ada atau pengguna dengan pegangan ini sudah ada

}

}

Inilah milik kami daftarNewUser fungsi. Ia memerlukan pegangan, bandar, negara, negara sebagai pemboleh ubah input dan mengembalikan benar atau salah untuk menunjukkan kejayaan atau kegagalan. Mengapa ia gagal? Baiklah, kami tidak mahu membenarkan pengguna saling menulis antara satu sama lain, jadi ini akan menjadi seperti sistem tuntutan pertama untuk menangani. Sekiranya pengguna dengan pegangan ini sudah ada, kami mengembalikan nol, jadi saya telah meletakkan baris “if” yang bersyarat di sana untuk memeriksanya. Kami juga tidak membenarkan pembuatan nama pengguna tanpa pegangan. Satu perkara yang kita perhatikan adalah Alamat Baru ini yang merupakan pemanggil fungsi, anda dapat melihat kami menggunakan khas msg.sender berfungsi untuk merebut data itu, ini adalah alamat dari transaksi “melakukan fungsi ini” dari saat seseorang (siapa pun) memanggil fungsi kontrak pintar kami, dan mereka membayar eter sebenar untuk melakukannya. Jadi objek “pemetaan” adalah nol secara lalai, dan ketika kita memanggil:

Pengguna [thisNewAddress] .handle = handle;

Ini membuat objek Pengguna baru, dalam pemetaan Pengguna kami, dan menetapkan pegangan. Sama dengan bandar, negeri, negara. Perhatikan bahawa kami juga memasukkan alamat Pengguna baru ke objek “halaman putih” Pengguna globalByAddress pengguna kami sebelum kami kembali ke sana.

fungsi addImageToUser (string imageURL, bytes32 SHA256notaryHash) kembali (kejayaan bool) {

alamatkan iniNewAddress = msg.sender;

if (byte (Pengguna [thisNewAddress] .handle) .length! = 0) {// pastikan pengguna ini telah membuat akaun terlebih dahulu

if (byte (imageURL) .length! = 0) {//) {// tidak dapat membuat bytes32 null check berfungsi, oh!

// mengelakkan pengguna daripada bertengkar dengan sha->senarai gambar di halaman putih, tetapi masih membenarkan mereka menambahkan rujukan peribadi ke mana-mana

jika (bait (notarizedImages [SHA256notaryHash] .imageURL) .length == 0) {

imagesByNotaryHash.push (SHA256notaryHash); // menambah entri untuk gambar ini ke halaman putih gambar kami

}

notarizedImages [SHA256notaryHash] .imageURL = imageURL;

notarizedImages [SHA256notaryHash] .timeStamp = block.timestamp; // perhatikan bahawa mengemas kini gambar juga mengemas kini cap waktu

Pengguna [thisNewAddress] .myImages.push (SHA256notaryHash); // tambahkan hash gambar untuk tatasusunan .myImages pengguna ini

kembali benar;

} lain {

kembali palsu; // sama ada imageURL atau SHA256notaryHash tidak sah, tidak dapat menyimpan gambar

}

kembali benar;

} lain {

kembali palsu; // pengguna belum mempunyai akaun, tidak dapat menyimpan gambar

}

}

Kami tambahImageToUser fungsi pengguna hampir sama dengan daftarNewUser fungsi. Nampaknya anda melihat alamat penghantaran anda melalui alamat khas msg.sender objek dan memeriksa bahawa ada Pengguna yang didaftarkan (dengan pemegang) untuk alamat itu sebelum cuba menambahkan gambar untuk entri pengguna anda. Kami membenarkan pengguna untuk menambahkan notarisHash mereka ke halaman putih putih gambar hanya jika tidak ada, untuk mengelakkan pengguna memperjuangkan entri di halaman putih global, tetapi kami membenarkan mereka untuk menambah / mengemas kini entri notariHash di dalamnya mini-putih gambar sendiri. Tiada apa-apa!

fungsi getUsers () pemulangan tetap (alamat []) {return usersByAddress; }

fungsi getUser (alamat userAddress) pemulangan tetap (string, bytes32, bytes32, bytes32, bytes32 []) {

kembali (Pengguna [userAddress] .handle, Users [userAddress] .city, Users [userAddress] .state, Users [userAddress] .country, Users [userAddress] .myImages);

}

fungsi getAllImages () pemulangan tetap (bytes32 []) {return imagesByNotaryHash; }

fungsi getUserImages (address userAddress) pemulangan tetap (bytes32 []) {return Users [userAddress] .myImages; }

fungsi getImage (bytes32 SHA256notaryHash) pulangan tetap (rentetan, uint) {

kembali (notarizedImages [SHA256notaryHash] .imageURL, notarizedImages [SHA256notaryHash] .timeStamp);

}

Akhirnya, fungsi aksesori (di atas) membolehkan kita membaca setiap pengguna atau gambar, atau mendapatkan senarai halaman putih penuh dari semua pengguna atau semua gambar. Perhatikan fungsi ini kembali pemalar data, yang pada dasarnya bermaksud mereka hanya boleh baca, bukan “mengubah keadaan” dan mereka bebas untuk menelefon dan mereka mengembalikan data dengan segera, anda tidak perlu menunggu sehingga blok seterusnya. Pada dasarnya kami hanya menggunakan pemetaan / tatasusunan global kami dan mengembalikan data yang berkaitan: pengguna melalui alamat atau gambar oleh notariHash.

Menyusun & Menguji Kontrak Pintar

Sekarang kami ingin benar-benar menguji kontrak pintar kami secara tempatan, dalam persekitaran ujian. Sangat mudah menggunakan perintah Truffle yang mudah, tetapi pertama-tama kita sebenarnya memerlukannya nod ethereum tempatan untuk menguji terhadap. Di situlah Ujian EthereumRPC masuk. TestRPC pada dasarnya adalah simpul palsu, program langsing yang hanya berpura-pura menjadi simpul dan bertindak balas seperti nod yang akan bertindak balas pada mesin hos tempatan anda. TestRPC berjalan di port 8545 seperti node ethereum biasa, dan ia mempunyai kemampuan untuk menyusun kontrak pintar Solidity ke dalam kod EVM dan menjalankan kod itu juga, dan anda mendapat respons segera untuk ujian, dan bukannya perlu menunggu di rangkaian ethereum yang sebenarnya untuk cari blok seterusnya. Sekarang, anda boleh menjalankan perintah menyusun / menyebarkan perintah Truffle terhadap node ethereum yang sebenarnya, tetapi itu akan memakan kos Ether yang sebenar, ditambah dengan masa dan masa yang memakan masa untuk menjalankan node anda sendiri jika anda tidak perlu. Oleh itu, kami melakukan beberapa arahan pemasangan dengan cepat:

npm i -g ethereum-testrpc

testrpc -m “sampel anjing merangkak semburan tahun belajar umum mengesan juruterbang jeli perak”

Ini memulakan TestRPC dengan frasa “benih” yang ditentukan, dan anda akan melihat sesuatu seperti ini sebagai output:

EthereumJS TestRPC v3.0.5

Akaun yang Ada

==================

(0) 0x0ac21f1a6fe22241ccd3af85477e5358ac5847c2

(1) 0xb0a36610de0912f2ee794d7f326acc4b3d4bc7bc

(9) 0x4c1cc45ef231158947639c1eabec5c5cb187401c

Kunci Peribadi

==================

(0) 91e639bd434790e1d4dc4dca95311375007617df501e8c9c250e6a001689f2c7

(1) afaeff0fc68439c4057b09ef1807aaf4e695294db57bd631ce0ddd2e8332eea7

(9) dcc51540372fa2cf808efd322c5e158ad5b0dbf330a809c79b540f553c6243d7

Dompet HD

==================

Mnemonic: sampel anjing merangkak semprot tahun belajar umum mengesan juruterbang jeli perak

Laluan HD Asas: m / 44 ‘/ 60’ / 0 ‘/ 0 / {account_index}

Mendengarkan di localhost: 8545

Anda akan melihat beberapa aktiviti di sini di tetingkap ini dengan TestRPC berjalan, semasa anda menggunakan dan berinteraksi dengan kontrak pintar anda melalui Truffle atau Web3.js. Baiklah, kami bersedia untuk penggunaan ujian. Anda perlu mengubah suai fail /migrations/2_deploy_contracts.js untuk memasukkan nama kontrak pintar anda, agar truffle tahu menyusun dan menyebarkannya. Kami melakukan arahan ini:

penyusunan truffle

Sekiranya semuanya berjalan lancar, anda akan melihat mesej yang mengatakan bahawa “menyimpan artifak”, dan tidak ada mesej ralat. Saya tidak akan berbohong, jika kontrak anda mempunyai ralat sintaksis atau masalah lain, mesej ralat penyusun yang akan anda lihat kemungkinan besar misteri dan sukar ditafsirkan! Sekiranya anda mendapat ralat tentang “ukuran tumpukan”, itu mungkin berarti anda mempunyai terlalu banyak pemboleh ubah yang dilewatkan masuk / keluar dari panggilan fungsi, aturan yang baik untuk diingat adalah 16 pemboleh ubah input atau output adalah maksimum, secara umum. Juga, ingat bahawa kontrak pintar Soliditi tidak dapat mengembalikan jenis data struktur tersuai, jadi anda juga harus menyelesaikannya, biasanya saya hanya mengembalikan tatasusunan dan penunjuk / alamat struktur lain dalam pemetaan dalaman saya. Sekiranya anda mendapat masa berjalan mesej ralat mengenai “tumpukan”, itu mungkin bermaksud anda mempunyai syarat buruk dalam kod anda.

truffle berhijrah

Perintah ini (di atas) benar-benar melakukan ujian penggunaan kontrak pintar anda ke nod TestRPC anda. Saya melihat output ini kembali:

Menjalankan migrasi: 1_initial_migration.js

Menyebarkan Penghijrahan…

Penghijrahan: 0xd06a1935230c5bae8c7ecf75fbf4f17a04564ed8

Menyimpan migrasi yang berjaya ke rangkaian…

Menyimpan artifak…

Menjalankan migrasi: 2_deploy_contracts.js

Menyebarkan Geekt…

Geekt: 0xe70ff0fa937a25d5dd4172318fa1593baba5a027

Menyimpan migrasi yang berjaya ke rangkaian…

Menyimpan artifak..

Kontrak pintar kami (bernama “Geekt”) diberi alamat di blockchain Ethereum apabila berjaya digunakan, anda dapat lihat di atas, alamatnya adalah 0xe70ff0fa937a25d5dd4172318fa1593baba5a027. Di rangkaian ethereum langsung, anda membayar petrol untuk menggunakan kontrak anda dan alamatnya tidak akan pernah berubah. Pada TestRPC, jika anda mematikan TestRPC, ia akan melupakan segalanya, dan setelah anda memulakan semula TestRPC, anda perlu menggunakan semula kontrak anda dan anda akan mendapat alamat yang berbeza untuk kontrak pintar anda. Alamat kontrak pintar anda adalah tempat orang boleh menghantar transaksi dengan mesej untuk berinteraksi dengannya, melakukan transaksi yang mengubah keadaan atau hanya membaca data dari blockchain ethereum. Kontrak pintar juga boleh berinteraksi secara langsung antara satu sama lain melalui alamat ini, menggunakan “mesej”. Kontrak pintar yang berinteraksi dengan kontrak pintar lain untuk menyimpan, menukar, atau membaca data melalui “mesej” blockchain ethereum ini dikenali sebagai Organisasi Autonomi Berpusat, atau DAO.

Ok, sekarang datang bahagian yang menyeronokkan. Kami bersedia untuk melakukan beberapa ujian awal dan berinteraksi dengan kontrak pintar kami. Kami memulakan “konsol” Truffle dan melakukan beberapa pertanyaan terhadap simpul localhost TestRPC kami, untuk memastikan semuanya berfungsi dan kami dapat menambahkan pengguna dan gambar dan mengambilnya dengan betul.

konsol truffle

> Geekt = Geekt.dilaksanakan ()

> Geekt.then (fungsi (contoh) {return JSON.stringify (instance.abi);})

> Geekt.then (fungsi (contoh) {return instance.registerNewUser ("Tekstur","Denver","CO","USA");})

> Geekt.then (function (instance) {return instance.addImageToUser (‘www.myimageURL.com’, ‘0x6c3e007e281f6948b37c511a11e43c8026d2a16a8a45fed4e83379b66b0ab927’);})

> Geekt.then (fungsi (instance) {return instance.getUser (‘0x0ac21f1a6fe22241ccd3af85477e5358ac5847c2’);}) > Geekt.then (fungsi (contoh) {return instance.getUsers ();})

> Geekt.then (fungsi (contoh) {return instance.getImages ();})

> Geekt.then (fungsi (contoh) {return instance.getImage (‘0x6c3e007e281f6948b37c511a11e43c8026d2a16a8a45fed4e83379b66b0ab927’);})

Satu konsep penting di sini ialah ABI, yang merupakan objek berformat javascript yang menerangkan nama fungsi dan input / output untuk berinteraksi dengan kontrak pintar anda, ia seperti perihalan Aplikasi Programmer Interface (API) untuk kontrak pintar anda, yang memberitahu orang bagaimana membentuk mesej untuknya. Fungsi registerNewUser () saya berfungsi! Saya melihat ini sebagai tindak balas kepada panggilan fungsi registerNewUser (), di tetingkap konsol:

{tx: ‘0x1b9f55971871921ccd23a9aa7620620c6c958a893af334087283926d4c6d60b1’,

resit:

{transaksiHash: ‘0x1b9f55971871921ccd23a9aa7620620c6c958a893af334087283926d4c6d60b1’,

transaksiIndex: 0,

blokHash: ‘0x2be4fab68daaf8db199e2a6adea101c0f1ed06f46aba21e8e4c06e752ca3325c’,

blokNombor: 5,

gasDigunakan: 145215,

kumulatifGasDigunakan: 145215,

kontrakAddress: null,

log: []},

log: []}

Fungsi AddImageToUser () mengembalikan kejayaan dengan cara yang sama, dan ketika saya sekarang dapat mengambil rekod pengguna individu atau rekod gambar yang disahkan dari blockchain ethereum. Panggilan fungsi getUser () saya kembali:

[‘Tekstur’,

‘0x44656e7665720000000000000000000000000000000000000000000000000000’,

‘0x434f000000000000000000000000000000000000000000000000000000000000’,

‘0x5553410000000000000000000000000000000000000000000000000000000000’,

[‘0x6c3e007e281f6948b37c511a11e43c8026d2a16a8a45fed4e83379b66b0ab927’]]

dan saya dapat mengambil data gambar tersebut melalui tali SHA256 32-byte Nota yang telah saya kaitkan dengannya, fungsi getImage () saya mengembalikan:

[‘www.myimageURL.com’,

{[Rentetan: ‘1496256315’] s: 1, e: 9, c: [1496256315]}]

Ini semua kelihatan hebat. Semuanya berfungsi, diuji dalam TestRPC dan Truffle, dan kami bersedia untuk benar-benar membina antara muka pengguna grafik yang keren untuk Ðapp kami sehingga dunia dapat berinteraksi dengan pendaftaran pengguna dan nota gambar kami di blockchain ethereum.

Reka Bentuk Aplikasi Ethereum Asas

Reka Bentuk Localhost & Ujian

Kami sudah siap, kontrak pintar berbahasa Soliditi kami berjaya disusun, dan diterapkan ke nod ethereum testRPC tempatan kami. Sekarang kita dapat dengan cepat membangun Ð Aplikasi sederhana yang dapat memungkinkan pengguna berinteraksi dengan kontrak pintar melalui penyemak imbas web mereka, menggunakan beberapa pengaturcaraan web asas dan khusus Web3.js modul javascript, dibuat khusus untuk berinteraksi dengan nod Ethereum dan kontrak pintar melalui web.

saya telah membuat demo ini (repositori sumber terbuka github) sebagai rujukan orang untuk digunakan semasa membina Ethereum ÐApps menggunakan web3.js, Demo ini dibuat dengan alat yang mudah digunakan yang disebut Buat-React-App, ia menggunakan React berbahasa web dalaman Facebook, tetapi kami tidak akan memfokuskan pada kod React, hanya perintah javascript web.js yang diperlukan. Kod saya ada dalam CommonJS, hampir sama dengan javascript ES6 lama.

Oleh itu, dalam aplikasi web anda, anda memasang modul-nod laman web3 melalui arahan seperti “npm i -S web3” dan ia akan disimpan ke fail package.json anda, jika anda menggunakannya. Oleh itu, anda akan mempunyai, di dalam tag “” atau di dalam fail .js, garis seperti ini untuk memuat modul web3 itu sendiri:

import Web3 dari ‘web3’;

(atau, dalam javascript ES6)

var Web3 = memerlukan (‘web3’);

Kita harus memberitahu Web3 tentang beberapa butiran mengenai nod dan kontrak pintar kita, sehingga dapat berhubung. Anda akan melihat garis seperti ini:

# baris ini menentukan IP simpul localhost kami: tetapan port

var web3 = Web3 baru (Web3.providers baru.HttpProvider ("http: // localhost: 8545"));

# alamat kontrak pintar kami, dari atas

var GeektAddress = ‘0xe70ff0fa937a25d5dd4172318fa1593baba5a027’;

# ABI kontrak pintar kami, sebagai objek javascript mentah, bukan rentetan petik!

var GeektABI = [{"pemalar": benar,"input": [],"nama":"getUsers","keluaran": [{"nama":"", (…)

# ini memuatkan kontrak pintar ke dalam objek web3 kami

GeektContract = web3.eth.contract (GeektABI) .at (GeektAddress);

# ini menemui akaun lalai yang disenaraikan untuk sambungan nod (akaun 0 dari TestRPC di atas)

defaultAccount = web3.eth.accounts [0];

Berikut adalah beberapa baris yang menunjukkan fungsi hanya baca yang berinteraksi dengan kontrak pintar kami, melalui web3:

# fungsi di bawah ini diaktifkan ketika halaman dimuat, untuk mendapatkan "halaman putih" dari semua alamat pengguna yang diketahui

GeektContract.getUsers (fungsi (salah, userResult) {

# fungsi di bawah mengambil gambar mengikut keperluan, dan menyimpannya dalam memori penyemak imbas…

GeektContract.getImage (imageHash, fungsi (err, imageResult) {

ÐAplikasi demo ringkas ini hanya memuatkan semua alamat pengguna yang diketahui dan mengambil perincian gambar pengguna sebenar dan gambar itu merakam dirinya sendiri seperti yang diperlukan dalam perjalanan. Inilah tangkapan skrin:

Cara Belajar Kesungguhan: Panduan Pengkodan Ethereum Terunggul

Pada ketika ini (gambar di atas) saya telah memperbaharui klien TestRPC saya dan baru saja melakukan perintah “truffle migrate” yang menerapkan kontrak pintar terhadap nod TestRPC localhost saya. Anda dapat melihat antara muka siap untuk saya mengklik butang dan “mendaftar” pengguna pertama. Apabila saya melakukan klik butang ini, fungsi registerNewUser () dari kontrak pintar saya akan dipanggil, menambahkan data pengguna ini ke nod blockchain ethereum (localhost testing) saya di alamat kontrak pintar yang kami nyatakan di atas. Menambah data pengguna ke “penyimpanan” blockchain akan menelan belanja gas, dan kita perlu mengetahui berapa banyak gas yang harus kita bayar, dan bukannya hanya mengambil teka-teki liar (SWAG). Inilah kod yang sebenarnya dipanggil apabila butang “Tandatangan Buku Tamu” ini diklik:

GeektContract.registerNewUser.estimateGas (

luarThis.state.defaultHandle,

luarThis.state.defaultCity,

luarThis.state.defaultState,

luarThis.state.defaultCountry,

{dari: defaultAccount},

fungsi (err, hasil) {

var myGasNum = hasil;

GeektContract.registerNewUser.sendTransaction (

luarThis.state.defaultHandle,

luarThis.state.defaultCity,

luarThis.state.defaultState,

luarThis.state.defaultCountry,

{from: defaultAccount, gas: myGasNum},

fungsi (err, hasil) {

Oleh itu, anda dapat melihat, ketika kita melakukan transaksi perubahan keadaan yang sebenarnya harus kita bayar dengan gas ethereum (gas asli atau testnet), kita akan memanggilnya daftarNewUser.estimateGas () berfungsi sebelum tangan, dan kemudian gunakan jumlah gas yang dianggarkan ketika kita memanggil fungsi mengubah keadaan menjadi nyata, menggunakan daftarNewUser.sendTransaction () fungsi.

Semasa kami memulakan TestRPC dan mengeluarkan beberapa alamat dompet ujian untuk kami, akaun ini serupa dengan akaun yang anda miliki jika anda menjalankan node penuh dan melakukan perintah getAccounts RPC terhadapnya, seperti dompet node penuh. TestRPC memberi anda beberapa duit syiling testnet percuma, 100 testnet Ether setiap akaun semasa ia dimulakan.

Apabila kita memanggil fungsi yang mengubah keadaan ini seperti daftarNewUser () atau tambahImageToUser (), dalam fasa pengujian localhost, melawan node TestRPC kami, TestRPC hanya membayar gas testnet untuk anda dan segera mengembalikan hasil transaksi. Pada node localhost penuh, anda perlu “membuka kunci” akaun tersebut sebelum transaksi berjaya di mainnet, dan anda harus menunggu di mainnet untuk blok seterusnya untuk mengambil transaksi anda, dengan anggapan anggaran gas kami sudah cukup! Tetapi selalu ada cara yang lebih baik, homies saya &# x1f642;

Menghubungkan Ðapp anda ke Mainnet

Saya telah menyediakan dan menggunakan kontrak pintar ke Ethereum Mainnet, dan aplikasi demo ini di salah satu pelayan web saya, di www.enledger.io/etherereum-demo-tools. Sekiranya anda melayari laman web ini dan anda tidak menjalankan TestRPC atau node ethereum penuh di localhost: 8545, dan anda melayari laman web ini, anda mungkin akan melihat sesuatu seperti ini:

Melihat sambungan ke rangkaian: !

Melihat akaun lalai: (tiada pautan nod web3.eth)

Oleh itu, adakah ini bermakna anda memerlukan node ethereum penuh, atau simpul penuh Virtual Private Server (VPS) untuk disambungkan, untuk berinteraksi dengan Ethereum Mainnet? Sehingga baru-baru ini memang benar, tetapi sekarang kami mempunyai plugin krom hebat ini yang disebut Metamask (untuk penyemak imbas Chrome), yang membolehkan anda menyambung ke Ethereum Mainnet dalam penyemak imbas anda, dan lelaki Metamask pada dasarnya menyediakan sambungan ke node penuh untuk anda , di sana, secara percuma, jadi alat bantuan kepada mereka!

Anda dapat melihat dalam kod saya, saya mengesan objek web3 “disuntikkan” khas dari plugin metamask yang mengatur sambungan nod ke nod penuh ethereum mereka. Berikut adalah kod yang berkaitan yang bertukar secara automatik ke sambungan biasa web pelanggan (localhost) atau metamask:

fungsi bebanWeb3 () {

biarkan web3Injected = window.web3;

jika (typeof web3Injected! == ‘undefined’) {

konsol.log ("gergaji disuntik web3!");

web3 = Web3 baru (web3Injected.currentProvider);

} lain {

konsol.log ("tidak melihat web3 disuntik!");

web3 = Web3 baru (Web3.providers baru. HTTPProvider ("http: // localhost: 8545"));

}

}

Pada gambar di bawah, perhatikan logo Metamask Fox di sudut kanan atas, saya telah memasang Metamask Plugin dan disambungkan ke ethereum Mainnet dalam penyemak imbas saya! Anda dapat melihat bahawa saya telah menambahkan beberapa pengguna ke buku tamu yang sudah ada dalam kontrak pintar demo Buku Tamu “Geekt” kami. Antara muka ÐApp membolehkan anda memilih pengguna dan melihat gambar mereka, dan anda akan melihat halaman Tanda Buku Tamu jika anda menyambung dari alamat yang belum mendaftarkan pengguna.

Saya menambahkan beberapa kod supaya anda hanya dapat menampal URL gambar yang ingin anda tambahkan ke akaun pengguna anda, dan ia akan mengambil hash nota SHA256 untuk anda tambahkan ke gambar, dan ia juga akan memeriksa hash nota SHA256 gambar semasa dimuat ke dalam halaman, dan memberi anda tanda semak hijau kecil atau ‘X’ merah berdasarkan apakah gambar di URL tersebut dan hash notaris masih sesuai. Saya menambahkan gambar logo “BlockGeeks” di bawah akaun pengguna Ryan M. saya di sini, dan saya telah mengklik butang untuk menambahkan gambar untuk pengguna ini.

Plugin Metamask telah mengesan bahawa saya perlu membayar transaksi ethereum web3 ini dengan gas Ethereum sebenar, dan telah muncul sedikit tetingkap untuk meminta saya sama ada saya akan menerima transaksi ini. Saya telah menghantar Ether sedikit nyata ke dompet Metamask ini, dan cukup untuk membersihkan transaksi, jadi saya klik ‘terima’.

Cara Belajar Kesungguhan: Panduan Pengkodan Ethereum Terunggul

Pemikiran Akhir, Renungan Dalam

Itu sahaja, ini berfungsi! Artikel demo dan repositori kod ini semestinya banyak membantu anda untuk menjadi Ethereum Solidity Language dan developerPembangun aplikasi hebat Anda boleh memasang Metamask Plugin, bersambung ke Ethereum Mainnet, dan lawati www.enledger.io/etherereum-demo-tools dan anda akan melihat aplikasi Buku Tamu / Demo Notari saya dan pengguna dan gambar yang sama ini, dan anda juga boleh menandatangani buku tamu dan memberi nota gambar juga, jika anda mahu &# x1f642;

Agar anda tidak terlalu terkawal dengan perkara ini, saya menambahkan sedikit kemampuan moderasi kepada “pemilik” kontrak pintar, yang telah saya tetapkan secara dalaman ke alamat siapa sahaja yang pada mulanya membayar untuk menggunakan pintar- kontrak ke mainnet, iaitu saya. Saya ingin menunjukkan kepada anda dengan cepat bagaimana kemampuan pentadbir khas itu berfungsi kerana biasa melihat corak kod pengguna pentadbir seperti ini:

alamat GeektAdmin;

fungsi Geekt () kena bayar {// ini adalah PEMBUAT (nama yang sama dengan kontrak) ia dipanggil SEKALI hanya apabila kontrak mula-mula digunakan

GeektAdmin = msg.sender; // tetapkan saja pentadbir, sehingga mereka dapat membuang pengguna atau gambar yang buruk jika diperlukan, tetapi tidak ada orang lain yang dapat

}

pengubah sahajaAdmin () {

jika (msg.sender! = GeektAdmin)

membuang;

// Jangan lupa "_;"! Ia akan digantikan oleh badan fungsi sebenar semasa pengubah digunakan.

_;

}

function removeUser (address badUser) onlyAdmin return (kejayaan bool) {

padam Pengguna [badUser];

kembali benar;

}

fungsi removeImage (bytes32 badImage) sahajaAdmin kembali (kejayaan bool) {

padamkan notarizedImages [badImage];

kembali benar;

}

Kami mempunyai fungsi pembina khas, Geekt (), dengan nama yang sama dengan kontrak itu sendiri, yang dipanggil hanya sekali, ketika kontrak pertama kali diterapkan ke blockchain. Fungsi ini menetapkan pengguna pentadbir ke alamat pengirim pesan yang membayar untuk menggunakan kontrak pintar. Kami juga memiliki fungsi pengubah hanyaAdmin () khusus yang kemudian diterapkan pada fungsi removeUser () dan removeImage () kami, untuk menyekat fungsi tersebut sehingga mereka hanya dapat diaktifkan jika alamat msg.sender adalah alamat pengguna admin.

Sekarang saya ada cara untuk membuang semua pengguna yang tidak baik, jika perlu &# x1f642; Jangan buat saya melakukannya!

Perkara terakhir yang ingin saya sebutkan adalah bahawa kita hanya mencakar permukaan di sini. Salah satu ciri asas yang tidak saya lindungi ialah “peristiwa” Soliditi, yang merupakan cara untuk anda mendorong kemas kini kembali ke penyemak imbas, seperti sambungan “soket” menonton dan mengaktifkan acara penyemak imbas apabila pengguna baru yang mendaftar atau gambar dikesan. Bahagian ethereum dan Soliditi yang paling keren berasal dari kontrak pintar yang berinteraksi dengan Oracles, dan kontrak pintar yang saling bercakap dan bertindak antara satu sama lain menggunakan “mesej” (DAO). Terdapat juga beberapa

Bahagian ethereum dan Soliditi yang paling keren berasal dari kontrak pintar yang berinteraksi dengan Oracles, dan kontrak pintar yang saling bercakap dan bertindak antara satu sama lain menggunakan “mesej” (DAO). Terdapat juga beberapa cukup serius pertimbangan keselamatan yang harus anda pelajari, sebelum anda berusaha menyimpan etereum sebenar dalam kontrak pintar anda dan menghantarnya kepada orang berdasarkan panggilan fungsi, sekumpulan orang kehilangan kira-kira M dolar lebih dari itu dan akhirnya memecah rangkaian ethereum dalam pertikaian keras. Itu adalah sesuatu yang mesti anda perhatikan, dan semestinya saya mesti membahasnya dalam artikel lain &# x1f642; Artikel ini semestinya baik untuk membuat anda pergi dan “berbahaya” seperti yang saya katakan, dan saya mendorong anda untuk mempelajarinya, bahkan meminta syarikat yang bagus untuk membayar anda untuk mempelajarinya jika anda boleh, tetapi masih ada lagi jalan ini.

Perkara lain, perkara terakhir yang ingin saya bincangkan adalah struktur ethereum dan kos sebenar penggunaan kontrak pintar, sekarang. ethereum adalah rangkaian yang berjalan di blockchain awam yang besar, tunggal, di mana setiap orang boleh membayar untuk mengakses dan menyimpan data di sana. Walau bagaimanapun, sebenarnya melakukan itu agak mahal. Anda dapat melihat di atas dalam gambar saya, saya dikenakan bayaran 0,004182 Ether, yang hari ini bersamaan dengan $ 0,96 dalam dolar AS sebenar, untuk menyimpan URL gambar, hash nota SHA256, dan cap waktu, yang terdiri daripada 196 bait, ke Ethereum Mainnet. Ini berfungsi dengan kos penyimpanan data sebanyak $ 5,159,03 setiap MB!

Itu secara harfiah secara tidak waras mahal. Idea asal untuk kos gas yang dijelaskan dalam Ethereum Whitepaper mengatakan bahawa kos gas semestinya tetap agak tetap, namun kos gas terikat dengan jumlah blok, dalam pelaksanaan sebenarnya, dan jumlah blok tidak naik hampir secepat yang sekarang harga pasaran ethereum, jadi gas semakin mahal dari segi sebenar. Juga, situasi keras menunjukkan bahawa ini benar-benar merupakan rangkaian awam, dan jika sesuatu yang benar-benar diperdebatkan terjadi, ia boleh membengkak dan data anda secara teorinya akan mengalami kemunduran, atau kelas aset yang mendasari dapat turun harga dengan tajam. Semakin banyak perbelanjaan data, dan samudera data di luar sana yang menunggu untuk disimpan bermaksud bahawa jumlah data yang dapat disimpan dalam rantai mana pun mungkin perlu dibatasi, atau mungkin membatasi diri.

ethereum mungkin paling sesuai untuk perkara-perkara yang hanya memerlukan sebilangan kecil penyimpanan data yang tersedia untuk umum dalam talian, seperti mungkin sistem reputasi dalam talian, atau projek notari data. Mungkin tidak masuk akal untuk membina projek blockchain untuk meletakkan semua data industri widget AS ke blockchain ethereum, sebagai contoh, kerana anda mungkin tidak mahu semua maklumat itu tersedia untuk umum, dan anda perlu menurunkan yuran transaksi tersebut untuk penggunaan khusus industri-widget. Anda mungkin menganggap bahawa model blockchain bukti-kepentingan mungkin lebih menjimatkan tenaga, walaupun itu mungkin menunjukkan kelemahan teori model keselamatan konsensus berbanding bukti-bukti saham Nakamoto untuk projek blockchain anda.

Saya mencadangkan bahawa sebelum memulakan projek blockchain baru, pertimbangkan dengan berhati-hati platform yang ingin anda gunakan, lihat perkara terbaru di luar sana dan jangan takut untuk meneroka, dan juga pertimbangkan dengan teliti insentif nod yang akan menarik orang untuk memuat turun kod nod anda yang keren, dan jalankan! Pujian terbaik yang dapat diperoleh oleh pengaturcara adalah orang yang menggunakan kod mereka di dunia nyata, dan bersikap produktif dengannya.

Bahagian Bonus Gila Rahsia

Letakkan saya ke Mainnet, Kapten

Saya kembali, dengan lebih banyak perkara menarik untuk anda dan komuniti ethereum! Oleh itu, saya melewatkan perincian penting di atas, mungkin anda perasan. Sebaik sahaja anda menulis kontrak pintar anda, uji menyusunnya seribu kali sehingga berjaya, penggunaan, pengujian localhost semuanya berfungsi. Sekarang, bagaimana neraka adakah anda mendapat perkara ini ke Mainnet !? Ini semacam

Ini agak sukar dan biasanya melibatkan anda perlu menjalankan nod ethereum penuh anda, atau membayar seseorang untuk menjalankannya dan membolehkan anda mengaksesnya (seperti melalui VPS). Oleh itu, itu sangat menyusahkan saya, kerana saya tidak sabar dan saya menulis artikel ini dalam tarikh akhir, orang-orang! Saya tidak mempunyai masa untuk menunggu node penuh ethereum baru saya, dan saya tidak merasa seperti meledakkan beberapa ratus ruang ruang cakera keras dan salah satu kotak saya untuk memecahkan ethereum tx sepenuh masa, dan saya Saya juga terlalu murah untuk membayar VPS untuk melakukannya untuk saya, lol.

Oleh itu, saya menggunakan beberapa kung-fu web javascript khas, dan baru mengetahui bagaimana saya dapat membuat laman web dengan kotak dan butang, di mana anda hanya boleh menampal kontrak anda, mengklik butang, dan menggunakan kontrak pintar Soliditi terus ke Mainnet, melalui Metamask Plugin. Terutama saya melakukan ini hanya untuk kemudahan, untuk menulis artikel ini, tetapi ternyata alat ini sangat berguna, jadi saya meletakkannya di web untuk digunakan oleh semua orang. Buat pertama kalinya, anda boleh melakukan semua ujian anda dan bahkan penyebaran kontrak pintar sepenuhnya ke Ethereum Mainnet, tanpa memerlukan nod ethereum sepenuhnya! Izinkan saya memperkenalkan EthDeployer alat, ia adalah perisian percuma untuk anda kerana perisian percuma memberi kita kebebasan &# x1f642;

Inilah pautan ke Repo EthDeployer di Github, dan anda juga boleh mengakses siaran langsung saya Ethecteployer Tectract dan gunakan kontrak anda secara langsung dari sana, anda hanya perlu memasang Metamask Plugin dan menyambung ke Ethereum Mainnet terlebih dahulu, dan anda memerlukan sedikit Ether di dompet Metamask anda untuk membayar yuran penggunaan kontrak pintar Mainnet juga, tentu saja!

Alat ini menggunakan Penyemak Imbas-Penyelesaian alat, yang hanya alat penyemak imbas yang disemak imbas, untuk memuatkan versi javascript dari Solidity Compiler, terus ke penyemak imbas sisi pelanggan, untuk menguraikan / menyusun kontrak pintar dengan cepat. Ini menjadikan alat ini berdiri sendiri dan mudah alih, yang bermaksud anda tidak perlu risau untuk memasang penyusun Solc pada komputer anda, dan saya juga tidak perlu risau untuk memasangnya di pelayan saya, yang sangat baik untuk semua orang. Izinkan saya menunjukkan kod yang memuat penyusun padat terkini yang tersedia:

Saya mempunyai javascript penyemak imbas-solc.min.js yang diminimumkan melalui halaman index.html tingkat atas, yang menjadikan tingkap.BrowserSolc objek tersedia untuk skrip reaksi peringkat rendah saya. Ini adalah satu lagi aplikasi create-react yang sangat mudah yang boleh dipasang dan digunakan dalam beberapa minit di mesin anda sendiri, saya bahkan menyediakan readme.md yang benar-benar berguna di github repo yang menunjukkan kepada anda bagaimana untuk melakukannya.

persediaanCompiler () {

var externalThis = ini;

setTimeout (fungsi () {

// console.debug (window.BrowserSolc);

window.BrowserSolc.getVersions (fungsi (soljsonSources, soljsonReleases) {

var compilerVersion = soljsonReleases [_. keys (soljsonReleases) [0]];

konsol.log ("Versi penyusun penyemak imbas: " + penyusunVersion);

window.BrowserSolc.loadVersion (compilerVersion, fungsi (c) {

penyusun = c;

externalThis.setState ({statusMessage:"siap!"}, fungsi () {

konsol.log ("Versi Solc Dimuat: " + penyusunVersion);

});

});

});

}, 1000);

}

Fungsi setupCompiler menunggu sesaat untuk tetingkap. Objek BrowserSolc akan tersedia setelah halaman dimuat, kemudian adakah fungsi .getVersions () dan .loadVersion () dalaman, sebenarnya tidak banyak, dan kami mempunyai penyusun Solc yang berfungsi tersedia untuk kami secara langsung dalam persekitaran pelanggan sepenuhnya, bagus! Untuk kelengkapan, saya akan menunjukkan beberapa baris yang relevan yang benar-benar menangani penyusunan dan penggunaan kontrak dari dalam fungsi javascript, ketika “kompilasi & menyebarkan! ” butang ditekan:

menyusunAndDeploy () {

var result = compiler.compile (this.state.contractText, optimize);

var abi = JSON.parse (result.contracts [_. keys (result.contracts) [0]]. antara muka);

var bytecode = "0x" + result.contracts [_. keys (result.contracts) [0]]. bytecode;

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

web3.eth.estimateGas ({data: bytecode}, fungsi (err, gasEstimate) {

myContract.new ({dari: web3.eth.accounts [0], data: bytecode, gas: inflatedGasCost}, function (err, newContract) {

thisTxHash: newContract.transactionHash,

iniAddress: newContract.address

Kami mempunyai semua objek biasa kami dari sebelumnya, kami memanggil compiler.compile () pada teks kontrak, dan dapatkan objek “hasil” kontrak yang disusun dari mana kami mengekstrak abi dan bytecode, dan menghantarnya dalam transaksi baru. Kami melihat fungsi .estimateGas () lama kami yang sudah biasa dilemparkan ke sini untuk ukuran yang baik. Kami mengambil ID transaksi dan alamat kontrak baru untuk dipaparkan kembali kepada pengguna apabila kontrak berjaya diterapkan. Bam, selesai! Mari kita lihat dalam tindakan:

“Oh ya, jika anda mendapat mesej ralat semasa penyebaran, pastikan untuk benar-benar memeriksa pautan ID transaksi, kontrak kemungkinan besar JPS benar-benar berjaya, kadang-kadang Metamask hanya gagal mengambil keadaan transaksi kejayaan penerapan dan alamat dan pengembalian kontrak baru berjaya ke persekitaran penyemak imbas kami. “

Cara Belajar Kesungguhan: Panduan Pengkodan Ethereum Terunggul

Ia masih hidup. Ini menjadikan saya sangat gembira! Bonus Tambahan Rahsia Gila Tidak Dikunci! Oleh itu, saya membayar 0,02268 Ether dalam bentuk gas, iaitu sekitar $ 5,30 USD (1 Jun 2017), untuk menggunakan kontrak ini ke Ethereum Mainnet. Ingat ini semestinya aplikasi demo super sederhana, dengan hanya dua kemungkinan struktur data. Ia hanya seperti $ 2 beberapa minggu yang lalu, ini liar! Tetapi masih berpatutan, anda tidak semestinya perlu menggunakan kontrak anda ke rantai utama yang selalunya, hanya sekali yang harus melakukannya.

Itu sahaja yang saya ada untuk anda kali ini, kawan! Harap anda dapati tutorial ini sangat berguna, dan anda dapat memanfaatkan alat EthDeployer dengan baik dalam pengembaraan dev anda di luar sana. Saya berharap dapat mendengar soalan dan komen, terima kasih!

Ryan Molecke

Ryan Molecke, Ketua Pegawai Teknologi (CTO) dari EnLedger Corp., adalah penyelidik sains komputasi akademik yang sangat pelbagai disiplin, yang beralih ke dunia teknologi kewangan dan sistem perdagangan. Dia bekerja di beberapa syarikat permulaan teknologi kewangan yang terkenal dan berjaya, membantu sistem perdagangan arkitek dan pembrokeran / pertukaran, dan kini tertumpu pada lejar yang dibenarkan dan program penyatuan, tokenisasi, dan kredit sistem blockchain. Dia memegang B.S.E. dalam Kejuruteraan Komputer dan Ph.D. dalam Kejuruteraan Nanosains dan Mikrosistem, kedua-duanya dari UNM

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