Solidityでオークション[Auction][Ethereum]

2018年4月4日

スマートコントラクトにおいてオークションのシステムを理解することはいずれ必須となるのかも知れない。

 

 

オークションとは「モノを割り当てたりサービスを入手したりする方法(下記参照文献『入門オークション』p.6)」のことで、特にモノを割り当てるという機能に関して「マーケットデザイン」と呼ばれる概念が鍵となる。それは肝移植マッチングもしくは学校選択マッチングのような、いわば社会制度のデザインにおいて重要となってくる分野だ。

 

Dappsのようなアプリにおいて重要なのは、自動的な理想分配システムを、人々の内に潜む多様な志向性を結びつけてどのように構築していくかである。

 

オークションは応札者に対して事前にルールを明確化しておく必要がある。そのような視点においてもブロックチェーン技術との相性は良いだろう。

 

本記事ではオークションが歴史的にどのように考えられ活用されてきたのかは述べないが(いずれ別のブログ記事でまとめたらココにリンクを貼っておく)、イーサリアムのスマートコントラクトにおいての基本的なオークションの仕組みを記述しておく。

 


 

今回は、Solidityによるオークションシステムについて以下のサイトを参考にして構築してみました。

 

Simple Open Auction

 

オークションは大きく分けて公開型と封印型の2つに分けられます。公開型とは応札者が他の応札者の入札価格や脱落状況などを共有しながら行う方式で、いわゆる「せり」と呼ばれる形式もこの方式です。上記リンクページの「Simple Open Auction」もどちらかというと公開型に近い設計です。一方、封印型は他の応札者の入札価格は共有されず、またいったん提出した金額の変更も認められません。封筒に金額を書いた紙を入れて提出するようなイメージです。

 

今回は「Simple Open Auction」に少し手を加えて、複数のオークションを登録できるようにしてみました。

 

11行目

オークション構造体の中に、最高入札額に至らなかった返金者アドレスとその返金額リストをmappingとして設定しています。mappingの値に更に構造体を設定したい場合は、以下のページを参照すると良いでしょう。

 

Solidity Structs

 

21行目

オークションの制限時間を指定する引数としての_biddingTimeに、例えば1を設定するとその時間は1分(minutes)となります。この単位は他にもsecondsやhours、daysなどがあります。以下のページを参照すると良いでしょう。

 

Solidity Time Units

 

53行目

アドレス.send(送金額)はtureおよびfalseを返します。アドレス型(Address)のメンバ関数であるsendとtransferの違いについては下記の関連ページをご覧下さい。

 

関連ページ

transferで送金する

 

 

 

参照文献


 

LINEで送る
Pocket

Copyright © 2018 思考の葉 All Rights Reserved.  プライバシーポリシー