
Halo semuanya! Pada artikel ini saya akan memberi tahu Anda cara meluncurkan kontrak pengumpulan uang pintar untuk ICO Anda di Ethereum dalam 5 menit dan beberapa perintah di terminal. Esai ini berpotensi menghemat puluhan ribu dolar AS, karena setiap programmer - dan bukan programmer juga - akan dapat meluncurkan kontrak pintar yang diaudit dan aman (alih-alih membayar $ 15.000 - $ 75.000 untuk pengembangan). Singkatnya, Anda dapat mengirim uang ke kontrak pintar ini dan menerima token ERC20 untuk itu. Dapat dikatakan bahwa artikel ini adalah kumpulan dari semua pengalaman yang saya peroleh dengan meluncurkan ICO untuk proyek saya.
Di Internet, ini dari Anda sudah penuh dengan artikel tentang kontrak pintar, tetapi segera setelah Anda mulai menulis satu, Anda menemukan fakta bahwa informasi tersebut diulang di mana-mana, dan tidak ada tutorial tentang cara menipu ERC20 Anda, atau sudah usang. Ngomong-ngomong, agar artikel ini tetap relevan, saya akan mencoba menunjukkan tempat-tempat potensial di mana artikel itu menjadi usang (dan bagaimana cara memperbaikinya). Ayo pergi!
Soliditas
Ini adalah nama bahasa utama yang dikembangkan tim kefir untuk meluncurkan kontrak cerdas. Jika Anda seorang programmer, maka cukup periksa
dokumentasi bahasa - itu tidak senonoh sederhana. Omong-omong, mereka membuatnya sederhana sehingga lebih sulit untuk membuat kesalahan dalam menulis kontrak yang cerdas. Jadi
benar-benar programmer
mana pun , setidaknya di tingkat junior, akan dapat mengetahuinya.
Sama sekali tidak ada gunanya membayar sejumlah besar uang kepada pengembang yang tahu soliditas - itu akan menjadi urutan lebih murah untuk melatih pengembang yang ada.
Kontrak yang cerdas
... dan semua yang perlu Anda ketahui tentang mereka. Lewati bagian ini jika Anda bukan seorang programmer. Kontrak yang cerdas adalah sepotong kode. Pada prinsipnya, ini adalah kelas dalam soliditas (OOP, ya), yang memiliki dua jenis fungsi: state-changing dan non-state-changing. Nah, untuk menjalankan fungsi dalam kontrak pintar hanya dengan mengirim kefir untuk itu, Anda harus menandai fungsi ini
payable
.
State adalah gudang data, blockchain, EPT. Kontrak dapat mengubah blockchain (status, penyimpanan) - tetapi untuk mengubah blockchain Anda harus membayar kefir ke penambang. Bagaimana mereka akan membagikan kefir tidak akan dianalisis dalam kerangka artikel ini. Pembayaran kepada penambang untuk menjalankan kode yang diubah negara disebut Gas. Jika seseorang dari luar melempar kefir ke alamat kontrak pintar dengan panggilan ke fungsi yang ditandai
payable
tetapi tidak ditandai
Constant
,
View
atau
Pure
, maka jumlah kefir yang diperlukan untuk pembayaran kepada penambang akan dikurangkan dari jumlah yang dikirim. Biasanya, dalam token ERC20, ini adalah fungsi yang memberikan pengirim token untuk kefir atau mentransfer token dari satu pemegang token ke yang lain.
Dan jika Anda menandai suatu fungsi dalam kontrak dengan kata
Constant
atau
View
(artinya sama, mereka hanya memungkinkan Anda membaca status) atau
Pure
(hal yang sama, Anda bahkan tidak membaca keadaan), maka Anda bahkan tidak perlu mengeluarkan kefir untuk fungsi ini! Saya bahkan akan mengatakan lebih banyak bahwa fungsi-fungsi ini tidak perlu dipanggil oleh transaksi - setelah semua, klien yogurt dapat secara teoritis menjalankannya di rumah - dan tidak ada yang perlu tahu tentang ini lagi (lagi pula, tidak ada yang ditulis ke blockchain).
Dan ada dua hal penting dalam soliditas: multiple inheritance dan function modifiers. Anda juga perlu tahu tentang mereka.
Kontrak pertama yang adil dapat diwarisi secara simultan dari beberapa kelas seperti
TimedCrowdsale
,
CappedCrowdsale
,
MintedCrowdsale
,
Ownable
- pada saat yang sama, fungsi konstruktor juga diluncurkan satu demi satu - tetapi saya akan menjelaskan ini nanti sebagai contoh.
Yang kedua adalah kemampuan untuk membuat fungsi yang kemudian akan dimasukkan ke fungsi lain. Ini seperti enkapsulasi sederhana, hanya sedikit lebih fleksibel - ini sebenarnya
adalah templat fungsi. Ketika Anda membuat pengubah, Anda menulis karakter khusus
_
mana Anda maksud kode fungsi menggunakan pengubah ini. Artinya, pengubah bukan hanya fungsionalitas yang dienkapsulasi yang mengembalikan nilai; ini adalah templat fungsi ketika kode dari pengubah secara harfiah dimasukkan ke dalam fungsi menggunakan pengubah ini.
Mari kita lanjutkan berlatih.
Lingkungan memasak
Jika Anda tidak tahu apa itu Terminal, baca
artikel ini di sini . Jika Anda berada di windows, tentukan sendiri Terminal melalui WLS. Jika Anda sudah terbiasa dengan Terminal, mari kita lanjutkan. Juga, segera
tempatkan sendiri Node.js - itu akan diperlukan untuk langkah selanjutnya. Lebih baik untuk menginstal LTS, tetapi, pada kenyataannya, tidak ada bedanya yang mana dari versi modern dari node untuk menginstal.
Hal pertama yang kami segera instal dan memulai proses sinkronisasi blok adalah
geth
. Singkatnya, ini adalah utilitas yang ditulis dalam Go yang akan memungkinkan kita untuk menjalankan node eter pada komputer lokal dan terhubung ke jaringan tes dan nyata. Anda dapat menginstal
melalui installer , tetapi saya sangat menyarankan Anda segera mendapatkan di Terminal, seperti dijelaskan di
sini . Anda dapat memeriksa apakah standar
geth
Anda
geth
menjalankan perintah di Terminal:
geth version
Jika Anda memuntahkan versi geth - semuanya dalam kerawang, lanjutkan tutorialnya. Jika tidak - buruk, benar; tampaknya Anda harus bercinta dengan Terminal dan sistem operasi Anda - tetapi ini bukan pertama kalinya bagi Anda untuk mengetahuinya. Cara menginstal geth, jalankan perintah di Terminal:
geth --testnet console
Ini akan memulai proses sinkronisasi simpul Anda dengan server uji, yang blok-bloknya dapat dilihat di
sini . Anda dapat memeriksa apakah Anda menyinkronkan dengan jaringan di konsol
geth
dengan
geth
:
eth.blockNumber
Proses sinkronisasi membawa saya dari 1 hingga 4 jam - saat bagaimana. Selain itu, selain memblokir sinkronisasi, Anda juga harus menunggu sinkronisasi keadaan - seringkali lebih lama dari memblokir sinkronisasi. Anda juga dapat menggunakan
geth
--light
flag
--light
- lalu sinkronisasi berlangsung dari beberapa detik hingga satu menit dan Anda masih dapat menggunakan kontrak.
Oke, kami menginstal utilitas pertama - menempatkan yang berikutnya. Kita perlu meletakkan analog
geth
, hanya simulasi blockchain yang sangat lokal -
testrpc
. Ya, kami memiliki
3 blokir :
testrpc
- simulasi blockchain lokal; cepat, tetapi palsu dan hanya disimpan di mesin Andageth --testnet
sudah menjadi blockchain nyata, tetapi Anda tidak akan kehilangan uang di mana Anda bisa mendapatkan kefir dan menguji semua geth --testnet
- geth --testnet
secara gratis- geth - mainnet, main, blockchain nyata, kefir nyata; semua dengan cara dewasa, kesalahan di sini adalah kerugian kefir nyata
Dengan demikian, kita akan memulai kontrak pengujian dengan
testrpc
, kemudian menginstalnya di
geth --testnet
, dan kemudian mengunduhnya langsung di
geth
.
Kami
testrpc
dengan menjalankan perintah berikut:
npm install -g ethereumjs-testrpc
Ya, atau langsung naik dengan truffle, karena sekarang
testrpc
bawah sayap truffle dan disebut
ganache-cli
. Meskipun iblis tahu, semuanya bekerja dengan
testrpc
dengan vanilla
testrpc
. Dan jika berhasil, jangan menyentuhnya, karena saya diajarkan di akademi intergalaksi. Anda juga dapat menjalankannya untuk memverifikasi instalasi dengan mendaftarkan
truffle
di konsol, tetapi test blockchain sudah disinkronkan dengan kami - jangan ganggu.
Nah, sudah menemukan blockchain? Sekarang ada node dan tes bahkan disinkronkan? Kami menempatkan utilitas yang nyaman untuk bekerja dengan kontrak pintar di kefir -
truffle
, dengan perintah berikut:
npm install -g truffle truffle version
Truffle adalah alat yang memungkinkan Anda untuk menjaga kontrak pintar dalam file yang berbeda, mengimpor file lain, dan juga mengkompilasi kode kontrak pintar Anda menjadi satu bytecode besar (tidak dapat dibaca oleh seseorang), itu secara otomatis menemukan
geth
berjalan secara lokal (uji dan nyata ) atau
testrpc
, sebarkan kontrak pintar Anda ke jaringan ini. Selain itu, periksa kode kontrak pintar Anda untuk kesalahan dan transaksi yang baru saja diselesaikan
juga membantu debug . Masthead, singkatnya.
Pada tahap ini Anda harus menginstal:
testrpc
,
testrpc
,
truffle
- jika ada yang hilang atau versi tidak dimuntahkan ke konsol atas permintaan, maka perbaiki ini; jika tidak, Anda tidak akan berhasil.
Juga, saya melemparkan skrip bash sederhana yang akan menginstal semuanya untuk Anda. Disebut seperti ini:
source <(curl -s https://raw.githubusercontent.com/backmeupplz/eth-installer/master/install.sh)
- tapi saya belum pernah mengujinya, jadi saya tidak yakin dengan kinerjanya. Namun, saya akan senang menarik permintaan.
Kontrak Figash
Semuanya telah ditemukan dan ditulis untuk Anda - itu bagus. Bunting kecil akan tetap sama - tetapi saya akan mencoba meminimalkannya untuk Anda. Kami akan menggunakan
kontrak ERC20 yang sudah jadi dari OpenZeppelin - sekarang ini adalah standar industri, mereka telah lulus audit, dan memang mereka semua menggunakan kode mereka. Terima kasih banyak atas kontribusi Anda pada open source.
Buat
cd
ke folder aman dan kemudian tulis:
mkdir contract && cd contract
Dalam folder ini kita akan bekerja. Buat rintisan di sini untuk kontrak pintar kami:
truffle init
Tersandung, jelas. Kami sekarang memiliki dua folder yang sangat penting di mana kami akan naik:
contracts
dan
migrations
. Yang pertama adalah kode untuk kontrak kami, yang kedua adalah kode untuk truffle untuk mengetahui apa yang harus dilakukan ketika menggunakan kontrak ke blockchain.
Selanjutnya, kita perlu mengambil kode kontrak pintar saat ini dari npm dan, pada kenyataannya, memulai proyek itu sendiri:
npm init -y
Nah, kode kontrak pintar dari OpenZeppelin ada di saku kita di folder
node_modules/openzeppelin-solidity/contracts
. Sekarang kita pergi ke folder
contracts
utama, hapus semua file di sana dan tambahkan file
MyToken.sol
dan
MyCrowdsale.sol
- tentu saja, Anda akan memberi nama kontrak Anda secara berbeda. Yang pertama akan menjadi kontrak untuk Token ERC20 kami, dan yang kedua akan menjadi kontrak ICO kami, yang akan menerima kefir dan mendistribusikan
MyToken
orang
MyToken
orang. Artikel ini mungkin sudah usang, tetapi Anda selalu dapat melihat bagaimana OpenZeppelin menyarankan Anda membuat kontrak
dalam repositori mereka . Beginilah tampilan
MyToken.sol
:
pragma solidity ^0.4.23;
Bagus - Anda memiliki kontrak pintar token Anda sendiri (cukup ganti nama dalam konstanta)! Anda dapat melihat
MintableToken
warisan apa dari
MintableToken
- tetapi semuanya sesederhana mungkin di sana. Ini adalah token yang dapat dikeluarkan (dari bahasa Inggris "Mint" - untuk mint), dan hanya pemilik yang memiliki hak untuk menerbitkannya, karena
MintableToken
juga diwarisi dari
Ownable
. Selain itu,
MintableToken
juga mewarisi dari kelas token ERC20 yang ditulis oleh OpenZeppelin, di mana antarmuka ERC20 diimplementasikan:
contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); }
Ya, di sini Anda memiliki seluruh antarmuka ERC20. Apakah ini sulit? Saya kira tidak. Ini memberi Anda kesempatan untuk melihat berapa banyak token yang dikeluarkan, memeriksa saldo alamat, dan mentransfer token ke alamat lain dengan memuntahkan acara transfer untuk pelanggan kefir ringan di jaringan. Dan semua ini Anda dapatkan gratis di
MyToken.sol
berkat karya OpenZeppelin - semuanya hebat.
Dan sekarang mari kita beralih ke bagian utama ICO kita - kita harus menerima kefir dan membagikan
MyToken
!
MyCrowdsale.sol
tampilan
MyCrowdsale.sol
Anda:
pragma solidity ^0.4.23;
Begitu-begitu-begitu, ada apa dengan kita? Apa, bocah, kontrak pintar? Penjualan token kami secara umum mewarisi tiga properti paling populer: memiliki token, yang tidak dapat dikumpulkan lagi; topi lunak, tidak mengumpulkan ester mana yang dikembalikan; waktu awal dan akhir penjualan token. Faktanya, apa lagi yang dibutuhkan untuk kebahagiaan?
Programmer, perhatikan bagaimana konstruktor dari beberapa kelas pewarisan disusun secara berurutan dan mendapatkan argumen dari konstruktor utama
MyCrowdsale
. Kami juga memeriksa bahwa hardkey lebih tinggi dari softkey - Ales Gut! Juga, jangan
MyCrowdsale
parameter yang
MyCrowdsale
di konstruktor
MyCrowdsale
- kami akan meneruskannya pada tahap penyebaran kontrak di truffle.
Itu saja - Anda memiliki kontrak siap pakai token ERC20 Anda sendiri dan bahkan kontrak pintar ICO, yang dikonfigurasi sesuai dengan keinginan Anda dan memberikan token Anda untuk kefir. Juga, didukung oleh semua dompet ERC20 - sebuah kesalahan besar! Mari beralih ke tes dan penerapan manual.
Migrasi
Seperti yang saya katakan sebelumnya, kami akan menguji secara berurutan pada tiga jaringan blockchain, tetapi proses pengujian dengan pena akan selalu sama. Mari kita mulai dengan
testrpc
, kemudian beralih ke
geth --testnet
dan lanjutkan
geth
. Lampu utama Sou, kami baru saja menulis kodenya, mari kita coba kompilasi. Dalam folder proyek, tulis:
truffle compile
Jika semuanya dikompilasi tanpa masalah, maka Anda akan melihat
build
, yang akan berisi krakozyab untuk truffle sehingga itu bisa menyematkan bytecode kontrak pintar Anda di blockchain. Sebelum menerapkan kontrak pintar, kami perlu memberi tahu truffle apa yang harus dilakukan. Penyebaran truffle dari kontrak pintar disebut migrasi - yah, mari kita berpegang pada terminologi ini. Buka
migrations/1_initial_migration.js
dan ubah dengan cara berikut:
const token = artifacts.require("../contracts/MyToken.sol"); const crowdsale = artifacts.require("../contracts/MyCrowdsale.sol"); module.exports = function(deployer, network, accounts) { const openingTime = 1514764800;
Ini adalah file yang sama yang akan digunakan oleh truffle untuk menyebarkan kontrak. Jadi apa yang kita lakukan di sini? Pertama, kami meminta kompilasi
MyToken
dan
MyCrowdsale
. Setelah itu, kami menetapkan konstanta dengan semua argumen ICO kami - mengatur waktu mulai dan berakhir; berapa banyak token yang akan diterima orang untuk 1 ve kefir (0,000000000000000001 et = 1 wei; menetapkan
decimals
menunjukkan berapa banyak pesanan yang diperlukan untuk mendapatkan 1 token yang baru Anda buat); dompet, tempat kefir yang diperoleh dari penjualan akan datang; topi keras dan topi lunak. Harap perhatikan bahwa
openingTime
harus selalu setelah waktu blok saat ini di blockchain - jika tidak, kontrak pintar Anda tidak akan diblokir karena memeriksa kondisi di
TimedCrowdsale
. Saya menginjak rake ini, dan transaksi yang gagal tidak dapat didebet sama sekali. Ubah konstanta ini sesuai keinginan.
Langkah selanjutnya adalah penyebaran kontrak pintar. Tidak ada yang menarik di sini: kami memiliki objek penggunaan yang menyebarkan artefak kontrak pintar dan memberikan argumen di sana. Perhatikan bahwa MyToken
MyToken
terlebih dahulu, dan hanya kemudian
MyCrowdsale
- dan alamat yang pertama dilewatkan di yang kedua sebagai argumen.
Kemudian hal yang paling menarik adalah apa yang tidak mereka tulis di dokumentasi atau di buku. Saat Anda membuat
MyToken
dari dompet, dompet ini menjadi pemilik
MyToken
di superclass yang Dapat
Ownable
- hal yang sama terjadi dengan
MyCrowdsale
. Jika Anda menggali lebih dalam ke dalam
MintableToken
, Anda dapat melihat bahwa hanya
Owner
dapat mencetak koin! Dan siapa pemilik
MyToken
? Itu benar: alamat yang membuatnya kesal. Dan siapa yang akan mengirim permintaan untuk mencetak koin? Benar:
MyCrowdsale
pintar
MyCrowdsale
. Biarkan saya mengingatkan Anda bahwa alamat yang membuat
MyToken
dan
MyCrowdsale
adalah dua alamat yang berbeda.
Oleh karena itu, kami menambahkan langkah penyebaran ketiga non-Ortodoks, di mana alamat yang telah melanggar kontrak (
web3.eth.accounts[0]
) menyebut fungsi
transferOwnership
MyToken
kontrak
MyToken
MyCrowdsale
memiliki
MyToken
dan dapat mencetak koin. Dan
MyCrowdsale
masih di bawah kepemilikan
web3.eth.accounts[0]
- jadi semuanya dibundel.
Catatan tentang web3.eth.accounts[0]
: ketika menggunakan kontrak pintar, pastikan geth atau testrpc memiliki dompet yang benar di web3.eth.accounts[0]
- jangan kehilangan kunci pribadi untuk itu, meskipun ini tidak membahayakan Anda, tetapi tiba-tiba pemilik perlu melakukan sesuatu nanti, tetapi kuncinya sudah tidak ada lagi?
Di testrpc
, sebagai aturan, akun dibuat segera saat startup dan mereka segera dibuka; namun, pada tes dan blockchain udara nyata, ada baiknya membuat akun melalui personal.newAccount()
- kemudian mengisi kembali alamat ini melalui Faucet pada rantai blockchain tes atau kefir nyata pada blockchain nyata. Jangan kehilangan kata sandi dan kunci pribadi Anda.
Anda juga dapat menambahkan dompet yang ada ke akun Anda dengan menelepon web3.personal.importRawKey('pvt_key', 'password')
, tetapi untuk ini Anda perlu memanggil geth
dengan parameter tambahan --rpcapi="db,eth,net,web3,personal,web3"
. Saya pikir Anda akan mengetahuinya.
Pengujian dan Penempatan
Ya, kontraknya sudah siap, migrasi ditulis, tetap hanya untuk digunakan dan diperiksa. Baik
geth
(test dan real) dan
testrpc
dikelola dengan cara yang sama melalui
truffle console
- jadi saya akan menjelaskan metode verifikasi untuk
testrpc
dan hanya memberi tahu Anda cara mengaktifkan
geth
setelahnya. Jadi, kami meluncurkan blockchain kefir lokal uji:
testrpc
Um ... itu saja. Anda mensimulasikan blockchain kefir secara lokal.
Dan untuk menyebarkan ke blockchain tes ether, bukannya perintah ini, Anda akan mendapatkan geth --testnet --rpc
. Dan untuk menggunakan blockchain eter yang sebenarnya, Anda cukup geth --rpc
. Bendera --rpc
diperlukan agar truffle dapat terhubung. Langkah-langkah penyebaran dan pengujian berikut kurang lebih sama untuk ketiga jenis blockchain. Satu-satunya hal adalah bahwa setelah Anda menjalankan tes atau blockchain nyata melalui geth
, itu akan mulai menyinkronkan blok - dan ini bisa memakan waktu hingga 4-5 jam pada koneksi internet yang baik. Sebuah komentar tentang ini adalah di bagian paling awal artikel. Sebelum menggunakan kontrak pintar, saya sarankan menunggu sinkronisasi penuh. Juga, blockchain berbobot di wilayah 60-100 gigabyte, jadi siapkan ruang disk untuk ini.
Selain itu, pastikan web3.eth.accounts[0]
dikunci. Anda biasanya dapat mendaftarkan testrpc
di konsol, yang segera terbuka, atau di jendela Terminal terpisah di konsol, yang terbuka melalui geth console
: eth.unlockAccount(eth.accounts[0], ", ", 24*3600)
- ini akan membuka kunci akun Anda, yang akan membuat kontrak pintar
Sekarang buka jendela Terminal baru (
testrpc
tidak menutup
testrpc
- seharusnya berfungsi) dan menuliskannya di folder proyek:
truffle migrate --reset
Perintah ajaib ini akan mengkompilasi kontrak pintar (yaitu, Anda tidak perlu menulis
truffle compile
setiap kali) dan menyebarkannya ke server mikro blockchain yang ditemukan terbuka secara lokal. Perlu dicatat bahwa jika
testrpc
melakukan ini secara instan, maka test dan blockchains nyata akan memasukkan transaksi dalam blok berikutnya lebih lama. Setelah itu, Anda harus memuntahkan sesuatu seperti ini di konsol:
Using network 'development'. Running migration: 1_initial_migration.js Running step... Replacing MyToken... ... 0x86a7090b0a279f8befc95b38fa8bee6918df30928dda0a3c48416454e2082b65 MyToken: 0x2dc35f255e56f06bd2935f5a49a0033548d85477 Replacing MyCrowdsale... ... 0xf0aab5d550f363478ac426dc2aff570302a576282c6c2c4e91205a7a3dea5d72 MyCrowdsale: 0xaac611907f12d5ebe89648d6459c1c81eca78151 ... 0x459303aa0b79be2dc2c8041dd48493f2d0e109fac19588f50c0ac664f34c7e30 Saving artifacts...
Saya pikir Anda sudah menyadari bahwa konsol memberi Anda alamat kontrak pintar
MyToken
dan
MyCrowdsale
. Itu saja! Kontrak pintar tertanam dalam blockchain yang server mikronya Anda buka. Tetap hanya untuk memverifikasi bahwa token benar-benar didistribusikan kepada pengguna yang mengirim kefir ke kontrak pintar
MyCrowdsale
. Kami menulis yang berikut ini di Terminal untuk memasuki konsol truffle:
truffle console
Kami menulis yang berikut ini di truffle sekarang (tidak ada komentar saja):
Jika demikian, testrpc
Anda dapat segera memeriksa saldo dompet kami lagi, tetapi dalam kasus pengujian dan blockchain nyata, Anda harus menunggu sampai transaksi kami termasuk dalam blokir - biasanya ketika ini terjadi, truffle memberi Anda nomor transaksi. Apakah kamu sudah menunggu? Periksa lagi saldo kami di MyToken
:
Itu saja!
Pertama, uji kontrak Anda pada testrpc
, kemudian pada geth --testnet
, kemudian gunakan pada geth
. Jadi, Anda meluncurkan ICO Anda sendiri! Dan Anda tidak perlu menghabiskan puluhan kilogram untuk audit dan peluncuran. Untuk mengacaukan apa yang diberikan orang-orang dari OpenZeppelin kepada kami sebenarnya sangat sulit. Dan ketika Anda menggunakannya truffle
- inilah bagaimana perkembangan solidaritas umumnya berubah menjadi dongeng. Nah, kecuali untuk kasus-kasus ketika transaksi dibalik selama eksekusi dengan kontrak pintar - debutkan neraka mereka. Tetapi debugging kontrak pintar benar-benar layak untuk artikel terpisah.Kesimpulan
Terima kasih banyak telah membaca hingga akhir artikel ini! Jika saya berhasil menghemat waktu atau uang Anda, atau jika Anda mempelajari sesuatu yang baru dari artikel ini, maka saya akan sangat senang karenanya. Saya juga akan sangat berterima kasih jika Anda berbagi artikel ini dengan teman atau kenalan yang ingin melakukan ICO - hemat $ 75.000 untuk para programmer yang menyedot uang dari pasar crypto seperti parasit, menyalin-menempelkan 25 baris kode yang sama .Semoga sukses dalam mengembangkan kontrak pintar! Masih ada pertanyaan? Saya meminta Anda dalam komentar - Saya akan dengan senang hati menjawab semuanya dan mencoba membantu dengan masalah.Bonus
Tetapi bagaimana jika Anda ingin mengubah logika dengan mana harga pembelian token dipertimbangkan? Tentu saja, Anda dapat mengubahnya dengan benar rate
atau menggunakan salah satu kelas kontrak dari OpenZeppelin, tetapi bagaimana jika Anda menginginkan sesuatu yang lebih mesum? Dalam kontrak pintar, Anda dapat mengganti fungsi getTokenAmount
sebagai berikut: function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { if (block.timestamp < 1533081600) {
Secara umum, ini dapat membuat harga token bergantung pada waktu pembelian - semakin jauh ke dalam hutan, semakin mahal tokennya. Jangan takut untuk bereksperimen dan menulis ulang beberapa fitur kontrak pintar - itu menyenangkan!