【還原「物業帶動鐵路」的歷史時空】 #永續港鐵霸權 #7月專研
港鐵霸權一大核心就是長期壟斷「鐵路上蓋物業發展權」,今時今日香港土地問題走到如斯局面,與經常被吹噓為「國際成功模式」的「鐵路加物業」(Rail + Property) 不無關係,但服務大眾的鐵路公司搖身一變成為追求利潤的發展商,絕對不是一夕間發生的合理事情。「鐵路上蓋物業」的原意又與今日有沒有變化? 是次研究專題將會透過回顧過上千頁有關香港地下鐵發展的英國解密檔案,還原70年代「物業帶動鐵路」發展模式的源起及原意,將有助進一步理解現時逐漸扭曲的港鐵發展形態。
▌構思初現:初期鐵路物業的背景與概念
「以地養鐵」更早可以在日本找到相類似發展模式 (Murakami, J., & Gregory, K. I.,2012),然而最早「引進」香港的來源暫不可考。但從現有官方內部檔案中,可找到早於1970年交通諮詢委員會 (Transport Advisory Committee)提交的一份《集體運輸計劃總報告書》,報告中建議除了計劃興建已設計的4條鐵路路線,並分9期(nine distinct stages) 完成「理想」鐵路系統(preferred system)外,已有提及「發展上蓋物業」的構思。在報告提及鐵路系統的長期發展影響:
”Wherever subway systems have been built experience shows that property and land increase in value. This opens up the strong possibility that a part of the cost of providing station concourses could be met through arrangements which permit the private development of station superstructures and surrounds.”
當年報告所述,由於預視到鐵路系統的帶動下,當地物業及地價將會升值。因而報告提到有很大可能可以容許私人發展 (private development) 上蓋物業去補貼鐵路站的建設成本。值得注意的是,報告除了提出上蓋 (station superstructures)發展外,首次提到發展上蓋周邊 (surrounds) 的發展概念。可見,現時港鐵圈地/上蓋物業發展一早出現在早期鐵路系統構思之中。
70年代還有差點讓鐵路系統觸礁的財政艱難,更清晰定位鐵路中的「物業收益」有何功能。參考早期關於興建鐵路系統的英國解密檔案顯示,早於1972年,香港政府成立集體運輸臨時管理局(Mass Transit Railway Provisional Authority),打算先行興建較全面、工程單一批予日資財團(Japanese consortium)的早期系統(initial system),但後來石油危機爆發,日本經濟陷入危機,財團先是提出可否修訂興建成本價格上限由50億為60億,遭到管理局拒絕後則宣佈退出鐵路興建,檔案中可看到港英政府曾一度為此而與日資財團就賠償爭執,甚至有香港主要大班 (怡和除外) 都因財政理由反對繼續推展興建鐵路計劃。
當年港英內部評估1980年代交通系統會超負荷,即使鐵路系統已被日資延遲一年(have effectively delayed the MTR project for 12 months),連帶物料通賬的財政問題,但卻認為必須「頂硬上」,調整鐵路系統的財政預算、規模以及未來發展方向,於是臨急推出後來實現的修正早期系統 (Modified Initial System)。在1975年一份關於修正早期系統行政局內部文件,港英將會排除必要鐵路系統以外的多餘支出 (eliminate all expenditures not strictly necessary for resultant simpler system),不僅使整個鐵路規模「大縮水」,同時更建議以溢價債卷(Premium bond)作為融資措施,以及發展沿線上蓋物業(property development on lines)抵消(offset)財赤,皆為確保(safeguard)鐵路在任何情況下的財政可負擔性(the financial viability in any event),讓減少後規模的總興建成本能夠保持於49億的水平。可見,當初「鐵路加物業」發展的概念是在財政大緊縮的特定歷史脈絡生成,目的為防止鐵路興建所帶來財政不穩定情況的其中一法。
▌立業辟地:港鐵上蓋四小龍
直到1975年,為了確保鐵路系統的財政可負擔性以及應急儲備,集體運輸臨時管理局向政府申請批出四個鐵路上蓋物業的綜合發展權(comprehensive development)。而當時行政局內部討論中,一份十分詳細記錄有關批予集體運輸臨時管理局四個上蓋發展權的行政局文件顯示,最早期物業上蓋發展的具體情況:
—九龍灣車廠上蓋物業(現時德福花園):
當時除了作為首個利用鐵路車廠上蓋作物業發展的項目,而且亦成為物業上蓋住宅發展的先例,佔地165,800平方呎,打算興建大型屋苑,滿足18,000個人口的住宅需求。
—亞皆老站(即現今旺角站)上蓋物業(現時旺角中心第一期):
首個非鐵路站上蓋作物業發展,只是相鄰於(adjacent to) 鐵路站,為首個利用鐵路通風樓(ventilation shaft)的物業發展。
—金鐘站上蓋物業(現時海富中心):
佔地60,000平方呎的海富中心,當時金鐘站上蓋物業批地條例原來有列明非工業用途,包括興建酒店(non-industrial purposes which may include a hotel)。
—畢打/遮打站(即現今中環站)上蓋物業(Pedder/Chater)(現時環球中心):
當時批中環商業靚地予鐵路公司的理據明顯為商業利益最大化(maximum exploitation of the commercial possibilities),一來可以善用土地資源(物業建於鐵路站上蓋),二來物業及鐵路站同時興建,可以減少工程興建時發展阻礙(development disturbance)。
其後地鐵公司分別與恆隆、合和、長實多間發展商共合發展上述四個上蓋物業,作為「鐵路加物業」發展模式的雛型,當時內部估計以上物業收入將會佔地鐵公司總收益的20%。當年批出九龍灣車廠上蓋物業上公頃的市區發展土地,整體政府部門都相當歡迎,認為可以平衡當區公屋主導的房屋格局,與及能夠為該區提供額外設施的機會,甚至具體要求屋苑內有至少10戶1車位的發展條件 (XCC(75)52)。此四幅最早批出的上蓋物業發展,從通風樓到車廠、由單一大廈到綜合發展,已是奠定了日後鐵路物業發展的主要選址方式與發展類型。
▌誰主上蓋物業?
這份行政局文件亦載有早期鐵路用地發展權的重要批地原則(principles to be adopted in respect to land grant to Mass Transmit Railway Corporation),是還原物業上蓋發展歷史一份重要參照。文件清楚列出,上蓋物業不一定是地鐵公司「囊中物」,鐵路物業發展權是否批出,或批給誰,完全是政府「話事」 (the grant of comprehensive development rights on land affected by railway installations will be discretionary)。
文件亦同時指出,程序上地鐵公司需要先向政府申請(formally apply)批地,政府可以基於實際考慮 (practical consideration) 決定如何運用這些鐵路上蓋用地的發展潛力 (for government to decide on how to dispose of any development potential remaining in the land over and above its Mass Transit usage) 。換言之,港鐵的上蓋發展絕對可以由政府主導及決定,包括根據現時的實際考慮(公營房屋供應長期落後及不足)用作興建公屋,不一定用於與發展商合作興建私樓供港鐵公司利潤最大化。
▌物業收益應急而起
70年代尾,鐵路系統打算擴建至荃灣區。翻查1978年有關鐵路擴建荃灣(Mass Transit Railway extension to Tsuen Wan)的行政局文件顯示,當時除了提及車廠上蓋物業發展的選址爭議外,亦有提及港英對發展上蓋物業的財政原則。物業發展的收入原本並不用作補貼鐵路成本 (revenue from property development was not originally envisaged as being used as a means of financing the capital cost of the railway itself),而是作為應急儲備及改善現金流(contingency reserve and to improve its cash flow)。而且更補充荃灣車廠上蓋物業發展的剩餘收入,可以用作應對以下4個應急情況:
—抵消「超支」建築成本(offset any excess construction costs)
—抵消收入財赤(offset any revenue deficiencies)
—加速還債(accelerate loan repayments)
—提早鐵路公司對港英政府的投資分股息的日子(bring forward the date when the Corporation begins to pay the Government as share holder on behalf of the public dividends on its investment)
可見,港英多次強調,鐵路上蓋物業收入為確保財政可負擔性(viability)及應急(contingency),而非像現時政府愈來愈恆常化送地予港鐵興建私樓賺錢。
引述法國城市學者Aveline-Dubach整理地鐵公司至其後港鐵自1980至2016年收入可見,明顯看見90年代末東涌綫及其後的將軍澳線所帶動的物業發展收入比例愈來愈重,已經超越鐵路票務收入,現時每年物業收益足足佔港鐵總收入四成。可見,透過重現當初的批地原意,更能突顯漸走向扭曲的港鐵發展形態,形成尾大不掉之勢。
▌賣樓補車費:明言物業發展利潤補貼車費
港鐵不應用上蓋物業賺盡的討論,亦見於地下鐵路公司條例的立法階段的重要討論。一份1975年討論地下鐵路公司草案(Mass Transit Railway Corporation Bill)的行政局文件,提及鐵路公司需要按照審慎商業原則 (prudent commercial principles)。鐵路作為公共交通工具,不應最大化其投資回報 (maximize its return on investment),只應賺取足夠(enough)收入作營運開支。
文件亦可見當年政府就發展上蓋物業項目的收益,會清晰公開回應指物業發展可為鐵路帶來的額外利潤,以維持一個「保守的車費政策」 (assist the railway by providing extra revenue to maintain a conservative fares policy)。比起今天已經與物業收益「脫勾」的「可加可減」車費制度,當日港英政府明顯認為物業收益有助更平宜的車費定價。
在40多年前的歷史時空,當初「鐵路加物業」發展模式跟現時已經不可同日而語,發展上蓋物業不論就其發展型態、財政狀況、規劃模式、補貼原意,明顯有其特定的歷史脈絡及原意。是次研究專題透過還原早期興建地鐵的歷史討論,帶出現時不斷被政府吹奏作為「國際級典範」—港鐵發展模式,並不是一套千秋萬世的發展方程式。
參考資料
1971 FCO 40 358 Construction of an underground railway system in Hong Kong
1975 FCO 40 658 Construction of an underground railway system in Hong Kong
1975 FCO 40 659 Construction of an underground railway system in Hong Kong
1975 FCO 40 660 Construction of an underground railway system in Hong Kong
1978 FCO 40 974 Construction of an underground railway system in Hong Kong
Aveline-Dubach, N., & Blandeau, G. (2019). The political economy of transit value capture: The changing business model of the MTRC in Hong Kong. Urban Studies, 56(16), 3415-3431.
Murakami, J., & Gregory, K. I. (2012). Transit value capture: New town codevelopment models and land market updates in Tokyo and Hong Kong. Value capture and land policies, 285-320.
研究自主 月捐撐起最新專研系列:https://liber-research.com/support-us/
FPS ID:5390547
HSBC PayMe 捐款支持:https://bit.ly/32aoOMn
戶口號碼:匯豐銀行 640-198305-001 (LIBER RESEARCH COMMUNITY (HK) COMPANY LIMITED)
義工招募:https://bit.ly/2SbbyT3
同時也有8部Youtube影片,追蹤數超過4萬的網紅李根興 Edwin商舖創業及投資分享,也在其Youtube影片中提到,取消雙倍印花稅後的第一滴血 : 第2077成交(堅) 尖東加連威老道100號港晶中心1樓27號舖,建築面積約400呎,成交398萬。感覺5分位 (多謝中原 Raymond Fong 俾料 Tel: 9779 7189。好經紀! 買舖搵佢啦) 工商舖撤銷雙倍印花稅後的真正的第一宗商舖成交: 估唔到...
「private i 中 建」的推薦目錄:
- 關於private i 中 建 在 本土研究社 Liber Research Community Facebook 的最佳解答
- 關於private i 中 建 在 管碧玲 (kuanbiling) Facebook 的精選貼文
- 關於private i 中 建 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於private i 中 建 在 李根興 Edwin商舖創業及投資分享 Youtube 的最佳解答
- 關於private i 中 建 在 李根興 Edwin商舖創業及投資分享 Youtube 的最佳貼文
- 關於private i 中 建 在 李根興 Edwin商舖創業及投資分享 Youtube 的最佳解答
private i 中 建 在 管碧玲 (kuanbiling) Facebook 的精選貼文
林昶佐委員因為市場防疫的議題,陷入是不是稱職立法委員的爭論。
有關爭議當天的發言,林委員事後已有針對市場表達謙卑的歉意,但是,還是有種種攻擊餘緒未消。
我要分享「外交家雜誌」這篇報導:
台灣打造「數位民主國家」的成就,很受國際矚目,開放國會部分,也是林昶佐委員的問政所關注的焦點,國際研究因此知道聽取他的意見,我們因此在這篇報導看到他的意見被呈現出來。
立法委員問政,因為不是執行者,往往不如行政官員有能見度,但是國家建設的成功,確實有國會議員共同參與的貢獻在裡面!
林委員很多問政都有佳績,慢慢大家會了解,至少這件事,國際間的評價很高,是台灣創造「數位民主國家」中的一環,而林委員長期關心!
提供大家參考://
台灣能否提供數位威權的另一選擇?
Can Taiwan Provide the Alternative to Digital Authoritarianism?
(Diplomat https://ppt.cc/fjDcrx)
中國和台灣正成為匹敵的數位國家—
中國是數位威權政權,台灣是數位民主。
China and Taiwan are becoming digital states in parallel —
China as a digital authoritarian regime, and Taiwan as a digital democracy.
7月1日中國共產黨成立百年之際,中國分析專家正密切關注習近平主席的下一步。另一方面,台灣正在推進 2020 年 6 月推出的開放國會行動方案和徹底透明的政策。中國和台灣正在同時成為數位國家—中國是數字威權政權,台灣是數位民主。 兩者中,數位威權更容易實施,也已有許多學術專業定義和理解它。雖然目前尚未有明確的數位民主模型,但台灣正在創造一個範例。
開放國會行動方案究竟是什麼?去年由Freddy 林昶佐立法委員提出,部分受到行政院開放政府國家行動方案的啟發。 開放國會行動方案為台灣立法院制定了五個主要目標:透明、公開、參與、數位化和理解。 林昶佐委員表示他長期以來相當關注科技和政治,並補充說:“推動此方案的原因是對政府和國會的未來創造新願景。”
開放國會行動方案包括改革,例如電視轉播,主要增加手語。 禁止閉門跨黨談判,包括委員會層面。 另一個重大變革是公開可取得的數位數據,例如投票記錄、預算和利益衝突。 目前公開的線上資訊有限,大部分的資料必須實體索取。
類似的開放政府國家行動方案側重於台灣政府的一系列政策變革來提高透明度、提供資料和增加公民參與。 因為台灣不被承認為國家,所以不能成為開放政府夥伴關係聯盟(OGP)的正式成員。 儘管如此,台灣依然在 2019 年宣布制訂自己的開放政府行動方案。
台灣政務委員唐鳳將 OGP 描述為“一項國際倡議,提倡核心價值如透明度、問責制、參與和包容,強調政府和民間的合作和共同創造。 全都符合台灣努力的方向。” 唐鳳希望開放開放政府國家行動方案是台灣加入OGP的路徑。
台灣公民科技的例子比比皆是,例如 2020 年 COVID-19 爆發初期使用的口罩地圖、針對追蹤接觸者足跡的QR Code 簽到系統、 闢謠機器人、公民自發的群眾外包政策,等。
“[公民科技]是台灣治理未來的關鍵,也是我們如何推動整個系統向前發展的關鍵。 公民科技將發揮非常重要的作用,”林昶佐委員說。
唐鳳也樂觀的表示:我相信我們今天面臨的許多挑戰,包括流行疫病和假訊息大流行(infodemic),都可以透過民主深化和促進我所謂的‘人民-公眾-私人的合作夥伴關係’來克服。”
林昶佐表示,台灣與中國的主要區別在於,台灣對科技的使用(例如切斷數位連結)以及疫病大流行時權力擴張的時間設限都有監督。
一個沒有監督或信任的政府的範例就是中國共產黨,它越來越依賴數位威權來監視和控制人口。 最極端的在其周邊地區:西藏、香港和新疆。 然而,即便是北京的街道上也佈滿了監視攝影機。
“台灣的數位民主與中國的數位威權之間存在根本區別,”唐鳳說。 “北京使用社會信用體系和國家審查等數位工具的同時,台灣積極創建數位基礎設施,使一般公民能針對政策改革提出和表達意見。”
“數位民主的透明度是讓國家對大眾透明,”唐鳳繼續: “在數位威權下,‘透明’一詞表示讓民眾對國家透明。”
台灣民主的數位化可能尚未完成,但其政府和公民社會的努力指示了一個數位威權主義的可行替代方案。改革政府過程中的數位工具和政策可以應用於其他民主國家。
“對於中國來說,也許只有一件事可以確定,他們多年來的大宣傳故事『民主不適合亞洲』
在台灣的進步發展下不再令人感興趣,”Ttcat 表示。
There is no clear model of what a digital democracy is yet, but Taiwan is in the process of creating one.
Digital Minister of Taiwan Audrey Tang described the OGP as “an international initiative that advocates core values such as transparency, accountability, participation and inclusion, with an emphasis on cooperation and co-creation of the government and civil society. These are all in line with what we are doing here in Taiwan.” Tang hopes the Open Government National Action Plan will be a path for Taiwan to enter the OGP.
Tang is also optimistic: “I believe many of the challenges we face today, including the pandemic and the infodemic, can be overcome by deepening democracy and promoting what I call “People-Public-Private Partnerships.”
According to Lim, the key difference between Taiwan and China is that in Taiwan, there is oversight for the use of technology, such as de-linking data, and time-limits to expanded powers during the pandemic.
“In a digital democracy, transparency is about making the state transparent to the public,” she continued. “Under digital authoritarianism, the word ‘transparency’ means making citizens transparent to the state.”
The digitization of Taiwan’s democracy may not be complete, but the efforts of its government and civil society point to a viable alternative to digital authoritarianism. The digital tools and policies to reform its government can be applied in other democracies.
“For China, maybe only one thing is certain, that the propaganda narrative they ran for years— that democracy is not for Asia— is no longer appealing under Taiwan’s progress,” said Ttcat.
private i 中 建 在 Taipei Ethereum Meetup Facebook 的精選貼文
📜 [專欄新文章] Tornado Cash 實例解析
✍️ Johnson
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Tornado Cash 是一個使用 zk-SNARKs 建立的 Dapp,它實現了匿名的代幣交易,這篇文章就用一些程式碼片段,來分享它是怎麼運作的。
本文為 Tornado Cash 研究系列的 Part 3,本系列以 tornado-core 為教材,學習開發 ZKP 的應用,另兩篇為:
Part 1:Merkle Tree in JavaScript
Part 2:ZKP 與智能合約的開發入門
Special thanks to C.C. Liang for review and enlightenment.
我們知道在以太坊上的交易紀錄都是公開的,你可以在 etherscan 上看到某個地址的所有歷史交易紀錄,當然地址是合約的話也是一樣。
也許創建一個新的錢包和地址就好了?假設一個情境是 Alice 想要匿名傳送 1 ETH 給 Bob,Alice 原本的錢包是 A,但她不想讓 A 地址傳給 Bob 的交易紀錄被看到,所以 Alice 創建另一個錢包 B,顯然 B 錢包是空的,Alice 必須把 A 錢包的 1 ETH 傳到 B 錢包,再用 B 錢包的地址傳給 Bob。
但問題就在於,只要追蹤 B 錢包的地址,就能看到 B 的歷史交易紀錄中 A 錢包曾經打幣給 B 錢包,於是到頭來交易還是被追蹤到了。
Tornado Cash 的解決方案,簡單來說,它是一份合約,當你要匿名傳送代幣時,就把一定數量的幣丟進合約裡 (Deposit),此時你會拿到一個 note,長得像這樣:
tornado-eth-0.1-5-0x3863c2e16abc85d72b64d78c68fca5936db2501832e26345226efdfb2bc45804977f167d86b711bb6b4095ddaa646ec93f0a93ac4884a66c1d881f4fc985
note 就是一串字串,擁有這字串的人,就能提領 (Withdraw) 剛剛傳入合約的代幣。握有 note 就代表擁有提款的權利,所以 note 一旦被別人知道,別人就可以把錢給提走。
其中,後面那段亂碼,本篇文章就以「秘密」來稱呼,這個秘密是由 secret 與 nullifier 組成,而這兩個都是在鏈下隨機產生的亂數。
因此 Tornado 的合約基本上會有兩個函式:
Deposit
Withdraw
有興趣的人可以先到 Dapp 上先玩一次看看,使用 Goerli 測試網,這裡可以領 Goerli 的代幣:https://goerli-faucet.slock.it/
Deposit
我們就從 Deposit 開始說起,簡單來說, Deposit 是將資料儲存到合約的 Merkle Tree 上。
剛剛提到的秘密,它是在鏈下產生,由 secret 跟 nullifier 組成,合在一起之後也稱作 preimage,因為我們要對這個 preimage 進行 hash,就會成為 commitment。
合約中 Deposit 如下:
deposit 除了傳送代幣到合約之外,需填入一個參數 _commitment。
我們對 preimage 使用 Pedersen 作為 hash function 加密後產生 commitment,以偽代碼表示如下:
const preimage = secret + nullifier;const commitment = pedersenHash(preimage);
這個 commitment 會成為 Merkle Tree 的葉子,所以合約中的 _insert(commitment) 來自 MerkleTreeWithHistory.sol 的合約,將我們的資料插入 Merkle Tree,然後回傳一個 index 給你,告訴你這個 commitment 在 Merkle Tree 上的位置,最後一起發布成公開的 Deposit 事件。
我們知道 MerkleTree 是將一大筆資料兩兩做雜湊後產生一個唯一值 root,這個 root 就是合約上所儲存的歷史資料。
root 的特性就是只要底下的資料一有更動,就會重新產生新的 root。
所以只要一有用戶 deposit ,就會插入新的葉子到 Merkle Tree 上,於是就會產生新的 root,所以在合約中有一個陣列是用來儲存所有的 root 的 roots:
bytes32[ROOT_HISTORY_SIZE] public roots;
roots 是用來紀錄每個 deposit 的歷史,每一次 deposit 都會創造新的 root,而所有 root 都會被儲存進 roots 裡,於是當你要提領的時候,就要證明你的 commitment 所算出的 root 曾經出現在 roots 裡,代表曾經有 deposit 的動作,因此才可以進行提領。
Withdraw
在 Deposit 之前 Tornado Cash 就會在鏈下產生秘密後交給使用者,擁有這個秘密的人等於擁有提款的權利。
提領的時候,秘密會在鏈下計算後產生 proof,proof 是 withdraw 需要的參數,所以只要確保這個 proof 能夠被驗證,那麼代幣的接收地址 (recipient) 就可以隨便我們填,只要不填上當初拿來 deposit 用的地址,基本上就做到匿名交易的效果了。
也就是說,產生這個 proof 並提交給合約,能夠證明此人知道秘密,但卻不告訴合約秘密本身是什麼。
function withdraw(bytes calldata _proof, bytes32 _root, bytes32 _nullifierHash, address payable _recipient, address payable _relayer, uint256 _fee, uint256 _refund) external payable nonReentrant;
我們可以清楚看到 withdraw 函式裡沒有接收有關秘密的任何資訊作為參數,也就是秘密不會與合約有所接觸,也不會暴露在 etherscan 上。
回顧 ZKP 所帶來的效果:
鏈下計算
隱藏秘密
在 Tornado Cash 的例子中,我們用秘密來產生證明,完成的鏈下計算包括:
將秘密 hash 成 commitment
算出 Merkle Tree 的 root。
以下是簡化後的 withdraw.circom:
template Withdraw(levels) { signal input root; signal input nullifierHash;
signal private input nullifier; signal private input secret; signal private input pathElements[levels]; signal private input pathIndices[levels];
component hasher = CommitmentHasher(); // Pedersen hasher.nullifier <== nullifier; hasher.secret <== secret; hasher.nullifierHash === nullifierHash;
component tree = MerkleTreeChecker(levels); // MiMC tree.leaf <== hasher.commitment; tree.root <== root; for (var i = 0; i < levels; i++) { tree.pathElements[i] <== pathElements[i]; tree.pathIndices[i] <== pathIndices[i]; }}
component main = Withdraw(20);
從上述代碼就可以看出這份 circuit 的 private 變數有:
secret
nullifier
pathElements
pathIndices
而 public 變數有:
root
nullifierHash
如同我們一開始說過的,秘密就是指 secret 與 nullifier。這裡進行的鏈下計算就是對 secret 與 nullifier 雜湊成 commitment。而使用的 hash function 叫做 Pedersen。
在進行 Merkle Tree 的計算之前,我們還檢查了 nullifier 雜湊後的 nullifierHash 跟 public 變數 nullifierHash 是不是一樣的。
hasher.nullifierHash === nullifierHash;
接下來,開始計算 Merkle Proof,用意是確認經過雜湊後的 commitment 有沒有出現在 Merkle Tree 上,所以我們的 private input 還有 pathElements 與 pathIndices(詳情參考 Part 1 Merkle Tree in JavaScript),讓它跑一趟 Merkle Proof 的計算,最後就能夠算出一個 root,再確認計算後的 root 與我們的 public 變數 root 是否一樣。
tree.root <== root;
於是我們就能產生一個 ZKP 的證明 — 證明 private 變數:secret, nullifier, pathElements, pathIndices 可以計算出 public 變數:root 與 nullifierHash。
把這個證明提交給合約,合約透過 Verifier 驗證 proof 是否正確,以及必須事先確認:
public 變數 root 有在合約的 roots 裡面。
public 變數 nullifierHash 在合約中是第一次出現。
以下附上完整的 withdraw 原始碼:
必須注意 ZKP 是向合約證明使用者填入的 secret 和 nullifier 可以計算出某個 root,但無法保證這個 root 曾經在合約的 roots 歷史上。
所以合約的 withdraw 中,除了 verifyProof 之外,還要事先檢查 ZKP 算出來的 root 是不是真的在歷史上發生過,所以需要 isKnownRoot 的檢查:
function isKnownRoot(bytes32 _root) public view returns(bool)
必須先檢查 isKnownRoot 後才能進行 verifyProof。
經過 verifyProof 驗證成功後,合約就開始進行提款的動作,也就會將代幣傳到 recipient 的地址,最後拋出 Withdrawal 的事件。
nullifier 與 nullifierHash
為什麼我們的秘密不是只有 secret 還要額外加一個 nullifier?
簡單來說,這是為了防止已經提領過的 note 又再提領一次,也就是所謂的 double spend。
require(!nullifierHashes[_nullifierHash], "The note has been already spent");
可以看到 withdraw 需要填入參數 nullifierHash,跟 isKnownRoot 一樣的狀況,我們需要對電路的 public 變數先經過一層檢查之後,才能帶入到 verifyProof 裡面。
nullifierHash 可以理解為這個 note 的 id,但它不會連結到 deposit,因此可以用來紀錄這個 note 是否已經被提領過。
所以當 verifyProof 驗證成功之後,我們要紀錄 nullifierHash 已完成提領:
nullifierHashes[_nullifierHash] = true;
有關為什麼需要事先檢查 public 變數後,才能帶入 verifyProof ,可以參考 Part 2:ZKP 與智能合約的開發入門 提到的 publicSignals 的部分。
附上 Tornado Cash 的架構圖:
簡化版的 tornado-core
tornado-core 的程式碼很簡潔漂亮,所以我模仿該專案自己實作一遍:
simple-tornado:https://github.com/chnejohnson/simple-tornado
這份專案只完成了 tornado-core 的核心部分,不一樣的是我的開發環境使用 hardhat 與 ethers 寫成,而 circom 與 snarkjs 使用官方當前的版本,合約用 0.7.0,測試使用 Typescript 。
比起兩年前的 tornado-core ,simple-tornado 使用的技術更新,可能更適合初學者理解這份專案,但是它有 bug…我在 issues 的地方有紀錄說明。
在開發的過程中,我的順序是先從最小單位的 MiMC hash function 開始玩,發現必須 javascript 算一次 hash、solidity 算一次、circom 再算一次,確保這三個語言對同一個值算出同樣的 hash 之後,才能放心去做更複雜的 Merkle Tree。
總結
我們可以看到 Tornado Cash 簡單的兩個函式:Deposit 與 Withdraw,透過將代幣送入合約後再提領到另一個地址的流程,應用 ZKP 達成匿名的交易。
除了斷開 Deposit 與 Withdraw 的地址關聯性之外,Tornado Cash 還有做了一層「藏樹於林」的隱私防護,這部份的解釋就請參考 ZKP 讀書會 Tornado Cash。
網路上很多關於 ZKP 的文章或專案都是在 2019 年後出產的,經過許多人對這項技術的嘗試,讓我們對 ZKP 有了更清晰的理解,如今兩年後,開發工具也變得更加成熟,期待未來在 web 隱私議題上能看到更多 ZKP 大放異彩的應用。
原始碼
tornado-core
simple-tornado
參考資料
ZKP 讀書會 Tornado Cash
Tornado Privacy Solution Cryptographic Review
Tornado Cash 實例解析 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
private i 中 建 在 李根興 Edwin商舖創業及投資分享 Youtube 的最佳解答
取消雙倍印花稅後的第一滴血 : 第2077成交(堅) 尖東加連威老道100號港晶中心1樓27號舖,建築面積約400呎,成交398萬。感覺5分位
(多謝中原 Raymond Fong 俾料 Tel: 9779 7189。好經紀! 買舖搵佢啦)
工商舖撤銷雙倍印花稅後的真正的第一宗商舖成交: 估唔到是第一滴血! 蝕讓! ?
原業主2016年4月以650萬買入,今早以398萬售出。持貨4年蝕39%。
地址是尖東加連威老道100號港晶中心1樓27號舖,建築面積約400呎,原業主叫價八百萬(吹水),放了盤好耐,一減再減。 租金一萬元,已經有3%的回報。
此舖實用約14呎 x16呎, 一般街舖實用面積是約七成,商場舖實用是約一半,劏場舖則是約四成 (兩三成都有?,仲要企唔到人,無陰公! 最近尖沙咀首都廣場S154舖的蝕讓93.5%就是實例,建築120呎,企人空間只得16呎。13%實用????。)
這間舖位於一樓,舖無來去水(死穴),成個商場本身也比較靜, 現在無埋自由行, 大檸樂! (你明我意思?)
此舖勝在走廊大單邊,近港潮樓酒樓入口位。398萬 OK la,我唔會買?
我身邊認識的朋友,買商場舖,常無乜好結果。
包括我爸爸在內, 他80/90年代在觀塘區炒好多樓,同時期有十多間地產代理(同區,唔同名)。 基本上就是「掛羊頭,賣狗肉!」?.... you know,表面上是代理,內裏是收盤/放盤,靠炒樓賺錢。Forgive him ... 嗰時「忠忠直直,終需乞食?」發財才立品!
嗰時我放學及週末,就成日跟住他及媽媽去睇樓。爸媽分開睇, 阿媽先睇,通常做「彈」到層樓一文不值嗰個。 阿爸就再出現, 「一啖砂糖一啖屎」,咁就成交。
嗰時,我爸爸基本上單單物業都賺錢,except one! 就是他1985年第一手以310萬從長實發展商買入觀塘麗港城商場的舖,位於1樓,建築300呎。持貨18年,2003年售出50萬。 蝕84%。該舖到今時今日都可能只是值約100萬。
從此他就同我講:「根興,以後唔好買商場舖!」
He is right! 我依家睇舖多過佢, 歷史證明 : 商場舖一般賺就賺少少,蝕就蝕多多。 升市: 跑輸大市。跌市: 繼續跑輸大市。WHAT KIND OF INVESTMENT IS THAT?!
接下來你會繼續睇到好多商場蝕讓個案出現, 已經蝕到好悶! ?? 商場舖是相反,「賺錢」才值得報道! ?
I love my Dad ????
李根興 Edwin
。。。。。。。。。。。
我剛開始成立個 Whatsapp Private Message List (Not group) 。如你想知道多些最貼市的商舖資訊及我個人分析,可以whatsapp我 (+852) 90361143,我可加你入 《李根興「堅堅流流」商舖資訊》 private message list。??
好多嘢唔方便公開講?
李根興 Edwin
private i 中 建 在 李根興 Edwin商舖創業及投資分享 Youtube 的最佳貼文
最新消息: 第2062成交(堅) SOLD 1.08億。感覺7分。寶光實業(經營眼鏡88, eGG 眼鏡,時間廊的母公司) 剛沽出彌敦道231號金陵大廈地下ABC舖。1.08億售出。
時間廊,地舖建築面積1600呎,門闊約26呎,深59呎。原業主於1992年以5800萬買入。 根據上市公司公佈,此舖應該收益 是9500萬 (我唔清楚條數點計?)。市傳買家是永倫集團 (confirmed)。
(Note: 永倫集團是一個非常「另類」的買家, 你睇睇他們的銅鑼灣伊利沙伯大廈商場就明白? 2005年以14.8億買入持貨至今,有啲嘢唔係我級數睇得明。 創辦人倫志炎兩公婆生前我也有認識,非常非常好人, 對後輩非常好。I miss them! )
今時今日,感覺這間舖約市值平少少成交,由高峰期應該已經跌了近一半。 彌敦道以我所知無乜舖賣, 這段每13呎面 x 2,成交約五千萬 x 2,差唔多啦。
但始終這段是鐘錶珠寶, 如果目標是3%回報,租金只是月租27萬就足夠,近港鐵/高鐵站, 遊客回港的時候應該唔難 。感覺7分位,極罕有。
市較旺的時候,這間舖分分鐘租50萬以上, 回報 easily can go beyond 5%。
最近好多做零售/飲食的沽舖,I'm sure you know why?。我知的就有以下:
凱斯餅店 (筲箕灣道 OK 便利店約3050萬)
卓悅化妝品(金魚街寵物店約7800萬)
太興餐廳(金魚街敏華冰室約4900萬/北角七姊妹道健身室舖約5000萬/中環威靈頓街雞飯舖約3850萬)
東亞銀行(長沙灣道吉舖約3510萬及屯門鄉事會路吉舖約1.34億)
麥當勞 (屯門鄉事會路創興銀行約4300萬)
北角強記飯店 (北角書局街自用舖約7600萬)
富邦銀行 (青山道吉舖約4300萬)
龍豐藥業 (粉嶺聯發街車房約1380萬)
以上(除了銀行)多數是背後的老闆所持的舖,不是間公司持有。
相反,現在好多出來買舖用家有: 佳寶/祥興食品/添好運點心/位元堂/Bar Pacific/ 優品360 (林子峰,當半個啦,背後有另一段故事! )。
每一浪之後,通常都是資產大轉移, 希望有份轉落你道啦!
。。。。。。
我剛開始成立個 Whatsapp Private Message List (Not group) 。如你想知道多些最貼市的商舖資訊及我個人分析,可以whatsapp我 (+852) 90361143,我可加你入 《李根興「堅堅流流」商舖資訊》 private message list。??
李根興 Edwin
private i 中 建 在 李根興 Edwin商舖創業及投資分享 Youtube 的最佳解答
老夫子出版社吳興記剛沽舖 - 第2038成交 (堅),感覺10分! 【低調高手入貨!】這間樂古道的舖,just sold 2200萬(註冊)。超平??? 原叫價4000萬。交吉。
上環樂古道68號地下1及2號舖連高層地下,地舖面積1500呎,高層地下面積1500呎,合共3000呎。 地舖樓底超高,舖內有自建閣。 即前後三層。 舖闊約20呎,深約50呎。
建築呎價只是每呎7333,平過住宅、平過倉,抵! 超抵!
租客吳興記報社,現在鋪內主力賣老夫子漫畫。 童年回憶,Very cute?
業主姓吳(of course),業主自用舖,在此地址已經做了幾十年, 可惜業主剛剛過身,joint tenant 過了比太太。
原業主於1984年2月用168萬買入。 新買家是高手,我知是誰,我朋友,但唔方便講,是「低調高手」! Really ? 前投行高層。
這個位置唔錯,近樓梯街, 前面大空地,又近皇后大道中,又可以停車,我都想買。較市值平三分一。I missed this deal.??
10分位! 我冇同佢夾過,但新買家一定賺, 恭喜買家!
今次成交的經紀是中原(工商舖) 陳賢勝 Jason Chan (高級聯席營業董事), 搵筍盤不如搵個好經紀 ?
我剛開始成立個 Whatsapp Private Message Broacast List (Not group) 。我日日係條街,收唔少八八卦卦的商舖新聞(堅或可能流),如你想知道多些最貼市的商舖資訊及我個人分析,可以whatsapp我 (+852) 90361143,我可加你入 《李根興「堅堅流流」商舖資訊》 private message list。??
You know ... 好多嘢唔方便公開講?。我不會自制謠言,只是市場第一手資訊。李根興 Edwin