- Menyiapkan lingkungan simulasi.
- Menerapkan dan menguji kontrak pintarmu.
- Menyiapkan testnet pribadi untuk lingkungan yang lebih realistis untuk menguji kontrak pintarmu.
Menyiapkan Proyek Ethereum Pertama Kamu
Sebelum memulai, mari kita mengenal terminologi dan alat yang akan kita gunakan. Testnet - Dari ethereum.stackexchange.comTestnets adalah “memainkan uang” sehingga kamu dapat mencoba aplikasi tanpa mengeluarkan uang sungguhan. Aplikasi biasanya digunakan pada testnets sebelum akhirnya digunakan di jaringan utama. Etherbase adalah akun yang akan mendapatkan hadiah penambangan jika kamu menambang. Ini memiliki sedikit relevansi jika kamu tidak menambang.Testrpc - dari github testrpc
Testrpc adalah klien Ethereum berbasis Node.js untuk pengujian dan pengembangan. Testprc menggunakan ethereumjs untuk mensimulasikan perilaku klien dan membuat aplikasi Ethereum berkembang jauh lebih cepat.Truffle - mengacu pada Truffle Framework - adalah kerangka kerja paling populer untuk memulai pengembangan dengan Ethereum. Truffle akan membuat pekerjaanmu lebih mudah dengan menangani, menyusun, menghubungkan, menyebarkan, dan mengelola biner. Truffle juga menangani pengujian otomatis dari kontrak pintarmu di antara hal-hal lainnya. Untuk membuat dan menyebarkan kontrak pintarmu, kamu harus memiliki blockchain untuk menerapkan dan menguji kontrakmu. Kamu memiliki 4 opsi di sini:
- Gunakan gambar testrpc yang terdokumentasi - boleh dibilang ini adalah cara termudah untuk memulai. Namun, saat menulis ini, gambar tampaknya telah dihapus sehingga ini tidak akan dibahas.
- Gunakan simulasi testnet - saat ini, ini adalah cara termudah untuk memulai.
- Buat TestNet pribadi milikmu - bisa dibilang pilihan yang paling sulit. Ini memberi kamu lebih banyak kendali atas lingkunganmu dan membuat skenario yang berjalan serta masalah debugging jauh lebih mudah.
- Hubungkan ke TestNet yang ada - pilihan terbaik untuk melihat bagaimana kontrak milikmu akan berperilaku di dunia nyata dan lebih mudah daripada membuat TestNet pribadimu sendiri.
Mengapa dilakukan uji dalam testnet simulasi ataupun pribadi?
Namun, disarankan agar kamu terlebih dahulu melakukan uji dalam simulasi testnet, kemudian di testnet pribadi, sebelum pergi ke testnet publik dan akhirnya ke dalam produksi. Ada beberapa alasan untuk ini:- Alat debugging hampir tidak ada sehingga kamu ingin mengendalikan lingkungan sebanyak mungkin sampai kamu yakin kontrak milikmu berfungsi.
- Kamu tidak ingin menghabiskan semua eter milikmu di testnet.
- Kamu ingin mendapatkan gagasan tentang biaya penyimpanan data milikmu di blockchain, berapa lama waktu yang dibutuhkan untuk mengeksekusi kontrakmu dan mengoptimalkannya sebelum pergi ke testnet publik atau produksi. Baik jumlah data yang disimpan dan waktu yang dibutuhkan untuk melaksanakan kontrak dapat secara signifikan meningkatkan biaya penggunaan Ethereum.
- Kamu mungkin ingin mengontrol kecepatan penambangan selama pengembangan atau untuk memeriksa secara visual seluruh blockchain.
Beberapa persiapan yang dibutuhkan:
- NodeJs 6.0 - Gunakan versi yang direkomendasikan.
- NPM-NPM dilengkapi dengan node, pastikan sudah terinstal dengan
-g
option.npm install npm -g
- EthereumJs’s testrpc —
npm install -g ethereumjs-testrpc
- Truffle —
npm install -g truffle
Menyiapkan proyek pertama milikmu
Sebelum kita mulai, kita harus meluangkan waktu untuk mendiskusikan kelebihan dan kekurangan menggunakan kerangka Truffle. Menggunakan Truffle itu sederhana. Kelebihannya termasuk, tidak perlu tahu apa yang sedang terjadi 😀, memeriksa dependensi sebelum diterapkan, dan Truffle otomatis mengingat di mana penempatan terakhir dilakukan. Pilih folder untuk proyek baru kamu. Pilih direktori dan jalur tanpa spasi di dalamnya. Ruang di jalur mungkin tidak akan menyebabkan masalah apa pun, tetapi beberapa skrip dapat mengalami kesulitan.mkdir first-smart-contract cd first-smart-contract truffle init
truffle init
menciptakan proyek truffle yang mengarah ke blockchain di komputer kamu. Proyek ini dilengkapi dengan kontrak sampel dan beberapa tes. Jika kamu menginginkan proyek kosong, kamu bisa menjalankan truffle init bare
.
Setelah menjalankan truffle init
proyek yang dihasilkan harus terlihat seperti ini:
➜ first-smart-contract tree . ├── contracts │ ├── ConvertLib.sol │ ├── MetaCoin.sol │ └── Migrations.sol ├── migrations │ ├── 1_initial_migration.js │ └── 2_deploy_contracts.js ├── test │ ├── TestMetacoin.sol │ └── metacoin.js └── truffle.js
Jika kamu melihat ke dalam truffle.js
kamu akan melihat di mana proyekmu saat ini berpikir node ethereum untuk diterapkan.
module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" // Match any network id } } };
Hanya ada satu lingkungan yang dikonfigurasi yang disebut development
yang menunjuk ke localhost
pada port 8545
. Kamu dapat membuat jalur ke lingkungan lain di sini jika kamu mau.
Semua kontrak pintar berada di bawah direktori kontrak.
truffle compile truffle migrate
truffle compile
akan berfungsi, namun, truffle migrate
akan error karena tidak ada blockchain yang berjalan di localhost saat ini.
Apa saja pilihan kita untuk diterapkan ke blockchain?
Seperti yang disebutkan sebelumnya ada 3 cara utama yang dapat kamu lakukan. Apapun caranya, proses kompilasi dan penerapan yang sebenarnya tidak akan berubah dan kamu masih akan menggunakantruffle compile && truffle migrate
untuk disebarkan ke rantai. Kamu hanya dapat mengonfigurasi lingkungan yang ingin diterapkan di truffle.js
dan kemudian menerapkannya ke lingkungan menggunakan nama truffle migrate --network <network name>
. Sebagai contoh, truffle.js
milik kata dibaca seperti ini:
module.exports = { networks: { "live": { network_id: 10, host: "192.168.1.15", // Point to live env port: 8545 } }, rpc: { host: "localhost", port: 8545 } };
Kamu dapat menyebarkan live
menggunakan truffle migrate --network live
.
Menjalankan simulasi testnet menggunakan testrpc
Ini adalah cara termudah untuk memulainya. Buka konsol terpisah dari yang telah kamu kerjakan sejauh ini dan jalankan perintahtestrpc -d
. Flag -d
membuat run testrpc milikmu dalam mode deterministik. Kamu dapat coba menjalankan testrpc
dengan atau tanpa -d
untuk melihat perilaku ini.
Setelah testrpc berjalan, kembali ke direktori proyekmu dan jalankantruffle migrate
. Kamu harus melihat konsol menjalankan output testrpc
sekumpulan teks yang menunjukkan bahwa kontrak berhasil diterapkan. Setelah penerapan berhasil, kamu dapat mengonfirmasi bahwa kontrak milikmu berfungsi dengan menjalankan truffle test
yang akan menjalankan pengujian otomatis dalam proyek sampel milikmu.
Siapkan testnet pribadi milikmu
Persyaratan: Catatan: jika kamu menggunakan distribusi Linux berbasis Debian, buatlah Ubuntu. Kami mencoba men-setup Geth di Linux Mint. Go1.7 direkomendasikan, namun, kami bisa menyelesaikan dan menjalankan dengan Go1.6, kami akan merekomendasikan mengambil langkah ekstra untuk menyiapkan Go1.7 hanya untuk hasil yang lebih baik.Genesis file
Sebelum kita mengatur testnet pribadi kita, kita harus membuat file genesis. File genesis adalah blok awal untuk rantai milikmu. Dengan demikian, ini berisi alokasi awal dan konfigurasi untuk rantaimu. Sebuah file genesis tidak diperlukan dan kamu selalu dapat menggunakan yang sudah ditentukan sebelumnya yang disediakan jika kamu menjalankan geth
dengan opsi --dev
. Lebih lanjut sedikit tentang geth
. Untuk saat ini, mari kita asumsikan kamu ingin menggunakan file genesis.json
.
Di bawah ini adalah contoh filegenesis.json
.
{ "difficulty": "1", "gasLimit": "9999999", "config": { "chainId": 101, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": { "7ccc413a6b51be178ae62c1bcd86e8c1217c40cb": { "balance": "1000000" }, "b73f3248a841d9bb6f01d256baa3f9bfcc6a0be8": { "balance": "1000000" } } }
Penjelasan contents of the genesis.json.
difficulty
— ini adalah kesulitan fungsi kriptografi, atur ini ke angka rendah untuk mendapatkan blok untuk menambang dengan cepat, atur ke angka yang lebih besar untuk hasil penambangan yang lebih realistis atau lebih lambat.
gasLimit
— ini adalah biaya maksimum yang mungkin untuk menambang blok. Atur ini ke angka tinggi untuk tujuan pengujian atau pengembangan.
chainId
— ini adalah ID dari rantai. Dalam pengaturan praktek ini dapat membantu memberikan validasi sederhana dan memberikan perlindungan dari playback attacks.
homesteadBlock
— rilis besar kedua dari Ethereum diberi nama "Homestead". Rilis pertama disebut "Frontier". Nilai-nol di sini berarti kamu menggunakan Homestead.
alloc
— seperti namanya, ini adalah alokasi awal Ethereum (cryptocurrency) ke wallet. String heksa 40-karakter adalah alamat wallet dan balance
adalah jumlah eter yang dialokasikan ke masing-masing wallet.
Seperti disebutkan, file genesis tidak diperlukan dan kamu selalu dapat menggunakan yang sudah ditentukan sebelumnya yang disediakan jika kamu menjalankan geth
dengan opsi --dev
.
Inisialisasi blockchain dan buat akun
File genesis awal tidak akan memiliki apa-apa di bawah bagian alokasi karena kami belum membuat akun apa pun. Kami harus menginisialisasi blockchain, kemudian buat akun baru di atasnya dan jalankan lagi perintah inisialisasi. File genesis.json yang akan saya gunakan adalah yang di bawah ini.File genesis awal tidak akan memiliki apa-apa di bawah bagian alloc
karena kita belum membuat akun apa pun. Kita harus menginisialisasi blockchain, kemudian buat akun baru di atasnya dan jalankan lagi perintah inisialisasi. Filegenesis.json
yang akan saya gunakan adalah yang di bawah ini..
mkdir myblockchain myblockchain/datadir cd myblockchain
geth account new --datadir "$PWD/datadir"
# outputs something like this: Passphrase: ******** Repeat passphrase: ******** Address: {289a21e11cb10f77f7b17fa39a0f6613ec681293}
cat > genesis.json <<EOF { "difficulty": "1", "gasLimit": "9999999", "config": { "chainId": 101, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0 }, "alloc": { "289a21e11cb10f77f7b17fa39a0f6613ec681293": { "balance": "1000000" } } }
geth init --datadir "$PWD/datadir" genesis.json
# Ctrl+D to exit the geth console
Kita sekarang telah membuat rantai dan membuat akun.
Perhatikan jumlah saldo dalam tanda kutip “1000000”
.
Kamu sekarang harus memiliki rantai baru dengan pra-alokasi ke akun yang disebutkan di atas. Kamu sekarang harus memeriksa akun apa yang ada di rantai milikmu dan menetapkan akun default:
geth --datadir "$PWD/datadir" account list # Outputs something like: Account #0: {289a21e11cb10f77f7b17fa39a0f6613ec681293} keystore://..
Kita sekarang akan meluncurkan konsol geth dengan konfigurasi yang tepat, menetapkan akun yang ditunjukkan di atas sebagai akun default kita dan memeriksa saldo Ethereum.
geth --identity "MyPrivateBC" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir "$PWD/datadir" --port "30303" --nodiscover --rpcapi "db,eth,net,web3" --networkid 1900 --nat "any" console
# Inside the console to get verify your account, # set a primary account and check its balance, run: > eth.accounts ["0x289a21e11cb10f77f7b17fa39a0f6613ec681293"]
> primary = eth.accounts[0] 0x289a21e11cb10f77f7b17fa39a0f6613ec681293 > eth.getBalance("0x289a21e11cb10f77f7b17fa39a0f6613ec681293") 1000000 # Ctrl+D to exit the console
Kita sekarang telah berhasil membuat blockchain, membuat akun di blockchain dan menentukan satu juta Ethereum.
Jika kamu ingin tahu lebih banyak tentang flag pada perintahgeth
, lihatlah halaman ini. Hanya sebuah kata peringatan bahwa perintah yang ditampilkan pada halaman itu sudah ketinggalan jaman dan mungkin tidak berfungsi. --nodiscover
akan membuat blockchain ini menjadi pribadi dan satu-satunya cara untuk node lain untuk terhubung.
Membuat blockchain milikmu: menghubungkan node statis
Jika kamu menjalankan konsol, node milikmu akan secara otomatis terhubung ke node dengan file genesis dan networkId yang sama. Jika kamu mengikuti instruksi pengaturan yang sama pada mesin lain atau bahkan di direktori lain, kamu harus dapat membuat simpul kedua. Karena node milikmu tidak dapat ditemukan, kamu perlu menentukan node statis milikmu. Node statis adalah simpul yang selalu ingin kamu sambungkan. Node milikmu juga akan secara otomatis membangun kembali koneksi dengan node-node ini jika koneksi terputus.Node statis berisi informasi seperti alamat IP/domain dan port untuk terhubung serta kunci publik dari node untuk terhubung. Kamu perlu membuat file <datadir>/static_nodes.json
dan menambahkan encode URI ke dalamnya. Kamu dapat menemukan URI encode di konsol geth setelah meluncurkannya:
geth console WARN [10–16|14:51:10] No etherbase set and no accounts found as default INFO [10–16|14:51:10] Starting peer-to-peer node instance=Geth/v1.6.7-stable-ab5646c5/darwin-amd64/go1.8.3 INFO [10–16|14:51:10] Allocated cache and file handles database="/Users/ali/Library/Ethereum/geth/chaindata" cache=128 handles=1024 INFO [10–16|14:51:10] Initialised chain configuration config="{ChainID: 1 Homestead: 1150000 DAO: 1920000 DAOSupport: true EIP150: 2463000 EIP155: 2675000 EIP158: 2675000 Metropolis: 9223372036854775807 Engine: ethash}” INFO [10–16|14:51:10] Disk storage enabled for ethash caches dir="/Users/ali/Library/Ethereum/geth/ethash" count=3 INFO [10–16|14:51:10] Disk storage enabled for ethash DAGs dir="/Users/ali/.ethash" count=2 INFO [10–16|14:51:10] Initialising Ethereum protocol versions="[63 62] network=1 INFO [10–16|14:51:10] Loaded most recent local header number=1536 hash=b787b8…7d0da3 td=39056428498300 INFO [10–16|14:51:10] Loaded most recent local full block number=0 hash=d4e567…cb8fa3 td=17179869184 INFO [10–16|14:51:10] Loaded most recent local fast block number=1136 hash=533e56…d0055d td=25929990157171 INFO [10–16|14:51:10] Starting P2P networking INFO [10–16|14:51:12] UDP listener up self=enode://1a84136963764e37cdb5768c23335175b5861419b8d747964e050f06dbfb9349dee0cc4a6e4f0f36c9a312423234e386c32e82c774a0253335cf1f7f6baf70c8@[::]:30303 INFO [10–16|14:51:12] RLPx listener up self=enode://1a84136963764e37cdb5768c23335175b5861419b8d747964e050f06dbfb9349dee0cc4a6e4f0f36c9a312423234e386c32e82c774a0253335cf1f7f6baf70c8@[::]:30303 INFO [10–16|14:51:12] IPC endpoint opened: /Users/ali/Library/Ethereum/geth.ipc Welcome to the Geth JavaScript console! # Ctrl+D to exit
Keluar dari konsol dan kemudian, buat filestatic_nodes.json
— file contoh ditampilkan di bawah ini. Pastikan untuk mengganti [::]
yang ditunjukkan di atas dengan alamat IP atau nama domain mesin milikmu.
[ "enode://17acb9097df2ce730feb3148e21ab6346ffd21a2221c21094993e3eb6fee56cff1c576b447323d52feb79ecb10d303a1f8f4e68c64050b25e6e2840e55b22392@192.168.1.1:30303?discport=0", "enode://publickey@<ipaddress>:30303?discport=0", "enode://publickey@<ipaddress>:30303?discport=0", "enode://publickey@<ipaddress>:30303?discport=0", ]
Pastikan untuk menambahkan URI untuk semua simpul yang ingin kamu sambungkan. Ini termasuk simpul milikmu sendiri. Sekarang ketika kamu menjalankan konsol geth
kamu harus terhubung.
Karena ini bukan lingkungan simulasi, kamu harus mengaktifkan penambangan pada node milikmu, jika tidak, setiap kontrak yang kamu gunakan atau Ethereum yang kamu tukarkan akan tetap dalam status menunggu keputusan.
# In geth console > miner.start(0) > miner.stop()
Terapkan kontrak pintar kamu pada testnet pribadi milikmu
Sekarang kita memiliki pengaturan testnet pribadi kita sendiri. Kita dapat mengkompilasi kontrak pintar kita dan menerapkannya. Dengan menjalankan konsol geth
, arahkan ke direktori proyek kontrak cerdas milikmu. Pertama, periksa file <smart contract project dir>/truffle.js
untuk memastikan kamu memiliki lingkungan yang dikonfigurasi untuk menunjuk testnet pribadi milikmu, lalu compile dan terapkan dengan truffle
truffle compile truffle migrate --network myPrivateTestNet
Nah itu dia! Sekarang kamu memiliki pengaturan testnet pribadi untuk menguji kontrak pintar milikmu!
Artikel ini merupakan repost dari artikel berjudul Getting started with Ethereum as a developer. Baca artikel sumber. Baca juga: Bitcoin, Cryptocurrency dan Mata Yang Digital Lain di Masa Depan (Part-1).
Tinggalkan Komentar