本系列将重点介绍两种函数式编程语言:Rust&Elixir。本篇分享函数式编程的思想和实践。
在这篇文章中将展示Elixir&Rust读取以太坊区块链上工作,例如,Polkadot上的Moonbeam !
Ethereumex & ExABI
我更喜欢 Elixir 的两个存储库是 Ethereumex:用于
首先,让我们将 Ethereumex 添加到 mix.exs 中的 depsand 应用领域! 在 Elixir 中显示 通过代码很容易理解Elixir中的Struct。
gas的机制对新人不友好,所以我们现在可以设置gas_price和gas_limit为一个特定的数字: 在 Rust 中显示 它是 Rust 中的一个类似结构: 现在我们应该处理tx的两个参数: to & data。 “
eth函数的字符串样式抽象为”function_name(param_type1, param_type2,…)” 深入了解encode函数的实现是很好的! FunctionSelector的结构: TypeEncoder.encode 的工作是编译数据,function_selector 和 data_type 转换为数据。 我们要选择的函数是基于响应的类型,我们可以在ABI中获取它: 这是最后一步!只要把上面的功能混合在一起,
Rust 中的调用者 最后一个是调用
}]
Ethereumex 的配置
# mix.exs:
def application do
[
mod: ,
extra_applications: [:logger, :runtime_tools, :ethereumex]
]
end
……
defp deps do
[
{:ethereumex, "~> 0.7.0"}
]
end
Tx结构
}
@gas %
/// from: https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/
let tx = TransactionRequest {
from: accounts[0],
to: Some(accounts[1]),
gas: None, // gaslimit
gas_price: None,
value: Some(U256::from(10000)),
data: None,
nonce: None,
condition: None
};
地址的字符串到二进制
}
def encode(function_signature, data, data_type \\ :input)
# string type of function to function_selector
# then call encode function again with function_selector
def encode(function_signature, data, data_type) when is_binary(function_signature) do
function_signature
|> Parser.parse!()
|> encode(data, data_type)
end
def encode(%FunctionSelector{} = function_selector, data, data_type) do
TypeEncoder.encode(data, function_selector, data_type)
end
iex(5)> ABI.Parser.parse!("baz(uint8)")
%ABI.FunctionSelector{
function: "baz",
input_names: [],
inputs_indexed: nil,
method_id: nil,
returns: [],
type: nil,
types: [uint: 8]
}
end
{
"constant": true,
"inputs": [],
"name": "get",
"outputs": [{
"name": "",
"type": "string" # The response is string!
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
Elixir中的调用者
end
}