Rust 和 Elixir 如何读取以太坊和其他 EVM 智能合约:函数式编程和区块链
本系列将重点介绍两种函数式编程语言:Rust&Elixir。本篇分享函数式编程的思想和实践。
在这篇文章中将展示Elixir&Rust读取以太坊智能合约的功能。重要的是,该程序不仅在以太坊上工作,而且还在任何支持EVM的区块链上工作,例如,Polkadot上的Moonbeam !@_@
0x01 Ethereumex & ExABI
我更喜欢 Elixir 的两个存储库是 Ethereumex:用于以太坊区块链的 Elixir JSON-RPC 客户端。
&
ExABI:Solidity的应用程序二进制接口(ABI)描述了如何将二进制数据转换为Solidity编程语言能够理解的类型。
ABI 小贴士:
ABI(应用程序二进制接口)是计算机科学中两个程序模块之间的接口。
它与API(应用程序接口)非常相似,API是代码接口的可读表示形式。ABI定义了用于与二进制合约交互的方法和结构,就像API那样,只是在更低的层次上。
.abi文件包含了json格式的函数接口和事件的描述。
这是 HelloWorld.sol 的示例 ABI:
[{
"constant": true,
"inputs": [],
"name": "get",
"outputs": [{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}]
Ethereumex 的配置
首先,让我们将 Ethereumex 添加到 mix.exs 中的 depsand 应用领域!
# mix.exs:
def application do
[
mod: {TaiShang.Application, []},
extra_applications: [:logger, :runtime_tools, :ethereumex]
]
end
……
defp deps do
[
{:ethereumex, "~> 0.7.0"}
]
end
然后,在config/config.exs中。将以太坊协议主机参数添加到配置文件中:
# config.exs
config :ethereumex,
url: "http://localhost:8545" # node url
Tx结构
在 Elixir 中显示
通过代码很容易理解Elixir中的Struct。<