Contractスマートコントラクトにおいてオークションのシステムを理解することはいずれ必須となるのかも知れない。オークション』p.6)」のことで、特にモノを割り当てるという機能に関して「マーケットデザイン」と呼ばれる概念が鍵となる。それは肝移植マッチングもしくは学校選択マッチングのような、いわば社会制度のデザインにおいて重要となってくる分野だ。Dappsのようなアプリにおいて重要なのは、自動的な理想分配システムを、人々の内に潜む多様な志向性を結びつけてどのように構築していくかである。オークションは応札者に対して事前にルールを明確化しておく必要がある。そのような視点においてもブロックチェーン技術との相性は良いだろう。本記事ではオークションが歴史的にどのように考えられ活用されてきたのかは述べないが(いずれ別のブログ記事でまとめたらココにリンクを貼っておく)、イーサリアムのスマートコントラクトにおいての基本的なオークションの仕組みを記述しておく。今回は、Solidityによるオークションシステムについて以下のサイトを参考にして構築してみました。Auctionオークションは大きく分けて公開型と封印型の2つに分けられます。公開型とは応札者が他の応札者の入札価格や脱落状況などを共有しながら行う方式で、いわゆる「せり」と呼ばれる形式もこの方式です。Auction」もどちらかというと公開型に近い設計です。封印型は他の応札者の入札価格は共有されず、またいったん提出した金額の変更も認められません。封筒に金額を書いた紙を入れて提出するようなイメージです。Auction」に少し手を加えて、複数のオークションを登録できるようにしてみました。//コントラクト生成時に設定したオークション受益者に対して最高額を送る。true;//コントラクト生成時に設定したオークション受益者に対して最高額を送る。a.beneficiary.transfer(a.highestBid);}}11行目オークション構造体の中に、最高入札額に至らなかった返金者アドレスとその返金額リストをmappingとして設定しています。mappingの値に更に構造体を設定したい場合は、以下のページを参照すると良いでしょう。Structs21行目オークションの制限時間を指定する引数としての_biddingTimeに、例えば1を設定するとその時間は1分(minutes)となります。この単位は他にもsecondsやhours、daysなどがあります。以下のページを参照すると良いでしょう。Units53行目アドレス.send(送金額)はtureおよびfalseを返します。アドレス型(Address)のメンバ関数であるsendとtransferの違いについては下記の関連ページをご覧下さい。