📜 [專欄新文章] Scaling Ethereum 參賽心得
✍️ Johnson
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Scaling Ethereum 是一場由 ETHGlobal 所舉辦的線上黑客松,也是我第一次參加與以太坊有關的黑客松活動,這篇文章就來分享一人參賽的過程與心得。
源起
一開始是在 telegram 群組中得知這場比賽的消息,因緣際會之下剛好有人想組隊參賽,於是就在報名截止的前一天一起跟著報名了。
報名的方式除了填一些基本資料外,最特別的是還要 stack 以太幣,也就是要傳送 0.01 顆以太幣給主辦方,規則是必須在比賽的最後,有提交作品的人才能贖回 0.01 顆以太幣,之後看到 meme 頻道有人留言:
When your project is incomplete but you submit to get back stake.
一方面,這確實也會激勵你好好把比賽完成,就算沒做完也要有些成果上去,這也是主辦方秉持的精神,他們認為大家來黑客松相互學習成長,競賽獎金則是其次。
獎金
比賽方式是由 25 個左右的贊助者(sponsor)分別提供獎金,每個 sponsor 都有錄製一段影片,說明怎麼獲得他們的獎金,大部分會要你使用他們開發的工具,或者必須跟 sponsor 在做的研究有關,去實作出創新的作品。可參考:Prizes — Scaling Ethereum
你的專案可以選擇要投入哪個 sponsor 的獎金,一個專案可以投入多個 sponsor 底下,這樣獲獎機會也會比較高。
我選擇的 sponsor 是 zkSync,他們的說明如下:
zkSync is a user-centric zkRollup developed by Matter Labs. It uses zero-knowledge proofs to keep data availability on mainnet to achieve exponentially lower transaction costs. You may have seen us powering projects such as payments and Gitcoin Grants. We are currently rapidly developing zkSync 2.0, which will feature EVM-compatibility in testnet May 2021, soon followed by zkPorter, our new exponential scalability solution.
PrizeszkSync will be awarding their Prizes as follows:
- 1 winner — 4,000 USDC
- 2 winners — 2,000 USDC
- 4 winners — 500 USDC
We encourage builders to utilize zkSync SDK’s, implemented in JavaScript/Typescript and Rust. Prizes will be awarded to projects that make it simpler and easier for non-technical users to use zkSync, other ideas include integrations of current tools such as in Gitcoin Grants and tools for easy mass payments and multi-sigs.
社群互動
這個 hackathon 很棒的地方是他把使用者體驗做的很好。每個人都會有自己的 dashboard 顯示目前專案的進度和一些訊息。
Check-In #1 和 Check-In #2 的階段會要你提供專案的構想,你隨時都可以修改。主辦方會看你提交的資訊,幫助你找到適合的 sponsor,或是給你一些建議,就算是一人參賽也能感受到回饋。
整個賽程期間,社群都是使用 discord 在互動,discord 裡頭有很多頻道,像是基本的大會報告的頻道,或是一些不重要的迷因、閒聊頻道都有。
每個 sponsor 也都有自己的頻道,我就會在 sponsor-zksync 的頻道詢問技術的問題,例如我想問問 zkSync 一些關於專案構想的意見:
Hi there, I want to build a gas fee relayer which make my ERC-20 token transfer without transaction fee, to be more precise, delegating gas payment by another party. I think this is done by GSN https://opengsn.org/ , but maybe it could built on L2 with zkSync? I’m not sure, could somebody give me some advice about this topic?
zkSync 團隊的人回應我:
This is an amazing idea! This can totally be built, as we support batching transactions which can be used for all kinds of creative things such as paying for transaction fees in an erc-20 token. Your idea seems like a combination of that and the gitcoin grants integration. To get started, I suggest you watch the short 10 minute presentation I made on using the SDK and batching. Looking forward to your project!!
在 Check-In #2 的時候,我提交新版的專案構想,有一個欄位是問:「目前專案遇到什麼阻礙?」我的問題應該是被主辦方貼給 zkSync 的團隊,於是 zkSync 的團隊成員就用 discord 私訊我,貼了一些程式碼教我怎麼使用他們的 Javascript SDK,這突如其來的救援也幫了大忙。
除此之外,主辦方每個禮拜都會寄 email 通知一些重要的活動,賽程期間舉辦了四個 Summits 研討會,邀請世界各地有名的以太坊開發者分享議題,主辦方還有一個自己的 TV 網頁,直播所有的線上活動。這些活動都有錄影,可以在 youtube 看到過去所有的演講內容:https://www.youtube.com/c/ETHGlobal/videos
因為我的作品是使用 zkSync 的 Javascript SDK 製作的,好像也只能投稿 zkSync 作為獎金的 sponsor,不過主辦方在最後一個禮拜,也寄 email 告訴我說可以多投稿不同的 sponsors 看看,他依據我的專案構想給我一些適合的 sponsors 作為參考。
不過最後我還是只投稿了 zkSync,有點懶著再看其他 sponsors 的文件,也覺得其他 sponsors 的題目需要花比較大的功夫才能完成,一個人能力有限,就做點簡單的東西就好。
關於我的專案 — Gas Relay Service
在以太坊的世界,每一筆交易都需要額外付一筆交易費,也就是以太坊的 gas fee。
我的專案是讓「收款人」能夠幫「付款人」支付以太坊的手續費。
在黑客松之前,我就想研究「第三方支付手續費」的議題,因此我大部分時間其實都在研究一般的 meta-transactions 是怎麼實作的,有興趣的人可以看看 simple meta-transactions 的原始碼:https://github.com/chnejohnson/simple-meta-transaction
之後我才開始玩 zkSync 的 SDK,並研究怎麼在 Layer 2 實現第三方支付手續費的問題,以下就附上作品連結以及簡單的專案介紹給有興趣的人參考:https://showcase.ethglobal.co/scaling/gas-relay-service-on-zksync
The target is that token sender can choose to find another account to pay for fee. The another account can be (1) the token receiver’s account, (2) sender’s another account, (3) third party’s account.
In this project, I finished the demo, which is the (1) above, that receiver pay gas fee for the sender.
有趣的是,我在研究 meta-transactions 時學到很多智能合約的寫法,結果在最後專案上都沒用到(沒寫到合約的程式),zkSync Javascript SDK 其實很簡單,他們的文件寫得很清楚。最後 Demo 還是用 zkSync 團隊的成品修改來的…XD。
所幸在沒有懂太多技術的前提下完成了這場黑客松的專案,成功贖回了 0.01 顆以太幣。
評審與決選
整個賽程來到最後一個禮拜,主辦方安排兩天的時間進行 Judges,使用 zoom 進行線上研討會,一個人基本上是 7 分鐘,前 4 分鐘播放 Demo 簡報,後三分鐘會有評審問問題。
第一個問題是說:「Demo 中你是使用 zkSync 的錢包網頁去操作,那實際上你做得部分是什麼?」
我就回答我在他們的網頁上加了一顆按鈕,使用他們的 SDK 做出 gas relay 的功能,還有一個後端的 server 去作 relay。
第二個問題大概是問:「什麼樣的情境下會需要由 receiver 幫 sender 支付 gas fee?」
我的回答是,在一般超商購物的情境,消費者通常只支付商品的價格,不會支付額外的交易費,我認為以太坊的手續費應該屬於軟體的營運成本,由賣方支付比較適合。那如果賣方希望手續費的成本是由消費者承擔,可以直接調高商品的價格。
當然,我英文講得零零落落,希望評審有聽懂就是了…
最後一場直播就是 Finale 決選,主辦方選出十二個隊伍,公開再 Demo 一次,以及提供線上觀眾詢問問題,至此整個賽程就差不多進入尾聲。
決選後的不久,主辦方就公布了這次有獲得獎金的隊伍,幸運拿到了 zkSync 頒發的小獎~
zkSync — Matter Labs
- Zeneth — 2000 USDC
- ZeroSwap — 1500 USDC
- Kangaroo — 500 USDC
- Gas Relay Service — 500 USDC
後記
這次的參賽隊伍中,Zeneth 跟我的主題非常相似:
Zeneth — Use Flashbots to enable arbitrary meta-transactions so EOAs can enter L2s without ETH
另一個我覺得有趣的專案是 Alexandria:
Alexandria — A dApp using STARKs to verify aspects of your identity without revealing more than you should
沒想到主辦方 ETHGlobal 下個月又要再舉辦一場黑客松,有興趣的人可以看看:https://defi.ethglobal.co/ ,這次的主題是 De-Fi。
最後,只要有到 ETHGlobal 的 TV 網頁參加 Summit 研討會的直播,就能夠獲得 POAP 勳章,它就是一個酷東西~😋
POAP: Proof of Attendance Protocol
Scaling Ethereum 參賽心得 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
「c++ stack實作」的推薦目錄:
- 關於c++ stack實作 在 Taipei Ethereum Meetup Facebook 的最佳解答
- 關於c++ stack實作 在 Taipei Ethereum Meetup Facebook 的最讚貼文
- 關於c++ stack實作 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於c++ stack實作 在 [問題] 新手linked list 實作stack 問題- 看板C_and_CPP - 批踢踢 ... 的評價
- 關於c++ stack實作 在 Stack: 以Array與Linked list實作 的評價
- 關於c++ stack實作 在 資料結構教學: Stack 的評價
- 關於c++ stack實作 在 開源技術教學文件網- 堆疊(stack) 是一種受限制的線性(linear)... 的評價
- 關於c++ stack實作 在 Data-Structure-in-C/01-陣列實作堆疊-基礎.c at master - GitHub 的評價
- 關於c++ stack實作 在 [分享] ptt C 語言新手十誡 - 一個小小工程師的心情抒發天地 的評價
c++ stack實作 在 Taipei Ethereum Meetup Facebook 的最讚貼文
📜 [專欄新文章] The next generation Ethereum Virtual Machine — Ewasm VM
✍️ Peter Lai
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
The next generation Ethereum Virtual Machine — Ewasm VM
The next generation Ethereum Virtual Machine — Crosslink 2019 Taiwan
這篇文章是 Crosslink 2019 Taiwan 的一個議程紀錄:The next generation Ethereum Virtual Machine,由來自 Second State 的工程部 VP Hung-Ying Tai 分享 Ewasm VM 目前研究內容及未來的方向,內容非常精彩,包含了 EVM bytecode 、 Webassembly、Ewasm1.0 以及 Ewasm2.0 。
EVM bytecode 及 Webassembly(WASM)
以太坊的智能合約交易在執行時,例如 :轉 Token 到別的地址,我們是將 EVM bytecode 讀進以太坊的虛擬機執行,而 EVM bytecode 有以下幾點特色:
256 位元且堆疊式(staked-based)的虛擬機
很多高階的指令,例如:SSTORE, SLOAD, SHA3, EC, Call/Create contract
與實體系統架構(通常是 32/64 位元)有差異,而 256 位元則需要靠模擬來完成
較少程式語言(Vyper, Solidity, …)
Webassembly(WASM)是為了讓不同程式語言開發的套件都能在瀏覽器使用的一種二進位程式語言,WASM 有以下幾點特色:
堆疊式(staked-based)的虛擬機:有獨立的區域空間(暫存器或是記憶體),存取堆疊前 3 個物件(EVM 存取 16 個)
支持 32 / 64 位元的操作
沒有高階的指令
RISC 指令集也可以對應到 CPU ISA
較大的社群:主流的瀏覽器都支援,也有較多的程式語言(C++, Rust, GO, …)
Ewasm 1.0
接下來看看以太坊 Ewasm 的特性:
Ewasm 是 wasm 的子集合
因為不能有誤差,所以不支援浮點數運算
只能 import 以太坊的函式庫,避免 importㄒ系統函式庫
在每段指令之前插入 useGAS 來計算 GAS 的花費
Ethereum Environment Interface
EVM 裡有很多像是 SSLOAD, SHA3 的高階指令,這些指令在 Ewasm 1.0 裡,因為 WASM 可以動態讀取函式庫(模組),以太坊定義了 Ethereum Environment Interface 讓客戶端可以用不同的語言實作相對應的函示庫,而且也更容易完成 prototype 跟升級。
下圖是 Ethereum Environment Interface 定義的函數列表。
Ethereum Environment Interface Definition.
如何移除非法的指令?
Ewasm 使用 system contract 移除非法指令以及加入 useGas 的 bytecode,像是浮點數或是非法的 import,有以下兩種做法:
使用 smart contract 檢查合約的 bytecode
像目前的 precompiles 運行在客戶端上,在部署前先檢查合約
下圖是 Ewasm 1.0 的 stack,在部署合約前 Ewasm bytecode 會先經過 Sentinal 的檢查,成功部署後客戶端如果要執行合約會透過 EVM-C 跟 Heru(Wasm Engine)溝通。
Ewasm Stack
效能問題
究竟使用 Ewasm 效能真的會比較快嗎?講者分享各 EVM 執行 Sha1 以及 BN128mul 的結果,可以發現 EVM 在運行 BN128mul 時會是最快,主要是因為 WASM 支持 32 / 64 位元的操作,256 位元則需要另外模擬(1 個 256 位元的運算可以換成 25 個 64 位元的運算),所以 WASM 在跑 BN128mul 時才會比較慢。
Ewasm 2.0
Ewasm 2.0 的智能合約改叫 Execution Environments(EE),與 Ewasm 1.0 不一樣的有下列幾點
EE 全部都是 WASM 寫的
因為支援 cross shard,每個 EE 都是在一個 shard 上執行
EE 只能拿到 state root,而在合約的執行寫法也跟原來不一樣
EE 是 stateless
下圖可以看到 ERC20 Token 在 Ewasm 2.0 跟 Ewasm 1.0 storage 的比較,Ewasm 1.0 每個 data 都會有相對應的 key,而 Ewasm 2.0 只有存 state root,所以只能跟 state root 互動。
Ewasm 2.0 vs Ewasm 1.0
Phase One and Done
目前 Ewasm 2.0 到 phase one and done 的階段,也有測試的網路可以在 shard block 執行 EE,以太坊也有開源 Ewasm 2.0 的測試工具 Scout。
Hello World for Ewasm 2.0
上圖是 Eth 2 的 Hello World EE,可以看到 main 函數裡第一行讀取 pre state root,接下來驗證 block data size 是不是為 0,最後再將 state root 存回去,Eth 2 的智能合約寫起來都會像這樣。
結論
Ewasm 1.0 目前已經支援 EVM 1 大部分的功能也有測試鏈了,second state 開發一個編譯器 soll,能將 solidity 編譯成 Ewasm,想研究的人可以參考看看。
Ewasm 2.0 目前還在研究中,下圖是講者給大家分享的研究及貢獻的方向。
A MAYBE Roadmap
參考
Crosslink 簡報
webassembly.org
scout
soll
Ewasm overview and the precompile problem: Alex Beregszaszi and Casey Detrio @ Ethereum \\ Part 1 — YouTube
Ewasm overview and the precompile problem: Alex Beregszaszi and Casey Detrio @ Ethereum \\ Part 2 — YouTube
Wasm for blockchain&Eth2 execution: Paul Dworzanski,Alex Beregszaszi,Casey Detrio@Ethereum \\ Part 2 — YouTube
Ewasm for sharding
Ewasm updates
Ewasm design
wasm-intro
The next generation Ethereum Virtual Machine — Ewasm VM was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
c++ stack實作 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] 參加 Crosslink 2019 Taiwan 一探究竟那些不可錯過的以太坊最新發展 (第二天議程)
✍️ Phini Yang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
解析以太坊上的安全狀態通道 (A Secure State Channels Framework for Ethereum)— Liam Horne, Co-founder of L4 Ventures & ETHGlobal
#Intermediate
擴展性 Scalability 一直是近年以太坊生態系中重點任務。第二層協定 Layer 2採取的解決方向是用已有容量來處理更多交易,並不是增加以太坊本身容量,而是應用程式流量優化與用戶操作流程簡化等方式達到目的。它不會對基層協議做出任何更改,僅使用智能合約與鏈下應用程式交互。
「狀態通道 State Channel」則是第二層協議的其中之一解法,是一種透過鏈下交易與更新狀態的技術,在重複支付或遊戲加速兩項表現優異。在 L4 Ventures 中,開發人員可透過通用模塊化來快速建構狀態通道。此演講將帶你了解 State Channel 未來整體佈局。
延伸閱讀:Counterfactual: Generalized State Channels on Ethereum By Liam Horne Layer 2: From Payment to Generalized State Channel By 陳品
如何打造一般化的 Layer2 應用服務 (How to Build Generalized Application on Layers2)— Yuriko Nishijima, Developer & Researcher of Cryptoeconomics Lab
#Intermediate
「電漿網路 Plasma」是第二層協議的另一個解法,它創建附加在以太坊主鏈上的子鏈,並運用此技術實現狀態通道效果,特別在支付應用上見長。
Plasma 是 2017 年 Vitalik 跟 Joseph Poon (閃電網路提案人之一) 提出的方案,並於 2018 年有爆炸性成長。Cryptoeconomics Lab 在 Plasma 深耕已久,也正在實作這項協定,透過演講你會瞭解 Plasma 擴容方案將如何實現。
掌控你的私鑰與隱私 (Own Your Private Keys and Privacy) — Hankuan Yu, Head of Engineering & Hank Chiu of Engineering of HTC EXODUS
#Beginner
在區塊鏈世界中,私鑰就是一切。HTC Exodus 是全世界第一款使用硬體保護私鑰的區塊鏈手機,從使用者最根本問題出發。今年 9月 HTC 更提出新一代私鑰還原架構 — SKR 2.0,進一步提升私鑰還原之安全性。接下來,在私鑰安全及區塊鏈隱私上,HTC 將有什麼進一步規劃呢?
模組化的點對點網路協議 (libp2p: Modular Peer-to-Peer Networking Stack) — Raùl Kripalani, libp2p Tech Lead of Protocol Labs
#Intermediate #Eth2.0 #Go Language
在區塊鏈專案的網路層協議之中,近年來最值得關注的為 libp2p project,它是 IPFS 網路協議之延伸,現已另成一獨立網路協議專案,並由 Protocol Labs 團隊來維護。在去中心化場景中,為了解決節點與節點之間訪問的各種問題,libp2p 提供了解決方案,並將節點能在多個網絡中共享,大家亦能受惠於此。況且 libp2p 更提供可讓開發者快速使用的模組化通用包,廣受區塊鏈開發團隊青睞。
延伸閱讀:Why libp2p? By Pierre KriegerUnderstanding IPFS in Depth(5/6): What is Libp2p? By Vasa
剖析以太坊 2.0 客戶端 (The anatomy of a basic Ethereum 2.0 client) — Adrian Manning, Co-founder of Sigma Prime
#Intermediate #Eth2.0 #Rust Language
Lighthouse 是 Sigma Prime 針對 Eth2.0 客戶端所開發的專案,選用新一代語言 Rust 來做開發。Sigma Prime 於早期就參與 Casper 研究跟實作,對 Eth 2.0 核心的共識機制相當熟捻,而共同創辦人 Adrian 更是網路安全跟密碼學的專家。
講者介紹:Adrian Manning, Co-Founder of Sigma Prime▪ PhD in Quantum Field Theory▪ Cyber/Cryptography expert
延伸閱讀:Casper FFG:以實現權益證明為目標的共識協定 By Juin
次世代的以太坊虛擬機 (eWASM VM — The next generation Ethereum Virtual Machine )— Hung-Ying Tai, VP of engineering of Second State
#Intermediate #Eth2.0 #Virtual Machine
以太坊為了迎接下一代的虛擬機 — eWASM VM (Ethereum Flavored WebAssembly Virtual Machine),正如火如荼地開發 Solidity 的 eWASM 後端銜接。「eWASM 虛擬機」顧名思義將不再採用現在黃皮書中的指令集 ,而是使用 EWASM 來取代。EWASM 將會強化以太坊虛擬機的效能與安全性,也可以相容更多工具鏈,可以做到用一般程式語言如 C / C++、Go、Rust 來寫合約。
延伸閱讀:https://github.com/ewasm/design/blob/master/rationale.md
Geth 上的新型 BFT 共識演算法 (New A New 2-Step BFT Consensus Algorithm in geth)— Tung-Wei Kuo, Assistant Professor of National Chengchi University
#Advanced #Academic
傳統的拜占庭容錯 BFT (Byzantine Fault Tolerance) 共識演算法需要三個步驟來完成共識。在這場演講中,Tung Wei 將提出一個兩步驟 TwoStepBFT 的優化算法,在容許錯誤節點下,亦同時保有安全及活性。
使用以太坊 Proof-of-Authority 聯盟鏈進行跨醫院的資料共享 (Ethereum PoA Consortium Chain to Support Inter-Hospital Data Sharing) — Kung Chen, Professor of National Chengchi University
#Intermediate #Academic
目前社會中尚缺乏一套完善的整合系統,可供民眾進行醫療資訊的授權與共享。若病歷能有效地共享與授權,將可強化醫療分級轉診服務等下一代醫療服務。偏偏這些醫療資訊牽涉民眾隱私權等敏感議題,國立政治大學陳恭教授將分享如何透過區塊鏈對資料授權能力,來提升使用者的資料自主權,達成有效進行交換醫療資訊的目標。
更多資訊請直接參考官網議程:https://crosslink.taipei/schedule/2019-10–20
參加 Crosslink 2019 Taiwan 一探究竟那些不可錯過的以太坊最新發展 (第二天議程) was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
c++ stack實作 在 Stack: 以Array與Linked list實作 的推薦與評價
圖二(c)。 以Linked list實作Stack. Stack也可以用Linked list實現,以圖三(a)的Linked list為例,原先用 ... ... <看更多>
c++ stack實作 在 [問題] 新手linked list 實作stack 問題- 看板C_and_CPP - 批踢踢 ... 的推薦與評價
開發平台(Platform): (Ex: Win10, Linux, ...)
Windows7
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
dev c++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
小弟我最近開始讀data structure,除了讀理論也開始用code實作
我寫了一個push function 傳入一個結構指標跟一筆data
在function 裡面新增一個結構指標存push的資料
新結構指標的next location為傳入的結構指標
再讓傳入的結構指標等於那個新結構指標
預期應該用top function輸出的資料為我push進去的資料
結果跟push之前的資料一樣
測試了一下記憶體位置
push之前跟之後的記憶體位置一樣
(說的可能有點不清楚,看程式碼應該比較好了解)
程式碼(Code):(請善用置底文網頁, 記得排版)
#include<iostream>
using namespace std;
struct Node
{
int data;
struct Node* next;
};
typedef struct Node STACK;
STACK* create(int);
void push(STACK*,int);
void pop(STACK*);
void top(STACK*);
int main()
{
STACK* sta=create(50);
cout<<sta<<endl;
push(sta,100);
cout<<sta<<endl;
return 0;
}
STACK* create(int data)
{
STACK* tmp= new STACK;
tmp->data=data;
tmp->next=NULL;
return tmp;
}
void push(STACK* tmp, int data)
{
STACK* use=new STACK;
use->data=data;
use->next=tmp;
tmp=use;
}
void pop(STACK* tmp)
{
STACK* use=new STACK;
use=tmp;
tmp=tmp->next;
}
void top(STACK* tmp)
{
cout<<tmp->data<<endl;
}
補充說明(Supplement):
--
放棄是最簡單的
也是最無趣的
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.164.250
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1505226419.A.64F.html
※ 編輯: xiefengan (111.255.164.250), 09/12/2017 22:33:42
但是想說如果遇到用c實作怎麼辦
我想說我傳入push的方式應該是
call by address,不過看起來好像不是
※ 編輯: xiefengan (111.255.46.121), 09/13/2017 17:19:00
... <看更多>