# Claim用L1コントラクトのYellow Paper
## 概要
この章ではOperator資産のデポジットコントラクトについて解説する。
OperatorはLightning NetworkでFeeを受け取ったあとにトランザクションを実行しない場合や、Lightning Networkとのアトミックスワップにおいて指定したブロック高までにトランザクションを実行しない場合はL1チェーンにおいてデポジットした資産をSlashされる。
また、Operatorとして機能するためには最低限のデポジットが常に保たれている必要がある。
## 機能
1. 資産のデポジットとその記録
2. 資産のひきだし
- 引き出しは最後にオペレーターの仕事をしてから一定期間経たないとひきだすことはできない。(Claimできる期間をもうけるため)
3. Fee受け取り後にTxを実行しない場合のSlash
- LNでFeeを支払ったのにも関わらずTxを実行しなかった際にSlashする
- LN支払いで得たPreimageがただしいか(きちんと支払いを行っているか)検証する
- そのうえでTxが実行されていないことをOneTimeAddressのSMTのNon-Inclusion Proofで検証する
署名の構成は
$$OPSIG = Signature(\\Hash(Receiver L1 Address, Payment TxHash, Preimage hash, L2 OneTimeAddress), \\Operator Privkey)$$
4. 指定したブロック高までにTxを実行しない場合のSlash
- 指定したブロック高までにTxを実行しなかった際にSlashする
- 署名が正しいか検証する。
- そのうえでTxが指定したブロック高で実行されていないことをOneTimeAddressのSMTのNon-Inclusion Proofで検証する
署名の構成は
$$OPSIG = Signature(\\Hash(Receiver L1 Address, Payment TxHash, L2 OneTimeAddress), \\Operator Privkey)$$
## Interfaceとその説明
```javascript=
interface L1ClaimContract {
/*
* @dev OperatorがETHをデポジットする関数
*/
function deposit() external payable;
/*
* @dev OperatorがETHをひきだす
* @dev 引き出せるのは最後にOperatorをしてから一定時間以上経ってから
*/
function withdraw(uint256 amount) external returns(uint256 remainingAmount);
/*
* @dev Feeを支払ったのにネットワークにとりこまれない場合のSlash
* @dev 引き出せるのは最後にOperatorをしてから一定以上経ってから
* @dev この関数を実行できるのはオペレーター署名に組み込まれているアドレスのみ
* @param operatorId 対象のオペレーターのID(これはopsigの署名のVerifyに利用される公開鍵と紐付いている)
* @param opsig Operatorの署名
* @param txHash 対象TxのTxHash
* @param oneTimeL2Address 対象TxのOneTimeAddress
* @param receiverL1Address 受け取るL1Address。このTxを叩くmsg.senderは同じアドレスである必要がある
* @param siblings non-inclusion-proofのためのsiblings
*/
function slashForLnFee(
uint32 operatorId,
bytes memory opsig,
bytes32 txHash,
bytes24 oneTimeL2Address,
bytes32[][] memory siblings)
external
returns(bool success);
/*
* @dev 当該ブロックにTxがはいっていない場合のSlashを行う
* @dev 引き出せるのは最後にOperatorをしてから一定以上経ってから
* @dev この関数を実行できるのはオペレーター署名に組み込まれているアドレスのみ
* @param operatorId 対象のオペレーターのID(これはopsigの署名のVerifyに利用される公開鍵と紐付いている)
* @param targetBlockHeight Txを入れると宣言していたブロック高
* @param opsig Operatorの署名
* @param txHash 対象TxのTxHash
* @param oneTimeL2Address 対象TxのOneTimeAddress
* @param siblings non-inclusion-proofのためのsiblings
*/
function slashForTxContain(
uint32 operatorId,
uint32 targetBlockHeight,
bytes memory opsig,
bytes32 txHash,
bytes24 oneTimeL2Address,
bytes32[] memory siblings)
external
returns(bool success);
}
```
###### tags: `Yellow paper`