Halo Developer, Yuk Mulai Bekerja dengan Ethereum!

Sebagai seorang developer atau pengembang, salah satu rintangan pertama yang harus diatasi ketika memulai platform baru adalah memahami kerangka dan bagaimana struktur proyek yang akan dikerjakan. Hal ini diikuti dengan memahami cara menyebarkan kode dan mengamankan kode di lingkungan pengujian atau produksi.

Artikel kali ini bertujuan untuk menuntun para pengembang untuk memulai bekerja dengan Ethereum. Kamu tidak perlu memiliki pemahaman tentang Solidity atau cara menulis kontrak cerdas pada titik ini. Itu adalah topik untuk bahasan lain. Artikel ini akan menunjukkan cara untuk:

  • 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.com

Testnets 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.

Kami akan membahas poin kedua dan ketiga dalam posting ini. Posting mendatang akan mencakup penyambungan dan penerapan ke testnet publik dan ke produksi, jadi inuti terus.

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 -goption. npm install npm -g
  • EthereumJs’s testrpc — npm install -g ethereumjs-testrpc
  • Truffle —npm install -g truffle

Validasi bahwa kamu telah menginstal truffle dengan benar dengan menjalankan versi truffle pada konsol atau baris perintahmu.

Itulah syaratnya! Kamu harus memiliki semua yang kamu perlukan untuk memulai sebagai pengembang kontrak cerdas.

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 perintah testrpc -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.

Setelah kamu selesai melakukan ini, langkah selanjutnya adalah menguji kontrak milikmu di testnet pribadimu.

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 gethdengan 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.

Juga patut dicatat bahwa seperti yang disebutkan di pos blog Ethereum ini ada alat python yang tersedia untuk membuat file genesis.json milikmu sendiri.

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).

Leave a Comment

Your email address will not be published. Required fields are marked *