本系列將重點介紹兩種函數式編程語言: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:
StarkNet正開發基于Rust的新開源定序器:1月31日消息,以太坊Layer2擴容解決方案StarkNet宣布正在開發新的StarkNet Sequencer(定序器),其在Apache 2.0許可下是開源的,首要目標是增加StarkNet吞吐量。
新的Sequencer將分階段實現,第一個模塊已可供社區審查,最終實現基于Rust的Sequencer完全取代當前基于Python的Sequencer。[2023/1/31 11:38:21]
,"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。
Crust Network贏得第19次Kusama平行鏈插槽拍賣:12月28日消息,Kusama第19次競拍已結束,Crust Network以鎖定30,026個KSM成功贏得Kusama的第21個插槽,接入Kusama中繼鏈,以平行鏈的方式出塊。據悉,第17個插槽后加入了Statemine和Encointer。[2021/12/28 8:09:24]
以太坊的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的整數
卡巴斯基:針對bZx的釣魚攻擊可能由Lazarus黑客組織實施,該組織與朝鮮有密切聯系:11月12日消息,美國網絡安全公司卡巴斯基針對保證金交易借貸平臺bZx私鑰泄露事件調查發現,該次針對bZx的網絡釣魚攻擊很可能是由 Lazarus(Bluenoroff Advanced Persistent Group)組織執行,該組織長期以來一直攻擊金融機構和加密貨幣交易所,與朝鮮有密切聯系,被稱為國家支持的黑客組織。卡巴斯基調查分析了Lazarus在2017年、2019年和2020年進行的一些攻擊,發現該次私鑰事件的網絡釣魚郵件與之前攻擊所使用的工具具有相似性。
此前消息,11月5日,保證金交易借貸平臺bZx在Polygon和BSC部署的私鑰被泄露,造成超過5500萬美元資金被盜,該次攻擊是針對bZx開發者的網絡釣魚攻擊。[2021/11/12 21:45:39]
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為一個特定的數字:
Huobi Pool宣布成為TrustBase超級節點并支持其插槽拍賣:Huobi Pool宣布正式成為TrustBase首批超級節點之一,對TrustBase插槽競拍和各生態發展給予支持。
TrustBase是一個基于Subscript底層語言的智能合約平行鏈,借助底層基礎語言的無限前景,致力于共同為波卡生態助力。
Huobi Pool 為火幣集團子品牌,是火幣全球生態化戰略的重要組成部分,旗下業務覆蓋PoW挖礦、 鎖倉投票挖礦等多條業務線。火幣礦池目前已經成為全球最大的Staking礦池、領先的PoW礦池以及眾多公鏈節點。[2021/4/22 20:47:43]
在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的兩個參數:
TokenBetter即將上線CRU(Crust):據TokenBetter官方公告,CRU(Crust)將于2020年9月23日17:00(UTC+8)上線TokenBetter創新區并開放CRU/USDT交易對。
Crust提供了Web3生態系統的去中心化存儲網絡,支持包括IPFS在內的多種存儲層協議,并對應用層提供存儲接口。Crust的技術棧還能夠支持去中心化計算層。Crust旨在構建一個重視數據隱私和所有權的分布式云生態系統。
據悉,Crust提供了Web3生態系統的去中心化存儲網絡。Crust基于Polkadot的Substrate技術框架開發,并將作為Polkadot的去中心化存儲平行鏈為用戶提供服務。[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
Tags:IONDATDATAATAUltimate ChampionsdatashieldcoinbankBig Data ProtocolPinata
據新華社消息,9月29日,建設銀行上海市分行與上海農村產權交易所簽署金融服務推動鄉村振興戰略合作協議。雙方將在農村產權交易與涉農普惠金融創新、鄉村振興領域數字人民幣服務等五個領域深入開展合作.
1900/1/1 0:00:00《區塊鏈行業觀察》專欄·第51篇作者丨JoanneMolinaro,NathanA.Beaver 圖片丨來源于網絡 許多公司需要強大的供應鏈可追溯性,對于最普遍的追蹤挑戰.
1900/1/1 0:00:00前文《打破K/V存儲的性能瓶頸》中,我們提到用一個哈希值來反映區塊鏈系統中所有對象的當前狀態集合,并稱之為“世界狀態”.
1900/1/1 0:00:00據《證券日報》消息,9月7日,中國工程院《中國區塊鏈發展戰略研究》項目發布“發現100個中國區塊鏈創新應用”欄目之“基于區塊鏈的電子證據平臺”案例.
1900/1/1 0:00:00歡迎大家收看9.13-9.17第210期比原鏈項目周報!從本期開始我們將對項目周報改革,其內容將更為詳細的記錄項目周動態,讓用戶直接了解Bytom的一周事件.
1900/1/1 0:00:00據《杭州日報》消息,9月9日上午,浙江省知識產權金融服務“入園惠企”行動現場推進會在杭州高新區智慧e谷舉行.
1900/1/1 0:00:00