科技的最大諷刺之處在于每一個新的解決方案要么限于技術問題而無法實施,要么壽命長到足以成為社會問題,這樣的情況在傳統科技公司身上已經屢見不鮮。但隨著市場規模不斷增長,同樣的問題在加密市場中也浮出水面。例如DeFi所面臨的不再是如何推動需求,而是在需求出現時如何保障用戶安全。迄今為止,由于黑客攻擊、漏洞利用等,DeFi領域已經損失了超過50億美元。雖然我們可以使用字節碼的正式規范和驗證以及完整的手動審計來保障穩健性,但人為的錯誤仍然會導致一些漏洞的存在。
幸運的是加密行業受益于世界上令人印象深刻的白帽社區,白帽們隨時準備采取行動,幫助團隊防御關鍵漏洞。白帽在協議或平臺中搜索潛在的安全問題,并與其開發人員合作,在這些問題被利用之前糾正這些問題。然而當前的DeFi市場狀態給任何潛在的白帽救星帶來了令人生畏的障礙:
法律不確定性:雖然在黑客攻擊協議之后,大多數團隊會提供一些寬限期,希望黑客能夠以白帽身份歸還被盜資產,同時會給予白帽一定的獎勵。但這沒有任何保證,團隊總是會決定采取法律行動。即使是像白帽這樣善意安全研究的基本概念也只是在今年早些時候才獲得官方認可,而當涉及到用戶資金時,風險要高得多。缺乏明確性:假設白帽和協議團隊都是善意的,仍然存在如何處理攻擊獲得的資金的問題。它們是要返回到原始協議地址還是發送到新創建的地址?如果協議治理是去中心化的,誰來把資金存入協議,當使用用戶資金時,這個人可以被信任嗎?執行風險:黑客與協議團隊之間的溝通通常是在一種極度緊迫和混亂的狀態,就像是在進行一場迷霧戰爭。相互矛盾的提議或指示包括冒名頂替者或欺詐地址可能會導致不可能逆轉的錯誤。雖然漏洞賞金有助于協議建立已知流程,并鼓勵負責任的披露,但它們只是解決方案的一部分。早期的協議團隊可能無法提供足夠大的賞金,或者即使他們提供了,白帽可能不相信團隊會履行他們的承諾。此外,許多漏洞例如升級產生的漏洞對于白帽來說可能過于緊迫,白帽沒有足夠的時間來領取漏洞賞金。在極端情況下,就像涉及300多個地址的Nomad黑客攻擊一樣,可能只是在不同時間下,接收者進行重復主動攻擊。
我們需要的是一種達成共識的方法:理想情況下,在漏洞被利用之前達成共識,并進行溝通。我們之前的文章《WhitehatsandDropboxes》提出了這樣的建議:在預先宣布的地址上放置一個「保管箱」,作為預先擔保資金的容器。但這仍然存在幾個問題:
白帽會足夠信任協議團隊使用「保管箱」嗎?如果承諾了獎勵,如何確保它會被兌現?僅治理本身無法提供任何保證。例如TribeDAO在第四次投票后,最終同意放棄償還Rari黑客攻擊的受害者8000萬美金的損失。我們如何創建白帽和協議團隊都支持的有效規范?如果每個協議都創建自己的規范,白帽可能沒有時間或途徑來正確審查這些規范,并且缺陷或歧義可能不會變得明顯,等到它們被完善已經為時已晚。SAFU:資金上傳的簡單方案
USDC脫錨當天DEX交易額創下約250億美元高點:金色財經報道,Defi Llama數據顯示,3月11日,隨著USDC脫錨,去中心化交易所(DEX)的單日交易額創下約250億美元的高點。此前DEX單日交易額高點(243億美元)出現在2021年5月,當時BTC價格約6.5萬美元,ETH價格約4400美元。
在上周六,交易活動因恐慌浪潮而激增,因為在美國發生短暫的銀行業危機后,與美元掛鉤的第二大穩定幣USDC出現脫錨狀態。大多數交易發生在Uniswap和Curve上,其中Uniswap周交易額達317億美元。(CoinDesk)[2023/3/15 13:06:26]
SAFU旨在作為一種簡單但可擴展的方式來指定白帽攻擊后的執行規范,特別是獎勵和分配。它包含兩個元素,我們為此提供一般指南和參考實現:
白帽聲明:協議團隊明確而簡單的聲明,承諾不對白帽采取法律行動。該聲明還指定了幾個關鍵政策要素:
發生漏洞時可以從中提取資金的來源地址應存入資金的Dropbox地址或合約白帽可索取的獎勵,指定為帶有可選上限的百分比索賠所需的條件,以及評估過程和解決時間表存入協議資金的Dropbox:從協議中提取的資金應存入的地址或合約。Dropbox合約可以是自動執行的,在沒有人為輸入的情況下按每個存款人處理索賠和獎勵。或者是設置一定條件的,并需要額外的輸入,例如治理批準或身份驗證。當前地址應始終列在聲明中,并且Dropbox參數應提前包含所設條件。
總而言之,白帽聲明和Dropbox提供了一個標準化但靈活的框架,任何協議都可以使用該框架來鼓勵黑客將用戶資金安全返還。例如SAFU提供了一種公開可見且可信的方式來實施SamBankman-Fried最近提出的5-5標準。我們相信這種解決方案大大優于利用后的談判,后者通常讓協議別無選擇,只能被迫接受。
雖然它還不是一份正式的法律合同,但由于DeFi的監管環境必須進行改善來讓這樣的合同合法可行。我們相信SAFU能夠提供更好的技術、法律和經濟模型清晰度,SAFU也將成為重要的一步。
達成共識的必要性
加密安全的競爭環境比管理它的規則發展得更快。圍繞白帽活動存在法律灰色地帶,而且對于具有道德感的黑客在發現關鍵漏洞后應該做什么也沒有明確的行為標準。足夠高調的黑客可以創建他們自己的策略,但這對于普通研究人員來說既不有效也沒有參考價值。
我們將現狀視為一個協調問題,考慮到DeFi的變化步伐,這是一個自然而然的問題,但必須在行業成熟之前解決這個問題。與其在漏洞被利用后爭先恐后地做出應對,團隊必須通過聲明預先與白帽溝通在發生危機時應該做什么,并預先承諾在漏洞利用后通過Dropbox遵守該政策。SAFU建立一套共享規范,其中明確規定了政策規范,白帽和用戶都感到受到公平對待,這將使加密行業能夠為協議及其客戶提供更好的安全保證。
加密稅務初創公司Koinly裁員14%:金色財經報道,加密稅收初創公司 Koinly 已裁員 14%,首席執行官 Robin Singh表示,我們正在采取措施,確保我們在度過加密冬天時盡可能精簡。雖然變革是業務不可避免的一部分,但Koinly度過了悲傷的一周因為我們不得不放棄我們的幾位同事。Koinly削減了多少職位尚不清楚。該公司的LinkedIn頁面列出 93 名員工。[2022/12/7 21:27:10]
通過SAFU框架,我們希望創建一個謝林點,參與者可以在沒有通信的情況下協作。任何人都可以創建一個標準,所以許多人不可避免地會這樣做,但在這種情況下,我們相信有一個特別強大的模型可以實現我們的愿景:YCombinator的SAFE或未來股權簡單協議。
SAFE、SAFT、SAFU
首先來呈現一個邏輯化的起源故事。在前YC的黑暗時代,每家公司都創建了自己的定制條款清單,非常早期的公司也是如此。早期公司創始人往往既沒有背景也沒有法律資源來正確理解提議的條款,不道德的投資者可以通過稀釋和清算優先權等方法獲取超額獎勵。
2013年YC引入SAFE解決了這種缺乏標準的問題。SAFE本質上提供了一種簡化的可轉換債務形式,使創始人能夠輕松理解條款清單,并在合理的基礎上公平比較報價。用一句話來傳達,就是100萬美元的SAFE和2000萬美元的上限不需要任何解釋,讓創始人和投資者可以透明而有效地相互交流。
類似的早期問題經常出現在加密領域,尤其是在協議生命周期開始時提供代幣時。ProtocolLabs的SAFT復制SAFE以進行代幣融資,自2017年推出以來也得到了類似的廣泛采用。SAFE和SAFT使一個廣泛而復雜的主題早期投資變得容易理解,它們通過提供一個標準化框架來解決協調問題,該框架仍然適用于所關注的所有標準。通過引入SAFU,我們希望加速加密安全研究中的相同過程。
設計原則
為了提供類似的簡單性和適應性組合,我們需要確保哪些特性?目前至少兩個主要變量,任何解決方案都應該對其進行概括:
對協議的信任:必須避免不同級別的人工參與。在一個極端情況下,零信任方法需要完全自動化的保管箱合約,因為即使團隊本身不受信任,也無需人工干預即可分配獎勵和返還資金。另一方面,高度信任的方法將允許一個或多個指定地址對每個聲明進行精細控制。來自白帽的承諾:必須進行不同級別的白帽披露。完全匿名的解決方案必須允許任何地址進行存款和索賠,而完全披露的方法可能需要白帽通過合規和KYC篩選,獲得治理的批準后履行額外的義務,例如事件記錄。嵌入在這兩個特質的是所有常見的加密屬性,例如去中心化、無需信任、無需許可和主權身份等。此外由于治理和身份等領域是具有比較規范且快速發展的解決方案的復雜主題,因此設計良好的保管箱應與其中任何一個或未來版本完美結合。
Frax Lend 已添加 gOHM 作為抵押品:12月4日消息,混合算法穩定幣協議 Frax Finance 旗下借貸產品 Frax Lend 已支持 gOHM 作為抵押品借出 FRAX。[2022/12/4 21:21:38]
在這方面,我們旨在實現以下設計原則:
簡單:應可以用一句話概括政策的全部內容。明確:應明確協議的法律和經濟意圖,以及合同的開源技術實施。明智:應提供適用于大多數協議的默認值,無需額外適應。靈活:應適應各方的信任、條件和匿名性。可信:應明確要求獎勵必須滿足哪些條件,以及對于給定的有效存款水平可以保證什么最低獎勵。不可利用:至少應防止不受信任的實體以廉價方式破壞合約的預期功能,例如通過稀釋或延遲獎勵。全自動保管箱應防止所有實體包括所有者和協議的破壞。SAFU用戶手冊
SAFU由Statement和Dropbox組成,但團隊在這些范圍內對管理獎勵和協議資金返還的過程具有相當大的自主裁決權。下面我們概述了協議團隊在建立SAFU時需要做出的關鍵選擇。
白帽聲明
該聲明的本質是雙重的。首先它涉及承諾不對按照聲明行事的白帽采取法律行動,同時涉及獎勵政策的概述、實現它所需的條件,以及解決索賠的過程和時間表等關鍵描述。更準確地說我們預計大多數協議將指定以下內容:
獎勵政策:白帽有權獲得的一部分存款,通常指定為百分比或上限獎勵例如資金的5%或1000ETH。這些可能以總量或每個代幣計價,但我們預計Dropbox本身將使用每個代幣規范來避免預言機依賴。時間表:可以存入和領取資金的事件順序。為清楚起見,我們鼓勵協議根據具體情況而不是事件來解決索賠。基本時間表包括:存款間隔:發件人從協議中盜取資金后必須將資金存入Dropbox的寬限期。從法律角度來看,直接和立即轉移可能更可取,但并非在所有情況下都是可能的。索賠延遲:發件人可以要求獎勵之前的最短等待期。我們建議至少24小時,在此期間漏洞利用的程度將變得清晰。發件人索賠間隔:協議可以收回發件人獎勵的最長等待期,以避免資金滯留在合約中。發件人批準流程:發件人必須完成的步驟,例如身份驗證以索取資金。應具體說明流程將如何進行,包括治理投票和緊急理事會等,誰將負責批準索賠,以及做出決定的最大延遲時間。該聲明應通過協議顯著注明且公開地顯示,例如在網站或Twitter介紹上的靠前鏈接,并且理想情況下應包含某種形式的可驗證歷史記錄,以便觀察者準確了解在漏洞利用時發布的內容。我們推薦Arweave,或者任何一次編寫,永久查看的解決方案都可以。
美國加州通過一項可使用區塊鏈技術記錄出生、死亡和結婚證的法案:9月30日消息,美國加州州長Gavin Newsom簽署了一項新法案,將授權郡縣記錄員根據要求,通過區塊鏈技術使用可驗證的憑證記錄人們的出生、死亡和婚姻證明,并且允許即刻以PDF形式發送記錄,而不是使用傳統的10天郵寄的方式。
該法案由加利福尼亞州參議員Robert Hertzberg提出,他在一份聲明中說:“這種安全且非常方便的流程將允許普通人訪問他們的重要記錄,并表明加州仍在引領創新。”(CoinDesk)[2022/9/30 6:04:19]
協議基金的Dropbox
在最簡單的情況下,Dropbox可以是通過多重簽名或治理,由協議控制的預先指定的地址。但我們相信智能合約如通過SAFU存儲庫提供的模板更加合適,它將通過在代碼中明確指定獎勵和依賴關系來幫助協議在退還資金過程中建立信任。本著這種精神,我們定義了一個具有以下功能的接口:
存款:接受代幣,注冊發送者。并根據指定的比例和上限更新每個代幣分配的獎勵。認領:支付發件人在當前無人認領的獎勵中的份額。要求發送者聲明延遲已經過去,如有必要發送者被批準,并且協議尚未收回獎勵。賞金:顯示給定存款的潛在賞金和當前批準狀態。取款和取款代幣:支付協議資金,不包括任何分配的發件人獎勵。批準和拒絕賞金:批準或拒絕對給定存款的索賠;旨在在完成任何身份驗證或其他發件人特定過程后調用。我們的實現還包括以下參數:
賞金百分比:發送者可以要求作為獎勵的存入資金的百分比。賞金金額:可分配用于獎勵的最大資金量。可以由合同所有者增加。已批準:每次存款批準標志,如果不需要身份驗證或其他索賠批準過程,則默認為true。上述界面旨在涵蓋從無人工中介到每個發件人的披露和基于治理的批準的全部范圍:
完全自動化:一旦最小延遲過去,發件人可以立即索取他們的獎勵,協議不能以任何方式限制或拒絕。完全有條件的:合約所有者必須為每個發送者單獨批準獎勵。我們預計這對于與機構合作和或在以美國為中心的監管環境中的協議來說將是首選或必需的。可以在GitHub上找到可以適應任一模式的接口和我們的參考實現。
告誡開發者
雖然我們希望我們的默認實現能夠滿足大多數基于EVM的協議的需求,但我們鼓勵開發人員使用其他鏈和語言來擴展我們的模型。但我們建議在擴展功能或更改聲明流程時要謹慎,因為引入漏洞比消除漏洞容易得多。我們在設計過程中考慮了以下所有因素:
惡意發件人:惡意發件人可以廉價地延遲來索取獎勵或資金。稀釋:惡意發件人可以廉價地稀釋其他發件人的可索取獎勵。超額支付:某些操作序列導致總獎勵超過指定上限。擱淺的資金:某些操作序列會產生永久鎖定的余額。正如DeFi本身一次又一次地證明的那樣,每一種機制都可能導致意外或惡意行為,不要讓恢復機制成為薄弱環節!
活躍狀態超10年的比特幣供應量達到2,504,177.011 BTC創歷史新高:金色財經報道,據 glassnode 最新數據顯示,活躍狀態超10年的比特幣供應量已達到2,504,177.011 BTC,創下歷史新高。[2022/8/22 12:39:27]
建立更好的共識
正如任何工程師都會承認的那樣,加密安全的黑暗森林帶著某種浪漫。然而任何行業成功的最終標志都是變得乏味,制定一個行之有效的解決方案,從而將注意力轉移到其他地方。正如數學家AlfredNorthWhitehead所寫的那樣,「文明的進步是通過擴展我們可以在不考慮它們的情況下執行的重要操作的數量。」正如SAFE和SAFT為早期股權和代幣交易結構做出的貢獻一樣,我們希望SAFU將作為一種簡化且易于理解的工具來幫助協議和白帽協調。
附錄:實現案例
我們提供了一個Solidity實現案例,可以用來部署為自動或有條件的保管箱。在自動模式下,白帽可以從保管箱中領取獎勵,而無需任何檢查。在條件模式下,白帽只有在協議批準后才能領取獎勵。前者對雙方來說更容易預測,因為協議和白帽之間的交互受到透明代碼的嚴格控制。但是出于合規性或調查目的,希望執行KYC或治理檢查的協議可能需要后一種模式。
在本節中,我們首先描述實現,然后說明某些以一些復雜性為代價阻止操縱的設計元素。
生命周期
在啟動時協議團隊部署了SafuDropbox合約。啟動合約時應指定以下參數:
給予白帽的份額控制獎勵是否可自動領取的標志白帽必須等待領取其獎勵份額的最小時間間隔,以及協議沒收獎勵之前的最大時間間隔合同的管理機構此外,協議可能希望在啟動時調用函數increaseBountyCapForToken。
默認情況下,合約將所有代幣的上限設置為零。為了激勵白帽,協議應該提高選定代幣的上限。請注意,如果以多個代幣提供賞金,除非聲明中另有規定,否則白帽可能會選擇將資金存入具有最高價值上限的代幣中。請注意,可以根據需要多次調用此函數,并且每次只會增加給定令代幣的上限。為了保護等待獎勵的白帽,上限永遠不會降低。假設白帽在協議中發現了漏洞并獲得了資金。白帽將通過調用存款函數將資金存入SAFU合約,該函數會向他們發出存款收據。
如果標志autoApprove設置為true,則自動批準收據。否則協議必須使用approveBounty函數手動批準收據。請注意,收據一旦被自動或手動批準,以后就不能被拒絕。如果協議不批準收據,它可以調用denyBounty函數刪除收據并將所有存入的資金標記為可被協議索取。假設白帽收到批準的收據,他們現在希望從協議中撤回他們的獎勵。他們通過調用claim函數來完成此操作,該函數處理已批準的存款收據,至少已等待minDelay時間段。
在minDelay過去之前,白帽無法聲明。此外如果白帽等待的時間過長,直到maxDelay過去之后,白帽可能會發現協議已經無法獲取獎勵。因此,白帽應該在minDelay和maxDelay之間的時間窗口內領取他們的獎勵。白帽的獎勵與兩個變量有關:獲得的資金份額和總代幣上限。如果未償和已付收據的獎勵總和不超過上限,則白帽將獲得按比例獲得安全資金份額。如果超過上限,則白帽將按比例獲得剩余上限空間的份額。最后,協議團隊可以收回他們自己的資金。他們通過調用給定代幣的withdrawToken函數來做到這一點。該功能的工作原理如下:
首先,計算來自未結收據的所有可用資金,這些收據要么被拒絕,要么已超過其maxDelay。接下來,將所有已批準且已超過minDelay等待的收據的資金相加,減去可能的最大支出。如果收據既沒有被批準也沒有被拒絕,則故意將其排除在外。這是為了激勵協議做出決定,而不是讓這些收據及其白帽陷入困境。未超過minDelay的已批準收據也被排除在外。雖然這似乎沒有必要,但它可以防止一些漏洞利用向量。該協議可以繼續間隔退出。最后一旦每張未清收據都超過了maxDelay閾值,該協議就可以清除合約中的所有剩余資金,包括存款、無人認領的獎勵和緩沖獎勵等。
最后,我們實現了協議可以調用的關閉函數,以防止新資金存入合約。這可以幫助協議安全地退出合同,并且無法撤消。
計算支出
支付邏輯旨在根據已獲得的資金按比例發放獎勵,但有一個可選的上限。舉例來說,假設一個協議有1億美元的TVL,向白帽提供10%的份額,并設置了800萬美元的最高上限。此外假設有三個白帽按順序存入:Alice存入5000萬美元,Bob存入4000萬美元,Charlie存入1000萬美元。
如果Bob和Charlie在Alice的最短等待期內存款,他們的潛在索賠總額為500萬美元、400萬美元和100萬美元,超過了800萬美元的上限。他們都按比例分配:Alice獲得400萬美元以獲得TVL的50%,Bob獲得320萬美元獲得40%,Charlie獲得80萬美元獲得10%。如果Bob和Charlie在Alice取款后存款,則分配是不同的。在所有情況下,Alice都得到了她作為5000萬美元擔保的10%的全部500萬美元,因為在她退出時,所有聲稱的和潛在的獎勵都沒有超過800萬美元的上限。在后一種情況下,Bob和Charlie的分配現在取決于Charlie是在Bob取款之前還是之后存款。
如果Charlie在Bob提取獎勵之前存款,他們將平分剩余的300萬美元獎勵。Bob獲得80%,Charlie獲得20%。如果Charlie在Bob取款后存款,那么鮑勃將獲得剩余的300萬美元獎勵,而Charlie則一無所獲。如上所示,這種設計還創造了一種激勵,讓他們提前存款并獲得剩余獎勵的最大份額。
五個潛在問題以及應對方案
合約邏輯試圖代表協議和白帽強制執行規范行為。下面我們將解釋五個潛在問題以及如何緩解這些問題。
惡意拖延:能夠廉價地拖延支付給白帽或協議的能力。一個自然的設計可能會使用一些事件的概念例如特定的黑客攻擊,它以存款開始,并在一段時間過去沒有任何存款時結束,然后合約可以計算和支付獎勵。但是惡意用戶可以通過向合約發送重復的小額存款來利用這種設計,因此該事件永遠不會被視為已結束。相反我們的合約在很大程度上孤立地處理每筆存款,存款僅通過合約的最大支付上限進行交互。
爭奪獎勵:獎勵不公平地分配給早期存款人的結果。該合約在聲明之前引入了一個minDelay參數,即使對于已批準的收據,也可以避免在獎勵上限時白帽之間的競爭。為了說明這一點,以我們之前的協議示例為例,該協議具有1億美元、10%的賞金和800萬美元的上限。兩個白帽黑客Alice和Bob,他們在幾分鐘內各自獲得了5000萬美元。如果沒有最低限度的延遲,Alice可以索取500萬美元,而Bob只剩下300萬美元,盡管他們的貢獻基本相同。更糟糕的是,如果合同中還有資金,其他白帽公司將缺乏獲得資金的動力,因為上限會阻止他們獲得獎勵。相比之下,建立一個minDelay允許所有白帽在該時間間隔內獲得資金并獲得公平的獎勵,例如給Alice400萬美元,給Bob400萬美元。
擱淺資金:資金被永久鎖定在合約中的結果。我們的實現具有maxDelay的特點,之后協議可以從存款中收回所有資金,包括獎勵。如果發件人未能領取獎勵,這對于防止資金鎖定在合約中是必要的。
緩慢批準:為了激勵協議完成批準過程,假設autoApprove為false,我們阻止協議在給定存款中收回自己的資金,直到它批準或拒絕該存款。當然協議總是可以等待maxDelay間隔或拒絕所有收據,但這種方法會在聲譽上付出高昂的代價。當然最清晰的方法就是將autoApprove設置為true。
稀釋:確保資金的發送者集體獲得的獎勵少于他們應該有權獲得的份額。回想一下這個例子,一個協議有1億美元的TVL,由Alice和Bob擔保,上限為800萬美元。如果協議能夠立即提取自己的資金,它可以在minDelay期間提取和重新存入未指定用途的9200萬美元,從而大大減少支付給Alice和Bob的整體獎勵。為了避免這種情況,我們還要求協議在回收之前等待minDelay。當然,協議仍然可以用另一種資金來源稀釋獎勵,但是這種方法使得使用協議自己的TVL更難做到這一點。我們可以通過使協議自己的minDelay稍微延長一些來改進,但決定支持參考實現的簡單性。
2022.11.08又會是一個載入Crypto史冊的一天。三天時間,一代巨頭跌落神壇,崩潰速度超乎所有人的預料,行業信心被嚴重打擊。但從另一個角度來看,這或許是行業的新的轉折點.
1900/1/1 0:00:0011月17日,在TechCrunch于邁阿密舉辦的以加密為主題的活動中,OpenSea首席執行官DevinFinzer探討了公司業務與NFT的未來市場.
1900/1/1 0:00:00在目前,以太坊的發展趨勢正越來越傾向于模塊化區塊鏈。在模塊化區塊鏈的架構下,以太坊上的交易計算和執行不再由主網來操作,這部分工作轉移到鏈下的Layer2上來完成,這種方案減輕了主網的負擔,大大擴.
1900/1/1 0:00:00據MarsBit統計,10月22日至10月28日期間,加密市場共發生19筆投融資事件,其中基礎設施領域3筆、DeFi領域1筆、鏈游和NFT領域4筆、Web3領域3筆.
1900/1/1 0:00:00Sei是第一個支持訂單簿交易的專用第1層區塊鏈,旨在建立一個可靠、安全和高吞吐量的環境。DEX是加密貨幣中最為廣泛采用的應用,但問題是:DEX選擇"一刀切"的方法;網絡擁堵使訂單無法進行;性能普.
1900/1/1 0:00:00OPStack這想法我真的喜歡(NFA)。最近比較忙,拖到今天才開始寫thread。如今鏈的路線早已明朗,只有A/B兩路線.
1900/1/1 0:00:00