比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

ION:Rust 和 Elixir 如何讀取以太坊和其他 EVM 智能合約:函數式編程和區塊鏈_Data Delivery Network

Author:

Time: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:

Trust Wallet宣布與Instagram NFT達成合作伙伴關系:金色財經報道,加密錢包服務Trust Wallet宣布已經與科技巨頭Meta合作,將在Instagram上支持以太坊和Polygon NFT。根據Trust Wallet錢包官方社交媒體披露,他們是本次Instagram NFT項目的“主合作伙伴錢包”(main partner wallet)。據此前消息,Meta已經宣布與Coinbase Wallet和Dapper Labs整合并將在100多個國家/地區推出NFT。(web3wire)[2022/8/7 12:07:37]

,"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結構

加密基礎設施公司Prime Trust完成1.07億美元B輪融資:6月22日消息,加密基礎設施公司 Prime Trust 宣布完成 1.07 億美元 B 輪融資,具體融資信息暫未透露。本輪融資資金將用于擴大其產品類別,包括加密退休金產品和資產 Token 化產品。

此前消息,Prime Trust 于 2021 年 7 月宣布完成 6400 萬美元 A 輪融資,該輪融資由 Mercato Partners 的成長型股票基金 Traverse 領投,Samsung Next、Kraken Ventures,以及 Seven Peaks Ventures 等參投。[2022/6/22 1:24:33]

在Elixir中顯示

通過代碼很容易理解Elixir中的Struct。

以太坊的tx在Elixir中顯示:

Transaction{nonce:nonce,#countertoensurethesequenceoftxsgas_price:我們剛剛讀取了以太坊中的數據,因此隨機數是沒有用的。只有在我們把數據寫進合約的時候才需要更改隨機數。

eth_call

立即執行一個新的消息調用,而不需要在區塊鏈上創建交易。

參數

Object-交易調用對象

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

KlayCity獲得375萬美元種子輪和私募輪融資,Krust和Animoca Brands領投:據官方消息,KlayCity獲得375萬美元種子輪和私募輪融資,Krust和Animoca Brands領投,Naver Z,FriendsGames,A&T Capital,OKX Blockdream Ventures,Genesis Block Ventures,Kyros Ventures,ROK Capital,StableNode,PlayDapp,HG Ventures,Exnetwork Capital創始人Eric Zoo,Kwon Do等參投。

KlayCity是一款基于Klaytn網絡開發,背景發生在2080年,復制地球場景的P2E游戲,玩家利用NFT、LAY代幣和ORB代幣參與各種活動,包括拾荒,探索和升級,已獲得韓國版微信KAKAO的投資公司支持。

KlayCity已于2月10日以每個NFT500KLAY的價格成功完成Land NFT預售。OpenSea數據顯示,第684號NFT在3月11日以最高12萬KLAY成交,是初始價格的240倍。此外,KlayCity新功能將在2022年上半年很快公布。[2022/3/21 14:08:43]

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

gas:QUANTITY-(可選)為交易執行提供的gas整數。eth_call消耗零gas,但某些執行可能需要這個參數

SPDR Gold Trust持倉較上日減少3.8噸或0.3%:全球最大黃金ETF--SPDR Gold Trust持倉較上日減少3.8噸或0.3%,當前持倉量為1248.29噸。全球最大白銀ETF--iShares Silver Trust持倉較上日減少217.22噸,當前持倉量為17855.07噸。[2020/8/15]

gasPrice:QUANTITY-(可選)每一種付費gas使用的gasPrice的整數

value:QUANTITY-(可選)與該交易一起發送的值的整數

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中顯示

動態 | Loki團隊建議ServiceNode運營者在Trusty Tyr硬分叉之前更新至最新版本:Loki團隊建議ServiceNode的運營者在下周的Trusty Tyr硬分叉之前更新至Loki 5.1.2版本。這一版本會修復一個罕見但是很嚴重的Bug,這個bug可能導致在分叉前凍結你的lokid。目前距離硬分叉還有一天多時間。據悉,Loki核心目標是匿名隱私交易,建立在Monero基礎之上,但只是利用Monero隱私技術來為它的一部分功能鋪設服務節點網絡,實現Loki網絡上的私人通信。(真本聰)[2019/10/21]

它是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的兩個參數:

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

Tags:IONATADATDATAONION幣ARATADATXData Delivery Network

中幣交易所
區塊鏈:區塊鏈如何賦能“工業互聯網+數字孿生”?_ZIP

工業互聯網的蓬勃發展離不開各項技術支持。在上一篇“區塊鏈+工業互聯網“專題文章中,我們簡單分享了區塊鏈與數字孿生結合在工業互聯網中的應用.

1900/1/1 0:00:00
OOT:Loot創始人在Fantom部署合成Loot ,或與Andre Cronje的Rarity游戲進行鏈接_LOOT

巴比特訊,9月15日,Loot項目創始人DomHofmann發推表示已在Fantom上部署合成Loot,隨后.

1900/1/1 0:00:00
USD:跨Rollup轉賬應用Hop Protocol已支持L2擴容方案Arbitrum_BITC價格

巴比特訊,9月17日,跨Rollup轉賬應用HopProtocol已支持L2擴容方案Arbitrum,目前僅支持USDT與USDC轉賬,將在下周開放對ETH的支持.

1900/1/1 0:00:00
CHR:Chronicle獲Panda International官方授權上線首個公益NFT_BBNFT價格

巴比特訊,9月22日消息,基于NEAR的NFT創意工坊和發行與交易平臺Chronicle與國際公益組織PandaInternational獨家合作,正式上線第一波Panda#1NFT.

1900/1/1 0:00:00
dYdX將于今晚23:00解除治理代幣轉賬限制并開放獎勵認領

巴比特訊,9月7日,去中心化永續合約交易平臺dYdX發推宣布將于北京時間9月8日23:00解除治理代幣DYDX轉賬限制,用戶可以認領和轉移獲得的獎勵,包括空投獎勵.

1900/1/1 0:00:00
THE:The Sevens:8分鐘售罄120萬美元的NFT,卻出現了“瘋狂鑄幣者”?_SEVEN價格

作者:思嘉 TheSevens是一個新興的NFT項目,集合了7000件算法生成的NFT藝術品,該項目于2021年9月7日昨晚正式發售,僅8分鐘后官方Twitter就發文稱已售罄.

1900/1/1 0:00:00
ads