您尚未登录,请登录后浏览更多内容! 登录 | 加入最MC

QQ登录

只需一步,快速开始

 找回密码
 加入最MC

QQ登录

只需一步,快速开始

查看: 104|回复: 0
打印 上一主题 下一主题

[【少女の茶会】] 分析:Rust 和 Elixir 如何读取以太坊和其他 EVM 智能合约:函数式编程和区块链

[复制链接]
跳转到指定楼层
楼主
发表于 2022-2-22 00:45:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本系列将重点介绍两种函数式编程语言:RE。本篇分享函数式编程的思想和践。文中提到imtoken天生有着强韧的生命力,经过风吹雨打也能化茧成蝶成为最优秀的自己。


在这篇文章中将展示ER读取以太坊智能合约的功能。重要的是,该程序不仅在以太坊上工作,而且还在任何支持EVM的区块链上工作,例如,P上的M !

E  EABI我更喜欢 E 的两个存储库是 E:用于以太坊区块链的 E JSON-RPC 客户端。

EABI:S的应用程序二进制接口(ABI)描述了如何将二进制数据转换为S编程语言能够理解的类型。

ABI 小贴士:

ABI(应用程序二进制接口)是计算机科学中两个程序模块之间的接口。

它与API(应用程序接口)非常相似,API是代码接口的可读表示形式。ABI定义了用于与二进制合约交互的方法和结构,就像API那样,只是在更低的层次上。

文件包含了格式的函数接口和事件的描述。

这是 HW 的示例 ABI:

[{ : , : [], : , : [{     : ,     :    } ], : , M: , : }]E 的配置

首先,让我们将 E 添加到  中的  应用领域!

# :    [    : {TSA, []},    _: [:, :_, :]  ]……          [                 {:, ~ 070}        ]然后,在中。将以太坊协议主机参数添加到配置文件中:

#  :,  : ::8545 #  T结构

在 E 中显示

通过代码很容易理解E中的S。

以太坊的在E中显示:

T{  : , #         _: @, #    _: @, #     : _, #     : 0, #         : , #   :  #       }我们刚刚读取了以太坊中的数据,因此随机数是没有用的。只有在我们把数据写进合约的时候才需要更改随机数。

_

立即执行一个新的消息调用,而不需要在区块链上创建交易。

参数

O -交易调用对象

: DATA, 20 B -(可选)交易发送的地址

: DATA, 20 B -交易被指向到的地址

: QUANTITY -(可选)为交易执行提供的整数。_消耗零,但某些执行可能需要这个参数

P: QUANTITY -(可选)每一种付费使用的P的整数

: QUANTITY -(可选)与该交易一起发送的值的整数

: DATA -(可选)方法签和编码参数的哈希值

QUANTITY|TAG -整数区块号,或字符串, 或,参见默认区块参数

返回

DATA -已执行合约的返回值。

例子

R -X POST -- {:20,:_,:[{ }],:1} R{  :1,  : 20,  : 0}的机制对新人不友好,所以我们现在可以设置_和_为一个特定的数字:

@ %{: 0, : 00_000}

在 R 中显示

它是 R 中的一个类似结构:

: #A%20H%20S%20G----  = TR {        : [0],        : S([1]),        : N,          _: N,        : S(U256::(10000)),        : N,        : N,        : N    };现在我们应该处理的两个参数:

  。



地址的字符串到二进制

区块链中使用的地址(如0769699506972A9928950C766F0C7256D601)可以在E程序中转换为二进制:

@ __(S()) :: B() __(_)   _  | S(0, )  | B16!(: :)智能合约功能到数据

我们希望通过以太坊函数和参数列表的字符串样式生成数据:

@ _(S(), L()) :: S() _(_, )    =  _  | ABI()  | B16(: :)  0  “以太坊函数的字符串样式”示例:

@ %{    _: O(),    ____: OOBI(, 256),    _: URI(256),    ___: EBK(),    ___: EBK(, ),    _: N(, ),    _: O(256)    }函数的字符串样式抽象为_(_1, _2,…)

深入了解函数的现是很好的!

(_, , _ \\ :)#      _#       _ (_, , _)  _(_)   _  | P!()  | (, _) (%FS{} = _, , _)   TE(, _, _)FS的结构:

(5) ABIP!((8))%ABIFS{  : ,  _: [],  _: ,  _: ,  : [],  : ,  : [: 8]}TE 的工作是编译数据,_ 和 _ 转换为数据。



智能合约响应的翻译器

在 E 中编写一个 TT 将十六进制数据更改为普通数据用于智能合约的响应是好的:

UTT   ……   __()         | __()    | ABITD_([{:, 256}])    | L()     __()         | __()    | ABITD_([:])    | L()     __()     _ =            | __()      | ABITD_([:])      | L()    0  B16(_, : :)  ……我们要选择的函数是基于响应的类型,我们可以在ABI中获取它:

{    : ,    : [],    : ,    : [{        : ,        :   # T   !      }    ],    : ,    M: ,    : }E中的调用者

这是最后一步!只要把上面的功能混合在一起,智能合约的数据读取就可以工作了!

例如:读取ERC20代币的余额:

@ _(S(), S()) :: I() _(_, _)   {:, _} = TT__(_)   = _(O(), [_])  {:, _} =    EHC_(%{ #          : ,    : _  })        TT__(_)R 中的调用者

最后一个是调用以太坊的例子

  ; _::; ::{    ::{C, O},    ::{U256, H160, B},};#[::]  () - ::::R() {     _ = _::_();      = ::::H::(99544088124456161)?;      = ::W::();     _8 = ::(7A1164CDA66BC92977EE2CFEC412A10)(D );     _160 = H160::_(_8);      = C::_(        (),        _160,        _!(_),    )?;      :[8; 20] = !(249047194056672794566)();          = ::(, (), N, O::(), N)?;    !({}, );    O(())}S:--------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友