eth_twc_sdk/
contract.rs

1//! コントラクト ABI と EIP-712 メッセージ型の生成([`alloy::sol!`])。
2//!
3//! - `TransferDetail` / `CommittedTransferDetail` はコントラクトの `transfer` オーバーロードのタプル引数に対応します。
4//! - `TransferWithCommit` などは Solidity の EIP-712 型名・フィールド順と一致させています。
5//! - [`TransferWithCommitment`] は `#[sol(rpc)]` により JSON-RPC 呼び出し用のバインディングを生成します。
6//!
7//! オーバーロードは Alloy の規則で `transfer_0`, `transfer_1`, `transferWithAuthorization_0` のように番号付きメソッドになります。
8#![allow(clippy::too_many_arguments)] // sol! がコントラクト関数に多数の引数を生成する
9
10use alloy::sol;
11
12sol! {
13    /// 単一トークン送金の明細タプル(`transfer(TransferDetail[],bytes32)` 用)。
14    struct TransferDetail {
15        address to;
16        address token;
17        uint256 value;
18    }
19
20    /// 明細ごとにコミットメントを持つタプル(`transfer(CommittedTransferDetail[])` 用)。
21    struct CommittedTransferDetail {
22        address to;
23        address token;
24        uint256 value;
25        bytes32 commitment;
26    }
27
28    /// EIP-712 型 `TransferWithCommit`(単一送金+署名者・有効期間)。
29    struct TransferWithCommit {
30        address from;
31        address to;
32        address token;
33        address executor;
34        uint256 value;
35        uint256 validAfter;
36        uint256 validBefore;
37        bytes32 commitment;
38    }
39
40    /// EIP-712 型 `UniCommitTransfers`(複数明細・単一コミットメント)。
41    struct UniCommitTransfers {
42        address from;
43        address executor;
44        TransferDetail[] details;
45        uint256 validAfter;
46        uint256 validBefore;
47        bytes32 commitment;
48    }
49
50    /// EIP-712 型 `BatchTransferWithCommit`(コミットメント付き明細のバッチ)。
51    struct BatchTransferWithCommit {
52        address from;
53        address executor;
54        CommittedTransferDetail[] details;
55        uint256 validAfter;
56        uint256 validBefore;
57        bytes32 batchCommitment;
58    }
59
60    /// EIP-712 型 `CancelAuthorization`。
61    struct CancelAuthorization {
62        address authorizer;
63        bytes32 commitment;
64    }
65
66    #[sol(rpc)]
67    contract TransferWithCommitment {
68        function eip712Domain() external view returns (
69            bytes1 fields,
70            string name,
71            string version,
72            uint256 chainId,
73            address verifyingContract,
74            bytes32 salt,
75            uint256[] extensions
76        );
77
78        function transfer(address token, address to, uint256 value, bytes32 commitment) external;
79
80        function transfer(TransferDetail[] details, bytes32 commitment) external;
81
82        function transfer(CommittedTransferDetail[] details) external;
83
84        function transferWithAuthorization(
85            address from,
86            address to,
87            address token,
88            uint256 value,
89            uint256 validAfter,
90            uint256 validBefore,
91            bytes32 commitment,
92            bytes signature
93        ) external;
94
95        function transferWithAuthorization(
96            address from,
97            TransferDetail[] details,
98            uint256 validAfter,
99            uint256 validBefore,
100            bytes32 commitment,
101            bytes signature
102        ) external;
103
104        function transferWithAuthorization(
105            address from,
106            CommittedTransferDetail[] details,
107            uint256 validAfter,
108            uint256 validBefore,
109            bytes32 batchCommitment,
110            bytes signature
111        ) external;
112
113        function cancelAuthorization(address authorizer, bytes32 commitment, bytes signature) external;
114    }
115}