使用 eth.rb Ruby 库部署以太坊智能合约完整指南

·

在以太坊生态系统中,Ruby 开发者可以通过 eth.rb 这一高效且持续维护的库来实现智能合约的部署与交互。本文将手把手教你从零开始在 Goerli 测试网上部署一个完整的智能合约,涵盖控制台操作和脚本化执行两种方式。


准备工作

在开始之前,请确保已具备以下环境和资源:


编写智能合约

我们以一个经典的“简易存储合约”为例,功能包括存储一个数值并提供读写方法。

创建 simplestorage.sol 文件,代码如下:

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;
    }

    function get() public view returns (uint retVal) {
        return storedData;
    }
}

控制台部署与交互步骤

安装与初始化

首先克隆 eth.rb 代码库并进入交互控制台:

git clone https://github.com/q9f/eth.rb
cd eth.rb
ruby bin/console

配置节点与账户

在控制台内依次执行以下命令,配置节点连接和账户信息:

client = Eth::Client.create '你的节点URL'
deployer_account = Eth::Key.new priv: '你的私钥'

设置Gas参数

指定部署合约所需的Gas上限和燃料价格:

client.gas_limit = 200000
client.max_fee_per_gas = 41000000000
client.max_priority_fee_per_gas = 40000000000

编译与部署合约

载入合约文件并执行部署:

contract = Eth::Contract.from_file(file: 'contracts/simplestorage.sol')
deployer_account.address
client.deploy_and_wait(contract, sender_key: deployer_account, gas_limit: 200000)

与合约交互

部署成功后,通过以下代码调用合约方法:

simplestorage_abi = '[{"inputs":[],"name":"get","outputs":[{"internalType":"uint256","name":"retVal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"}]'
simplestorage_address = "你的合约地址"
simplestorage_name = "SimpleStorage"
simplestorage_contract = Eth::Contract.from_abi(name: simplestorage_name, address: simplestorage_address, abi: simplestorage_abi)

# 调用 set 方法写入数据
client.transact_and_wait(simplestorage_contract, "set", 1234, sender_key: deployer_account)

# 调用 get 方法读取数据
client.call(simplestorage_contract, "get")

脚本化部署与调用

安装 eth.rb 库

使用 RubyGems 安装最新版本的 eth.rb

gem install eth

部署脚本

创建 deploy.rb,填入以下内容并替换对应参数:

require 'eth'
client = Eth::Client.create '你的节点URL'
deployer_account = Eth::Key.new priv: '你的私钥'
client.max_fee_per_gas = 41000000000
client.max_priority_fee_per_gas = 40000000000
contract = Eth::Contract.from_file(file: 'contracts/simplestorage.sol')
response = client.deploy_and_wait(contract, sender_key: deployer_account, gas_limit: 200000)
puts response

运行脚本:

ruby deploy.rb

交易与查询脚本

类似地,可以编写 transact.rb 进行数据写入,call.rb 进行数据读取,具体代码结构可参考控制台操作部分。

👉 查看实时合约交互工具


常见问题

什么是 eth.rb?

eth.rb 是一个专为 Ruby 开发者设计的以太坊库,支持账户管理、智能合约部署和链上交互,是以太坊生态中对 Ruby 社区的重要补充。

为什么选择 Goerli 测试网?

Goerli 是以太坊常见的测试网络之一,可用于模拟主网环境而不消耗真实资产,适合开发和调试智能合约。

如何获取测试币?

可通过多个测试币水龙头网站申请 Goerli ETH,通常只需输入钱包地址即可获取。

部署合约失败常见原因有哪些?

常见原因包括 Gas 不足、节点连接问题、合约代码错误或账户余额不足。建议逐步检查参数和网络状态。

是否支持其他以太坊兼容链?

eth.rb 理论上支持所有基于 EVM 的区块链,只需切换相应的节点接入地址即可。

如何保护私钥安全?

私钥应存储在环境变量或加密管理工具中,切勿直接写入源码或公开环境。


总结

通过本教程,你学会了如何使用 eth.rb 这一 Ruby 库在以太坊测试网中部署智能合约,并进行基本的读写操作。无论是通过控制台逐行执行,还是通过脚本自动化处理,eth.rb 都为 Ruby 开发者提供了便捷而强大的区块链开发能力。

探索更多 Ruby 与区块链结合的可能性,不妨从今天开始构建你的第一个去中心化应用。