本系列将重点介绍两种函数式编程语言: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:
EOS网络基金会创始人:TrustEVM可成为以太坊可行扩容方案:7月1日消息,关于摩根士丹利报告的一条推文显示,转向PoS并不能解决以太坊的扩容问题。EOS网络基金会创始人和首席执行官Yves La Rose转发此条推文并表示:合并(The Merge)无助于解决以太坊扩容问题,但EOS可以,Trust EVM推出后,以太坊终于有了一个可行的扩容解决方案。据悉,此前Yves La Rose就曾在推特表示:EOS一直是高性能、低成本的L1区块链网络。脱离Block.one桎梏之后,EOS社区资金到位、人才回归,正在重新焕发活力卷土重来。EOS并不旨在成为“以太坊杀手”,EOS推出的Trust EVM或将成为以太坊首选的L2解决方案。Trust EVM是官方EOS EVM平台,具有确定性的Gas计算、指令集级别的EVM兼容性以及完全的RPC兼容等特性并即将登陆EOS主网。[2022/7/1 1:43:50]
,"name":"get","outputs":,"payable":false,"stateMutability":"view","type":"function"}]Ethereumex的配置
首先,让我们将Ethereumex添加到mix.exs中的depsand应用领域!
#mix.exs:defapplicationdo},extra_applications:]end……defpdepsdoend然后,在config/config.exs中。将以太坊协议主机参数添加到配置文件中:
加密IRA平台iTrustCapital完成1.25 亿美元融资,Left Lane Capital领投:1月19日消息,加密 IRA 平台 iTrustCapital 以 31 亿美元估值完成 1.25 亿美元 A 轮融资,本轮融资由 Left Lane Capital 领投,其他具体融资信息暂未透露。本轮融资资金将用于开发新产品,例如质押治理 Token,并探索更多收购机会。
iTrustCapital 是一个允许用户通过个人退休账户 (IRA) 购买加密货币的平台,该平台的托管合作伙伴是 Coinbase Custody 和 Fireblocks。iTrustCapital 高级副总裁 Kevin Maloney 表示,自推出以来,该平台已创建超过 120,000 个新帐户,每月活跃用户超过 25,000 个。[2022/1/20 9:00:13]
#config.exsconfig:ethereumex,url:"http://localhost:8545"#nodeurlTx结构
在Elixir中显示
通过代码很容易理解Elixir中的Struct。
以太坊的tx在Elixir中显示:
Transaction{nonce:nonce,#countertoensurethesequenceoftxsgas_price:我们刚刚读取了以太坊中的数据,因此随机数是没有用的。只有在我们把数据写进合约的时候才需要更改随机数。
GMO Trust与Celsius达成合作,支持稳定币ZUSD作为加密贷款抵押品:日本互联网集团GMO旗下的合规加密货币子公司GMO Trust宣布与加密货币借贷平台Celsius展开新合作。客户将能够使用ZUSD作为加密贷款的抵押品。ZUSD是GMO Trust发行的一种受监管的、与美元挂钩的稳定币。据悉,ZUSD最初将上线Celsius平台。(PRNewswire)[2021/5/7 21:35:15]
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",参见默认区块参数
动态 | 区块链游戏Light Trail Rush将集成Matic Network:区块链游戏Light Trail Rush正在集成Matic Network(MATIC),使用其第二层扩展解决方案扩展其LTR。根据公告,这一集成是其3月12日更新的一部分,届时该游戏将增加多个新功能,包括新的用户界面、精致的游戏玩法和个人统计系统。Light Trail Rush目前为Alpha版本,计划于6月正式发布Premium版本。(Sludgefeed)[2020/2/11]
返回
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的两个参数:
声音 | 陈伟星:区块链被子搞成了trust less:陈伟星刚刚在微博表示:区块链的目的是trustless,被贪婪的子们搞成了trust less,马上各种起诉、追责、处罚,就要trust not at all了。[2018/12/14]
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
论文作者:Kleros创始人兼首席执行官FedericoAst、巴黎第二大学教授BrunoDeffains 编译:白泽研究院 译者注:本文篇幅较长,但译者已经进行了逻辑整理.
巴比特讯,据NansenNFTParadise数据板块显示,NFT项目FirstFirstNFTs24小时交易量达3464ETH,超BAYC排名第一.
撰文:imCopeland 编辑:南风 加密货币行业一直受到机会主义子的困扰,从那些通过Twitter发布性赠币的推文(比如2018年10月.
9月13日21:30,GlobeNewswire发布的一份新闻稿称,沃尔玛已经与莱特币达成合作,从10月1日起,所有电商店铺都将添加“使用LTC支付”的选项.
作者|毛利五郎?来源|链得得近日,因为萨瓦多尔的承认,比特币一直呈上扬趋势。截至发稿时,据链得得行情监测显示,周二比特币报价52,748.29美元,24小时涨幅为1.98%.
据经济观察报9月12日报道,近日,在2021中国数字金融论坛上,中国人民银行数字货币研究所与北京丰台丽泽金融商务区共同设立的国家数字金融技术检测中心正式揭牌.