Skip to main content

libid_contracts/bindings/
transfer.rs

1//! Bindings for the Bank diamond (`solidity/contracts/transfer/`): the full
2//! `IBank` surface addressed through the diamond, plus the EIP-2535 cut/loupe
3//! interfaces and the one-shot `BankInit`.
4
5/// The Bank diamond's external surface (Vault + Admin + Transfer facets), for
6/// callers that address the diamond as one contract. Mirrors
7/// `transfer/bank/IBank.sol` and the facet sources.
8///
9/// `balanceOf` and `balanceOfTotal` are overloaded exactly as in Solidity;
10/// alloy disambiguates the generated Rust methods as `balanceOf_0`
11/// (address-keyed) and `balanceOf_1` (identity-keyed), in declaration order.
12#[allow(clippy::too_many_arguments, unused_attributes)]
13mod bank_inner {
14    use alloy::sol;
15
16    sol! {
17        #[sol(rpc)]
18        interface Bank {
19            struct NotaryTlsProof {
20                bytes notarySig;
21                bytes32 domainHash;
22                bytes32 clientRandom;
23                bytes32 serverRandom;
24                bytes serverEphemeralKey;
25                bytes32 transcriptRoot;
26                uint256 timestamp;
27                bytes32[] bodyMerklePath;
28                bytes32[] authorMerklePath;
29                bytes32[] domainMerklePath;
30                bytes32[] endpointMerklePath;
31                bytes32[] authorIdMerklePath;
32                bytes32[] receiverIdMerklePath;
33                bytes revealedReceiverId;
34                bytes32[] quotedRefMerklePath;
35                bytes revealedQuotedRef;
36                bytes32[] quotedAuthorMerklePath;
37                bytes revealedQuotedAuthorId;
38            }
39
40            struct ResourceInfo {
41                string platform;      // API domain (e.g. "api.x.com")
42                string resourceType;
43                string resourceId;
44                string requestPath;
45            }
46
47            struct SenderInfo {
48                string author;
49                bytes revealedAuthor;
50                bytes revealedAuthorId;
51            }
52
53            struct BackendSig {
54                bytes sig;
55                uint256 timestamp;
56            }
57
58            // ── Transfer facet ───────────────────────────────────────────
59
60            /// Token-by-name overload.
61            function webTransferV2(
62                ResourceInfo calldata resource,
63                SenderInfo calldata sender,
64                bytes calldata revealedSubsection,
65                NotaryTlsProof calldata notaryTlsProof,
66                BackendSig calldata backendSigData,
67                string calldata receiverHandle,
68                string calldata receiverUserId,
69                string calldata tokenName_,
70                string calldata amountStr,
71                uint256 amount,
72                string calldata sourceUrl
73            ) external;
74
75            /// Token-by-address overload.
76            function webTransferV2(
77                ResourceInfo calldata resource,
78                SenderInfo calldata sender,
79                bytes calldata revealedSubsection,
80                NotaryTlsProof calldata notaryTlsProof,
81                BackendSig calldata backendSigData,
82                string calldata receiverHandle,
83                string calldata receiverUserId,
84                address token,
85                string calldata amountStr,
86                uint256 amount,
87                string calldata sourceUrl
88            ) external;
89
90            /// Stateless preflight of a TLS-notarized comment proof.
91            function verifyProof(
92                ResourceInfo calldata resource,
93                SenderInfo calldata sender,
94                bytes calldata revealedSubsection,
95                NotaryTlsProof calldata notaryTlsProof,
96                BackendSig calldata backendSigData,
97                string calldata receiverUserId
98            ) external view returns (bool);
99
100            function transfer_within(
101                string calldata receiverPlatform,
102                string calldata receiverHandle,
103                string calldata receiverUserId,
104                address token,
105                uint256 amount
106            ) external;
107
108            // ── Vault facet ──────────────────────────────────────────────
109
110            function deposit(string calldata platform, string calldata handle, string calldata userId, address token, uint256 amount) external payable;
111            function withdraw(address recipient, address token, uint256 amount) external;
112            function balanceOf(address wallet, address token) external view returns (uint256);
113            function balanceOf(string calldata platform, string calldata handle, string calldata userId, address token) external view returns (uint256);
114            function balanceOfTotal(address wallet, address token) external view returns (uint256);
115            function balanceOfTotal(string calldata platform, string calldata handle, string calldata userId, address token) external view returns (uint256);
116            function registeredBalances(address wallet, address token) external view returns (uint256);
117            function unregisteredBalances(bytes32 key, address token) external view returns (uint256);
118            function identityHash(string calldata domain, string calldata username) external pure returns (bytes32);
119
120            // ── Admin facet ──────────────────────────────────────────────
121
122            function pause() external;
123            function unpause() external;
124            function setRegistry(address _registry) external;
125            function registerToken(string calldata name, address token) external;
126            function unregisterToken(string calldata name) external;
127            function resolveToken(string calldata name) external view returns (address);
128            function getRegisteredTokens() external view returns (address[] memory);
129            function tokenName(address token) external view returns (string memory);
130            function setPlatformTemplate(string calldata platform, string calldata newTemplate) external;
131            function clearPlatformTemplates(string calldata platform) external;
132            function platformTemplateCount(string calldata platform) external view returns (uint256);
133            function getPlatformTemplate(string calldata platform, uint256 index) external view returns (string memory);
134            function setResourceTypePrefix(string calldata resourceType, string calldata prefix) external;
135            function setPlatformWebPrefix(string calldata platform, string calldata prefix) external;
136            function getPlatformWebPrefix(string calldata platform) external view returns (string memory);
137            function registry() external view returns (address);
138            function paused() external view returns (bool);
139
140            // ── Events ───────────────────────────────────────────────────
141
142            event Deposited(address indexed wallet, bytes32 indexed handleKey, address indexed token, uint256 amount);
143            event Withdrawn(address indexed wallet, address indexed recipient, address indexed token, uint256 amount);
144            event TransferWithin(address indexed sender, string receiverPlatform, string receiverHandle, string receiverUserId, address indexed token, uint256 amount);
145            event WebTransferV3(address indexed senderWallet, address indexed receiverWallet, string receiverPlatform, string receiverHandle, string receiverUserId, address indexed token, uint256 amount, string sourceUrl);
146            event Paused(address account);
147            event Unpaused(address account);
148            event RegistrySet(address indexed oldRegistry, address indexed newRegistry);
149            event TokenRegistered(string name, address indexed token);
150            event TokenUnregistered(string name, address indexed token);
151        }
152    }
153}
154
155pub use bank_inner::Bank;
156
157/// EIP-2535 diamond cut interface (`transfer/diamond/interfaces/IDiamondCut.sol`).
158#[allow(clippy::too_many_arguments, unused_attributes)]
159mod diamond_cut_inner {
160    use alloy::sol;
161
162    sol! {
163        #[sol(rpc)]
164        interface IDiamondCut {
165            /// `action` is FacetCutAction as its ABI underlying type (0=Add,
166            /// 1=Replace, 2=Remove); enums encode as uint8, so this yields the
167            /// same `diamondCut` selector as the Solidity interface.
168            struct FacetCut {
169                address facetAddress;
170                uint8 action;
171                bytes4[] functionSelectors;
172            }
173            function diamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata) external;
174
175            event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
176        }
177    }
178}
179
180pub use diamond_cut_inner::IDiamondCut;
181
182/// EIP-2535 loupe + ERC-173 ownership
183/// (`transfer/diamond/interfaces/IDiamondLoupe.sol`, `IERC173.sol`).
184#[allow(clippy::too_many_arguments, unused_attributes)]
185mod diamond_loupe_inner {
186    use alloy::sol;
187
188    sol! {
189        #[sol(rpc)]
190        interface IDiamondLoupe {
191            struct Facet {
192                address facetAddress;
193                bytes4[] functionSelectors;
194            }
195            function facets() external view returns (Facet[] memory facets_);
196            function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory);
197            function facetAddresses() external view returns (address[] memory);
198            function facetAddress(bytes4 _functionSelector) external view returns (address);
199            function supportsInterface(bytes4 _interfaceId) external view returns (bool);
200        }
201    }
202
203    sol! {
204        #[sol(rpc)]
205        interface IERC173 {
206            function owner() external view returns (address owner_);
207            function transferOwnership(address _newOwner) external;
208        }
209    }
210}
211
212pub use diamond_loupe_inner::{
213    IDiamondLoupe,
214    IERC173,
215};
216
217/// One-shot diamond initializer (`transfer/bank/BankInit.sol`). No
218/// `#[sol(rpc)]`: only `initCall` is used — ABI-encoded as the diamondCut
219/// `_init` delegatecall calldata that runs BankInit in the diamond's storage.
220#[allow(clippy::too_many_arguments, unused_attributes)]
221mod bank_init_inner {
222    use alloy::sol;
223
224    sol! {
225        interface BankInit {
226            function init(address notary, address backend, address registry) external;
227        }
228    }
229}
230
231pub use bank_init_inner::BankInit;