※こちらは以下の、CosmWasmのEthan Frey氏によるCosmWasm 1.0のリリースに関する紹介記事を日本語訳したものです。
https://medium.com/cosmwasm/its-showtime-3feb474fe183

CosmWasm 1.0が正式リリースされました。あなたが馴染みのブロックチェーンにも、もうすぐやってくるはずです!

2019年夏、ハッカソンの一プロジェクトとしてスタートしたCosmWasmは、大きなコミュニティに成長し、Defi Llamaによると、スマートコントラクト言語の中で(SolidityとSolanaに次いで)3番目に大きなTVLを保有するまでになりました。
一年以上にわたり、TerraSecret NetworkFetch.aiProvenanceなどのブロックチェーン上で既にCosmWasmは稼働していましたが、私たちCosmWsamの開発チームが考えるセキュリティ、パフォーマンス、ユーザビリティに対する要求は非常に高く、今日まで最終的な正式リリースには至っていませんでした。

The time is here.(しかし、時はやってきました)

v1.0.0-betaのリリースにより、私たちは全てのCosmosチェーンの未来を築くためのプラットフォームを確立します。またv1.0.0-beta以降の、すべての1.xバージョンへの後方互換性と、簡単なアップグレードを保証します
安定し洗練されたAPIと、大幅なパフォーマンスの向上により、DeFi、NFT、ガバナンス、AIなど、勢いのあるエコシステムがしっかりと育つための十分な基盤を提供できるようになりました。

ベータ版という表記はあまり気にしないでください。APIは安定しており、様々なテストネットやメインネットにてテストされています。現在は、10月下旬に行われる正式な監査の結果を待っているところです。監査結果が出て、報告された問題が修正されたら、他の変更を加えずに正式なv1.0.0タグを作成する予定となっています。

CosmWasm v1.0.0-betaにはフルスタックのコードが含まれており、wasmd v0.20.0, cw-plus v0.10.0, cosmjs v0.26.0, cosmos-sdk v0.42.10と互換性があります。wasmdのv1.0.0は間もなくリリースされます。

Why CosmWasm?

CosmWasmはWebAssembly(Wasm)のバイトコードを実行する仕様であり、現在のところ、Rustで開発しなければならないという強い制約が存在しています。それを回避するために、来年の2022年Q2までにGo言語のサポートも検討しています。
これによりコントラクトの開発において、安全でパフォーマンスの高いランタイムが提供され、大規模な開発者コミュニティを持つ確立されたGo言語を用いることで、成熟したツールやテストフレームワークを導入し簡単に利用することができるようになります。

APIは、開発を容易にするために設計されているだけでなく、大半のセキュリティの課題の防ぐように設計されています。
Solidityではシンプルなコントラクトを簡単に書くことができますが、セキュリティホールのない複雑なコントラクトを書くことは非常に困難です。一方、多少学ばなければならないことは増えますが、CosmWasmのアーキテクチャは、Solidityに存在するほとんどのクラスの攻撃を防ぐことができます。
さらに、Rustプログラミング言語は、コンパイル時に多くのコーディングの問題を防いでくれます。そのため、稼働はするけれど、悪用可能でもあるようなコントラクトを作成してしまうというような隙を与えません。

リエントランシーアタックのような悪意のある攻撃以外にも、ビジネスロジックの誤った実装がDeFiハッキングの大きな原因となっています。
私たちは、長年のコンピュータエンジニアリングの経験から、ユニットテスト、BDDテスト、ファズテスト、TDD等のテストが、これらの攻撃やエラーを避けるための最良の方法であると考え、CosmWasmでは、コントラクトを様々なレベルのテストを簡単に行えるようにしています。
例えば、模擬のインプットを用いたコントラクトの単体テストから、複雑な複数のコントラクトにわたるのやり取りをシミュレートしたRustのネイティブテスト、また実行中のブロックチェーン内のコントラクトの統合テストまで、様々なレベルの複雑さに対応しています。ローカルチェーンにてクロスチェーンコントラクトのコールをテストするために、TypeScriptでテストを書くこともできます。

つまり、CosmWasmでは、身近で強力かつ安全な言語を使用して、パフォーマンスが高く安全なスマートコントラクトを書くことができます。これらのスマートコントラクトは、多数の異なるブロックチェーンにデプロイすることができ、さらにIBCを介してブロックチェーン間で通信することもできます。このマルチチェーン・スマートコントラクトの世界の詳細については今後の記事で紹介していきます。

ブロックチェーンへの組み込み

CosmWasmは、強力な標準ライブラリ豊富なコントラクトの例、そしてパフォーマンスとセキュリティに優れたVMを提供しますが、それ自体はブロックチェーンではありません。Cosmos SDKベースのあらゆるブロックチェーンに組み込むことができるモジュールです。

私たちは、スマートコントラクト機能を(dPoS、ガバナンス、IBCを既に持っている)基本的なCosmos-SDKに追加し、すぐに実行できるサンプルブロックチェーンwasmdを提供しています。このスマートコントラクトの機能はすべてx/wasmモジュールに含まれており、他のCosmos SDKアプリに簡単に取り入れることができます。このモジュールは非常に柔軟で、フォークせずに取り入れられるよう設計されています。(なお、現在のwasmdはv0.20.0で、CosmWasm v1.0.0-betaを用いています。wasmdのv1.0.0-betaも、主に内部APIのクリーンアップを行った後、すぐにリリースされる予定です。)

これらスマートコントラクトのモジュールは、単に単独でチェーンに追加するだけでなく、実際にネイティブモジュールと深く統合することができます。デフォルトでは、コントラクトはbank(nativeトークンの残高を管理)、stake、distribution(デリゲートを管理)、および限定的なgovernance(投票)モジュール達とやりとりすることができます。
ほとんどのブロックチェーンでは、カスタムメッセージとクエリが追加することができ、そのチェーン上に存在するコントラクトが、そのチェーン上で動作する任意の他のモジュールを利用できるようになっています。

CosmosのネイティブSDKモジュールかスマートコントラクトかの選択はありません。それぞれのタスクに適した方法を選択し、利用できるようになります。

Next Steps

複数のCosmWasmブロックチェーンにまたがるエコシステム開発を拡大・加速するために、InterWasm DAOの設立を支援しました。CosmWasmベースのブロックチェーンすべてを支援する、公共財のためにグラントを発行していきます。
これにより、確立されたチームの開発が促進され、CosmWasmの開発に熟練した開発者を増やすことがより容易になっていきます。

多くのブロックチェーンがCosmWasm v1.0をローンチすることを計画しています。すでにメインネットで(プレリリース版を使って)稼働しているものに加え、テストネットでCosmWasmをすでに使っており、安定したv1.0のリリースを待っているチェーンがいくつもあります。実際、CosmWasmの開発者であるConfioチームは、Cosmos SDKにスマートコントラクトをより幅広く統合した独自のブロックチェーン、「Tgrade」を計画しています。

私にとって、CosmWasmが複数のブロックチェーン上で稼働することの最もエキサイティングな部分は、コントラクトが多くの異なるチェーンに展開できるということだけではなく、むしろInter Blockchain Communication(IBC)の深い統合です。これはコントラクトが、安価かつトラストレスなリレイヤーだけに依存すれば、他のチェーン上のコントラクトと直接、簡単に通信できることを意味しています。これは、トークンの送信だけでなく、DeFiやNFTを立ち上げるのと同じようなスピードで、チェーン間プロトコルを迅速に開発し、相互に連携させることができるということです。

CosmWasm mediumに購読していただくと、”あなたが次行うプロジェクトにCosmWasmを利用するメリット”を解説する、「CTOのためのCosmWasm」シリーズ配信される予定となっています。また、既にCosmWasmをあなたのチェーンに取り入れたいと思われている方は、GitHubで私たちのコードをチェックし、ドキュメントを読み、私たちのDiscordサーバーに参加してください。サポート致します。

翻訳者感想
Cosmosというブロックチェーンのインターオペラビリティが実現するネットワークの上でこそ動くスマートコントラクトや、それらの連携をこれから見ることができると思うとワクワクしています。11月にはHackAtom VIというComsos公式のハッカソンも開催される予定となっていますので、CosmWasmをとりあえず触って何か作りたいという方はぜひ参加をお勧めします。
みんな一緒にCosmos、CosmWasmの世界を楽しんでいきましょう!


今回は、Cosmosの中でも今後重要な立ち位置になるCosmWasmが主催するイベント、Riddlethonの紹介をさせていただきます。

CosmWasmとは、Cosmos SDK上で動くスマートコントラクトモジュールのことで、今後Cosmos Hubにも統合されることが決まっています。CosmosのチェーンがIBCで繋がった後にIBCの規格を定めるためにもとても重要なものになります。詳細は以下ツイートを参照ください。

Riddlethonとは

まずはじめに、簡単にRiddlethonについて説明します。

RiddlethonとはCosmWasm(confio社)が主催で行う、比較的簡単な課題を解くことによって少額の報酬をもらえる、ブロックチェーンの”なぞなぞイベント”です。

ハッカソンのように、上級の開発者が一定の長い期間に渡ってプロジェクトを作って審査をして、大きな賞金をもらうようなハードルの高いものではなく、(開発の意味で)ブロックチェーン初心者や学生でも気軽に参加ができて、報酬がもらえるものになる予定となっています。

本紹介記事以上に詳細を知りたい方は、3月半ばに公開予定の公式サイトをご覧ください。

Riddlethonの目的

RiddlethonはCosmWasmに触れてCosmWasmを使ってdAppを開発する人、ビジネスを立ち上げる人を増やし、コミュニテイを成長させることを目的としています。

まず最初はコントラクトを作成してデプロイすることも、初心者にとってはハードルが高いと思われるので、既に作成されているコントラクトを実行してみたり、実行されたトランザクションの中身を確認する方法などを学んでもらう機会を提供するつもりです。

このRiddlethonを入り口として、CosmWasmというチェーン間コントラクトに興味をもってもらい、更にCosmWasm公式のドキュメントやワークショプに目を通してもらえれば、自分でCosmos上のdAppを作成できるようになり、更にもっとレベルが上がればビジネスを立ち上げることもできるようになるはずです。

Riddlethonに参加して欲しい人

  • ブロックチェーンの技術を学ぶことに興味がある方
  • Cosmosやwasmベースのチェーンについて技術的に強く興味がある方
  • 報酬のトークンが欲しい方

もちろん、ブロックチェーンやCosmWasmについて既に詳しい方に参加していただくのもOKです。一緒にCosmWasmを使った開発を、コミュニティを盛り上げていきましょう!

Riddlethonの例


5月6日から約一ヶ月かけて開催された、Cosmosテストネットを用いたコンペティション、Game of ZonesにてHashHubチームがLIVENESS REWARDを獲得しました。

まずは、GoZの運営チーム(Zaki Manianさん、Jack Zampolinさん、Jessy Irwinさん)、Tendermintチーム、そしてIBCの開発に関するコントリビュータの皆さまに感謝をお伝えしたいです。ありがとうございました!

以下、Game of Zonesとはどういうもので、具体的に何が行われていたのかを解説していきます

Game of Zonesとは

Game of Zonesとは、Cosmosのインターオペラビリティを実現するために開発されているIBC(Inter-Blockchain Communication)モジュールローンチに備え、テストネットを用いて参加者間でIBCを用いた競争を行うイベントのことです。

GoZでは、それぞれのチームがIBCが組み込まれたバージョンのCosmos SDKを用いたブロックチェーンと、ブロックチェーン同士のパケットを渡すリレイヤーを立ち上げる必要がありました。

HashHubはhongo-3というブロックチェーンを作成して参加しました。Game of Zonesには主に3つのフェーズがあり、それぞれのフェーズにおいて全体で何が行われていたかを紹介します。

Phase1a・1b

Phase1aはそれぞれがリレイヤーの使い方に慣れるためのフェーズとなっていました。運営が用意したGoZ Hubチェーンといかに長い時間接続状態を維持できるかを競うものでしたが、途中それぞれが用意したチェーンが止まってしまう、また接続エラーがでるという報告が各チームからあり、Phase1自体をやり直す形となりました。原因となったバグ詳細は以下で報告されています。

https://goz.cosmosnetwork.dev/2020/05/28/announcing-the-phase-1-winners-of-game-of-zones/

しきり直しとして、再開したPhase1bでは、IBCを利用してチェーン同士の接続状態を長い時間維持し、さらにその中でもより多くのトランザクションを送った(trusting periodを短くした)チェーンが評価される仕組みとなっていました。

Phase1全体での結果は以下から確認することができ、HashHubが立ち上げたブロックチェーン、hongo-3もリストされていることがわかります。
https://github.com/iqlusioninc/relayer/blob/jack/phase1/docs/goz-phase-1-scoring.csv


前回まで

前回、hcdとhccliのコードを書いて、アプリチェーンを実装していく過程において、基盤となるブロックチェーンの基本的なコードを準備しました。

今回はアプリケーション部分である、greeterモジュールを一通り実装していきます。モジュールを作る際にどういうパーツがあるのか、そのファイルは何をしているのかを確認しながら一緒に作成していきます。

今回はとにかくコードを書く作業が中心になりす。
頑張っていきましょう!

Types

まず、types、型についてです。
今回のチュートリアルでは、主にGreetingモジュールを実装していきます。僕らはフルノードに送られる”greeting”(つまるところトランザクション)を作ったり、アップデートしたり、回収するためにこのGreetingモジュールを使うことになります。

そのGreetingモジュールを実装していく上で、必要な型を定義していきましょう。
x/greeter/internal/types/types.go を以下のように作成してください。

たまにコメントで補足説明もしてあるので、一つ一つのコードが何を意味するのか考えながら読んでみると理解が深まるかもしれません。

Module

Cosmos-SDKでできたアプリ専用チェーンは、大半は切り離しができて他のチェーンでも再利用可能なモジュールを組み合わせて構成されています。それらをどう組み合わせるのかの設定に関しては、`app.go`で定義されています。

モジュールというのは、Cosmos SDKにおいてはMessage(ほぼトランザクションみたいなもの)を定義するためのものとなっています。

それぞれ全てのモジュールはAppModule interfaceにしたがって実装される必要がありますが、ここでは簡単のため、その1の時と同様、”starter”パッケージを用いて実装していきます。

x/greeter/module.go を作成してください。
あとでまたこのファイルに戻ってきて編集します。

Handlerはとりあえずわからなくて大丈夫です。

Msgs

Msgsとは、アプリチェーンの状態(ステート)の遷移を定義するものです。こういう言い方をすると少しわかりにくいが、つまるところ、AさんからBさんへの5ATOMの送金の場合、AさんのATOMが5減って、BさんのATOMが5増えるという状態変化が起きており、その変化を起こすためのものをMsgと定義しています。

それってトランザクションじゃない?って声が聞こえてきそうですが、トランザクションはMsgsを内包して、ブロックチェーンネットワークをブロードキャストされるものであり、同義ではありません。Msgsを運んでくれるのがトランザクションってことですね。

一つのモジュールが扱えるMsgは一つだけとなっています。

x/greeter/internal/types/msgs.go を作成してください。

このファイルでは送り主、受取人、”greeting”という情報を持ったメッセージを定義します。

Handler

次はHandler関数についてです。Handler関数は、チェーンに取り込まれたブロックの中にあるトランザクション、の中にあるMsgを全てみて、そのモジュールで実行するべきMsgsがあるかどうかを確認するためのものです。今期の場合、greeterモジュールに関するMsgがないかを確認し、あればそれをgreeterモジュールに渡してチェーンのステートを更新してもらいます。

モジュールの入り口に立って、新しいMsgの中でうちのモジュールで請け負うMsgがないかを判別して、あればモジュールに引き渡してくれるナイスガイです。

x/greeter/handler.go を作成してください。短いです。

Keeper

それぞれのモジュールにいるKeeperは、アプリ専用チェーンにおけるデータストアのCRUDを担当するところ。MVCでいう、いわゆるmodelに対応する部分となる。

今回のHellochainはgreetingモジュールのみを考えるかなりシンプルな実装となっているが、もしより洗練されたアプリチェーンを作る場合は、モジュールが他のモジュールのKeeperと接続し、モジュール間通信を行うこともあるだろう。

それらモジュール間通信を行う際に、必要な関数を定義したのがKeeperとなる。

x/greeter/internal/keeper/keeper.go を作成してください。


はじめに

2019年11月頭、Cosmos SDKのチュートリアルに”hellochain”という新しい項目が追加されました。既に”Nameservice”という別のチュートリアルが存在していましたが、それよりも簡潔で送金機能のみのチェーンを作るためのチュートリアルが、その”hellochain”となります。

今回の記事は、”hellochain”を本家の説 …


前回の記事

前回は、Cosmos SDKとはそもそもどういうものなのか、Cosmos SDKを用いてアプリ専用チェーンを立ち上げるメリットとはなんなのかという話をしました。テックな話は少なかったかと思います。

今回は、前回と少し趣旨が代わりCosmos SDKを用いて作るチェーンはどういう構造になっており、どういう設計であるのかについてお話をしていきます …


Cosmos SDKを用いた、チュートリアルに関する記事を書いてきましたが、チュートリアルだけをやっても、なかなか理解が進まなかったと思います。

この記事は、チュートリアルに入りコードを書く前に、まずCosmos SDKとはそもそもどういう意図で作られたものなのか、またそれらの構造がどうなっているのかを確認することを目的としています。
本記事は、 …


いつも Sanka Network をご利用くださいまして、誠にありがとうございます。

2019 年 7 月から運営してまいりました Sanka Network ですが、サービス運営方針の見直しのため 10 月 30 日をもちましてサービスを一時停止することになりました。これまでご愛顧いただきました皆様には、お手数お掛けして大変申し訳ありませんが、サービス停止日時までに他のバリデータおよび類似サービスにデリゲートを移してくださいますようお願い申し上げます。

  • サービス停止日時: 2019 年 10 月 29 日 (水) 13:00

再開時期は現時点で未定となっております。各通貨個別の注意事項を下記のとおり掲載しますので、こちらもあわせてご確認ください。

注意事項

Cosmos(ATOM)

デリゲートしている ATOM を他のバリデータにデリゲート(re-delegate)するか、デリゲートの中止(undelegate)を行なってください。re-delegate は待ち時間なくデリゲートすることができますが、undelegate には 21 日間の unbonding period という待ち時間が発生しその期間が過ぎるまで再度 delegate することはできませんので、基本的には re-delegate をおすすめします。

特に注意していただきたい点として、Cosmos(ATOM) ではこれまで同様に、バリデータが slash される場合はデリゲータの資産も同時に失われることになります。サービス停止日時以降はバリデータノードを停止するため二重署名による slash は発生しません。ただし、デリゲートの受付停止を完全に行うことはできないため、ノードの稼働状況にかかわらず active なバリデータとしてプロトコルに認められる可能性があり、このケースではダウンタイムのしきい値超過によりデリゲートしている資産の 0.01 % を失う slash が発生する可能性があります。

Tezos(XTZ)

デリゲートの中止を行なってください。プロトコル上ですでに確定した報酬でサービス停止日時以降にその凍結が解除されるものについては、サービス停止日時以降もその凍結解除を待ってから随時お支払いします。

IOST

デリゲートの中止(unvote)を行なってください。unvote を行う際に、その IOST を再度 vote に使用できるようになるまで 7 日間の凍結期間が存在します。

本件に関するお問い合わせは、以下のメールアドレスよりお願いいたします。

support_sanka@hashhub.tokyo

サービス開始より、多くのお客様にご利用いただき、誠にありがとうございました。また、急なサービスの一時停止に伴い、皆様にご迷惑をおかけいたしますことを深くおわび申し上げます。

Sanka Networkをご利用いただき、誠にありがとうございました。


この記事では、iWalletを使用してIOSTABCというウェブサイトから報酬を受け取る方法について解説を行います。

以下がiWalletを使用してIOSTABCから報酬を受け取る流れになります。

1.iWalletからの操作で報酬を確認
2.報酬を得る
3.アカウントで報酬を確認

iWalletからの操作で報酬を確認

iWalletにサインインしてIOSTABCへ移動します。サインインの後にIOSTのマークをクリックしてください。IOSTABCのご自身のアカウントへ移動することを確認してください。https://www.iostabc.com/

報酬を受け取る前にご自身のIOST残高を確認してください。

報酬を得る

IOSTABCの画面で報酬が発生していることを確認してください。サイトのBonusの右側に受け取り可能な報酬額が表示されています。


この記事では、モバイルアプリPurewalletからステーキングした後の報酬の受け取り方について解説を行います。

以下の内容の遷移を動画にしたものがこちらになります。
https://youtu.be/Ycd4sJauYaA

・PureWalletを起動する

モバイルからのステーキングで用いたPureWalletを起動します。

・IOSTを選ぶ

ウォレットメニューの通貨の中からIOSTのところを押してください。

・voteを選ぶ

IOSTのメニューが表示されたら、中断中央の「Vote」を押す。

・Bonus withdrawを押す

右上に出ている”Bonus withdraw”(発生している報酬の合計額)を押す

・Withdrawを押す

下からタブが出てくるため、withdrawボタンを押すことで報酬を引き出すことができます。
もし、発生した報酬をそのままステーキングしたい場合は、Revoteボタンを押してください。

・パスワードを入力する

本人確認のためにウォレットを作った際に設定したパスワードを入力してください。正しいパスワードを入力すると、右下の画像のように、「報酬受け取り完了しました。取引が完了するまで数秒お待ちください。」という表記が出ます。

Takuya Fujita

HashHub Engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store