区块见闻 区块见闻
Ctrl+D收藏区块见闻

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

作者:

时间:

本系列将重点介绍两种函数式编程语言: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:

质押解决方案Chorus One将在Solana上推出集成MEV的开源协议:2月8日消息,质押解决方案Chorus One将在Solana上推出集成最大可提取价值(MEV)的开源协议。该协议旨在成为一个开源的公共产品,准备由Solana验证节点集体采用,并通过一个额外的去中心化实体进行管理,或者独立运行。Chorus One为Solana开发的MEV版本协议目前处于原型阶段。(The Block)[2023/2/8 11:54:07]

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

首先,让我们将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。

多链NFT游戏元宇宙Souls Of Meta与TrustPad达成合作:据官方消息,跨游戏Fun-2-Earn多链NFT游戏元宇宙Souls Of Meta与去中心化多链融资平台TrustPad达成合作。[2022/5/7 2:57:47]

以太坊的tx在Elixir中显示:

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

eth_call

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

参数

Object-交易调用对象

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

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

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

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

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

伊隆·马斯克:虽然Discord使用Rust,但我更喜欢C语言:金色财经报道,伊隆·马斯克在推特上表示,虽然加密社区Discord使用的是可以更好扩展的Rust编程语言,而且他本人也是Rust粉丝,但如果要获得最佳性能,没有什么能比C语言更好了。此外,马斯克还透露特斯拉主要使用的是C++和Python语言。[2022/2/23 10:11:29]

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

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

返回

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的两个参数:

Crust Network 道长:用户的资产在Rollup解决方案中是安全的:金色财经现场报道,7月9日,金色沙龙第66期Layer2-扩容“空间站”,探索更高维度的破局之道在杭州举办,Crust Network 道长在圆桌对话环节中表示,V神曾提到, 二层解决方案有两大问题:一个是资产安全性问题,还有一个是系统安全性问题。Rollup已经将资产安全性问题基本解决,也就是用户的资产在Rollup解决方案中是安全的。但Rollup的系统安全性问题仍有待解决。

他山之石,可以攻玉。Crust网络提供了高安全性和高可用的数据存储网络,有能力为Layer2方案提供更高的系统安全性。

一些实际的例子已经证明了Crust的存储优势。Uniswap已经将它的网站去中心化的部署在了Crust之上,除此之外,还有更多DApp和NFT项目将他们的数据存储在Crust网络。[2021/7/9 0:40:09]

to&data。

地址的字符串到二进制

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

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

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

香港数字资产托管机构First Digital Trust完成215万美元融资:4月23日消息,总部位于香港的数字资产托管机构First Digital Trust获得215万融资,将加密货币资产支付服务和升级带到亚太地区。该轮融资由亚洲风险投资公司Nogle等投资者领投。根据Crunchbase数据,该公司此前已完成两轮融资,其总融资金额现在已超过520万美元。该公司表示,这笔资金将用于发展首个借记卡和信用卡渠道,以允许数字资产客户无缝地使用银行卡支付。公司将接受100多种货币的数字资产支付,并借助小程序提供即时结算、托管和合规服务。(Cointelegraph)[2021/4/23 20:51:54]

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

标签:IONATADATDATAA-NationKATANA币DatBoi TokenDATA价格

以太坊交易热门资讯
DAO:19条新思考:DAO之于艺术,能实现什么?_USD

来源:Medium 作者:Felipe 翻译:stacey 在过去的几个月里,PleasrDAO?、NounsDAO、PaperclipDAO等因为NFT而聚集在一起.

区块链:观察 | 从生成艺术的角度简单理解NFT_DAO

今天的NFT类似于2012年的比特币这里不是说NFT的价格跟2012年的比特币类似,因为两者完全不是一种东西,无法在价格或价值层面进行比较.

PUN:以太坊账户vs比特币UTXO,谁能为你的交易保驾护航?_BABYPUNK币

作者:devopsguy来源:hackernoon 编译:陈一晚风 众所周知,比特币和以太坊在很多方面都有很多不同之处.

ATA:Loot:以集体想象力为上限、推动 NFT 范式转变_DATA

什么是Loot Loot:一种文字NFTLoot是一种仅由文本组成的链上NFT,并作为原始电子游戏的基础。它是一个TXT文件,允许任何人铸造主题装备物品.

ETA:视觉中国或将推出NFT数字艺术交易平台_数字艺术字体1到10

iNFTnews.com独家消息,8月26日中国最大的视觉创意平台视觉中国发布《2021年半年度报告》,报告中用较大篇幅描述了平台在NFT领域的探索和成绩.

ACK:元宇宙是什么?窥探扎克伯格的“元宇宙梦”_龙之岛元宇宙官网

“在元宇宙里面,你感觉与其他人在一起,就如现实中的跳舞、健身一样,不同的在于这种体验是不能在一个2D应用程序或网页上能做到的.