數位服務如 Drobox、GitHub 通常由公司帶領產品走向,並且傾聽用戶回饋來完善服務。這個循環運作完善時,用戶可以付費得到它需要的軟體,而公司可以因此獲利。這樣的流程可以稱為是產品治理(或是公司治理,看治理的對象是什麼)。

由於部分的產品是純粹的軟體服務,產品的邏輯大多都在程式裡面完成,要修改這些邏輯通常需要透過軟體開發人員協助達成。但既然是純數位的服務,那有沒有可能直接透過客戶的回饋甚至投票直接決定產品的走向呢?是否有一種方式可以達成就連管理者也無法否決治理決議的技術可能性呢?

這就是我們今天想探討的社會實驗 — 民主治理軟體專案的技術可能性。

探索與假設

首先假設一個小範圍的軟體服務來評估可行性如何。假設有一個待辦事項軟體服務,使用者可以註冊帳號,並且使用這個軟體紀錄待辦事項。

當我們要設計一個可以反饋使用者需求,自動化採納提案的框架,該怎麼做呢?當一個使用者想加入一個功能「增加 Priority 欄位」並且發起投票後採納,我們需要克服哪些技術障礙?

第一件可以做的事情是採用開放原始碼的授權,並且在 GitHub 接受用戶的 Pull Request,這樣的話想要修改邏輯的使用者可以透過這個途徑完成。

接下來要如何同意這個修改可以合併入源碼中呢?我們可以透過一個投票系統來完成這件事情,但設計一個可以永續發展專案的投票機制是個很龐大的主題,這邊我們先暫且不討論,但可以說我們需要一個投票系統來達成。最簡單的方式可以做成「如果這個 Pull Request 得到 10 個讚就合併入專案源碼」,我們可以透過另一台伺服器監控投票狀況,如果投票通過就讓 Pull Request 自動合併入專案。

接下來要處理的是部署的問題,我們可以透過像是 GitHub Action 這樣的持續整合 (Continuous Integration, CI) 的服務達成自動部署,最終的目的可能是部署到 AWS 上面的伺服器主機,完成整個專案治理框架。

問題

但這樣的技術真的有辦法達成完全民主的治理框架嗎?通過投票的提案就一定可以加入到系統當中嗎?仔細觀察上面的例子就可以發現有很多狀況無法達成。

首先這個投票系統會觸發 Pull Request 合併入專案,這項工作會需要一個伺服器執行,如果這個伺服器提供者的利益跟這個提案有衝突時,他很有可能會停止伺服器運作,讓這個提案無法通過。

部署也是一樣的問題,甚至當服務架構在 GitHub 或 AWS 上面也一樣,只要服務提供者的利益跟提案衝突,每個環節都會有一個管理者,管理者的權力無法完全放棄,只能轉移給另外一個人。但是另一個人依然會有管理權限,當利益衝突時,總是會有人可以按下那個停止按鈕。

就像是最近發生的 GME 在 Robinhood 與其他券商只能賣卻不能買的事情一樣,當利益衝突時,總是有一個切入點讓當權者控制。

所以,全然民主的數位產品治理在目前的技術框架上仍然無法完成嗎?並不是,如果這個專案的核心邏輯運作在區塊鏈上就會有達成的可能。

解方

我們一樣假設還是相同的待辦事項軟體,使用者介面可能還是需要放在 Web 上面,但核心邏輯可以搬到區塊鏈上,透過 Web 介面跟區塊鏈互動。首先為了可以修改程式邏輯,我們可以使用 openzeppelin-upgrades 套件 來將系統分成兩個部分,Proxy 與 Implementation。


Trust Token API 是一個正在標準化的瀏覽器 API,主要的目的是在保護隱私的前提下提供跨站授權 (Cross-domain authorization) 的功能,以前如果需要跨站追蹤或授權通常都使用有隱私疑慮的 Cookies 機制,而 Trust Token 則是希望在保護隱私的前提下完成相同的功能。

會在 ZKP (Zero-knowledge proof) 讀書會研究 Trust Token 主要是這個 API 採用了零知識證明來保護隱私,這也是這次讀書會中少見跟區塊鏈無關的零知識證明應用。

問題

大家應該都有點了一個產品的網頁後,很快的就在 Facebook 或是 Google 上面看到相關的廣告。但是產品網頁並不是在 Facebook 上面,他怎麼會知道我看了這個產品的頁面?

通常這 …


Perpetual Protocol 最近決定採用 xDai Network 作為目前 Layer 2 的解決方案,xDai 有許多優點讓我們可以在比較少的開發成本下就可以轉移到 Layer 2 的網路。本篇文章將會從網頁前端的觀點講解一些技術細節如 Meta Transaction, EIP712 結構化簽名, Layer 2 Deposit/Withdraw 流程以及整合途中遇到的技術難題。

如果對為什麼 Perpetual Protocol 選擇 xDai Network 可以閱讀下面這篇文章。

簡介

採用 Layer 2 方案主要的目的是希望系統比較不要受到 Ethereum 浮動交易費影響導致系統運作價格昂貴,而在智能合約的層級採用 Layer 2 後,從網頁前端的角度來看要達成的目標則是 …


在還沒有睡醒的早上,我最近經常到家裡附近的全家買三明治配冰拿鐵,結帳的時候打開全家 app 掃了條碼 — 一筆 59 元的信用卡交易的通知顯示在手機上,不到一秒鐘就完成了。

等等。

在電光石火的一秒鐘,支撐這一筆交易的是一層層的各種金融服務,最終才會讓我們這麼快速的就可以完成這樣的一筆交易,這一層層的金融服務中間則是透過「信任」這種機制將不同服務緊緊的黏合在一起。如果沒有信任,所有你今天使用的傳統金融服務都無法使用。

如果你想像柯南一樣的抽絲剝繭了解真相,就讓我們從基礎的基礎來談吧。

貨幣

你的一斤稻子跟我的三斤螃蟹是差不多價值時,兩個人同意後就可以互換商品。但這樣每個人在以物易物時都需要討價還價。此時村子裡召開村民大會,長老協調大家每個人現在都可以用貝殼作為價值衡量的單位,當每個人都可以用貝殼衡量每件商品以及服務的價值時,「貨幣」就成形了。

但是哪些貝殼可以拿來交易就變成一個嚴肅的問題,村長這個時候就需要召集一些人作發行貝殼的確認,甚至會需要控制貝殼的發行量來控制物價。

但大家都得信任村長,否則亂使用貝殼沒有人仲裁時,貨幣就無法正常運行。

存款

ATM by Roadsidepictures, cc-by-nc

存款是個很方便的服務,旅途在外身上不需要帶太多錢,需要時再到銀行領錢就行了。但你怎麼確定到銀行都可以領出錢,而他們也沒有亂動你的存款呢?在台灣的銀行都相對安全,主要是因為銀行是政府高度監管的行業,在政府的監管下銀行有一定的規矩需要遵守。

反過來想,如果今天銀行不是高度監管行業為怎樣?或是如果我們的政府是個貪腐的政府,無法取信於我們而好好的監督銀行會發生什麼事情?

這變成我們要仔細的審視每間銀行的信譽,時時關注他的財務健康狀況才不會發生領不到錢的窘境,到最後你只能信任他了。

依照台灣的狀況,我們信任了政府所以也信任了銀行會正常運作。如果沒有信任,這些服務都會窒礙難行。

匯款

匯款也是銀行的經典業務,如上述也是信任建構起來的服務。但是在不同銀行間甚至不同國家之間的匯款就是另外一件事情了。

資產的轉移對銀行是一件很有風險的事情,只要金額不對時就會有一方蒙受損失。最保險的方法是銀行 A 真的把鈔票交給銀行 B,但這樣效率太差,有效率的方法是在雙方的記帳簿上同時修改,而銀行之間真正的資產轉移可以晚點累積了許多交易後再作即可。

那到底要怎麼同時修改記帳簿才會確認雙方都沒有作錯呢?這個時候需要有雙方都信任的公證人,由他來確保這個修改的手續是公正無誤的。

而在台灣這就是財金公司擔任的角色。財金公司由台灣的金融機構一起持股,每間銀行都有一部份的股份,由財金公司來負責跨銀行之間的交易。國際之間又更複雜,是透過 SWIFT (環球銀行金融電信協會) 提供類似的服務,而交易時間經常需要一周的時間才能完成。

思考一下,如果沒有雙方都信任的公證人,跨銀行之間甚至跨國的匯款要怎麼完成呢?

貨幣兌換


上篇《孤身的熊野古道》提到的爬山行程其實只是這趟旅程的其中一段,其實整趟旅程是沿著紀伊半島的行程,除了熊野古道那段是登山外,其餘大多利用「伊勢、熊野、和歌山地區周遊券」搭乘火車移動。

川湯溫泉旅館

最後民宿老闆放我在熊野本宮大社附近,時間還早索性就在附近逛了一下,先把附近區域先熟悉熟悉,相信我過不久後就會回來繼續完成熊野古道的旅程了。吃完民宿幫我準備的午餐便當後時間還早,而且前往下一個住宿地點的公車也還沒到,想了想感覺可以走過去,Google 了一下發現走過去大概一個小時,閒著也是沒事就決定走過去了。

如果想在熊野泡溫泉有三個選擇,湯之峰、川湯或渡瀨溫泉。最有名的是於 1800 年前發現日本最古老的溫泉湯之峰,不過考慮到我的行程最方便的是在河邊的露天溫泉川湯,所以就訂了一間在這邊的溫泉旅館。

到旅館 Check in 的時候,我從大阪寄來的大背包也到達飯店囉,好久不見 😁 這次帶了兩個背包,除了這個 45L 的背包外,另外一個是 19L 可收納的背包,爬山的時候我就帶著這個 19L 的背包,到飯店後再把行李合併收起背包。


2019 年夏天結束上一份工作後,幾乎作為離職的一種儀式,我訂了張機票去日本走走,前幾天跟 Chialin 一起,後面一個多禮拜則是獨自一人的延長假期。

自從聽了一起攀岩的朋友 Yuna 分享了他的西班牙朝聖之旅後,又發現了日本的熊野古道跟西班牙朝聖之路齊名的兩條朝聖路。雖然我沒有特定宗教信仰,但是這樣朝聖之路的故事還是讓我很想去探索其中,雖然自己登山有一定的風險,但考慮到自己爬的路線是整段熊野古道中最簡單的,加上路線上有很多撤退點可以搭公車,幾經考慮後就決定來自己爬熊野古道了。

啟程

早上送別 Chialin 後就剩下我自己一人了,因為是單趟路線,所以先去了一趟黑貓把自己的大背包先寄送到幾天後會入住的溫泉飯店。後來就坐火車到田邊站。


最近看了好和弦的《我寫了一個「鋼琴鍵盤顯示app」,免費送給大家 + 使用教學!》覺得滿有趣的,主要是製作影片的時候可以把實體鋼琴鍵盤彈的按鍵顯示在螢幕,之後可以後製讓觀眾知道彈鋼琴鍵盤的時候按下了什麼按鍵。

之前大約七年前的黑客松(天阿好久了)有做過 Mozart 專案 透過 Web Audio 標準來製作音樂指揮家的遊戲。

看了這個影片之後就想說目前網頁的 Web MIDI 標準應該也可以作出類似的東西。在好和弦的影片當中他是透過 processing 這套軟體與相對應的外掛來達成這樣的功能,會需要安裝一些額外的軟體。不過如果透過 Web MIDI 標準來做就只要打開網站就可以達成了,後來試了果然沒問題。

不過最近很久沒寫 CSS 了,學到比較多的反而是 CSS 🤣

先看一下 DEMO,直接打開 https://yurenju.github.io/piano/ 網頁就行了,不過我先透過 Edge browser 的功能可以讓任何網頁獨立在一個視窗的功能讓他看起來像是一個獨立的 app。


這次來講解目前使用的自動化記帳工具,我自己寫了一組 script 針對國泰世華銀行帳戶、信用卡以及加密貨幣的交易紀錄作自動化記帳的功能,其中信用卡則結合了電子發票輔助取得更多資訊。不過這些 script 只能滿足我自己的記賬需求,如果不足的話可以 fork 一份修改。

使用 npm 就可以安裝這個 script:

$ npm install -g @yurenju/soy-cli

首先先從比較簡單的國泰世華銀行開始。

國泰世華銀行轉帳明細

在銀行方面我是解析了國泰世華網路銀行交易明細的 csv。在國泰世華的網路銀行,選擇「台幣帳戶明細」那邊可以將交易明細用 csv 格式儲存,不過因為他是用 big5 編碼儲存,所以直接打開會是亂碼。

下載後就可以用以下指令來把他轉成 beancount 格式的檔案,達成自動記賬。

$ soy cath …


區塊鏈是一個每個字都看得懂,但是各種介紹文章卻讓人更加疑惑的技術。本文希望可以透過問答與比喻來解釋這個技術,讓大眾也可以理解區塊鏈與其他技術的區別與優勢。

雖然說區塊鏈有很多應用,不過讓我們先從金融系統開始講起。

首先要讓大家連續思考三個問題,第一個是:

你在銀行存了錢,為什麼不擔心錢被 A 走?

其中一個答案是政府從以前的經驗學習到銀行確實可能有這個問題,所以銀行是個國家高度監管的行業,開設與運作程序都有一定規範。因為我們「信任」國家在發生問題時會協助處理,所以我們可以安心地把錢存在裡面,需要時可以提領,不需擔心銀行會 A 我們的錢。

下個問題:

你把錢從富邦轉到台新,為什麼兩間不同的銀行可以互相轉帳?

錢要在兩間銀行間轉移需要兩邊的資訊系統可以互通,而且定時會需要有清算機制才知道互相欠對方銀行多少錢。但是每間銀行的資訊系統如果都要對接,一間間實作是很沒有效率的。

為了讓國內所有銀行都能跨行轉帳,有一間由財政部與公民營的金融機構合資成立的「財金公司」,由它負責整合、交換不同銀行之間的資訊系統才得以完成跨行轉帳,而因為這間公司由國家以及眾多銀行共同成立,由大家合資的方式來解決信任問題,讓這些銀行可以「信任」財金公司來處理跨行轉帳業務,如果不是受信任的中介機構來負責,每間銀行都會擔心會不會少算錢讓自己的銀行利益受損。

最後一個問題:

你要轉帳給美國的朋友,需要填什麼資訊?

參考台灣銀行申請書的「電子銀行服務申請書及約定書」,要填的資料有行名、銀行代號、地址與 SWIFT code。SWIFT 的全名是環球銀行金融電信協會 (Society for Worldwide Interbank Financial Telecommunication),這個代碼是由 SWIFT 國際合作組織所提供的國際銀行代碼,加入這個組織的銀行可以透過它所提供的服務來進行國際跨行轉帳。以我自己的經驗每次轉帳要花數天到數周的時間不等,其中還有可能會有二到三手的費用產生。網路上的一篇文章《國際匯款以及費用》講解了過程以及中間可能產生的費用。

加入 SWIFT 的銀行因為「信任」這個國際合作組織,所以可以做到跨國之前的資產轉移,而且雖然說做到了,但是費用跟時間的成本其實也都不低。

說到這邊大家應該多少感受到了,這些金融的服務都是建構在一層層的信任關係,個人信任銀行與國家,銀行之間信任中介組織,不論國內或跨國都相同。我們的金融系統是靠一層層的信任建構而成。

如果沒有這些信任關係,我們現在的金融系統是無法建立起如此方便的系統。但金融系統已經存在許多,目前的架構是在數十年前所訂定,隨著科技日新月異,如今我們已經有更多的技術與科技了。

那讓我們反過來問個問題:

如果不靠一層層的信任關係,以現在的科技要怎麼打造金融系統?

答案之一就是區塊鏈。

區塊鏈利用了這數十年來累積的科技,創造了一種不需要依靠層層信任關係就可以完成金融系統的科技。轉帳給另外一個人,中間是不需要信任一個特定的中介組織,這樣的技術類型稱為「去中心化」(Decentralized)。當然區塊鏈除了金融系統以外還可以做其他事情,不過今天讓我們先專注在解釋金融系統。

啟文要轉錢給馬克,該怎麼做?

上面有提到以前的金融系統都是由一層層的信任所打造,仔細想想,如果沒有這樣的信任關係,台北的啟文要把錢給高雄的馬克是非常困難的,那目前銀行跨行轉帳運作的方式是怎麼做的呢?

啟文要轉帳 5000 元給馬克的時候,涉及到兩個銀行以及一個中介組織。這個中介組織會負責轉送雙方的需求以及確認條件是否符合,比如說帳戶是否存在、轉出帳戶是否足額,轉帳結束後將雙方銀行的資產變動記錄下來,過一段時間後會清算每間銀行的資產變動。

那區塊鏈的作法是怎麼做呢?首先區塊鏈是去中心化的技術,代表沒有像中介組織一樣的角色,取而代之的是一台台獨立運作的電腦負責處理轉帳事務,這些電腦稱為節點 (Node) 或礦工 (Miner)。

銀行的中介組織一定要特定機構運作,但區塊鏈的節點則是所有人都可以自由的下載礦工軟體並且加入,而這些軟體都用相同的規則運作,這個共同的運作規則稱作共識機制 (Consensus)。這些礦工處理轉帳事務會有獎勵,這也是為什麼大家會想加入當礦工了。

而每礦工的電腦上都記錄了一模一樣的交易紀錄。


說完了基礎記帳,這次來講要如何用 beancount 來做加密貨幣的記帳,同樣的概念也可以用在投資股票上。在進入正題前先跟大家解釋一下資產價值的紀錄的幾種方式。

假設這樣的情境:

  • 原本有 3000 TWD
  • 今天用 1000 TWD 買 1 ETH (價格 1000 TWD)
  • 明天用 2000 TWD 買 4 ETH (價格 500 TWD)
  • 後天賣掉了 2 ETH 得到了 5000 TWD (價格 2500 TWD)

請問收益是多少呢?

這答案依據怎麼計算收益會有很多種不同的版本。如果用平均來看,買 ETH 的平均價格是每顆 600 元,賣 2 ETH 原本只能得到 1200 TWD,所以可以說賺了 3800 TWD。但如果計算方式是先買的 ETH 先賣掉,所以其實成本應該是賣掉的 2 ETH 當中,其中 …

Yuren Ju

旅行、咖啡、科技宅

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store