LoginSignup
0
1

More than 3 years have passed since last update.

CorDappを自作してみる。(States作成まで)

Posted at

記事の概要

Cordaの公式ドキュメントに沿って、CorDappを自作してみた。
この記事では、statesを作成する所までを記載する。

公式ドキュメント

https://docs.corda.net/_static/corda-developer-site.pdf
(主に第5章 「Getting started developing CorDapps」と第6章「KEY CONCEPTS」に沿って実施。)

statesの概要

1.「states」とは?
statesとは、「元帳上の事実」が記録されているオブジェクト。
statesは状態が変わる(金額が移動する、所有権が変わる等)ことで、更新されていく。
また、Cordaプラットフォームに参加している各ノードはそれぞれstatesを保有し、
保管するためのvault(金庫室)を保有している。

2.「states」の更新のシーケンス
「states」事態は、イミュータブル(作成後にその状態を変えることのできないオブジェクト)のため、
直接更新することはできない。その代わり、新しいstatesを表す新しいバージョンのstatesを作成し、
既存のstatesを履歴としてマークする。statesの履歴は各ノードのvaultに蓄積されていく。

statesの実装

CorDappを公式ドキュメントの「5.2.2 Step Two: Creating states」に倣ってコーディングしてみる。
ちなみに、プログラミング言語はKotlin。

CarState.kt
package com.template.states
import com.template.contracts.CarContract
import com.template.contracts.TemplateContract
import net.corda.core.contracts.BelongsToContract
import net.corda.core.contracts.ContractState
import net.corda.core.contracts.UniqueIdentifier
import net.corda.core.identity.AbstractParty
import net.corda.core.identity.Party
// *********
// * State *
// *********
@BelongsToContract(CarContract::class)
data class CarState( ※1
val owningBank: Party, ※2
val holdingDealer: Party,
val manufacturer: Party,
val vin: String,
val licensePlateNumber: String,
val make: String,
val model: String,
val dealershipLocation: String,
val linearId: UniqueIdentifier ※3
) : ContractState { ※1
override val participants: List<AbstractParty> = listOf(owningBank, holdingDealer, manufacturer) ※4
}

以下、ソース中の「※」の注釈。
※1:class「CarState」は、用意されているクラス「ContractState」を継承して作成。
※2:class「CarState」にある変数「owningBank」や「holdingDealer」に使われている型「Party」は、
Cordaにて用意されているオブジェクト。ちなみに「party」は法律用語で「当事者」という意味。
ネットワーク上で一意に識別できる名前と公開鍵を保有している。
※3:UniqueIdentifierもCordaにて用意されている型。class(上記の場合だとCarState)が実体化したタイミングで、
linearIdに一意の識別子が付与される。
※4:「ContractState 」のプロパティ「participants」をオーバーライドする。ここでは、「owningBank」、
「holdingDealer」、「manufacturer」のリストを設定している。

終わりに

次回はcontractsの作成から再開する予定。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1