Status Open Bounty で OSS プロジェクトに Bounty を設定し, 仮想通貨で報酬を支払うスキームを確立する

Ethereum などのスマートコントラクトの発展や, (日本での)仮想通貨の税務周りもそこそこクリアになってきた昨今, 仮想通貨で OSS(Open Source Software) プロジェクトの bounty(報酬)やりたいですね!

やりましょう!

## 背景

Bounty Source というサービスがありましたが,

https://www.bountysource.com/

ブロックチェーン関連の会社に買収されたようで, そのブロックチェーンサービスは 2018 年 1 月 16 日現在 ICO 中のようで, サービスとしては一旦開発が止まっている感じです.

また, bounty source はスマートコントラクトにはなっていないので, ナウでヤングな感じがしないですね...

### 手動で bounty 設定してみる

とりあえず手動で bounty 設定というのもやってみましたが, bounty の報酬設定や判断基準の設定, 送金が面倒でした...

https://github.com/syoyo/tinygltf/issues/31

### Status Open Bounty に出会う

昨今のスマートコントラクトの流行りに乗っかりいい感じのものはないかと思っていたところ, ちょうど Status というプロジェクト(ネーミングがややこしいですね!)が, github issue に紐づけた Open Bounty という github アプリをリリースしてました.
(ETH or Status トークンで支払いができます)

Status 自体は [EthereumのDappをスマートフォンから利用する方法について](https://qiita.com/shora_kujira16/items/fc143537a8773e6674a6) の記事で存在を知り, 注目していました. 

Status の開発において, 彼らは https://github.com/status-im/autobounty という github app を作って bounty を設定するのをスマートコントラクトで効率化するのを実現しています.
(もともとは Aragon というプロジェクトが作っていたものを, Status チームが引き継いだ)

素晴らしいですね, これはもう使うしかありませんね.

## Status Open Bounty で報酬を設定する

まず, 基本的な ETH の扱い経験があることを想定しています.
ETH の扱いには MetaMask を使いました.

### 注意事項! White list に登録してもらう

基本的には後述する wiki にある順で設定していきます.

手動で行わなければならない重要な項目として,

**Bounty を設定する側では, github のユーザ(or 団体)を white list 入りさせてもらう必要があります.**


### 設定する(Bounty 設定側)

wiki の手順をそのままなぞります.

https://wiki.status.im/Status_Open_Bounty

まずは github ユーザ or 団体を white list に入れてもらう必要があるので, Status Open Bounty にサインアップし, その後 white list に入れてもらいます.

(white list に入れてもらう前に github app インストールしたりしてしまい, うまく動かないのを経験しました...)

white list に入れてもらう作業は, Status の Riot チャットあたりで開発者をつついてみてください. 

syoyo 「えいっえいっ、:point_left:  :point_left: Status Open Bounty とうろくしてっ 」
Status コミュニティ「とうろくしたよ! 」

<img width="642" alt="Screen Shot 2018-01-17 at 2.12.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/845c56f0-9ba0-4b8e-3553-28c53f549cb6.png">

<img width="553" alt="Screen Shot 2018-01-16 at 16.45.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/8f3f392c-8889-0066-bae1-efbd10ec7144.png">

素晴らしいですね, ありがたいですね.


github app にはテストネット用と main net 用があります. 私は main net(ETH) でやってしまいましたが, 終わってみると結構 Gas を取られたので(Status トークン払いだともう少し Gas 抑えられるかしら?), まずはテストネットでテストするのがよいでしょう.


### 注意事項

Bounty を設定する issue と `bounty` ラベルは新規で作成する方がよいです.

すでに issue が立っている場合は新しく issue を立てる, `bounty` ラベルを作っていたら消して再度作り直しておくのがよいです.

### bounty を設定する

issue を立てて, `bounty` ラベルを作り, issue に `bounty` ラベルを設定すると bot が検出してくれて, bounty のコメントがついてデプロイが始まります.

このデプロイのトランザクションには時間がかかります. 数分とか数時間待つ必要があります. 気長に待ちましょう.
(場合によっては 1日とかも!?)

デプロイが終わると, 以下のように報酬を受け付けるステージになります.

<img width="829" alt="Screen Shot 2018-01-16 at 2.14.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/4236a313-f381-0bb6-73e5-417ff0abb2df.png">

あとはこのコントラクトアドレスに ETH 送金すれば完成です!
おすすめは MetaMask です.
(Gas をケチると, 着金に 1 日くらいかかってしまうので注意です!)

<img width="772" alt="Screen Shot 2018-01-17 at 1.54.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/06cf73ce-0962-acec-e23f-ba4b77043037.png">

Voala! できました!

### pull request をもらう.

ここは bounty ハンター(報酬を取得したいひと)に作業してもらいます.

bounty ハンターは, issue に関連した作業を行い, コメントに `Fixes #158` のような, issue 番号をクローズするよ, というのをつけて PR(pull request)送ります(詳細は Status bounty wiki と, github wiki https://help.github.com/articles/closing-issues-using-keywords/ を参照ください).

今回, bounty ハンターには,

**優秀なスマートコントラクトアプリ開発若人**である https://qiita.com/shora_kujira16 さんに手伝ってもらいました.
 
たいせつなことなので, 繰り返します.

**優秀なスマートコントラクトアプリ開発若人**である https://qiita.com/shora_kujira16 さんに手伝ってもらいました.

素晴らしいですね, ありがとうございます.

OSS プロジェクト管理者(通常 bounty 設定側)により, PR が merge された時点で自動で issue がクローズします. 

ここでもまたいくつかトランザクションが行われるので, いろいろ反映されるまで数十分くらい待ちます. (etherscan で確認ください)

ただ, この時点ではまだ報酬支払いのステップには進みません.

### 報酬の支払い

最後に, bounty 設定側が Status Open Bounty のダッシュボードで, `Manage Payouts` から `New claims` にリストが追加されるので, 最終的な Confirmation を行い, 報酬の支払いを確定します.

<img width="971" alt="Screen Shot 2018-01-17 at 2.24.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/1d107299-ebe4-e001-564c-7946540f0843.png">

今回, Confirm のトランザクションの実行に, 13 USD くらいの Gas がかかりました...

Confirm 用の Gas の支払いが終わると, `Signed off` となり, また数分から数時間くらい待つと Bounty ハンターに報酬が支払われます!

 
## 課題

トランザクションの Gas が高いです...(1 トランザクション 12 ドルとか...) 

少額な bounty を設定には向かないです. 2018 年 1 月 16 日時点では, だいたい 1 万円以上くらいに bounty 報酬に設定するのがよさそうです.
(bounty 設定側は, ETH の残高も十分保持しておく)

支払い周りは Bounty 設定者が負担ですね. いずれはこのトランザクションコストを負担するマイナーの仕組みが出てくるといいかもしれません.
(電気代と機材代を負担することで OSS コミュニティに貢献する存在)

ちなみに今回 bounty に設定した ETH 報酬も, マイニングで得た ETH を使いました. :smiley:

## 税務処理

これは日本の場合です.

bounty 設定側は, 額が大きくなってくるとどうするのがいいかしら?(寄付 or 贈与扱いとなるでしょうか?) 高額な報酬を設定することになる場合は法人 or OSS で団体を設立してそこから支払うのが良さそうです.

受け取った側は受け取った時点での時価で評価して雑所得扱いでしょうか. 継続的に労力を投入し bounty を取りにいくような人は, 事業所得とできるかもしれません.

消費税はどうなるのかしらん?

bounty を寄付扱いにできたり, 受け取り側が給与所得や副業扱いとできるように, 間を取り仕切る会社(or 団体)が出てくるとよさそうです(この組織自体をスマートコントラクトで自動化できるとさらによい)


## TODO

税務周り, 税理士や税務署と相談してクリアにしていきたい.

issue に報酬を紐づけるのもよいですが, 実際に報酬に見合う成果をあげたかの判断や, 悪質な OSS プロジェクト管理者が意図的に PR を accept しないというケースも考えられるので, 実運用するうえではこれからノウハウの蓄積が必要になりますね.

ICO(Initial Coin Offering)のように, OSS プロジェクト全体に対してトークンを発行するような方式もよいかもしれません. ICO ではプロジェクトを支持するコミュニティが重要になってきますから OSS プロジェクトと親和性が高そうな気がします.

Ethereum 界隈では, DAICO という仕組みも提案されてきています.

https://ethresear.ch/t/explanation-of-daicos/465

こちらにも期待ですね.

## まとめ

**Bounty を適切に設定することで優秀な若人のモチベーションを上げ, 優秀な OSS 若人が人類史上最速で育成され, 熱狂的な OSS プロジェクトが日々湧き出ることにより, 人類が圧倒的成長するスキームを確立したい.**