@startuml

title Benefit Income
hide footbox

actor "User" as user
participant "Service" as service
participant "Affiliate" as affiliate
participant "Relayer" as relayer
participant "Factory" as factory
participant "contractWallet" as wallet
participant "Compound(cDAI)" as compound


group 認証基盤
  user -> service : signup(email,password)
  service --> user: email認証メール
  user -> service : 認証
  service --> service : create2で予測した\naddress表示
end
group アフィリエイト
  user -> service : クレジットカード登録
  service -> affiliate : 登録処理
  affiliate --> service : return sucess
end
alt コントラクトウォレット 1st transfer
  service -> wallet : transfer DAI
  group GNS
    relayer -> wallet : 監視
    wallet --> relayer : deposit alert
    relayer -> factory : deploy \n newSmartWallet
  end
  factory -> wallet : create \n initilize
  wallet -> wallet : setUserSigningKey
  wallet -> compound : approve
  wallet -> compound : deposit DAI
  compound --> wallet : cDAI
else 2nd transfer
  service -> wallet : transfer DAI 2nd
  group GNS
    relayer -> wallet : 監視
    wallet --> relayer : deposit alert
    relayer -> wallet : repayAndDeposit
  end
  wallet -> compound : deposit DAI
  compound --> wallet : cDAI
end
user -> service : withdrow
service -> relayer : signkey
group GNS
  relayer -> wallet : DaiWithdrawal
end
wallet -> compound : cDAI
compound --> wallet : DAI
wallet --> relayer : DAI (TxFee)
wallet --> user : DAI

@enduml