1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ethernaut 「Level.0 Hello Ethernaut」解答例

Last updated at Posted at 2018-07-26

Hello Ethernaut

Level.0 Hello Ethernautでは、Ethernautのゲームの基本について説明されています。

1. Set up MetaMask

まだインストールしていない場合は、Metamaskをインストールしましょう。
インストール後、ネットワークセレクタを使って”Ropsten test network"を選んでください。

2. Open the browser's console

ブラウザのコンソールを開いてください。
コンソールを開くとゲームからのいくつかのメッセージが表示されています。
次のコマンドでプレイヤーのAddressをいつでも確認した出来ます。

player

3. Use the console helpers

次のコマンドで現在のEther残高を確認することができます。

getBalance(player)

コンソールで他にどのような機能があるか調べるには次のコマンドを実行します。

help()

これらはゲームプレイ中に非常に役に立つと思います。

4. The ethernaut contract

コンソールに次のコマンドを入力してください

ethernaut

これはゲームの主なSmartContractです。
コンソールから直接操作することはありませんが、必要になる応じて行うことがあります。

5. Interact with the ABI

ethernautはEthernaut.solをブロックチェーン上にデプロイしたTruffleContractのオブジェクトです
とりわけ、コントトラクトのABIは、Ethernaut.solの所有者など全て公開している。
次のコマンドを入力してください。

ethernaut.owner()

await ethernaut.owner()とすれば、簡単に所有者アドレスを確認できます。

6. Get test ether

ゲームをプレイするには、テスト用Etherが必要です。
簡単にテストネットのEtherを入手するには、MetaMask faucetを利用すると良いでしょう。

7. Getting a level instance

各レベルをプレイするする時、Ethernautコントラクトを直接操作することはありません。
代わりに「level instance」を生成するように依頼します。
これを行うには、各レベルのページの下部にある青色の「Get New Instance」ボタンをクリックします。
押すとトランザクションが生成され、Metamaskから承認を求められますので、「Submit」ボタンを押してトランザクションを実行してください。

8. Inspecting the contract

ethenautコントラクトと同じく、コンソールを使ってABIを調べる事ができます。

9. Interact with the contract to complete the level

ここからレベル情報のメソッドを調べてください。

contract.info()

まずは、書かれているレベル情報メソッドを実行します。

.js
await contract.info()

"You will find what you need in info1()."

infoメソッドを実行すると「info1()に必要なものがみつかります」とある為、info1()を実行することにする

.js
await contract.info1()

"Try info2(), but with "hello" as a parameter."

info2()を試して。でも、”hello”をパラメータとして使ってください。」とあるので、言われた通り実行する

.js
await contract.info2("hello")

"The property infoNum holds the number of the next info method to call."

infoNumプロパティに次に呼び出す情報メソッドの番号が保持されている」とあるのでinfoNum()を実行する。

.js
await contract.infoNum()
 t {s: 1, e: 1, c: Array(1)}
  ▶︎ c: [42]
    e: 1
    s: 1
  ▶︎ __proto__:Object

こちらの数値は浮動小数点数の表記で次の形になるのですが桁が少ないウチはC:の仮数部の値をそのまま読めると思います。

c: 仮数部
s: sign (符号部)
e: exponent(指数部)

この場合、メソッド番号が「42」となるのでinfo42()と実行します

.js
await contract.info42()

"theMethodName is the name of the next method."

コントラクトの「theMethodName」プロパティに次のメソッド名があるのでそのまま実行します。

.js
await contract.theMethodName()

"The method name is method7123949."

次の実行するメソッド名が出ましたのでそのまま実行します

.js
await contract.method7123949()

"If you know the password, submit it to authenticate()."

パスワードが解っているのであれば、authenticate()に送信してください。」とあります。
パスワードを送信するのは上にありましたパラメータを使うのと同じであるので、パスワードを調べます。

.js
await contract

 ▶︎ n {constructor: ƒ, abi: Array(11), contract: u, password: ƒ, infoNum: ƒ, …}

contractの中にpasswordのメソッドがありますので実行します。

.js
await contract.password()

"ethernaut0"

パスワードが判明しましたのでパラメータとしてauthenticate()に送信します。

.js
await contract.authenticate("ethernaut0")

 ▶︎ {tx: "0xb85d8ae3ffb0f3b494badda9fcffa28ea99968868cc64b6889ac2e09f8308230", receipt: {}, logs: Array(0)}

authenticate()はトランザクションを送信する為、Metamaskの承認が促されます。
「SUBMIT」して少しの間トランザクションの処理を待てば、完了となります。
パスワードが間違っている場合は、Revertされますので入力した内容を見直してください。

ここまで行えれば、Level.0 Hello Ethernautの完了です。
黄色い「Submit Instance」ボタンをクリックして完了させてください。
トランザクションが生成される度に、Metamaskの承認を要求されます。都度、忘れずにSubmitを行ってください。

スクリーンショット 2018-07-26 19.27.55.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?