2014年1月7日 星期二

[比特幣合約]對特定方迅速微调的支付(micropayments)

原始資料請參考 Rapidly-adjusted (micro)payments to a pre-determined party

無信任基礎的雙方,如網咖,可多次小額交易為保障彼此的手段,但缺點是交易成本高,若建立雙方有期限的支付通道(payment channel),可有效降低雙方交易成本,方法為,先產生一筆需雙方簽名的押金交易,接著產生一筆到期全額退款交易,期間進行多次微調交易(不超過押金額度),直到到期前將最後一次微調交易廣播,便可省下多次交易的手續費

雙方的協定流程如下

  1. 客戶端產生一新公鑰K1.向伺服器要一公鑰K2
  2. 客戶端產生並簽署尚不需廣播的交易T1,支付10BTC到一個同時需要K2及K1的輸出,輸出腳本為 "2 K1 K2 2 CHECKMULTISIG"
  3. 客戶端產生退款交易T2,輸入連結到T1,將所有錢送回自己,設定時間鎖,例如三小時,T2不要簽署並傳送給伺服器
  4. 伺服器用K2簽署T2並傳簽名給客戶端,注意此刻伺服器還沒收到T1
  5. 客戶端驗證T2的伺服器簽名
  6. 客戶端簽署T1並傳簽名給伺服器,(伺服器?)廣播交易T1,錢被鎖住
  7. 客戶端產生交易T3,輸入為T1,有兩個輸出,一個到K1另一到K2,一開始配所有值給K1(如同沒上時間鎖的退款交易),客戶端簽署T3並提供交易及簽名給伺服器
  8. 伺服器驗證T3輸出到K2(屬於伺服器的部份)的款項及客戶端的簽名
  9. 當客戶端希望付給伺服器,就調整T3的副本,將自己的K1輸出額度挪一些給伺服器K2,然後重新簽署並送簽名給伺服器,客戶端可只傳必要的資料,由伺服器調整自己的T3副本

ps.目前(2013)時間鎖交易的實作,時間未到時是不會廣播的

沒有留言:

張貼留言