IXTの森

イギリス発保険のブロックチェーンカンパニーiX Technology Groupの情報と、プラットフォームのiXledger及びERC20トークンの$IXTに関する情報を発信していきます。

IXT ProtectのDAppコードの概要(スマートコントラクトとWebクライアント)

今回はマニアックですがIXT Protectのコードを見ていきます。(完全に自分の勉強と趣味ですので開発者以外は無視してください)

 

コードの全体概要

コードは以下に置いてあります。

github.com

上のページを開くとコードをWeb上で誰でも見ることができます。

(Cloneやdownloadすればクライアントでも見れます)

右側の方に6 days agoなどが出ていますがこれは更新された日付を表しています。(下記の例では1週間前にclient内のコードが更新されてます。)

f:id:ixtchihuahua:20190104153656p:plain

contributorsというところを見ると誰がコードを開発しているのかがわかります。

hcawという人とingemar-ixtという2名で作成しているようです。

(ただし通常は1アカウント1名で運用していると思いますが、1アカウントをデプロイ用で複数名で運用している可能性もあるので実際の開発者数はわかりません)

 

f:id:ixtchihuahua:20190104162332p:plain

 

話を戻すとIXT ProtectはtruffleというEthereumのDAppプログラムを作成するフレームワークを使用して作られています。フォルダーは大きく4つに別れておりそれぞれの役割は以下のとおりです。 これは典型的なDAppに見られるフォルダ構成です。

上記のコードと実際の開発を図示すると以下のようになります。

f:id:ixtchihuahua:20190104155952p:plain


 

上記のうちmigrationsとtestは特に面白くはないのでclientとcontractをそれぞれもう少し見ていきます。

 

clientフォルダの概要

ソースを見ていくとReactとSemantic UIを使って組み立てていることがわかります。

modulesの下を見ると僕らの見ているアカウントページの他にadminページがあるようです。

f:id:ixtchihuahua:20190104162045p:plain

componentsの下がそれぞれの部品の実体です。

f:id:ixtchihuahua:20190104162159p:plain

 

stakeコンポーネント

stakeコンポーネントの中のコードを見ていくと例えば以下の部分がdepositボタンをクリックした時に呼び出される部分です。すごい簡潔に記載されてます。

f:id:ixtchihuahua:20190105080733p:plain

contractフォルダの概要

contractのフォルダにはlibとmocksフォルダの他に.solファイルが3つあります。

メインは.solファイルでixtProtect.solです。

f:id:ixtchihuahua:20190104193203p:plain


 ixtProtect.sol

IXT Protectで使われる様々なイベントと関数が定義されています。

Event

  • MemberAdded・・・メンバー追加時
  • StakeDeposited・・・ステークデポジット
  • StakeWithdrawn・・・ステーク引き出し時
  • RewardClaimed・・・リワード要求時
  • InvitationRewardGiven・・・紹介リワード配布時
  • PoolDeposit・・・プールデポジット
  • PoolWithdraw・・・プール引き出し時
  • AdminRemovedMember・・・メンバー削除時
  • MemberDrained・・・全メンバードレイン時
  • PoolDrained・・・プールドレイン時
  • ContractDrained・・・コントラクトドレイン時
  • InvitationRewardChanged・・・紹介リワード変更時
  • LoyaltyRewardChanged・・・ロイヤリティリワード変更時

 

RoleManagerコントラクト

ロールマネージャーはOwnable, Pausable, ValidatorRoleを継承していてアドミンなどのロールを管理していると思われます(全部のコードは追ってないので間違ってるかも)

Functions
  • constructor

 

StakeManagerコントラクト

ステーキングレベルの管理をするだけのコントラクトです。

Modifier
  • isValidStakeLevel
Data
  • StakeLevel
Functions
  • constructor

 

RewardManagerコントラクト

リワードの管理を行うコントラクトです。

Data
  • invitationReward
  • loyaltyPeriodDays
  • loyaltyRewardAmount
Functions
  • constructor

 

IxtProtectコントラクト

メインのコントラクトです。ほとんどの重要な関数はここに定義されています。

Modifier
  • isNotMember
  • isMember
  • notStaking
  • staking
Struct
  • Member
Data
  • ixtToken
  • members
  • membersArray
  • totalMemberBalance
  • balance
  • totalPoolBalance
  • registeredInvitationCodes
Constant
  • IXT_DECIMALS
Functions
  • constructor
  • addMember・・・メンバー追加
  • depositStake・・・ステークをデポジットデポジットボタンをクリックされたら呼ばれる)
  • withdrawStake・・・ステークを引き出し
  • claimRewards・・・リワードを要求
  • getMembersArrayLength・・・メンバー数を取得
  • getAccountBalance・・・アカウントバランスを取得
  • getStakeBalance・・・ステークバランスを取得
  • getRewardBalance・・・リワードバランスを取得
  • getInvitationRewardBalance・・・紹介リワードバランスを取得
  • getLoyaltyRewardBalance ・・・ロイヤリティリワードバランスを取得

(admin functions)

  • depositPool・・・プールにデポジットする
  • withdrawPool・・・プールから引き出す
  • removeMember・・・メンバーを削除する
  • drain・・・緊急時のみにアドミンが実行。全ユーザーのデポジットを返金。
  • setInvitationReward・・・紹介リワードの設定

(Internal Functions)

  • cancelMembershipInternal
  • refundUserBalance
  • removeMemberFromArray
  • claimRewardsInternal
  • depositInternal

 

depositStake関数

例えばdepositStake関数は以下のようになっています。

f:id:ixtchihuahua:20190105080007p:plain

publicからisValidStakeLevelまではModifierと言われるチェック関数みたいなものです。

uint256からが実際の処理になります。

レベルに応じで金額をデポジットし、デポジットの開始時間としてタイムスタンプなどを記録しています。

また招待コードの記録もしています。

 

また時間があればもう少し深く見てみたいと思います。

以上です。