DEV Community

edo1z
edo1z

Posted on

Ethereumの超シンプルなコントラクトをgethコンソールからデプロイする

下記の超シンプルなコントラクトをコンパイル、デプロイして、アクセスしてみます。Windows10のWSL2のUbuntu20.04でやっています。

// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Hoge { function get() public pure returns (string memory){ string memory hoge = "HOGE"; return hoge; } } 
Enter fullscreen mode Exit fullscreen mode

コンパイラは、solcをaptでインストールするか、solc-jsをnpmでインストールするかで、どちらでもコンパイルできました。以下はsolc-jsの場合です。

> solcjs --bin --abi -o bin Hoge.sol 
Enter fullscreen mode Exit fullscreen mode

コンパイルすると下記ファイルができます。

❯ tree . ├── Hoge.sol └── bin ├── Hoge_sol_Hoge.abi └── Hoge_sol_Hoge.bin 
Enter fullscreen mode Exit fullscreen mode

デプロイするネットワークは、goerliにします。ここでgoerliで使えるETHをもらえます。

> geth --goerli --syncmode "light" --verbosity 0 console 
Enter fullscreen mode Exit fullscreen mode

上記を実行するとlightモードでgoerliに接続しつつ、gethコンソールが開きます。以下はgethコンソールでの作業です。利用するアカウントは、ETHを保有しています。アカウントのパスワードは hoge です。

まずは、コンパイルした Hoge_sol_Hoge.binと、Hoge_sol_Hoge.abi の中身をgethコンソールの変数に入れておきます。binの中身の先頭に 0x をつける必要があります。

> bytecode = "0x608060405234801561001057600080fd5b50610182806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d4ce63c14610030575b600080fd5b61003861004e565b604051610045919061012a565b60405180910390f35b606060006040518060400160405280600481526020017f484f47450000000000000000000000000000000000000000000000000000000081525090508091505090565b600081519050919050565b600082825260208201905092915050565b60005b838110156100cb5780820151818401526020810190506100b0565b838111156100da576000848401525b50505050565b6000601f19601f8301169050919050565b60006100fc82610091565b610106818561009c565b93506101168185602086016100ad565b61011f816100e0565b840191505092915050565b6000602082019050818103600083015261014481846100f1565b90509291505056fea264697066735822122097a132140711a9b641222ac8bc84bb5a671eb1c5c2b26d58c564036536ec0bba64736f6c63430008090033" > abi = [{"inputs":[],"name":"get","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"}] 
Enter fullscreen mode Exit fullscreen mode

次に、アカウントのロックを解除して、コントラクトをデプロイします。

> account = eth.accounts[0] > personal.unlockAccount(account, 'hoge') > params = {from:account, data:bytecode, gas:500e3} > tx = eth.sendTransaction(params) 
Enter fullscreen mode Exit fullscreen mode

トランザクションが反映されたかどうかは下記で確認できます。未反映の場合nullが返ります。

> web3.eth.getTransactionReceipt(tx) 
Enter fullscreen mode Exit fullscreen mode

下記でコントラクトの関数を実行できます。

> addr = web3.eth.getTransactionReceipt(tx).contractAddress > Hoge = web3.eth.contract(abi).at(addr) > personal.unlockAccount(account, 'hoge') > web3.eth.defaultAccount = account > Hoge.get.call() "HOGE" 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)