LoginSignup
2
1

More than 1 year has passed since last update.

eth.rb を使ってスマートコントラクトの関数を呼び出す

Last updated at Posted at 2022-12-09

web 3.0 業界は js が多い印象ですが、ruby からも使いたいですね。ここ数年間は、ruby の gem も増えているように見えます。
イーサリアム公式サイトのページに載せている eth.rb を使ってみました。

mint するコード

@key = Eth::Key.new(priv: 'プライベートキー')
@client = Eth::Client.create('イーサリアムの RPC ノードの URL')
@contact = Eth::Contract.from_abi(abi: 'abi の情報', address: 'スマートコントラクトのアドレス', name: 'RBT')
@client.transact_and_wait(@client, 'mint', 'mint 先のアドレス', sender_key: @key)

以前 ethereum.rb を使ったことがありましたが、それほど差が感じられませんでした。

改修した箇所

トランザクションの結果を待つ必要があるため、gem に transact_and_wait メソッドが用意されています。
ただ、タイムアウトの値が固定になっているため、設定できるようにしています。

module Eth
  class Client
    attr_accessor :wait_timeout

    def wait_for_tx(hash)
      # もとの実装の timtout は 300(5分)、かつ、設定できない
      start_time = Time.now
      timeout = wait_timeout || 300
      retry_rate = 0.1
      loop do
        raise Timeout::Error if ((Time.now - start_time) > timeout)
        return hash if is_mined_tx? hash
        sleep retry_rate
      end
    end
  end
end

まとめ

eth.rb だけではなく、Rails 用の gem もいくつあるので、また使ってみていたいです。

2
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
2
1