Genel Bakış: Akıllı Sözleşme Geliştirme için En İyi Araçlar (Web3 ve Özel ethereum Blok Zinciri)

Bu, KC TAM’ın Akıllı Sözleşme Geliştirme için Çeşitli Araçların Kullanımı: Remix, Web3 on TestRPC üzerine yazdığı konuk gönderisidir..

Bu kurulum bir öncekine çok yakın. Aradaki fark, sözleşmeyi TestRPC kullanmak yerine localhost üzerinde çalışan özel bir Ethereum blok zincirine yerleştirmektir..

Düğüm konsolu kısmı neredeyse aynıdır, ancak işler istediğimiz gibi yürümeden önce özel blok zincirinde bazı görevlere ihtiyacımız var. Bunlar blok zinciri başlatma ve blok zincirini çalıştırma, hesap oluşturma ve madenciliktir. Tüm bu görevler önceki oturumda TestRPC tarafından yapılmıştır..

Bölüm 1: Akıllı Sözleşme Geliştirme için En İyi Araçlar 

Akıllı Sözleşme Geliştirme (Bölüm 2)

Hazırlık: Ethereuem Client (geth)

Ethereum istemcisinin birkaç uygulaması vardır. En popüler olanı Go istemcisidir (geth olarak adlandırılır). Geth’in kurulumu bulunabilir İşte. İşletim sisteminize uygun birini seçin.

Genesis.json dosyası

Bu, özel ethereum blok zincirini başlatmak için kullanılan dosyadır. Sadece kullandığımı gösteriyorum.

{

"bozuk para tabanı" : "0x0000000000000000000000000000000000000001",

"zorluk" : "0x20000",

"extraData" : "",

"gasLimit" : "0x4c4b40",

"nonce" : "0x0000000000000042",

"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"zaman damgası" : "0x00",

"tahsis etmek": {},

"yapılandırma": {

"chainId": 15,

"HomesteadBlock": 0,

"eip155Blok": 0,

"eip158Blok": 0

}

}

Buna zaten sahip olmalısın. Lütfen önceki kurulumdaki Hazırlık oturumuna bakın. Düğüm ve Web3 Modülü

Özel Ethereum Blok Zinciri Kurun

1. Blockchain’i başlatın

Burada, kısa bir açıklama ile bu demo için yeterince iyi olan adımları listeliyorum. Daha fazla ayrıntı için bu konuda bulabilirsiniz wiki.

Çalışma dizinini açın. Basitlik adına, düğüm modüllerinin zaten kurulu olduğu önceki oturumda dizini kullanıyoruz. Genesis.json dosyasının burada tutulduğundan emin olun. Burada “chaindata” adlı bir dizin oluşturun. Bu dizin, tüm blok zinciri bilgilerini ve kullanıcı hesaplarını saklayacaktır.

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Şu andan itibaren ekranımızı farklı amaçlar için üçe ayıracağız..

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Şimdi blok zincirini geth init ile başlatın. Blok zincirini sakladığımız dizin için datadir belirtmemiz gerektiğini unutmayın..

blok zinciri

$ geth –datadir = ~ // chaindata / init genesis.json

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Başlatıldıktan sonra, chaindata dizininde iki dizin oluşturulur:

  • geth, blockchain ile ilgili tüm verileri tutar
  • anahtar deposu, kullanıcı hesap bilgilerini tutar (şu anda boş).

2. Blockchain’i başlatın

Blockchain’i şimdi başlatabiliriz.

blok zinciri

$ geth –datadir = ~ // chaindata / s.json

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Blok zinciri çalışıyor ve çalışıyor. Bu terminaldeki blockchain ile etkileşim kurmuyoruz. Kurulumumuz sırasında, bu terminalde bazı yararlı bilgilerin görünmeye devam ettiğini göreceğiz..

3. Geth Console ile Blockchain’e erişin

Geth konsolu üzerinden başlattığımız blockchain’e erişebiliriz. Blok zinciri terminalindeki son satıra dikkat edin: Açık IPC uç noktası var (geth.ipc dosyasının yolu). Konsola erişmek için bu IPC uç noktasını kullanıyoruz.

Geth konsolu sağ alt terminaldedir.

Geth konsolu

$ geth ipc ekle: /chaindata/geth.ipc

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

İşte geth konsolu ve burada geth komutlarını verebiliriz.

4. Demo İçin Bazı Hesaplar Ekleyin

Bu özel Ethereum blok zinciri başlatıldığında hiçbir hesap yoktur. Bu demo için dört tane oluşturacağız.

İlki, sözleşme dağıtımından ve işlev yürütmeden sorumlu temel olanımızdır. Ek olarak, bu hesap madencilikten sorumludur, çünkü özel ethereum blok zincirinde bloğu çıkaracak birine ihtiyacımız var.

Yalnızca gelir paylaşımını göstermek için üç hesap daha oluşturuldu.

Her hesabın açıklama koruması gerektirdiğini unutmayın.

Geth konsolu

$ eth.accounts

$ personal.newAccount () // dört kez tekrarlayın

$ eth.accounts

Ve dizini chaindata / anahtar deposunda kontrol ederseniz, bu dört hesabı da göreceksiniz..

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

İşte hesaplar. Onlara daha sonra başvuracağız.

"0x822539842f2d65f7f6e45ef913ab6eb226cd1056"

"0x57f6b66543c6a5650809f5ba2d3e0e808201fe8b"

"0xf1314446d331a023a95e6e5ff5302ccf7a73adec"

"0x595c788ba7b408afeee4cd4e359568dbcd5a5617"

5. Hesap Bakiyesini Kontrol Edin

Şimdi bu dört adresin hesap bakiyesini kontrol edebiliriz. Şaşırtıcı değil, bu hesaplarda yeni oluşturuldukları için hiçbir eter yok.

Geth konsolu

$ eth.getBalance (eth.accounts [0]) // 1, 2 ve 3 ile tekrarlayın

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

6. Madencilik

Madenciliğin nasıl yapıldığını görmeye hazırız. Özel ethereum blok zinciri, bloğu inşa etmek için madencilik gerektirir. Genesis.json’da çok düşük bir zorluk ayarladığımız için, bir bloğun çıkarılması çok fazla zaman almaz. Blok zincirine bir blok eklendikten sonra, 5 eter [0] hesaplarına ödüllendirilir (buna etherbase veya coinbase hesabı da denir).

İlk blok biraz zaman alabilir. Hesap bakiyesini [0] ve blok zinciri penceresinde (sağ üst terminal) görünenleri inceleyerek madenciliğin iyi çalıştığını anlayacaksınız..

Geth konsolu

$ miner.start ()

$ eth.getBalance (eth.accounts [0])

$ web3.fromWei (eth.getBalance (eth.accounts [0])) // weis’i etere dönüştür

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Tüm eterlerin eth.accounts [0] ‘a gittiğine dikkat edin ve bakiyeyi wei’den eterlere dönüştürmek için web3.fromWei’yi kullanabiliriz. Ve herhangi bir zamanda madenciliği durdurabilir ve başlatabiliriz. Önce onu durdururuz ve daha sonra sözleşmeyi dağıtıp işlevi yürüttüğümüzde başlatabiliriz. (Gerçek hayatta, bazı madenciler işi yapacak ve madencilik yoluyla biraz eter kazanmak istemediğiniz sürece kendi başınıza madenciliğe ihtiyacınız yok.)

Eth.accounts [0] için bazı eterlerimiz var ve bu, sözleşme dağıtımı ve işlevi yürütmek için kullanılabilir. Ve özel blok zincirim kullanıma hazır. Şimdi sözleşme dağıtımına geçiyoruz.

Sözleşmeyi dağıtın

Prosedür, önceki seansta yaptığımızla neredeyse aynı. Ancak, geth konsolunda bazı ek çalışmalar var ve bunu vurgulayacağız.

1. Düğüm Konsolunu Hazırlayın

Düğüm konsolunda, sol taraftaki terminalde, önce düğüm konsoluna erişiyoruz ve özel zincire erişmek için web3 nesnesini tanımlıyoruz.

düğüm konsolu

$ düğüm

> Web3 = gerekli (‘web3’)

> web3 = yeni Web3 (yeni Web3.providers.HttpProvider ("http: // localhost: 8545"))

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

2. Geth Konsolunda RPC’yi açın

Özel blok zincirini başlattığımızda, varsayılan olarak RPC (http: // localhost: 8545 aracılığıyla erişim) kapalıdır. Geth konsolundan açmamız gerekiyor.

Geth konsolu

$ admin.startRPC ()

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Ve blok zinciri terminalinde şu mesajı görebiliriz:

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Bu, düğümden web3’ün blok zincirine RPC aracılığıyla erişebileceği anlamına gelir. Zaten açıldığı için TestRPC için bu gerekli değildir. Blockchain’i başlattığımızda RPC’yi de açabiliriz (–rpc seçeneği ile).

3. Düğüm Konsolunda Blok Zinciri Erişimini Test Edin

Daha önce oluşturduğumuz adresleri doğrulayın.

düğüm konsolu

> web3.eth.accounts

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Geth konsolunda oluşturduğumuz tam adresleri görüyoruz.

4. Denge Kullanışlı İşlevini Kontrol Edin

Aynı checkAllBalances () öğesini yeniden kullanıyoruz. İşte.

function checkAllBalances () {

var i = 0;

web3.eth.accounts.forEach (function (e) {

console.log (" web3.eth.accounts ["+ben+"]: " + e + " tbalance: " + web3.fromWei (web3.eth.getBalance (e), "eter") + " eter");

i ++;

})

};

Bu işlevi düğüm konsoluna kopyalayıp yapıştırmanız yeterlidir. Artık checkAllBalances () işlevini istediğimiz zaman çağırabiliriz ve tüm hesapların bakiyesini ether’de gösterecektir..

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Denge doğru. [0] hesaplarındaki eterler madencilikten kaynaklanmaktadır. Madencilik sırasında bu miktar artmaya devam ettiği için buna değinmeyeceğiz. Şu anda sıfır olan diğer üç hesabın bakiyesini kontrol edeceğiz.

5. Sözleşmeyi dağıtın

Yine daha önce yaptıklarımızı takip ediyoruz. Ve sadece önceki oturumdaki bilgileri kopyalıyorum. Bunları nasıl edindiğim önceki oturuma bakın.

Üç hedef paylaşım hesabını tutan değişken bir adres oluşturun.

düğüm konsolu

> var adresler = [web3.eth.accounts [1], web3.eth.accounts [2], web3.eth.accounts [3]];

> adresler

ABI’ya dayalı olarak gelir paylaşımı için bir sınıf oluşturun.

düğüm konsolu

> var ciruesharingContract = web3.eth.contract ([{"sabit":doğru,"girişler": [],"isim":"yaratıcı","çıktılar": [{"isim":"","tip":"adres"}],"ödenebilir":yanlış,"stateMutability":"görünüm","tip":"işlevi"}, {"sabit":yanlış,"girişler": [],"isim":"öldürmek","çıktılar": [],"ödenebilir":yanlış,"stateMutability":"ödenemez","tip":"işlevi"}, {"sabit":doğru,"girişler": [],"isim":"paydaşlar","çıktılar": [{"isim":"","tip":"uint256"}],"ödenebilir":yanlış,"stateMutability":"görünüm","tip":"işlevi"}, {"sabit":doğru,"girişler": [{"isim":"","tip":"uint256"}],"isim":"hissedarlar","çıktılar": [{"isim":"","tip":"adres"}],"ödenebilir":yanlış,"stateMutability":"görünüm","tip":"işlevi"}, {"sabit":yanlış,"girişler": [],"isim":"shareRevenue","çıktılar": [{"isim":"başarı","tip":"bool"}],"ödenebilir":doğru,"stateMutability":"ödenebilir","tip":"işlevi"}, {"girişler": [{"isim":"adresler","tip":"adres[]"}],"ödenebilir":yanlış,"stateMutability":"ödenemez","tip":"kurucu"}, {"anonim":yanlış,"girişler": [{"indekslenmiş":yanlış,"isim":"_Miktar","tip":"uint256"}, {"indekslenmiş":yanlış,"isim":"_numShareholder","tip":"uint256"}],"isim":"Ödeme","tip":"Etkinlik"}]);

Şimdiye kadar, özel blok zincirinde henüz bir şey konuşmadık. Bu nedenle madenciliğe gerek yoktur. Sözleşme dağıtımı için gaz gereklidir ve bu nedenle bu sözleşmeyi dağıtmak için hesaplar [0] kullandığımız için eth.accounts [0] ‘un kilidini açmamız gerekir. Geth konsolunda yapılır.

Geth konsolu

$ personal.unlockAccount (eth.accounts [0])

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Zaman aşımı nedeniyle hesabın kilidini açmanız istenirse, bunu tekrar yapmanız gerekir..

Artık sözleşmeyi bayt kodu ve gerekli bilgilerle dağıtabiliriz.

düğüm konsolu

> var ciruesharing = gelirsharingContract.new (

adresler,

{

from: web3.eth.accounts [0],

veriler: ‘0x6060604052341561000f57600080fd5b60405161049d38038061049d833981016040528080518201919050506000336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508151600281905550600090505b81518110156100f957818181518110151561009157fe5b906020019060200201516001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808060010191505061007a565b50506103938061010a6000396000f30060606040526004361061006d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302d05d3f1461007257806341c0e1b5146100c757806368eca613146100dc578063ab377daa14610105578063e579a0bd14610168575b600080fd5b341561007d57600080fd5b61008561018a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156100d257600080fd5b6100da6101af565b005b34156100e75760008 0fd5b6100ef610240565b6040518082815260200191505060405180910390f35b341561011057600080fd5b6101266004808035906020019091905050610246565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610170610279565b604051808215151515815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561023e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b565b60025481565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006002543481151561028b57fe5b049150600090505b60025481101561031d576001600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673fffffffffffff fffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561031057600080fd5b8080600101915050610293565b7f9c26340b8d01b4e039192edfd25f4a56ed070d45afe866b8685658b1ed3cd74d34600254604051808381526020018281526020019250505060405180910390a1600192505050905600a165627a7a72305820f0e717ba935e00c43896cc9266a85af91a519061c044503be0a52b93f721d1610029’,

gaz: ‘4700000’

}, function (e, sözleşme) {

console.log (e, sözleşme);

eğer (typeof contract.address! == ‘undefined’) {

console.log (‘Sözleşme çıkarıldı! adres:’ + contract.address + ‘transactionHash:’ + contract.transactionHash);

}

})

0])

Önceki oturumdan farklı olarak, işlemin halihazırda blok zinciri terminalinde gösterildiğini, ancak henüz madencilik yapılmadığını görüyoruz. Düğüm konsolundan henüz mesaj gözlenmedi.

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Şimdi geth konsolunda madenciliği açmamız gerekiyor.

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Madenciliği açtığımızda, çok yakında bazı blokların çıkarıldığını görüyoruz ve düğüm konsolunda da sözleşmenin başarıyla uygulandığını gösteren mesaj çıkıyor..

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

Konuşlandırılmış Sözleşme ile Etkileşim

Önceki oturuma benzer şekilde, konuşlandırılan sözleşmeye nesne gelir paylaşımı yoluyla erişilir.

1. Genel değişkenleri inceleyin

Herkese açık değişkenleri incelemek için gaz gerekmez ve bu nedenle bunu gerçekleştirmek için hesapların ve madenciliğin kilidini açmamız gerekmez..

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

2. shareRevenue () işlevini yürütün

İşlevin yürütülmesi işlem maliyeti ve madencilik gerektirdiğinden, her ikisine de önce geth konsolundan başlayabiliriz.

Fonksiyonu yürüttüğümüz komut aynıdır. Önceki seansta olduğu gibi, komuttan önce ve sonra dengeyi kontrol ediyoruz.

düğüm konsolu

> checkAllBalance ()

> ciruesharing.shareRevenue ({from: web3.eth.accounts [0], değer: web3.toWei (30), gas: 4700000});

> checkAllBalance ()

Akıllı Sözleşme Geliştirme için En İyi Araçlar (2. Bölüm)

İstediğimiz sonucu aldık. [0] hesaplarındaki 30 eter artık [1] hesaplarına [3] hesaplarına dağıtılır. Madencilik nedeniyle yeni eterler geldiği için [0] hesaplarını doğrulayamıyoruz.

Özet

Sözleşmeyi devreye almak ve onunla etkileşim kurmak için yine düğüm konsolu aracılığıyla web3’ü kullandık. Bu sefer bunu özel bir Ethernet blok zincirinde yapıyoruz. Genel süreç, düğüm konsolu tarafında neredeyse aynıdır, ancak tüm süreci tamamlamak için hesap oluşturma, hesap açma, madencilik vb. İle ilgilenmeliyiz. TestRPC tüm bu görevleri gerçekleştirdiği için TestRPC’de bu gerekli değildir.

Bir dahaki sefere bir kullanıcı arayüzü olan MIST üzerinde çalışacağız ve yine özel bir ethereum blok zinciri üzerinde etkileşime gireceğiz..

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