Gno プロジェクトの概要
Gnoland は、Cosmos の元創設者である Jae Kwon によって設立された相互運用可能な高並行スマートコントラクトプラットフォームです。開発者は Gno 言語を使用して、Gno チェーン上で高並行スマートコントラクトを構築することができます。Gno 言語は、Go 言語に似たスマートコントラクト開発言語であり、シンプルな構文を持ち、多くの Go 開発者がいるため、Solidity、Rust、Move などの言語と比べて開発者の敷居が大幅に低くなっています。現在、Gnoland はまだ Test2 テストネットの段階にあり、周辺のツールはまだ不十分であり、使用の敷居が高いため、先行体験するには一定の技術力が必要です。また、現時点では体験者が比較的少ないため、競争の機会も大きいです。
基本環境のインストール
このチュートリアルシリーズの操作システム環境は Ubuntu をベースにしていますが、Windows の WSL 版 Ubuntu を使用して自分のコンピュータにデプロイすることもできます。
まず、サーバーの / ディレクトリに /data という新しいディレクトリを作成し、通常のソフトウェア操作に必要な統一されたディレクトリを作成します。これは、異なるソフトウェアにはそれぞれデフォルトのインストールディレクトリがあるため、統一的な管理がないとインストールが混乱する可能性があるためです。
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get install curl build-essential jq git -y
cd /
mkdir data
cd /data
mkdir app software soft source blockchain
ディレクトリの説明
/data/app:ソフトウェアのインストール場所(主に /data/soft ディレクトリにリンクされたソフトウェア)
/data/software:インターネットからダウンロードしたソフトウェアの場所
/data/soft:ソフトウェアのインストール場所(実際のインストールディレクトリ)
/data/source:GitHub からクローンしたソースコードの場所
/data/blockchain:ブロックチェーン関連のツールとサービスの場所
もちろん、ディレクトリ構造は自分の好みに合わせて定義することができます。
Go 開発環境のインストール
cd /data/software
wget https://go.dev/dl/go1.18.5.linux-amd64.tar.gz
tar -xzvf go1.18.5.linux-amd64.tar.gz
tar -xzvf go1.18.5.linux-amd64.tar.gz -C/data/soft
cd /data/soft
mv go go1.18.5
ln -s /data/soft/go1.18.5 /data/app/go
cat << 'EOF' >> /etc/profile
export PATH=$PATH:/data/app/go/bin
EOF
source /etc/profile
go version
Gno ソースコードのダウンロードとコンパイル
cd /data/source
git clone https://github.com/gnolang/gno
cd gno
make
コンパイル時にパッケージのダウンロードとインストールがネットワークのタイムアウトエラーで失敗する場合は、Goproxy プロキシを設定します。具体的な使用方法は以下のコマンドを参照して、再度コンパイルしてください。#
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
または、次のようにプロキシを設定することもできます(これにより、永久に有効になります)。#
echo "export GO111MODULE=on" >> ~/.profile
echo "export GOPROXY=https://goproxy.cn" >> ~/.profile
source ~/.profile
cat << 'EOF' >> /etc/profile
export PATH=$PATH:/data/source/gno/build
EOF
source /etc/profile
ウォレットの作成
gnokey generate
ウォレットアドレスとニーモニックを保存してください。ニーモニックを保存しない場合、ウォレットを復元することはできませんので、ニーモニックを適当に漏らさないように注意してください。
ニーモニックからウォレットを復元する
gnokey add <ウォレット名> --recover
<ウォレット名> は任意のウォレット名に置き換えてください。<> は不要です。後のすべてのコマンドも <> 内の内容を置き換える必要があります。このコマンドではウォレットのパスワードも設定するように求められますので、設定したウォレットのログインパスワードを覚えておいてください。後でパスワードを忘れた場合でも、ニーモニックを使用してウォレットを再度復元することができます。
現在のウォレットリストの表示
gnokey list
テストコインの受け取り
フォーセットウェブサイト https://test2.gno.land/faucet を開きます。
Gnoland ウォレットアドレス(例:g1f68ckw5yy8nccke6kva0mnf3sg2qv4qm8cf0u0)を入力して、テストコインを受け取ります。
現在、フォーセットでは最大 50 GNOT しか受け取ることができません。さらにテストコインを受け取るには、VPN の IP を変更する必要があります。簡単な方法は、VPN の地域を変更することです。フォーセットは IP をチェックして頻繁な受け取りを制限しているためです。
ウォレットの残高を確認する
gnokey query auth/accounts/<ウォレットアドレス> --remote test2.gno.land:36657
登録アカウントの作成
cd
mkdir gnoland
cd gnoland
account_number=$(gnokey query auth/accounts/< ウォレットアドレス> --remote test2.gno.land:36657 | grep account_number| sed's/[^0-9]//g')
echo $account_number
sequence=$(gnokey query auth/accounts/< ウォレットアドレス> --remote test2.gno.land:36657 | grep sequence | sed's/[^0-9]//g')
echo $sequence
登録アカウントの Tx を作成する
ユーザー名は 6 文字以上の小文字でなければなりません。アンダースコアを含めることができます。#
gnokey maketx call <ウォレットアドレス> --pkgpath "gno.land/r/users" --func "Register" --gas-fee 1000000ugnot --gas-wanted 2000000 --send "200000000ugnot" --args ""--args"< ユーザー名 >"--args"" > unsigned.tx
# トランザクション Tx に署名する
gnokey sign <ウォレットアドレス> --txpath unsigned.tx --chainid test2 --number $account_number --sequence $sequence > signed.tx
# トランザクション Tx をブロードキャストする
gnokey broadcast signed.tx --remote test2.gno.land:36657
トランザクションのブロードキャストが成功したら、https://test2.gno.land/r/users でユーザー名を確認できます。
ブロードキャストに失敗した場合は、残高が 204 GNOT に満たない可能性がありますので、5 回のフォーセットを受け取ったことを確認してください。
unsigned.tx と signed.tx のいずれかが間違っている可能性もありますので、最新の account_number と sequence を確認して使用し、unsigned.tx と signed.tx を削除し、上記の 2 つの手順(account_number と sequence の取得、登録ユーザーの tx の作成、その tx に署名、その tx をブロードキャスト)をやり直してみてください。
自分の掲示板を作成する
注意:掲示板名は英字でなければなりません。中文は含めることができません(将来のバージョンでこのバグが修正されることを期待しています)。#
gnokey maketx call <ウォレットアドレス> --pkgpath "gno.land/r/boards" --func "CreateBoard" --gas-fee 1000000ugnot --gas-wanted 10000000 --send 1000000ugnot --broadcast true --chainid test2 --args "< 掲示板名 >" --remote test2.gno.land:36657
作成した掲示板の ID を取得する
BoardID=$(gnokey query "vm/qeval" --data "gno.land/r/boardsGetBoardIDFromName ("< 掲示板名>")" --remote test2.gno.land:36657 |grep data | sed's/[^0-9]//g')
echo $BoardID
スレッドの内容を作成する
cd gnoland
sudo cat <<'EOF' >> /gnoland.md
This is a demo of Gno smart contract programming.
EOF
# スレッドを作成する
gnokey maketx call <ウォレットアドレス> --pkgpath "gno.land/r/boards" --func CreateThread --args $BoardID --args "< スレッド名 >" --args#file "<xxx.md>" --gas-fee 1000000ugnot --gas-wanted 2000000 --chainid test2 --broadcast true --remote test2.gno.land:36657
タスクを受け取る
test2.gno.land
test2.gno.land
お好きなメディア(Twitter、Medium、または Mirror)で、gno.land と gnoland に興味を持つ理由を 250 文字以上の記事で説明し、
以下のコマンドを使用して、記事の URL リンクをコメントとして投稿して報酬を受け取ります。
gnokey maketx call <ウォレットアドレス> --pkgpath "gno.land/r/boards" --func "CreateReply" --gas-fee 1000000ugnot --gas-wanted 2000000 --send ""--broadcast true --chainid test2 --args"1"--args"4"--args"4"--args"< 記事 URL>" --remote test2.gno.land:36657
Gno の紹介記事が成功したら、https://test2.gno.land/r/boards:gnoland/4 で自分の投稿を確認できます。
これで、Gnoland の最初のタスクが完了しました。さらなるタスクをお楽しみに。
この記事が役に立たなかった場合は、私の Twitter https://twitter.com/tujiao をフォローしてください。