月亮链 月亮链
Ctrl+D收藏月亮链
首页 > DYDX > 正文

DATA:Rust 和 Elixir 如何读取以太坊和其他 EVM 智能合约:函数式编程和区块链_DAT

作者:

时间:1900/1/1 0:00:00

本系列将重点介绍两种函数式编程语言:Rust&Elixir。本篇分享函数式编程的思想和实践。

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

Ethereumex&ExABI

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

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

ABI小贴士:

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

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

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

这是HelloWorld.sol的示例ABI:

,"name":"get","outputs":,"payable":false,"stateMutability":"view","type":"function"}]Ethereumex的配置

区块链公司EBI与Al-Rushaid Technologies合作拓展全球业务:4月4日消息,Everything Blockchain Inc.(EBI)今天宣布与Al-Rushaid Technologies(ART)达成合作。两家公司将共同努力,为中东和北非国家提供高度差异化的数据保护解决方案。这份为期五年的分销协议总额为4700万美元,以业绩为基础,分期付款给EBI,ART将成为该公司EB控制平台在几个中东和北非国家的独家代理商,包括沙特阿拉伯、巴林、科威特、阿拉伯联合酋长国、阿曼和埃及。(Globe Newswire)[2023/4/4 13:43:54]

首先,让我们将Ethereumex添加到mix.exs中的depsand应用领域!

#mix.exs:defapplicationdo},extra_applications:]end……defpdepsdoend然后,在config/config.exs中。将以太坊协议主机参数添加到配置文件中:

#config.exsconfig:ethereumex,url:"http://localhost:8545"#nodeurlTx结构

在Elixir中显示

通过代码很容易理解Elixir中的Struct。

以太坊的tx在Elixir中显示:

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

Trust Wallet发布全新网页浏览器扩展钱包:11月14日消息,自主托管多链加密资产移动钱包Trust Wallet宣布推出全新网页浏览器扩展钱包,支持所有的包括以太坊、BNB Chain在内的EVM区块链及Solana,并且可以用于Chrome、Brave、Opera等浏览器。

用户可通过Trust Wallet网页浏览器扩展功能在以太坊、BNB Chain、Polygon 和Avalanche等EVM区块链和Solana上进行代币管理、安全储存、发送和接收,上限为800万种,还可定制添加其它EVM链。[2022/11/14 13:03:58]

eth_call

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

参数

Object-交易调用对象

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

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

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

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

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

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

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

返回

加州房地产公司Caruso Properties接受比特币租金:金色财经报道,加利福尼亚房地产大佬Caruso Properties将接受比特币租金。通过与Gemini的合作,Caruso将允许其零售和商业物业的租户以比特币支付租金。此外,Caruso已将其大约1%的储备资金分配给了比特币。[2021/4/8 19:56:21]

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

例子

//Requestcurl-XPOST--data'{"jsonrpc":"2.0","method":"eth_call","params":,"id":1}'//Result{"id":1,"jsonrpc":"2.0","result":"0x"}gas的机制对新人不友好,所以我们现在可以设置gas_price和gas_limit为一个特定的数字:

在Rust中显示

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

///from:https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/lettx=TransactionRequest{from:accounts,to:Some(accounts),gas:None,//gaslimitgas_price:None,value:Some(U256::from(10000)),data:None,nonce:None,condition:None};现在我们应该处理tx的两个参数:

OKEx Jumpstart三期质押挖矿项目MixTrust(MXT)即将上线:9月23日消息,OKEx Jumpstart第三期质押挖矿项目MixTrust(MXT)将于9月24日14:00(HKT)正式开启。本次OKEx Jumpstart三期质押挖矿将进行规则的进一步优化,所有参与用户须在9月24日14:00-18:00(HKT)期间完成OKB的质押,在质押开放期外不可再质押。

据了解,本次挖矿标的MixTrust(MXT)是继ZYRO、RIO之后又一上线OKEx Jumpstart的质押挖矿项目。此前OKEx Jumpstart质押挖矿的首期项目ZYRO与二期项目RIO先后创下开盘650%、1807.5%的涨幅记录。另据官网数据显示,目前参与质押的OKB已超过1.5亿枚。

公开资料显示,MixTrust(MXT)是基于以太坊的去中心化合成资产发行协议,为合成资产提供去中心化的跨链交易平台,包括无缝资产合成,去中心化的跨链交易和跨链抵押贷款等。[2020/9/23]

to&data。

地址的字符串到二进制

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

eth函数的字符串样式抽象为"function_name(param_type1,param_type2,…)"

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

defencode(function_signature,data,data_type\\:input)#stringtypeoffunctiontofunction_selector#thencallencodefunctionagainwithfunction_selectordefencode(function_signature,data,data_type)whenis_binary(function_signature)dofunction_signature|>Parser.parse!()|>encode(data,data_type)enddefencode(%FunctionSelector{}=function_selector,data,data_type)doTypeEncoder.encode(data,function_selector,data_type)endFunctionSelector的结构:

iex(5)>ABI.Parser.parse!("baz(uint8)")%ABI.FunctionSelector{function:"baz",input_names:,inputs_indexed:nil,method_id:nil,returns:,type:nil,types:}TypeEncoder.encode的工作是编译数据,function_selector和data_type转换为数据。

智能合约响应的翻译器

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

defmoduleUtils.TypeTranslatordo……defdata_to_int(raw)doraw|>hex_to_bin()|>ABI.TypeDecoder.decode_raw()|>List.first()enddefdata_to_str(raw)doraw|>hex_to_bin()|>ABI.TypeDecoder.decode_raw()|>List.first()enddefdata_to_addr(raw)doaddr_bin=raw|>hex_to_bin()|>ABI.TypeDecoder.decode_raw()|>List.first()"0x"<>Base.encode16(addr_bin,case::lower)end……end我们要选择的函数是基于响应的类型,我们可以在ABI中获取它:

{"constant":true,"inputs":,"name":"get","outputs":,"payable":false,"stateMutability":"view","type":"function"}Elixir中的调用者

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

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

=TypeTranslator.hex_to_bytes(addr_str)data=get_data("balanceOf(address)",){:ok,balance_hex}=Ethereumex.HttpClient.eth_call(%{#thetxisencapsulatedbyethereumex.data:data,to:contract_addr})TypeTranslator.data_to_int(balance_hex)endRust中的调用者

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

externcratehex;usehex_literal::hex;useweb3::{contract::{Contract,Options},types::{U256,H160,Bytes},};#asyncfnmain()->web3::contract::Result<()>{let_=env_logger::try_init();lethttp=web3::transports::Http::new("https://ropsten.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161")?;letweb3=web3::Web3::new(http);letaddr_u8=hex::decode("7Ad11de6d4C3DA366BC929377EE2CaFEcC412A10").expect("Decodingfailed");letaddr_h160=H160::from_slice(&addr_u8);letcontra=Contract::from_json(web3.eth(),addr_h160,include_bytes!("../contracts/hello_world.json"),)?;//letacct:=hex!("f24ff3a9cf04c71dbc94d0b566f7a27b94566cac").into();letresult=contra.query::("get",(),None,Options::default(),None).await?;println!("{}",result);Ok(()。Source:https://hackernoon.com/how-rust-and-elixir-read-ethereum-and-other-evm-smart-contracts-functional-programming-and-blockchain

标签:DATAATADATIONData LakeDATA币DATA币CryptoLion

DYDX热门资讯
DES:DeSo推出5000万美元的Octane Fund,专注于去中心化社交媒体生态系统_ETF

据CoinDesk10月5日报道,由社交媒体网站BitClout的创始人创立的区块链DeSo的基金会公布了一项5000万美元的基金,以支持去中心化社交媒体生态系统的发展.

1900/1/1 0:00:00
WEB:收藏!关于Web3的有效学习资源汇总_WEB3

原标题:《关于Web3的有用资源》Web3将继续存在,而教育将成为将新人带入这个空间的更大驱动力。特别是在开发和用户入门方面,越来越多的人开始尝试DAO贡献和学习.

1900/1/1 0:00:00
NFT:波卡生态项目UniArts的NFT浏览器获得Web3 Grant_Earthcrypt Token

巴比特讯,波卡生态项目UniArtsNetwork的NFT浏览器UniScan被Web3foundation授予grant,并且提交的代码已经通过了Milestone1审核.

1900/1/1 0:00:00
WEB:a16z合伙人解释为什么Web3很重要:使网络参与者团结起来朝着共同的目标共同努力_Green Environmental chain

巴比特讯,10月8日,a16z合伙人ChrisDixon发表最新的观点,为什么Web3很重要?ChrisDixon介绍说,现在正处于web3时代的开端.

1900/1/1 0:00:00
加密货币:加利福尼亚被评为美国加密货币就绪度最高的州_比特币现在一枚多少钱

据Techyno9月20日消息,根据评论网站CryptoHead的最新行业研究,由于加密货币ATM的激增以及加州人口对数字资产的兴趣日益浓厚,加利福尼亚已成为美国加密货币就绪度最高的州.

1900/1/1 0:00:00
ARA:巴比特午间要闻一览_KaraStar

1.国际清算银行行长:大型科技公司的大型网络可能会导致稳定币的快速和大规模采用2.中国科技体制改革研究会数字经济小组组长陈晓华:区块链经济将成为数字经济的重要组成部分一鲸鱼在从币安提出15.

1900/1/1 0:00:00