NEAR Stake Wars III için Validatör Kurulum Rehberine hoşgeldiniz. Kuruluma geçmeden önce NEAR Stake Wars hakkında bilgi vermek istiyorum.
NEAR Stake Wars challenge'larını tamamlayarak 4.5 milyon NEAR'dan pay kazanma şansı yakalayabilirsiniz. Ayrıca, görevleri tamamlayan validatörlerin 1 yıl kilitli olmak üzere 50 bin adete kadar NEAR coin kazanma şansı var.
NEAR Stake Wars, NEAR ağında güncel olarak bulunan 100 adet aktif validatör sayısını 300'den fazla validatör sayısına çıkarmak için oluşturulmuştur. Bu sayede NEAR ağının daha merkeziyetsiz ve daha güvenli olması hedeflenmektedir.
Daha fazla detay için NEAR Stake Wars websitesine göz atabilirsiniz. Ayrıca Discord kanallarına katılmanızı öneririm, kurulum sırasında takıldığınız yerlerde diğer validatörler size yardımcı olabilir.
Bu makalede bahsedeceğim NEAR Stake Wars III görevleri için son tarih 11 Ağustos. Bunun için, makaleyi gördüğünüz andan itibaren en erken tarihte başlamanızı öneririm.
Bu dokümanı sağ üstten forklayıp yıldızlamayı unutmayın, GitHub hesabınızda bulunması yararınıza olur. Ayrıca kurulumu yaparken lütfen okuyup anlayarak yapmaya çalışın, gördüğünüz her kodu yapıştırarak ilerlemenizi tavsiye etmem. Ne yaptığınızı bilerek ilerlemeniz sizin açınızdan çok daha sağlıklı olacaktır.
-
- Shardnet cüzdanı oluşturma ve NEAR CLI'yi yükleme
-
- Sunucu kurulumunu yapma ve validatör node'u aktive etme
-
- Staking pool oluşturma ve delege/stake etme işlemleri
-
- Node durumunu görüntülemek için ayarlamalar
Kaynak olarak GitHub'ı kullanacağım, göz atmak isterseniz: Stake Wars: Episode III. Challenge 001
Shardnet cüzdan oluşturma ile başlıyoruz. Öncelikle https://wallet.shardnet.near.org/ adresine gidiyoruz.
Hesap oluştur'a tıklıyoruz.
Burada hesap kimliğimizi oluşturuyoruz. Örneğin, "nearciyim" hesap kimliği kullanılabilir durumda. Hesap Kimliği Oluştur'a tıklıyoruz ve hesabımızı oluşturuyoruz. Makalenin geri kalanında nearciyim hesap kimliğiyle devam edeceğim. Siz orada ne yazdıysanız ona göre gerekli yerleri değiştirirsiniz.
Bu noktada güvenliği nasıl sağlayacağımızı soruyor. Ben genelde güvenlik için anahtar kelimeyi seçiyorum ve onu mutlaka bir yere not alıyorum. Eğer dilerseniz Ledger Donanım Cüzdanı, E-posta ya da Telefon numarası gibi farklı güvenlik önlemlerini de seçebilirsiniz. Anahtar Kelimeyi Güvene Al'ı seçiyoruz ve aşağıdaki mavi Devam Et butonuna tıklıyoruz.
Bu noktada bize verilen kelimeleri mutlaka bir yere kaydediyoruz ve Devam butonuna basıyoruz, bu sadece Shardnet için değil bütün cüzdanlarınız için geçerli. Herhangi bir şifre unutma, telefon bilgisayar kaybetme durumlarında bu kelimeler olmadan cüzdanınıza erişmeniz imkansız.
Burada size kenara not aldığınız kelimelerden rastgele bir tanesini soruyor, doğru cevabı yazıp Doğrula & Tamamla'ya tıklıyoruz.
Cüzdan kurulduğunda bizi böyle bir sayfa karşılıyor, buradaki coinler gerçek değil test coini para kazanmadınız :) Coinlerimizi 3. aşamada kendi validatörümüze stake ederken kullanacağız.
NEAR Stake Wars III için sistem gereksinimleri bu şekilde belirlenmiş. Bizim de buna göre bir sunucu kiralayıp işlemlerimizi bu sunucu üzerinde yapmamız gerekiyor. Ayrıca sunucu temin ettiğimiz şirketin de sağ tarafta listeli olanlardan olmasına dikkat edelim.
Ben bu makale için Digital Ocean üzerinden sunucu kiralayacağım. 2 ay için 100$ ücretsiz sunucu kiralama hakkı veriyor. Linkini buraya bırakıyorum: https://try.digitalocean.com/freetrialoffer/
Yukarıda verdiğim linke gidiyoruz. Mail ve şifremizle kaydoluyoruz.
Kaydolduktan sonra bu noktada bizden kredi kartı ve adres bilgileri istiyor. Burayı doğru bir şekilde dolduruyoruz.
Bizi bu sayfa karşılıyor, Kontrol Panelimizi Keşfedin'e tıklıyoruz ve Kontrol Paneline gidiyoruz.
Görselde görüldüğü gibi 100$ kredimiz aktive oluyor, create diyoruz ve droplet'e tıklıyoruz.
Görseldeki gibi işletim sistemi olarak Ubuntu 20.04 (LTS) x64 seçiyoruz. Aşağı doğru iniyoruz, sunucunun donanımını seçeceğiz.
Soldaki görselde gördüğünüz gibi Regular with SSD'ye tıklıyoz, 48$ olan sunucuyu seçiyoruz ve sistem gereksinimlerinde bulunan 500 GB SSD'yi karşılayabilmek için Add Block Storage'a tıklıyoruz. Açılan kısımda 500 GB'yi seçiyoruz.
Bu kısımlar seçili olduğu şekilde kalabilir, değiştirmenize gerek yok. Dilerseniz sunucunuzun konumunu değiştirebilirsiniz tabi. Aşağı iniyoruz.
Bu noktada sunucumuza root olarak bağlanmak için bir şifre belirliyoruz. Bir şifre belirleyin ve kenara not edin. Makalenin ilerisinde sunucumuza WinSCP ile bağlanmamız gerekecek, bunun için root şifresi bize lazım.
Yine aşağı devam ediyoruz.
Bu noktada sunucumuza bir isim veriyoruz ve aşağıdaki mavi Create Droplet'e tıklıyoruz. Ardından açılan sayfada sunucumuzun oluşturulmasını bekliyoruz.
Sunucumuz oluşturulduktan sonra üzerine tıklıyoruz, altta sunucumuzun özelliklerini gösteren bir kısım açılıyor. Sunucu ismine tekrar tıklıyoruz.
Açılan sayfada Console'a tıklıyoruz ve yeni bir pencerede Terminalimiz açılıyor. Terminalin yüklenmesini bekliyoruz.
Terminalimiz yüklendikten sonra artık node'umuzu kurmaya başlayabiliriz.
Kodları direkt buradan kopyaladıktan sonra terminalde sağ tıklayıp yapıştıra basarak yapıştırabilirsiniz. Sizin için daha kolay ve pratik olur. Bu noktada, ilk olarak NEAR-CLI kurulumu yapacağız. NEAR-CLI, NEAR blokzinciri ile uzaktan prosedür çağrıları (RPC) sayesinde iletişim kuran bir komut satırı arabirimidir.
sudo apt update && sudo apt upgrade -y
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install build-essential nodejs
PATH="$PATH"
Yüklediğimiz Node.js ve npm'nin versiyonlarını kontrol edelim, aldığınız çıktılar girdiğiniz kodun altındaki çıktı gibi olmalı:
node -v
v18.x.x
Örneğin, bu doğru bir çıktı.
npm -v
8.x.x
Eğer node -v kodunu denediğinizde aşağıdaki gibi bir çıktı alıyorsanız, apt install nodejs
kodunu girip tekrar deneyin.
Şimdi NEAR-CLI'yi sunucumuza kurmamız gerekiyor. Dilerseniz NEAR-CLI için GitHub dokümanına şuradan ulaşabilirsiniz: https://github.com/near/near-cli
sudo npm install -g near-cli
Şuan için NEAR-CLI'yi sunucumuza kurduk. Aşağıdaki 3 başlık validatör durumunu kontrol etmek için CLI'yi test eden komutlar. Sıra sıra bunları girerek inceleyebilirsiniz. Fakat bundan önce validatör için Environment düzenlemesi yapmamız gerekiyor.
Environment düzenlemesi için her bir kabuk başlangıcında doğru ağı seçmemiz gerekir.
NEAR ağı için geçerli ağlar şunlardır:
- GuildNet
- TestNet
- MainNet
- Shardnet (biz NEAR Stake Wars için Shardnet'i kullanıyor olacağız)
export NEAR_ENV=shardnet
echo 'export NEAR_ENV=shardnet' >> ~/.bashrc
Validatör tarafından ağa katılım için bir teklif yapılır. Bu teklifin kabul edilmesi için stake edilen miktarın o ağ için geçerli olan minimum seat price'ın üzerinde olması gerekir. Shardnet için gerekli minimum seat price bilgisine buradan ulaşabilirsiniz. Ayrıca validatör listesinde en altlara indiğinizde ağa katılmak için bekleyen proposal (teklif) konumundaki validatörleri görebilirsiniz. Aynı verilere aşağıdaki komutu çalıştırarak da erişebilirsiniz.
near proposals
Aşağıdaki komut güncel dönemdeki ağdaki aktif validatörleri, üretilen toplam blok sayısını, beklenen blok sayısını ve çevrimiçi oranı göstermektedir. Bu komut, validatörlerin sorun yaşayıp yaşamadığını öğrenmek için kullanılır. Ayrıca yine explorer'a giderek de şuan ağdaki aktif görev yapan validatörlere göz atabilirsiniz.
near validators current
Bu komutla birlikte ağa katılmak için teklif yapmış ve teklifi onaylanmış validatörleri görebilirsiniz. Yine explorer'a giderek validatör durumu joining
olanlara bakabilirsiniz.
near validators next
Şu ana kadar sunucumuzu güncelledik, bazı gerekli geliştirici ayarlarını yaptık, Shardnet ağındaki validatörümüz için Environment ayarlarını oluşturduk ve NEAR CLI içerisinde bulunan 3 tane görüntüleme komutuna göz attık. Buradan sonrasında node'umuzu kurmayla ve onu çalıştırmayla devam edeceğiz.
Kaynak olarak: Stake Wars: Episode III. Challenge 002
Sunucumuzun NEAR Stake Wars node kurulumu için yeterli olup olmadığına bakmak isterseniz bu kodu girebilirsiniz, girmenizi tavsiye ederim:
lscpu | grep -P '(?=.*avx )(?=.*sse4.2 )(?=.*cx16 )(?=.*popcnt )' > /dev/null \
&& echo "Supported" \
|| echo "Not supported"
Eğer "Supported" çıktısı alıyorsak sunucumuz yeterlidir, "Not Supported" alıyorsak daha yüksek özellikli bir sunucuya geçiş yapmalısınız.
sudo apt install -y git binutils-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev cmake gcc g++ python docker.io protobuf-compiler libssl-dev pkg-config clang llvm cargo
sudo apt install python3-pip
USER_BASE_BIN=$(python3 -m site --user-base)/bin
export PATH="$USER_BASE_BIN:$PATH"
sudo apt install clang build-essential make
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Böyle bir kod çıkarsa y'ye basıp enter'a basıyoruz.
source $HOME/.cargo/env
git clone https://github.com/near/nearcore
cd nearcore
git fetch
git checkout 0f81dca95a55f975b6e54fe6f311a71792e21698
cargo build -p neard --release --features shardnet
Bu kısımda eğer No such file tarzı bir uyarı veriyorsa yanlış klasördesinizdir, cd nearcore
yazarak tekrar deneyin.
Node'un çalışması için bir çalışma dizini ve konfigürasyon dosyaları gerekir. Bunlar için aşağıdaki kodu çalıştırıyoruz.
./target/release/neard --home ~/.near init --chain-id shardnet --download-genesis
Burada bu tür bir çıktı ile karşılaşacaksınız, karşılaşmadıysanız sorun var demektir.
Yukarıdaki komutla config.json
, genesis.json
, ve node_key.json
dosyalarını oluşturduk.
Bu dosyaların işlevlerini birkaç cümlede anlatmak istiyorum.
-
config.json
dosyası düğümün ağ üzerinde nasıl çalışacağı, eşlerle nasıl iletişim kurulacağı ve fikir birliğine nasıl ulaşılacağı hakkında gerekli bilgileri içeren dosyadır. -
genesis.json
Ağın başlangıç aşamasında başlattığı verileri içeren dosyadır. Blokzincir üzerindeki ilk hesaplar, sözleşmeler, erişim anahtarları ve diğer kayıtlar bu dosyada depolanır. -
node_key.json
Node'umuz için public ve private key'leri içeren dosyadır. Bunun yanında, validatör node'unu çalıştırmak için gerekli olan account_id parametresini de içerir. -
data/
NEAR node'unun güncel durumunun içine yazıldığı klasördür.
Bu noktada, oluşturduğumuz config.json
dosyasını node'umuz için kullanılabilir hale getirmemiz gerekiyor. Bunun için şu 2 değişikliği yapmamız gerekiyor:
-
boot_nodes
Eğer başlatma sırasında kullanılacak önyükleme node'larını belirtmediysek oluşturulanconfig.json
boş bir dizi gösterir. Bu nedenleconfig.json
'u önyükleme node'larını belirten dolu bir diziyle değiştirmemiz gerekiyor. Bunun için de alttaki komutu kullanacağız. -
tracked_shards
Oluşturduğumuzconfig.json
dosyasında bu alan boş. Bunu"tracked_shards": [0]
ile değiştirmemiz gerekecek. Yine bunun için de, alttaki komutu çalıştırmamız yeterli olacaktır.
rm ~/.near/config.json
wget -O ~/.near/config.json https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/config.json
ÖNEMLİ! Bu komut, Shardnet üzerinde Hardfork 18/07/2022'de gerçekleştikten sonra zorunlu bir komut değil. Almasanız da olur. Ben yine de anlatacağım almak isteyenler için.
AWS Cli'yi yüklüyoruz:
sudo apt-get install awscli -y
Snapshot'u indiriyoruz genesis.json
olarak:
cd ~/.near
wget https://s3-us-west-1.amazonaws.com/build.nearprotocol.com/nearcore-deploy/shardnet/genesis.json
Yukarıdaki kod error verirse dağıtım havuzundaki AWS Cli'nin tarihi geçmiş olabilir. Alttaki komutu deneyip tekrar deneyebilirsiniz:
pip3 install awscli --upgrade
Şimdi node'umuzu çalıştırmaya geçiyoruz, buradan itibaren dikkatli ilerleyin WinSCP gibi uygulamalar kullanacağız. Komut üzerinden de yapılabiliyor fakat WinSCP üzerinden dosyaları görerek yapmanızı tavsiye ederim, bu sayede hata payını düşürmüş olursunuz.
Eğer bilgisayarınızda WinSCP yüklü değilse şuradan indirip kurabilirsiniz: https://winscp.net/
cd ~/nearcore
./target/release/neard --home ~/.near run
Burada altını çizdiğim Downloading headers
kısmı %100 olana kadar bekleyin. %100 olduğuna emin olduktan sonra Ctrl+C ile akışı durdurup tekrar komut girmeye devam edebilirsiniz.
near login
Böyle bir soru soruyor, "y" yazıp enter'a basıyoruz.
Burada https://
ile başlayan ve Please authorize
'a kadar olan yeri ( Please authorize
hariç) kopyalıyoruz ve Shardnet cüzdanını oluşturduğunuz tarayıcıya (örneğin Google Chrome) yapıştırıp adrese gidiyoruz.
Bizi böyle bir sayfa karşılıyor, mavi Sonraki
butonuna tıklıyoruz.
Açılan sayfada Bağlan
'a tıklıyoruz.
Hesap kimliğimizi istiyor, görseldeki gibi hesap kimliğimizi yazıyoruz ve Onayla
'ya tıklıyoruz.
Onayladıktan sonra böyle bir sayfa çıkıyor, merak etmeyin herhangi bir şeyi yanlış yapmadınız. Hemen bir altındaki görselde görüldüğü gibi hesap kimliğinizi sunucuda komut olarak yazın ve enter'a basın.
NOT: Komutu girip enter'a bastıktan sonra successfully
yazması gerekiyor. Ben node'u kendim kurarken alttaki gibi bir hatayla karşılaştım arkadaşlar terminal ekranı dondu herhangi bir çıktı vermedi, eğer sizde de böyle olursa ilk olarak terminali kapatıp açıp near login
kısmından itibaren tekrar deneyin eğer yine olmazsa farklı bir cüzdan açıp işlemleri tekrar yapın.
Birkaç denemeden sonra alttaki gibi bir çıktı aldım, başarıyla cüzdanı node'a bağladım.
cat ~/.near/validator_key.json
Muhtemelen bu komutu girdikten sonra No such file or directory
hatası alacaksınız, çünkü validator_key.json
dosyamız daha oluşturulmadı. Şimdi onu oluşturalım. Aşağıdaki komutta <pool_id>
kısmı sizin oluşturmak istediğiniz pool'un adını içeren xx.factory.shardnet.near
oluyor. Buradaki xx
, sizin oluşturmak istediğiniz pool'un adı. Burada pool adınızı cüzdan adınızla aynı yapmayı tavsiye ediyorum. Örneğin hesap adınız spiderman.shardnet.near
ise <pool_id> kısmına spiderman.factory.shardnet.near
yazın.
near generate-key <pool_id>
Bizi böyle bir sayfa karşılıyor.
Sunucu adına yukarıdaki Digital Ocean kontrol paneli'nde NEAR Stake Wars için oluşturduğumuz sunucunu IP'sini yazıyoruz.
Kullanıcı adı'na root, parola kısmına ise droplet'i oluştururken kenara not ettiğimiz root şifremizi yazıyoruz ve Oturum Aç'a tıklıyoruz.
Sağ tarafta böyle bir klasör göreceksiniz, eğer yazısı sönük olan dosyalar sizde görünmüyorsa Ctrl + Alt + H yaparak görünmesini sağlayın. Ve boş bir yere sağ tıklayıp Yenile'ye tıklayın.
.near-credentials
bu dosyanın içine girin.
shardnet
klasörüne girin.
Burada 2 farklı .json
dosyası var. Bunlardan xx.factory.shardnet.near
olana giriyoruz.
Bizi böyle bir dosya karşılıyor. Bu dosyanın içeriğinin tamamını kopyalıyoruz ve dosyayı kapatıyoruz.
Şimdi yukarıdaki root yazısına tıklayarak ana dizine geliyoruz.
Buradaki .near
dosyasının içine giriyoruz.
Boş bir yere tıklayıp yeni dosya oluştur diyoruz.
Dosyamızın ismini validator_key.json
yapıyoruz. Burası önemli dosya ismini doğru yazdığınızdan emin olun.
Ardından bu şekilde boş bir json
dosyası karşımıza çıkıyor. Az önce xx.factory.shardnet.near
dosyasından kopyaladığımız içeriği buraya yapıştırıyoruz.
Yapıştırdığımız içeriğin en sonuna gidip private_key
olan kısmı secret_key
olarak değiştiriyoruz. Sadece bu değişikliği yapın başka hiçbir şey değiştirmeyin ya da silmeyin, validatörünüz çalışmaz. Değişikliği yaptıktan sonra Ctrl + S yapıp kaydediyoruz ve dosyayı kapatıyoruz. WinSCP'yi kapatmayın tekrar lazım olacak.
Terminalimize geri dönüyoruz ve aşağıdaki komutu giriyoruz bu komutun sonuçlanması biraz uzun sürecektir:
target/release/neard run
Eğer yukarıdaki komutu girerken No such file or directory
hatası alırsanız cd nearcore
komutunu girip tekrar deneyin.
Downloading blocks
kısmı %100 olana dek bekliyoruz. %100 olduktan sonra Ctrl + C yapıyoruz.
sudo vi /etc/systemd/system/neard.service
[Unit]
Description=NEARd Daemon Service
[Service]
Type=simple
User=root
#Group=near
WorkingDirectory=/root/.near
ExecStart=/root/nearcore/target/release/neard run
Restart=on-failure
RestartSec=30
KillSignal=SIGINT
TimeoutStopSec=45
KillMode=mixed
[Install]
WantedBy=multi-user.target
Ardından bu pencereden çıkmak için Shift + Z + Z yapıyoruz. Shift'ten elimizi çekmeden iki kere arka arkaya Z'ye basıyoruz.
sudo systemctl enable neard
sudo systemctl start neard
Bir hatadan dolayı servis üzerinde değişiklikler yaparsanız, aşağıdaki komutla reload etmeniz gerekir:
sudo systemctl reload neard
journalctl -n 100 -f -u neard
Eğer aşağıdaki gibi No journal files were found.
hatası alırsanız, systemctl restart systemd-journald.service
kodunu girip tekrar deneyin. Sisteme ufak bir restart atmanız hatayı çözecektir.
Logların görünümü için şu komutları girebilirsiniz. İlk komut logları düzenli ve renkli göstermek için gerekli aracı indirir, ikinci komut logları renkli yapar:
sudo apt install ccze
journalctl -n 100 -f -u neard | ccze -A
-
Node'umuzun tamamen senkronize olması,
-
validator_key.json
dosyamızın oluşturulması, -
validator_key.json
dosyamızın içeriğindeki public_key ile sözleşmenin başlatılması, -
Staking pool sözleşme ID'sinin account_id'miz ile aynı olması,
-
Minimum seat price'ın karşılanması, (Güncel seat price'a buradan bakabilirsiniz),
-
Sözleşmeye ping atılarak teklif sunulması (birazdan geleceğiz ping konusuna),
-
Teklif kabul edildikten sonra validatörün 2-3 epoch (dönem) bekleyip aktif validatör setine girmesi,
-
Aktif validatör setine girildikten sonra imzalanan blok sayısının %90'ın üzerinde olması gereklidir.
-
Sunucumuza gerekli geliştirici araçlarını yükledik (cargo, rust, python pip vb.),
-
Konfigürasyon ve Environment ayarlarını yaptık,
-
GitHub üzerinden node'umuzun çalışması için gerekli olan
nearcore
'u yükledik, -
Yüklediğimiz
nearcore
'u çalıştırdık, -
NEAR Shardnet ağındaki ilk verileri içeren
genesis
dosyasını indirip çalıştırdık, -
config.json
,genesis.json
, venode_key.json
dosyalarımızı oluşturduk, -
Gerekli olmasa da isteyenler için en güncel snapshot(
genesis.json
)'u indirdik, -
Kurduğumuz node'umuzu çalıştırdık,
-
NEAR Shardnet cüzdanımızla node'umuzu eşleştirip validatör oluşturduk.
Kaynak: Stake Wars: Episode III. Challenge 003
NEAR, delegatörlerin fonlarının güvende kalmasını sağlamak için whitelist'e alınmış bir stake sözleşmesine sahip stake havuzu kullanır.
NEAR üzerinde bir validatör çalıştırmak için bir NEAR hesabında stake havuzu dağıtılmalı ve NEAR validatör node'una entegre edilmelidir. Stake havuzu, NEAR hesabına dağıtılmış olan bir akıllı sözleşmedir.
Aşağıdaki komut, stake havuzu factory'sini çağırır ve yeni bir stake havuzu oluşturur. Komutu doğrudan terminale YAPIŞTIRMAYIN. Değiştirmeniz gereken kısımları aşağıda belirttim, onları değiştirdikten sonra komutu çalıştırın.
near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "<pool id>", "owner_id": "<accountId>", "stake_public_key": "<public key>", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="<accountId>" --amount=30 --gas=300000000000000
-
<pool id>
: Bu kısıma stake havuz adımızı giriyoruz. Örneğin, pool'umuzun adıspiderman.factory.shardnet.near
ise bu komutu girerken<pool id>
kısmınaspiderman
yazacağız. -
<accountId>
: Bu kısıma hesap kimliğimizi giriyoruz. Örneğin,spiderman.shardnet.near
-
<public key>
: Bu kısım için WinSCP'yi tekrar açıyoruz. Nasıl bağlanacağınızı yukarıda anlatmıştım.
.near klasörüne giriyoruz.
validator_key.json
dosyamızı buluyoruz ve açıyoruz. Eğer yukarıdaki adımları doğru bir şekilde takip etmenize rağmen bu dosyayı bulamazsanız klasör içerisinde boş bir yere sağ tıklayıp Yenile
diyelim.
ed25519 ile başlayan public.key
kısmını olduğu gibi kopyalıyoruz. Komut içerisindeki yerine yapıştırıyoruz.
-
Reward_fee_fraction olarak belirtilen kısım varsayılan olarak %5 olarak belirtilmiş burada. İsterseniz değiştirebilirsiniz ama değiştirmenize gerek yok. Pool'a stake edenlerden alınacak fee'yi temsil ediyor.
-
<accountId>
: Bu kısıma yine hesap kimliğimizi giriyoruz. Örneğin,spiderman.shardnet.near
Biraz karışık olduğu için ben kendi örnek node'umu oluştururken girdiğim komutu buraya bırakıyorum, buna bakarak kendinizinkini düzenleyin lütfen. Doğrudan yapıştırırsanız çalışmaz.
near call factory.shardnet.near create_staking_pool '{"staking_pool_id": "nearstakewars", "owner_id": "nearstakewars.shardnet.near", "stake_public_key": "ed25519:6UfGtVfCVg1hjiyR8nrrwL7A8vbFxxxxxxxxxxxxx", "reward_fee_fraction": {"numerator": 5, "denominator": 100}, "code_hash":"DD428g9eqLL8fWUxv8QSpVFzyHi1Qd16P8ephYCTmMSZ"}' --accountId="nearstakewars.shardnet.near" --amount=200 --gas=300000000000000
Bu komutu girmeden önce Shardnet cüzdanınızda en az 30 NEAR olduğuna emin olun. 30 NEAR, stake havuzu oluşturabilmek için tek seferde stake etmeniz gereken minimum miktar.
Yukarıdaki komutla birlikte Staking Havuzumuzu oluşturmuş olduk. Havuzunuzu explorer üzerinden kontrol edebilirsiniz. Oluşturduğunuz an proposal
kısmında bulunacaktır. Bir sonraki epoch'ta joining
kısmında, eğer kickout
olmazsanız da bir sonraki epoch'ta active
kategorisine geçecektir.
Oluşturduğunuz havuzun parametrelerini değiştirmek isterseniz, örneğin stake fee değerini değiştirmek isterseniz aşağıda bıraktığım komutu kullanabilirsiniz:
near call <pool_name> update_reward_fee_fraction '{"reward_fee_fraction": {"numerator": 1, "denominator": 100}}' --accountId <account_id> --gas=300000000000000
Yukarıdaki gibi bir çıktı alırsanız değişmiş demektir.
Aşağıdaki komut ile NEAR'larınızı cüzdanınızdan havuzunuza aktarabilir ve stake edebilirsiniz:
near call <staking_pool_id> deposit_and_stake --amount <amount> --accountId <accountId> --gas=300000000000000
-
<staking_pool_id>
: xx.factory.shardnet.near -
<amount>
: stake etmek istediğiniz NEAR miktarı -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Aşağıdaki komut ile NEAR'larınızı havuzunuzdan unstake edebilirsiniz. Fakat bu NEAR'ları doğrudan cüzdanınıza çekmez, bunun için aşağıda bahsettiğim withdraw
başlığına göz atmalısınız:
near call <staking_pool_id> unstake '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
-
<staking_pool_id>
: xx.factory.shardnet.near -
<amount yoctoNEAR>
: unstake etmek istediğiniz NEAR miktarı, yoctoNEAR cinsinden. -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Eğer stake havuzundaki tüm NEAR'ları unstake etmek isterseniz de aşağıdaki komutu kullanın:
near call <staking_pool_id> unstake_all --accountId <accountId> --gas=300000000000000
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Bu işlemi yapabilmek için öncelikle yukarıdan unstake yapmanız gerekir. Unstake periyodu yaklaşık 2-3 epoch içerisinde tamamlanır. Unstake periyodunun ardından YoctoNEAR'larınızı havuzdan cüzdana çekebilirsiniz.
Cüzdana çekme için komut:
near call <staking_pool_id> withdraw '{"amount": "<amount yoctoNEAR>"}' --accountId <accountId> --gas=300000000000000
-
<staking_pool_id>
: xx.factory.shardnet.near -
<amount yoctoNEAR>
: cüzdana çekmek istediğiniz NEAR miktarı, yoctoNEAR cinsinden. -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Unstake edilmiş tüm NEAR'larınızı cüzdana çekmek isterseniz komut:
near call <staking_pool_id> withdraw_all --accountId <accountId> --gas=300000000000000
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Ping işlemi, yeni bir teklif yayınlar ve delegatörleriniz için staking bakiyelerini günceller. Staking havuzu sayesinde kazandığınız ödülleri güncel tutmak için her epoch içerisinde en az bir ping gönderilmelidir.
Ping komutu:
near call <staking_pool_id> ping '{}' --accountId <accountId> --gas=300000000000000
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Toplam bakiyenizi görüntülemek için komut:
near view <staking_pool_id> get_account_total_balance '{"account_id": "<accountId>"}'
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Buradaki o uzun yeşil 2500000xxx şeklinde devam eden sayı 250 NEAR demek oluyor.
Aşağıdaki komut sayesinde stake edilmiş toplam bakiyenizi öğrenebilirsiniz.
Komut:
near view <staking_pool_id> get_account_staked_balance '{"account_id": "<accountId>"}'
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Aşağıdaki komut sayesinde unstake edilmiş toplam bakiyenizi öğrenebilirsiniz.
Komut:
near view <staking_pool_id> get_account_unstaked_balance '{"account_id": "<accountId>"}'
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Aşağıdaki komut sayesinde unstake edilmiş ve cüzdana geri çekebileceğiniz NEAR miktarını öğrenebilirsiniz. Unutmayın, sadece unlocked olmuş NEAR'ları cüzdanınıza geri çekebilirsiniz, unlocked olması için de unstake edildikten sonra 2-3 epoch beklemeniz gerekir.
Komut:
near view <staking_pool_id> is_account_unstaked_balance_available '{"account_id": "<accountId>"}'
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Burada NEAR'larımı yeni unstake ettiğim ve 2-3 epoch geçmediği için NEAR'larım Withdraw için hazır değil, bu yüzden false
çıktısı verdi. True
çıktısı verdiğinde NEAR'larımızı cüzdana çekebiliriz.
Aşağıdaki komut sayesinde staking işleminizi durdurabilirsiniz.
Komut:
near call <staking_pool_id> pause_staking '{}' --accountId <accountId>
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Aşağıdaki komut sayesinde staking işleminizi tekrar başlatabilirsiniz.
Komut:
near call <staking_pool_id> resume_staking '{}' --accountId <accountId>
-
<staking_pool_id>
: xx.factory.shardnet.near -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
-
NEAR Shardnet ağı üzerinde staking havuzu açtık,
-
Açtğımız staking havuzuna cüzdanımızdan NEAR deposit ettik ve bu NEAR'ları havuzumuza stake ettik,
-
Havuzumuza stake ettiğimiz NEAR'ları unstake ettik,
-
Unstake ettiğimiz NEAR'ları cüzdanımıza geri çektik (2-3 epoch bekledikten sonra),
-
NEAR Shardnet ağında delegator olarak ping gönderdik,
-
Staking havuzumuzdaki toplam NEAR bakiyemizi öğrendik,
-
Staking havuzumuzdaki toplam stake / unstake edilmiş NEAR bakiyemizi öğrendik,
-
Staking havuzumuzda stake işlemlerini durdurduk ve tekrar başlattık.
Kaynak: Stake Wars: Episode III. Challenge 004
Bu bölümde kurduğumuz node'un durumunu gözlemlemek için kullanacağımız araçlara göz atacağız. Node'u çalışır durumda tutabilmek adına RPC'nin 3030 numaralı port noktasına kurulması ve kullanılması gerekir.
Log dosyaları kurulumu nereye yaptığınıza bağlı olarak ~/.nearup/logs
dizininde ya da systemd
'de depolanır.
Systemd Komutu:
journalctl -n 100 -f -u neard | ccze -A
Bu komut sayesinde akan logların örneğine ve bu örneğin ne ifade ettiğine aşağıdan bakabilirsiniz.
INFO stats: # 1368392 JAH2UK8ahcAhW859jyMk7NNFVn6bqSAuYNtkcYrZj2o7 Validator | 100 validators 34 peers ⬇ 430 kB/s ⬆ 478 kB/s 0.19 bps 274 Tgas/s CPU: 148%, Mem: 4.88 GB
-
Validator
: Bu kısım sizin aktif bir validatör olduğunuzu gösterir. -
100 Validators
: Bu kısım ağdaki toplam validatör sayısını belirtir. -
34 peers
: Bu kısım sizin bağlandığınız eşlerin sayısını gösterir. Consensus'a erişmek ve doğrulamaya başlayabilmek için en az 3 eşe ihtiyacınız vardır. -
# 1368392
: Bu kısım güncel bloğun nerede olduğunu gösterir.
Ağdaki node'lar, port'u güvenlik duvarında açık olduğu sürece 3030 portu üzerinde RPC hizmetleri sunar. NEAR-CLI, RPC çağrılarını kullanır. RPC'nin genel kullanım alanları validatör istatistiklerini, node versiyonunu, delegatör stake'ini kontrol etmektir. Ayrıca bunun yanında RPC; blokzincir, hesaplar ve sözleşmeler ile etkileşime girmek için de kulanılabilmektedir.
Aşağıda RPC servislerini nasıl kullanacağınızla ilgili birkaç komut bulunuyor, detaylı araştırmak isterseniz buraya göz atabilirsiniz: https://docs.near.org/docs/api/rpc
sudo apt install curl jq
Buradaki gibi devam etmeyi isteyip istemediğimizi soracaktır, Y yazıp enter'a basıyoruz.
curl -s http://127.0.0.1:3030/status | jq .version
Bu tür bir çıktı gelecektir.
near view <your pool>.factory.shardnet.near get_accounts '{"from_index": 0, "limit": 10}' --accountId <accountId>.shardnet.near
-
<your pool>
: xx.factory.shardnet.near kısmındaki xx'i gireceksiniz -
<accountId>
: cüzdan hesap kimliğiniz, xx.shardnet.near
Bu tür bir çıktıya sahip olursunuz.
Bu komut eğer ağdan atıldıysak çalışır, ağdan neden atıldığımızı gösterir. Ayrıca bu komutu ağdan atıldıktan hemen bir sonraki epoch içerisinde girmemiz gerekir, diğer epoch'larda çalışmayacaktır:
curl -s -d '{"jsonrpc": "2.0", "method": "validators", "id": "dontcare", "params": [null]}' -H 'Content-Type: application/json' 127.0.0.1:3030 | jq -c '.result.prev_epoch_kickout[] | select(.account_id | contains ("<POOL_ID>"))' | jq .reason
<POOL_ID>
: xx.factory.shardnet.near
curl -s -d '{"jsonrpc": "2.0", "method": "validators", "id": "dontcare", "params": [null]}' -H 'Content-Type: application/json' 127.0.0.1:3030 | jq -c '.result.current_validators[] | select(.account_id | contains ("POOL_ID"))'
<POOL_ID>
: xx.factory.shardnet.near
Stake havuzunu yeni açtıysanız ve daha henüz aktif validatör değilseniz herhangi bir çıktı almazsınız.
Aktif bir validatöre sahip iseniz bu tür bir çıktı alırsınız. Göründüğü gibi "num_produced_blocks" kısmı 0 görünüyor. Çünkü aktif sette olsanız bile sadece ilk 100 aktif validatör blok üretir. Diğer aktif validatörlerin ürettiği bloklar ise chunk-only olarak adlandırılıyor.
NORMAL ŞARTLARDA BURAYA KADAR OLAN KISMIN CHALLENGE 5 İÇİN YETERLİ OLMASI GEREKİYOR, ANCAK BEN CHALLENGE 6, 8 VE 9 İÇİN DE REHBER OLUŞTURMAYA KARAR VERDİM. BURAYA KADAR GELEN NEAR AĞI TOPLULUĞU ÜYELERİ 6,8 VE 9. CHALLENGE'LARININ ÖDÜLLERİNDEN GERİ KALMASIN İSTEDİM.
PEKİ CHALLENGE 7 NERDE DİYE SORACAK OLURSANIZ, CHALLENGE 7 İÇİN HERHANGİ BİR KOD KOMUT İŞLEMİ YOK. SİZİN KENDİ ÇABALARINIZLA YAPMANIZ GEREKEN BİR DATA SCIENCE GÖREVİ. BU YÜZDEN CHALLENGE 6-8 VE 9 İLE DEVAM EDECEĞİZ. CHALLENGE'LAR HAKKINDA DETAYLI BİLGİ İÇİN: https://github.com/near/stakewars-iii/tree/main/challenges
Node validatöründe ağa otomatik olarak ping gönderen bir cron görevi oluşturacağız. Bu görev sayesinde, belirlediğimiz periyot süresiyle ağa otomatik olarak ping gönderilecektir. Gönderilen ping, NEAR ağı ve node'umuz arasındaki bağlantıyı güncellemeye yarar.
WinSCP'ye tekrar giriyoruz.
Root dizininde sağ tıklayıp yeni klasör oluştur diyoruz.
Klasörün adı logs
olacak.
Oluşturduğumuz klasörün içine giriyoruz.
Boş bir klasör bizi karşılıyor, sağ tıklayıp bu sefer dosya oluştur diyoruz.
Dosyanın adı all.log
olacak şekilde oluşturuyoruz.
Boş dosya karşımıza geliyor, rastgele herhangi bir şeyler yazıyoruz ki dosyayı oluşturabilelim. Ctrl + S yapıp kaydediyoruz ve all.log
dosyasını kapatıyoruz.
Göründüğü gibi dosyamız burada oluştu, şimdi içine tekrar girip yazdığımız rastgele şeyi silip tekrar Ctrl + S yapıyoruz.
Son durumda oluşturduğumuz dosyanın var olması ve içinin boş olması gerekiyor, yazdığınız rastgele şeyin hala dosyada kayıtlı olmadığına emin olun ve öyle devam edin. all.log
dosyamızı kapatıyoruz.
Buradaki root
yazısına tıklayarak root dizinimize geri dönüyoruz.
nearcore
dosyamızın içine giriyoruz.
nearcore
klasörümüzün içinde scripts
klasörünü bulup içine giriyoruz.
Klasörümüzün içinde boş bir yere sağ tıklayıp dosya oluştur diyoruz.
Dosya adını görseldeki gibi dikkatli bir şekilde ping.sh
yapıp tamam diyoruz.
Açılan boş dosyanın içine aşağıdaki kodu olduğu gibi yapıştırıyoruz, fakat üzerinde değişiklik yapacağınız birkaç yer var onları kodun altına bırakıyorum.
#!/bin/sh
# Ping call to renew Proposal added to crontab
export NEAR_ENV=shardnet
export LOGS=/root/logs
export POOLID=<pool_id>
export ACCOUNTID=<account_id>
echo "---" >> $LOGS/all.log
date >> $LOGS/all.log
near call $POOLID.factory.shardnet.near ping '{}' --accountId $ACCOUNTID.shardnet.near --gas=300000000000000 >> $LOGS/all.log
near proposals | grep $POOLID >> $LOGS/all.log
near validators current | grep $POOLID >> $LOGS/all.log
near validators next | grep $POOLID >> $LOGS/all.log
-
<pool_id>
: xx.factory.shardnet.near kısmındaki xx'i gireceksiniz -
<account_id>
: xx.shardnet.near kısmındaki xx'i gireceksiniz
Değişiklikleri yaptıktan sonra Ctrl + S yaparak dosyayı kaydediyoruz ve kapatıyoruz.
crontab -e
Böyle bir ekran açılıyor, Shift + Enter yaparak yorum kısımlarını aşağıya ittiriyoruz ve aşağıdaki kodu buraya yapıştırıyoruz. Bu kod sayesinde node'umuz NEAR Shardnet Ağı'na her 2 saatte bir ping gönderecektir.
0 */2 * * * sh /root/nearcore/scripts/ping.sh
Bu şekilde göründüğüne emin olduktan sonra Ctrl + X yapıyoruz. Kaydetmek isteyip istemediğimizi soruyor, Y diyoruz. Dosya adını soruyor, Enter basıyoruz.
Ardından aşağıdaki kodu girip doğru şekilde kaydedip kaydetmediğimize bakabiliriz:
crontab -l
Böyle bir çıktı alırsanız doğru yapmışsınızdır, devam edebilirsiniz. Böyle bir çıktı almadıysanız crontab -e
kodundan itibaren işlemleri tekrar yapın.
Loglarımızı kontrol etmek için aşağıdaki kodu giriyoruz:
cat /root/logs/all.log
İlk oluşturduğunuz zaman dosyanın için hala boşsa panik yapmayın, ping periyodunu 2 saat yaptığımız için veriler buraya 2 saatte bir düşecektir. Oluşturduktan en az 2 saat sonra üstteki komutu denediğinizde boş bir çıktı almayacaksınız.
Örneğin:
BU GÖREVİ YAPTIKTAN SONRA YOLLAMANIZ GEREKEN BİR FORM VAR. DETAYLARINA https://github.com/thisislexar/stakewars-iii/blob/main/challenges/006.md LİNKİNE GİDEREK AŞAĞIDAKİ ACCEPTANCE CRITERIA'DAN ULAŞABİLİRSİNİZ. YAPMANIZ GEREKEN ŞEY EXPLORER 'A GİDEREK ARAMA KISMINA XX.FACTORY.SHARDNET.NEAR
STAKING HAVUZ ID'NİZİ YAZMAK. BİRAZ AŞAĞI İNDİĞİNİZDE AŞAĞIDAKİ GİBİ TRANSACTION'LAR GÖRECEKSİNİZ.
BU PING TRANSACTION'LARINDAN 3-4 TANE OLDUKTAN SONRA FORM'A BURAYI SS ALIP SUBMITLİYORUZ. AYRICA EXPLORER LİNK'İMİZİ DE SUBMITLEMEMİZ GEREKİYOR. AŞAĞIYA FORM'U BIRAKIYORUM, GİRİP BAKTIĞINIZDA ANLARSINIZ ZATEN.
FORM: https://docs.google.com/forms/d/e/1FAIpQLScp9JEtpk1Fe2P9XMaS9Gl6kl9gcGVEp3A5vPdEgxkHx3ABjg/viewform