Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)


Advertising

Ikhtisar: Alat Terbaik untuk Pengembangan Kontrak Cerdas (Web3 dan Private Ethereum Blockchain)

Ini adalah posting tamu oleh KC TAM tentang Menggunakan Berbagai Alat untuk Pengembangan Kontrak Cerdas: Remix, Web3 di TestRPC.

Pengaturan ini sangat dekat dengan yang sebelumnya. T dia perbedaan adalah untuk menyebarkan kontrak pada Ethereum pribadi blockchain berjalan pada localhost daripada menggunakanTestRPC.

Pengembangan Kontrak Cerdas (Bagian 2)

Persiapan: Klien Ethereuem (geth)

Ada beberapa implementasi klien Ethereum . Yang paling populer adalah Go client (disebut geth). Pemasangan geth dapat ditemukan di sini . Pilih satu untuk mencocokkan sistem operasi Anda.

File Genesis.json

Ini adalah file yang digunakan untuk menginisialisasi blockchain Ethereum pribadi. Saya hanya menunjukkan yang saya gunakan.


{
  "coinbase": "0x000000000000000000000000000000000000000000001",
  "kesulitan": "0x20000",
  "extraData": "",
  "gasLimit": "0x4c4b40",
  "nonce": "0x0000000000000042",
  "mixhash": "0x00000000000000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x00000000000000000000000000000000000000000000000000000000000000000000000000",
  "cap waktu": "0x00",
  "alokasi": {},
  "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    }
}

Anda harus sudah memiliki ini. Silakan merujuk ke sesi Persiapan di pengaturan sebelumnya. Modul Node dan Web3

Siapkan Blockchain Ethereum Pribadi

1. Inisialisasi Blockchain

Di sini saya hanya daftar langkah-langkah yang cukup baik untuk demo ini, dengan beberapa penjelasan singkat. Untuk detail lebih lanjut, Anda dapat menemukannya di wikiini .

Buka direktori kerja. Demi kesederhanaan, kami menggunakan direktori pada sesi sebelumnya, di mana modul node telah diinstal. Pastikan file genesis.json disimpan di sini. Buat direktori di sini yang disebut “chaindata”. Direktori ini akan menyimpan semua informasi blockchain dan akun pengguna.

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Mulai sekarang kita akan membagi layar kita menjadi tiga, untuk tujuan yang berbeda.

Bagian konsol simpul hampir identik, tetapi kita memerlukan beberapa tugas di blockchain pribadi sebelum semuanya berjalan seperti yang kita inginkan. Mereka adalah inisialisasi blockchain dan menjalankan blockchain, pembuatan akun, dan penambangan. Semua tugas ini dilakukan oleh TestRPC di sesi sebelumnya.

Sekarang inisialkan blockchain dengan geth init. Catatan kita perlu menentukan datadir untuk direktori yang kita simpan di blockchain.

blockchain
$ geth --datadir = ~ / <direktori kerja> / chaindata / init genesis.json

Setelah inisialisasi, dalam direktori chaindata dua direktori dibuat:

  • geth memegang semua data terkait blockchain
  • keystore memegang informasi akun pengguna (kosong saat ini).

2. Mulai Blockchain

Kita dapat memulai blockchain sekarang.

blockchain
$ geth --datadir = ~ / <direktori kerja> / chaindata / s.json
Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)


Blockchain sudah aktif dan berjalan. Kami tidak berinteraksi dengan blockchain di terminal ini. Selama pengaturan kami, kami akan melihat beberapa informasi berguna terus muncul di terminal ini.

3. Akses Blockchain dengan Geth Console

Kita dapat mengakses blockchain yang kita mulai melalui konsol geth. Perhatikan baris terakhir di terminal blockchain: ada titik akhir IPC yang dibuka (jalur untuk file geth.ipc). Kami menggunakan titik akhir IPC Anda untuk mengakses konsol.

Konsol geth ada di terminal kanan bawah.

konsol geth
$ geth attach ipc: <working_directory_in_full> /chaindata/geth.ipc

Ini adalah konsol geth, dan kita bisa mengeluarkan perintah geth di sini.

4. Tambahkan Beberapa Akun untuk Demo

Ketika blockchain Ethereum pribadi ini diinisialisasi, tidak ada akun. Untuk demo ini, kita akan membuat empat.

Yang pertama adalah basis kami, bertanggung jawab untuk penyebaran kontrak dan pelaksanaan fungsi. Selain itu, akun ini bertanggung jawab untuk menambang, karena, di blockchain Ethereum pribadi, kami membutuhkan seseorang untuk menambang blok tersebut.

Tiga akun lagi dibuat hanya untuk menunjukkan bagi hasil.

Perhatikan bahwa setiap akun membutuhkan perlindungan parafrase.


konsol geth
$ eth.accounts
$ personal.newAccount () // ulangi empat kali
$ eth.accounts

Dan jika Anda memeriksa direktori di chaindata / keystore, Anda akan melihat keempat akun ini.

Ini akunnya. Kami akan merujuk mereka nanti.


"0x822539842f2d65f7f6e45ef913ab6eb226cd1056"
"0x57f6b66543c6a5650809f5ba2d3e0e808201fe8b"
"0xf1314446d331a023a95e6e5ff5302ccf7a73adec"
"0x595c788ba7b408afeee4cd4e359568dbcd5a5617"

5. Periksa Saldo Akun

Kami sekarang dapat memeriksa saldo akun dari empat alamat ini. Tidak mengherankan, tidak ada eter dalam akun ini karena baru dibuat.

konsol geth
$ eth.getBalance (eth.accounts [0]) // ulangi dengan 1, 2 dan 3

6. Penambangan

Kami siap melihat bagaimana penambangan dilakukan. Blockchain Private Ethereum membutuhkan penambangan untuk membangun blok. Karena kami telah menetapkan tingkat kesulitan yang sangat rendah dalam genesis.json, tidak perlu terlalu banyak waktu untuk blok yang ditambang. Setelah blok ditambahkan ke blockchain, 5 eter akan diberikan ke akun [0] (yang juga disebut akun etherbase atau coinbase).

Blok pertama mungkin memakan waktu cukup lama. Dengan memeriksa saldo akun [0] dan apa yang muncul di jendela blockchain (terminal kanan atas), Anda akan tahu bahwa penambangan bekerja dengan baik.


konsol geth
$ miner.start ()
$ eth.getBalance (eth.accounts [0])
$ web3.fromWei (eth.getBalance (eth.accounts [0])) // konversi weis menjadi ethers

Perhatikan semua eter menuju ke eth.accounts [0], dan kita dapat menggunakan web3.fromWei untuk mengubah saldo dari wei ke eter. Dan kita bisa berhenti dan mulai menambang kapan saja. Kami menghentikannya terlebih dahulu dan dapat memulainya nanti ketika kami menggunakan fungsi kontrak dan eksekusi. (Dalam kehidupan nyata, beberapa penambang akan melakukan pekerjaan itu, dan Anda tidak perlu menambang sendiri kecuali Anda ingin mendapatkan beberapa eter melalui penambangan.)

Kami memiliki beberapa eter untuk eth.accounts [0], dan dapat digunakan untuk penyebaran kontrak dan menjalankan fungsi. Dan blockchain pribadi saya siap digunakan. Sekarang kita beralih ke penempatan kontrak.

Menyebarkan Kontrak

Prosedurnya hampir identik dengan apa yang kami lakukan di sesi sebelumnya. Namun, ada beberapa pekerjaan tambahan di konsol geth, dan kami akan menyoroti ini.

1. Dapatkan Node Console Ready

Pada konsol simpul, terminal di sisi kiri, pertama-tama kita mengakses konsol simpul dan menentukan objek web3 untuk mengakses rantai pribadi.


konsol simpul
$ node
> Web3 = membutuhkan ('web3')
> web3 = Web3 baru (Web3.providers.HttpProvider baru ("http: // localhost: 8545"))

2. Nyalakan RPC pada Geth Console

Ketika kita memulai blockchain pribadi, secara default RPC (mengakses melalui http: // localhost: 8545) tidak aktif. Kita perlu menyalakannya dari konsol geth.

konsol geth
$ admin.startRPC ()
Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Dan kita dapat melihat di terminal blockchain pesan ini:

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Itu berarti web3 dari node dapat mengakses blockchain melalui RPC. Ini tidak diperlukan untuk TestRPC karena sudah dibuka. Kita juga dapat mengaktifkan RPC ketika kita memulai blockchain (dengan opsi –rpc).

3. Uji Akses Blockchain pada Node Console

Verifikasi alamat yang telah kita buat sebelumnya.


konsol simpul
> akun web3.eth.
Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)


Kami melihat alamat persis yang telah kami buat di konsol geth.

4. Periksa Fungsi Balance Handy

Kami menggunakan kembali checkAllBalances () yang sama, yang diambil dari sini .


fungsi checkAllBalances () { 
var i = 0; 
web3.eth.accounts.forEach (fungsi (e) {
     console.log ("web3.eth.accounts [" + i + "]:" + e + "tbalance:" + web3.fromWei (web3.eth.getBalance (e), "eter") + "eter"); 
i ++; 
})
};

Cukup salin-rekatkan fungsi ini ke konsol simpul. Sekarang kita dapat memanggil fungsi checkAllBalances () kapan saja, dan itu akan menampilkan saldo semua akun di ether.

Saldonya benar. Eter dalam akun [0] disebabkan oleh penambangan. Kami tidak akan merujuk ini, karena selama penambangan, jumlah ini terus meningkat. Kami akan memeriksa saldo tiga akun lainnya, yang saat ini nol.

5. Menyebarkan Kontrak

Sekali lagi, kita mengikuti apa yang telah kita lakukan sebelumnya. Dan saya hanya menyalin informasi dari sesi sebelumnya. Lihat sesi sebelumnya bagaimana saya mendapatkannya.

Buat alamat variabel, yang menampung tiga akun berbagi target.

konsol simpul
> var address = [web3.eth.accounts [1], web3.eth.accounts [2], web3.eth.accounts [3]];
> alamat

Buat kelas untuk revenuesharingContract berdasarkan ABI.

konsol simpul
> var revenuesharingContract = web3.eth.contract ([{"constant": true, "input": [], "name": "creator", "outputs": [{"name": "", "type": "address"}], "hutang": false, "stateMutability": "view", "type": "function"}, {"constant": false, "input": [], "name": "kill" , "output": [], "hutang": false, "stateMutability": "nonpayable", "type": "function"}, {"constant": true, "input": [], "name": " numShareholder "," outputs ": [{" name ":" "," type ":" uint256 "}]," hutang ": false," stateMutability ":" view "," type ":" function "},{"constant": true, "input": [{"name": "", "type": "uint256"}], "name": "pemegang saham", "output": [{"name": "" , "type": "address"}], "hutang": false, "stateMutability": "view", "type": "function"}, {"constant": false, "input": [], "name ":" shareRevenue "," outputs ": [{" name ":" success "," type ":" bool "}]," hutang ": benar," stateMutability ":" hutang "," ketik ":" fungsi "}, {" input ": [{" name ":" address "," type ":" address [] "}]," hutang ": false," stateMutability ":" nonpayable "," type ":"constructor"}, {"anonymous": false, "input": [{"indexed": false, "name": "_ jumlah", "ketik": "uint256"}, {"indexed": false, "name ":" _ numShareholder "," type ":" uint256 "}]," name ":" Disburse "," type ":" event "}]);

Hingga saat ini, kami belum menyebarkan apa pun di blockchain pribadi. Karenanya tidak diperlukan penambangan. Gas diperlukan untuk penyebaran kontrak, dan oleh karena itu kami perlu membuka kunci eth.accounts [0] karena kami menggunakan akun [0] untuk menggunakan kontrak ini. Ini dilakukan pada konsol geth.

konsol geth
$ personal.unlockAccount (eth.accounts [0])
Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Jika Anda diminta untuk membuka kunci akun karena batas waktu, Anda perlu melakukan ini lagi.

Sekarang kita dapat menggunakan kontrak dengan bytecode dan informasi yang diperlukan.


konsol simpul
> var revenuesharing = revenuesharingContract.new (
   alamat,
   {
     dari: web3.eth.accounts [0], 
     data: '0x6060604052341561000f57600080fd5b60405161049d38038061049d833981016040528080518201919050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508151600281905550600090505b81518110156100f957818181518110151561009157fe5b906020019060200201516001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061007a565b50506103938061010a6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302d05d3f1461007257806341c0e1b5146100c757806368eca613146100dc578063ab377daa14610105578063e579a0bd14610168575b600080fd5b341561007d57600080fd5b61008561018a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100d257600080fd5b6100da6101af565b005b34156100e757600080fd5b6100ef610240565b6040518082815260200191505060405180910390f35b341561011057600080fd5b6101266004808035906020019091905050610246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610170610279565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60025481565b60016020528060005260',
     gas: '4700000'
   }, fungsi (e, kontrak) {
    console.log (e, kontrak);
    if (typeof contract.address! == 'undefined') {
         console.log ('Alamat penambangan!': '+ contract.address +' transactionHash: '+ contract.transactionHash);
    }
 })
0])

Berbeda dari sesi sebelumnya, kami melihat transaksi sudah ditunjukkan di terminal blockchain tetapi belum ditambang. Belum ada pesan dari konsol node yang diamati.

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Sekarang kita perlu mengaktifkan penambangan di konsol geth.

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Ketika kita menghidupkan penambangan, kita segera melihat beberapa blok ditambang, dan pada konsol node, pesan juga keluar, menunjukkan bahwa kontrak berhasil dikerahkan.

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Berinteraksi dengan Kontrak yang Ditempatkan

Mirip dengan sesi sebelumnya, kontrak yang digunakan diakses melalui objek revenuesharing.

1. Periksa variabel publik

Memeriksa variabel publik tidak memerlukan gas, dan oleh karena itu kami tidak perlu membuka kunci akun dan menambang untuk melakukan ini.

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

2. Jalankan fungsi shareRevenue ()

Karena fungsi eksekusi memerlukan biaya transaksi dan penambangan, kita dapat memulai keduanya dari konsol geth terlebih dahulu.

Perintah yang kita jalankan fungsinya sama. Seperti pada sesi sebelumnya, kami memeriksa saldo sebelum dan sesudah perintah.


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

Alat Terbaik untuk Pengembangan Kontrak yang Cerdas (Bagian 2)

Kami sudah mendapatkan hasil yang diinginkan. 30 eter dari akun [0] sekarang didistribusikan ke akun [1] ke akun [3]. Kami tidak dapat memverifikasi akun [0] karena eter baru masuk karena penambangan.

Ringkasan

Kami kembali menggunakan web3 melalui konsol node untuk menggunakan dan berinteraksi dengan kontrak. Kali ini kami melakukannya di blockchain Ethernet pribadi. Keseluruhan proses hampir sama pada sisi konsol node, tetapi kita harus mengurus kreasi akun, membuka kunci akun, menambang, dll untuk menyelesaikan seluruh proses. Ini tidak diperlukan dalam TestRPC karena TestRPC melakukan semua tugas ini.

Lain kali kita akan bekerja pada MIST, antarmuka pengguna dan lagi berinteraksi pada blockchain Ethereum pribadi.

source :
https://blockgeeks.com/guides/smart-contract-development-part-2/

Advertising

Baca artikel lainnya

Follow selembar digital