Ark 基本的な仕組み
これが一番わかりやすい
ただし微妙に今の実装とは違う気がする
That single user will have to pay the fees to expand the tree of off-chain transactions and reach their specific output. This is costly to that user and thus puts a economic limit on what the smallest viable denomination inside Ark could be.
UTXO を複数人で共有する
例えば、2人で共有する場合、ある UTXO を unlock して2人に送金する tx があれば、2人で共有していることになる。この tx は off-chain でよい
off-chain に存在する UTXO を VTXO と呼んでいる
10 BTC UTXO を、A と B それぞれに 5 BTC 送る off-chain tx があるとき、A, B はそれぞれ 5 BTC 保有しているのと等しい
言い換えると、off-chain tx で、UTXO の配分を決めている
この配分を変化させることで「送金」を行うことができる
10 BTC UTXO を、A に 6 BTC, B に 4 BTC 送る off-chain tx を作れば、B -> A に 1 BTC 送金したことになる
配分を変えるには、新しい UTXO をベースにする
従って送金のたびに L1 tx が必要になる。しかし、UTXO を共有する人数が多ければ、L1 tx 1つにおいて複数の off-chain tx が行えるので効率的である。
これらのベースとなる UTXO には長めのタイムロックがかけられるため、Ark には流動性の問題があるとされることがある
タイムロックが 1 week だとする。10BTC の UTXO1 を A,B で 5 BTC ずつ持っている。A->B 1 BTC の送金をする場合、新たに 10BTC の UTXO2 をベースに、A に 4, B に 6 BTC と分配する。さらに送金する場合は 10 BTC の UTXO3 をベースに、A に 3, B に 4 BTC と分配する。UTXO1 の 10 BTC は1week timelock の間は使えないので、この例の場合、30 BTC が必要になってしまう。これは現実的ではない。いくつかの解決策が示されてはいる。
どうやって古い tx を無効にするのか?
新しい tree を作るタイミングで、前の tree での VTXO を無効にする処理を行う
forfeit tx とか呼ばれている
ベース UTXO の提供は、ASP と呼ばれるサーバーが行う
ベース UTXO は、ASP と参加者との multi sig
covenants を使うことで、最初 Asp と参加者が合意して covenants tx に署名すれば、意図しない tx で double spend されることは防ぎつつも、マルチシグのためのコミュニケーションも不要にしている
最近の ark では、送金は round を用いない out of round payment と呼ばれる
round の頻度が高すぎると、on chain tx のコストが大きいため