@pendle/core-v2 6.4.2-unichain → 6.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ {
2
+ "_format": "hh-sol-dbg-1",
3
+ "buildInfo": "../../build-info/70d6ba7a87a6f64e73bd1d277220cc45.json"
4
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "RoundDataLib",
4
+ "sourceName": "contracts/StPendle.sol",
5
+ "abi": [],
6
+ "bytecode": "0x6101ab610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610055575f3560e01c80631b102f241461005957806345ad4c0314610080578063573a2edd14610093578063b0589b9a146100a6575b5f5ffd5b61006e610067366004610120565b6003015490565b60405190815260200160405180910390f35b61006e61008e366004610120565b6100bb565b61006e6100a1366004610120565b6100d6565b61006e6100b4366004610120565b6004015490565b5f816004015482600201546100d0919061014b565b92915050565b5f81600301546100f78360020154846001015461010190919063ffffffff16565b6100d0919061014b565b5f8061010d838561015e565b670de0b6b3a76400009004949350505050565b5f60208284031215610130575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156100d0576100d0610137565b80820281158282048414176100d0576100d061013756fea2646970667358221220bba9290ed90c600b336fe091305c924e9ee7c03936ef51d6717a15434dc1f55964736f6c634300081e0033",
7
+ "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610610055575f3560e01c80631b102f241461005957806345ad4c0314610080578063573a2edd14610093578063b0589b9a146100a6575b5f5ffd5b61006e610067366004610120565b6003015490565b60405190815260200160405180910390f35b61006e61008e366004610120565b6100bb565b61006e6100a1366004610120565b6100d6565b61006e6100b4366004610120565b6004015490565b5f816004015482600201546100d0919061014b565b92915050565b5f81600301546100f78360020154846001015461010190919063ffffffff16565b6100d0919061014b565b5f8061010d838561015e565b670de0b6b3a76400009004949350505050565b5f60208284031215610130575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156100d0576100d0610137565b80820281158282048414176100d0576100d061013756fea2646970667358221220bba9290ed90c600b336fe091305c924e9ee7c03936ef51d6717a15434dc1f55964736f6c634300081e0033",
8
+ "linkReferences": {},
9
+ "deployedLinkReferences": {}
10
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "_format": "hh-sol-dbg-1",
3
+ "buildInfo": "../../build-info/70d6ba7a87a6f64e73bd1d277220cc45.json"
4
+ }
@@ -0,0 +1,228 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "StPendle",
4
+ "sourceName": "contracts/StPendle.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "address",
10
+ "name": "user",
11
+ "type": "address"
12
+ }
13
+ ],
14
+ "name": "balanceOf",
15
+ "outputs": [
16
+ {
17
+ "internalType": "uint256",
18
+ "name": "",
19
+ "type": "uint256"
20
+ }
21
+ ],
22
+ "stateMutability": "view",
23
+ "type": "function"
24
+ },
25
+ {
26
+ "inputs": [
27
+ {
28
+ "internalType": "uint256",
29
+ "name": "amount",
30
+ "type": "uint256"
31
+ }
32
+ ],
33
+ "name": "distribute",
34
+ "outputs": [],
35
+ "stateMutability": "nonpayable",
36
+ "type": "function"
37
+ },
38
+ {
39
+ "inputs": [],
40
+ "name": "doVote",
41
+ "outputs": [],
42
+ "stateMutability": "nonpayable",
43
+ "type": "function"
44
+ },
45
+ {
46
+ "inputs": [
47
+ {
48
+ "internalType": "enum State",
49
+ "name": "state",
50
+ "type": "uint8"
51
+ }
52
+ ],
53
+ "name": "getSideData",
54
+ "outputs": [
55
+ {
56
+ "internalType": "uint256",
57
+ "name": "sidedPooled",
58
+ "type": "uint256"
59
+ },
60
+ {
61
+ "internalType": "uint256",
62
+ "name": "sidedShares",
63
+ "type": "uint256"
64
+ }
65
+ ],
66
+ "stateMutability": "view",
67
+ "type": "function"
68
+ },
69
+ {
70
+ "inputs": [
71
+ {
72
+ "internalType": "address",
73
+ "name": "user",
74
+ "type": "address"
75
+ }
76
+ ],
77
+ "name": "getUserData",
78
+ "outputs": [
79
+ {
80
+ "components": [
81
+ {
82
+ "internalType": "enum State",
83
+ "name": "state",
84
+ "type": "uint8"
85
+ },
86
+ {
87
+ "internalType": "uint256",
88
+ "name": "metaShares",
89
+ "type": "uint256"
90
+ },
91
+ {
92
+ "internalType": "uint256",
93
+ "name": "lastVotedRound",
94
+ "type": "uint256"
95
+ },
96
+ {
97
+ "internalType": "uint256",
98
+ "name": "forfeitedUntilRound",
99
+ "type": "uint256"
100
+ }
101
+ ],
102
+ "internalType": "struct UserData",
103
+ "name": "",
104
+ "type": "tuple"
105
+ }
106
+ ],
107
+ "stateMutability": "view",
108
+ "type": "function"
109
+ },
110
+ {
111
+ "inputs": [
112
+ {
113
+ "internalType": "address",
114
+ "name": "user",
115
+ "type": "address"
116
+ }
117
+ ],
118
+ "name": "hasInteractedBefore",
119
+ "outputs": [
120
+ {
121
+ "internalType": "bool",
122
+ "name": "",
123
+ "type": "bool"
124
+ }
125
+ ],
126
+ "stateMutability": "view",
127
+ "type": "function"
128
+ },
129
+ {
130
+ "inputs": [
131
+ {
132
+ "internalType": "address",
133
+ "name": "user",
134
+ "type": "address"
135
+ }
136
+ ],
137
+ "name": "sharesOf",
138
+ "outputs": [
139
+ {
140
+ "internalType": "uint256",
141
+ "name": "",
142
+ "type": "uint256"
143
+ }
144
+ ],
145
+ "stateMutability": "view",
146
+ "type": "function"
147
+ },
148
+ {
149
+ "inputs": [
150
+ {
151
+ "internalType": "uint256",
152
+ "name": "numShares",
153
+ "type": "uint256"
154
+ }
155
+ ],
156
+ "name": "sharesValue",
157
+ "outputs": [
158
+ {
159
+ "internalType": "uint256",
160
+ "name": "",
161
+ "type": "uint256"
162
+ }
163
+ ],
164
+ "stateMutability": "view",
165
+ "type": "function"
166
+ },
167
+ {
168
+ "inputs": [],
169
+ "name": "votingBegin",
170
+ "outputs": [],
171
+ "stateMutability": "nonpayable",
172
+ "type": "function"
173
+ },
174
+ {
175
+ "inputs": [],
176
+ "name": "votingFinalize",
177
+ "outputs": [],
178
+ "stateMutability": "nonpayable",
179
+ "type": "function"
180
+ }
181
+ ],
182
+ "bytecode": "0x6080604052348015600e575f5ffd5b5061071b8061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061008c575f3560e01c80631e936ff7146100905780633554fd8f1461009257806350e3b1571461009a57806370a08231146100c057806391c05b0b146100d3578063ab0519d6146100e6578063ab38ff2414610123578063dd5117b014610090578063f5eb42dc1461014b578063ffc9896b1461015e575b5f5ffd5b005b61009061017e565b6100ad6100a836600461059f565b610192565b6040519081526020015b60405180910390f35b6100ad6100ce3660046105b6565b6101d6565b6100906100e136600461059f565b6101e9565b6101136100f43660046105b6565b6001600160a01b03165f90815260208190526040902060010154151590565b60405190151581526020016100b7565b6101366101313660046105dc565b61023c565b604080519283526020830191909152016100b7565b6100ad6101593660046105b6565b610438565b61017161016c3660046105b6565b6104d2565b6040516100b7919061060e565b60025f815461018c9061066d565b90915550565b5f5f61019c61056d565b905080600201545f036101b157505f92915050565b600281015460018201546101c59085610685565b6101cf919061069c565b9392505050565b5f6101e36100a883610438565b92915050565b5f6101f261056d565b905081816001015f82825461020791906106bb565b909155505060018101546003820154610220919061069c565b6004820155600380545f906102349061066d565b909155505050565b5f5f5f61024761056d565b90505f84600181111561025c5761025c6105fa565b1461034a576040516306c40bc960e21b81526004810182905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__90631b102f2490602401602060405180830381865af41580156102af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d391906106ce565b60405163582c4dcd60e11b81526004810183905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__9063b0589b9a90602401602060405180830381865af4158015610321573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061034591906106ce565b61042e565b60405163573a2edd60e01b81526004810182905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__9063573a2edd90602401602060405180830381865af4158015610398573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103bc91906106ce565b6040516345ad4c0360e01b81526004810183905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__906345ad4c0390602401602060405180830381865af415801561040a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061042e91906106ce565b9250925050915091565b6001600160a01b0381165f90815260208190526040808220815160808101909252805483929190829060ff166001811115610475576104756105fa565b6001811115610486576104866105fa565b8152602001600182015481526020016002820154815260200160038201548152505090505f6104b7825f015161023c565b60208401519092506104ca915082610580565b949350505050565b6104fa6040805160808101909152805f81526020015f81526020015f81526020015f81525090565b6001600160a01b0382165f90815260208190526040908190208151608081019092528054829060ff166001811115610534576105346105fa565b6001811115610545576105456105fa565b8152600182015460208201526002820154604082015260039091015460609091015292915050565b6002545f90815260016020526040902090565b5f8061058c8385610685565b670de0b6b3a76400009004949350505050565b5f602082840312156105af575f5ffd5b5035919050565b5f602082840312156105c6575f5ffd5b81356001600160a01b03811681146101cf575f5ffd5b5f602082840312156105ec575f5ffd5b8135600281106101cf575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b815160808201906002811061063157634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015160408301526060830151606083015292915050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161067e5761067e610659565b5060010190565b80820281158282048414176101e3576101e3610659565b5f826106b657634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156101e3576101e3610659565b5f602082840312156106de575f5ffd5b505191905056fea26469706673582212200f34f976da4c980dd5ebd41de34b266c630f4938a8bd6cc9e89b2c89621f761564736f6c634300081e0033",
183
+ "deployedBytecode": "0x608060405234801561000f575f5ffd5b506004361061008c575f3560e01c80631e936ff7146100905780633554fd8f1461009257806350e3b1571461009a57806370a08231146100c057806391c05b0b146100d3578063ab0519d6146100e6578063ab38ff2414610123578063dd5117b014610090578063f5eb42dc1461014b578063ffc9896b1461015e575b5f5ffd5b005b61009061017e565b6100ad6100a836600461059f565b610192565b6040519081526020015b60405180910390f35b6100ad6100ce3660046105b6565b6101d6565b6100906100e136600461059f565b6101e9565b6101136100f43660046105b6565b6001600160a01b03165f90815260208190526040902060010154151590565b60405190151581526020016100b7565b6101366101313660046105dc565b61023c565b604080519283526020830191909152016100b7565b6100ad6101593660046105b6565b610438565b61017161016c3660046105b6565b6104d2565b6040516100b7919061060e565b60025f815461018c9061066d565b90915550565b5f5f61019c61056d565b905080600201545f036101b157505f92915050565b600281015460018201546101c59085610685565b6101cf919061069c565b9392505050565b5f6101e36100a883610438565b92915050565b5f6101f261056d565b905081816001015f82825461020791906106bb565b909155505060018101546003820154610220919061069c565b6004820155600380545f906102349061066d565b909155505050565b5f5f5f61024761056d565b90505f84600181111561025c5761025c6105fa565b1461034a576040516306c40bc960e21b81526004810182905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__90631b102f2490602401602060405180830381865af41580156102af573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d391906106ce565b60405163582c4dcd60e11b81526004810183905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__9063b0589b9a90602401602060405180830381865af4158015610321573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061034591906106ce565b61042e565b60405163573a2edd60e01b81526004810182905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__9063573a2edd90602401602060405180830381865af4158015610398573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103bc91906106ce565b6040516345ad4c0360e01b81526004810183905273__$d454e8b73aca09d7edc6b19c3e938f0f8b$__906345ad4c0390602401602060405180830381865af415801561040a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061042e91906106ce565b9250925050915091565b6001600160a01b0381165f90815260208190526040808220815160808101909252805483929190829060ff166001811115610475576104756105fa565b6001811115610486576104866105fa565b8152602001600182015481526020016002820154815260200160038201548152505090505f6104b7825f015161023c565b60208401519092506104ca915082610580565b949350505050565b6104fa6040805160808101909152805f81526020015f81526020015f81526020015f81525090565b6001600160a01b0382165f90815260208190526040908190208151608081019092528054829060ff166001811115610534576105346105fa565b6001811115610545576105456105fa565b8152600182015460208201526002820154604082015260039091015460609091015292915050565b6002545f90815260016020526040902090565b5f8061058c8385610685565b670de0b6b3a76400009004949350505050565b5f602082840312156105af575f5ffd5b5035919050565b5f602082840312156105c6575f5ffd5b81356001600160a01b03811681146101cf575f5ffd5b5f602082840312156105ec575f5ffd5b8135600281106101cf575f5ffd5b634e487b7160e01b5f52602160045260245ffd5b815160808201906002811061063157634e487b7160e01b5f52602160045260245ffd5b8083525060208301516020830152604083015160408301526060830151606083015292915050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161067e5761067e610659565b5060010190565b80820281158282048414176101e3576101e3610659565b5f826106b657634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156101e3576101e3610659565b5f602082840312156106de575f5ffd5b505191905056fea26469706673582212200f34f976da4c980dd5ebd41de34b266c630f4938a8bd6cc9e89b2c89621f761564736f6c634300081e0033",
184
+ "linkReferences": {
185
+ "contracts/StPendle.sol": {
186
+ "RoundDataLib": [
187
+ {
188
+ "length": 20,
189
+ "start": 659
190
+ },
191
+ {
192
+ "length": 20,
193
+ "start": 773
194
+ },
195
+ {
196
+ "length": 20,
197
+ "start": 892
198
+ },
199
+ {
200
+ "length": 20,
201
+ "start": 1006
202
+ }
203
+ ]
204
+ }
205
+ },
206
+ "deployedLinkReferences": {
207
+ "contracts/StPendle.sol": {
208
+ "RoundDataLib": [
209
+ {
210
+ "length": 20,
211
+ "start": 631
212
+ },
213
+ {
214
+ "length": 20,
215
+ "start": 745
216
+ },
217
+ {
218
+ "length": 20,
219
+ "start": 864
220
+ },
221
+ {
222
+ "length": 20,
223
+ "start": 978
224
+ }
225
+ ]
226
+ }
227
+ }
228
+ }
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/e206b407d1a48a4ff598db9474a06b82.json"
3
+ "buildInfo": "../../../build-info/8949c803dcbf48b7a7c788d148eb4b84.json"
4
4
  }
@@ -27,8 +27,8 @@
27
27
  "type": "receive"
28
28
  }
29
29
  ],
30
- "bytecode": "0x6080604052348015600e575f5ffd5b5061179c8061001c5f395ff3fe608060405260043610610020575f3560e01c8063ef4093631461002b575f5ffd5b3661002757005b5f5ffd5b348015610036575f5ffd5b5061004a610045366004610ad8565b610060565b6040516100579190610b91565b60405180910390f35b60605f5f61006e85856100fa565b915091505f73888888888889758f76e7103c6cbf23abbf58f9466001600160a01b031683836040516100a09190610baa565b5f6040518083038185875af1925050503d805f81146100da576040519150601f19603f3d011682016040523d82523d5f602084013e6100df565b606091505b5094509050806100f157835184602001fd5b50505092915050565b5f60608161010b6004828688610bc5565b61011491610bec565b9050365f610125866004818a610bc5565b90925090506001600160e01b0319831663092ccd6360e11b148061015957506001600160e01b0319831663640fc23d60e11b145b8061017457506001600160e01b031983166376a4483f60e11b145b156101fe575f808080808061018b87890189611177565b9550955095509550955095506101a08261041f565b9a50888686868686866040516024016101be969594939291906114c4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152995061041595505050505050565b63c241e3ab60e01b6001600160e01b0319841601610295575f8080808061022786880188611524565b9450945094509450945061023a8161041f565b9950878585858585604051602401610256959493929190611594565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529850610415945050505050565b6001600160e01b031983166358bda47560e01b14806102c457506001600160e01b03198316630a94245f60e21b145b806102df57506001600160e01b03198316637b8b4b9560e01b145b15610324575f808080806102f5868801886115cd565b955095509550509450945087858561030c87610546565b86868660405160240161025696959493929190611636565b633dde3dab60e11b6001600160e01b03198416016103d1575f80808061034c85870187611689565b94509450509350935086848461036186610546565b6040516001600160a01b03938416602482015292909116604483015260648201526084810184905260a4810183905260c40160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915297506104159350505050565b60405162461bcd60e51b81526020600482015260146024820152732aa729aaa82827a92a22a22fa9a2a622a1aa27a960611b60448201526064015b60405180910390fd5b5050509250929050565b5f80608083015151600a81111561043857610438611257565b1415801561045d57506003608083015151600a81111561045a5761045a611257565b14155b156104ab578160800151606001516104ab5760405162461bcd60e51b815260206004820152601160248201527014d0d0531157d254d7d491545552549151607a1b604482015260640161040c565b81516104b69061068c565b602083015281516001600160a01b03166104d257506020015190565b81516001600160a01b03165f9081526020819052604090205460ff1661054157815161051d906001600160a01b031673888888888889758f76e7103c6cbf23abbf58f9465f19610714565b81516001600160a01b03165f908152602081905260409020805460ff191660011790555b919050565b5f5f826001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610584573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a891906116d6565b50506040516370a0823160e01b81529091506001600160a01b038216906370a08231906105d9903090600401611720565b602060405180830381865afa1580156105f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106189190611734565b6001600160a01b0382165f9081526020819052604090205490925060ff16610686576106636001600160a01b03821673888888888889758f76e7103c6cbf23abbf58f9465f19610714565b6001600160a01b0381165f908152602081905260409020805460ff191660011790555b50919050565b5f6001600160a01b0382161561070c576040516370a0823160e01b81526001600160a01b038316906370a08231906106c8903090600401611720565b602060405180830381865afa1580156106e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107079190611734565b61070e565b475b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261076584826107cd565b6107c757604080516001600160a01b03851660248201525f6044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526107bd908590610869565b6107c78482610869565b50505050565b5f5f5f846001600160a01b0316846040516107e89190610baa565b5f604051808303815f865af19150503d805f8114610821576040519150601f19603f3d011682016040523d82523d5f602084013e610826565b606091505b5091509150818015610850575080511580610850575080806020019051810190610850919061174b565b8015610860575061086085610941565b95945050505050565b5f6108bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166109509092919063ffffffff16565b905080515f14806108dd5750808060200190518101906108dd919061174b565b61093c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161040c565b505050565b6001600160a01b03163b151590565b606061095e84845f85610966565b949350505050565b6060824710156109c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161040c565b5f5f866001600160a01b031685876040516109e29190610baa565b5f6040518083038185875af1925050503d805f8114610a1c576040519150601f19603f3d011682016040523d82523d5f602084013e610a21565b606091505b5091509150610a3287838387610a3d565b979650505050505050565b60608315610aa95782515f03610aa257610a5685610941565b610aa25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161040c565b508161095e565b61095e8383815115610abe5781518083602001fd5b8060405162461bcd60e51b815260040161040c9190610b91565b5f5f60208385031215610ae9575f5ffd5b82356001600160401b03811115610afe575f5ffd5b8301601f81018513610b0e575f5ffd5b80356001600160401b03811115610b23575f5ffd5b856020828401011115610b34575f5ffd5b6020919091019590945092505050565b5f5b83811015610b5e578181015183820152602001610b46565b50505f910152565b5f8151808452610b7d816020860160208601610b44565b601f01601f19169290920160200192915050565b602081525f610ba36020830184610b66565b9392505050565b5f8251610bbb818460208701610b44565b9190910192915050565b5f5f85851115610bd3575f5ffd5b83861115610bdf575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610c1d576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6001600160a01b0381168114610c38575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715610c7157610c71610c3b565b60405290565b604051608081016001600160401b0381118282101715610c7157610c71610c3b565b604051606081016001600160401b0381118282101715610c7157610c71610c3b565b60405161018081016001600160401b0381118282101715610c7157610c71610c3b565b604051601f8201601f191681016001600160401b0381118282101715610d0657610d06610c3b565b604052919050565b5f60a08284031215610d1e575f5ffd5b610d26610c4f565b823581526020808401359082015260408084013590820152606080840135908201526080928301359281019290925250919050565b803561054181610c24565b5f82601f830112610d75575f5ffd5b81356001600160401b03811115610d8e57610d8e610c3b565b610da1601f8201601f1916602001610cde565b818152846020838601011115610db5575f5ffd5b816020850160208301375f918101602001919091529392505050565b8015158114610c38575f5ffd5b5f60a08284031215610dee575f5ffd5b610df6610c4f565b90508135610e0381610c24565b8152602082810135908201526040820135610e1d81610c24565b60408201526060820135610e3081610c24565b606082015260808201356001600160401b03811115610e4d575f5ffd5b820160808185031215610e5e575f5ffd5b610e66610c77565b8135600b8110610e74575f5ffd5b81526020820135610e8481610c24565b602082015260408201356001600160401b03811115610ea1575f5ffd5b610ead86828501610d66565b60408301525060608201359150610ec382610dd1565b6060810191909152608082015292915050565b803560048110610541575f5ffd5b5f82601f830112610ef3575f5ffd5b81356001600160401b03811115610f0c57610f0c610c3b565b8060051b610f1c60208201610cde565b91825260208185018101929081019086841115610f37575f5ffd5b6020860192505b838310156110ba5782356001600160401b03811115610f5b575f5ffd5b86016060818903601f19011215610f70575f5ffd5b610f78610c99565b60208201356001600160401b03811115610f90575f5ffd5b6020818401019050610180818b031215610fa8575f5ffd5b610fb0610cbb565b813581526020808301359082015260408083013590820152610fd460608301610ed6565b6060820152610fe560808301610d5b565b6080820152610ff660a08301610d5b565b60a082015261100760c08301610d5b565b60c082015261101860e08301610d5b565b60e08201526101008281013590820152610120808301359082015261014080830135908201526101608201356001600160401b03811115611057575f5ffd5b6110638c828501610d66565b6101608301525082525060408201356001600160401b03811115611085575f5ffd5b6110948a602083860101610d66565b602083810191909152606093909301356040830152508352928301929190910190610f3e565b9695505050505050565b5f60a082840312156110d4575f5ffd5b6110dc610c4f565b90506110e782610d5b565b81526020828101359082015260408201356001600160401b0381111561110b575f5ffd5b61111784828501610ee4565b60408301525060608201356001600160401b03811115611135575f5ffd5b61114184828501610ee4565b60608301525060808201356001600160401b0381111561115f575f5ffd5b61116b84828501610d66565b60808301525092915050565b5f5f5f5f5f5f610140878903121561118d575f5ffd5b863561119881610c24565b955060208701356111a881610c24565b9450604087013593506111be8860608901610d0e565b92506101008701356001600160401b038111156111d9575f5ffd5b6111e589828a01610dde565b9250506101208701356001600160401b03811115611201575f5ffd5b61120d89828a016110c4565b9150509295509295509295565b6001600160a01b03169052565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b634e487b7160e01b5f52602160045260245ffd5b60018060a01b0381511682526020810151602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301525f608082015160a060808501528051600b81106112c4576112c4611257565b60a085015260208101516001600160a01b031660c08501526040810151608060e08601526112f6610120860182610b66565b905060608201511515610100860152809250505092915050565b6004811061132057611320611257565b9052565b5f82825180855260208501945060208160051b830101602085015f5b8381101561145557848303601f1901885281518051606080865281518187015260208201516080870152604082015160a087015281015161138460c0870182611310565b50608081015161139760e087018261121a565b5060a08101516113ab61010087018261121a565b5060c08101516113bf61012087018261121a565b5060e08101516113d361014087018261121a565b506101008101516101608601526101208101516101808601526101408101516101a086015261016081015190506101806101c08601526114176101e0860182610b66565b9050602082015185820360208701526114308282610b66565b6040938401519690930195909552506020988901989093509190910190600101611340565b50909695505050505050565b60018060a01b038151168252602081015160208301525f604082015160a0604085015261149160a0850182611324565b9050606083015184820360608601526114aa8282611324565b915050608083015184820360808601526108608282610b66565b6001600160a01b03878116825286166020820152604081018590526114ec6060820185611227565b6101406101008201525f61150461014083018561126b565b8281036101208401526115178185611461565b9998505050505050505050565b5f5f5f5f5f60a08688031215611538575f5ffd5b853561154381610c24565b9450602086013561155381610c24565b9350604086013592506060860135915060808601356001600160401b0381111561157b575f5ffd5b61158788828901610dde565b9150509295509295909350565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90610a329083018461126b565b5f5f5f5f5f5f61014087890312156115e3575f5ffd5b86356115ee81610c24565b955060208701356115fe81610c24565b9450604087013593506060870135925061161b8860808901610d0e565b91506101208701356001600160401b03811115611201575f5ffd5b6001600160a01b0387811682528616602082015260408101859052606081018490526116656080820184611227565b6101406101208201525f61167d610140830184611461565b98975050505050505050565b5f5f5f5f5f60a0868803121561169d575f5ffd5b85356116a881610c24565b945060208601356116b881610c24565b94979496505050506040830135926060810135926080909101359150565b5f5f5f606084860312156116e8575f5ffd5b83516116f381610c24565b602085015190935061170481610c24565b604085015190925061171581610c24565b809150509250925092565b6001600160a01b0391909116815260200190565b5f60208284031215611744575f5ffd5b5051919050565b5f6020828403121561175b575f5ffd5b8151610ba381610dd156fea2646970667358221220bac801c1dc7a5649fd8a81b89094ddef51ba4fbc1891702951fcbce10e85293a64736f6c634300081e0033",
31
- "deployedBytecode": "0x608060405260043610610020575f3560e01c8063ef4093631461002b575f5ffd5b3661002757005b5f5ffd5b348015610036575f5ffd5b5061004a610045366004610ad8565b610060565b6040516100579190610b91565b60405180910390f35b60605f5f61006e85856100fa565b915091505f73888888888889758f76e7103c6cbf23abbf58f9466001600160a01b031683836040516100a09190610baa565b5f6040518083038185875af1925050503d805f81146100da576040519150601f19603f3d011682016040523d82523d5f602084013e6100df565b606091505b5094509050806100f157835184602001fd5b50505092915050565b5f60608161010b6004828688610bc5565b61011491610bec565b9050365f610125866004818a610bc5565b90925090506001600160e01b0319831663092ccd6360e11b148061015957506001600160e01b0319831663640fc23d60e11b145b8061017457506001600160e01b031983166376a4483f60e11b145b156101fe575f808080808061018b87890189611177565b9550955095509550955095506101a08261041f565b9a50888686868686866040516024016101be969594939291906114c4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152995061041595505050505050565b63c241e3ab60e01b6001600160e01b0319841601610295575f8080808061022786880188611524565b9450945094509450945061023a8161041f565b9950878585858585604051602401610256959493929190611594565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529850610415945050505050565b6001600160e01b031983166358bda47560e01b14806102c457506001600160e01b03198316630a94245f60e21b145b806102df57506001600160e01b03198316637b8b4b9560e01b145b15610324575f808080806102f5868801886115cd565b955095509550509450945087858561030c87610546565b86868660405160240161025696959493929190611636565b633dde3dab60e11b6001600160e01b03198416016103d1575f80808061034c85870187611689565b94509450509350935086848461036186610546565b6040516001600160a01b03938416602482015292909116604483015260648201526084810184905260a4810183905260c40160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915297506104159350505050565b60405162461bcd60e51b81526020600482015260146024820152732aa729aaa82827a92a22a22fa9a2a622a1aa27a960611b60448201526064015b60405180910390fd5b5050509250929050565b5f80608083015151600a81111561043857610438611257565b1415801561045d57506003608083015151600a81111561045a5761045a611257565b14155b156104ab578160800151606001516104ab5760405162461bcd60e51b815260206004820152601160248201527014d0d0531157d254d7d491545552549151607a1b604482015260640161040c565b81516104b69061068c565b602083015281516001600160a01b03166104d257506020015190565b81516001600160a01b03165f9081526020819052604090205460ff1661054157815161051d906001600160a01b031673888888888889758f76e7103c6cbf23abbf58f9465f19610714565b81516001600160a01b03165f908152602081905260409020805460ff191660011790555b919050565b5f5f826001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610584573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a891906116d6565b50506040516370a0823160e01b81529091506001600160a01b038216906370a08231906105d9903090600401611720565b602060405180830381865afa1580156105f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106189190611734565b6001600160a01b0382165f9081526020819052604090205490925060ff16610686576106636001600160a01b03821673888888888889758f76e7103c6cbf23abbf58f9465f19610714565b6001600160a01b0381165f908152602081905260409020805460ff191660011790555b50919050565b5f6001600160a01b0382161561070c576040516370a0823160e01b81526001600160a01b038316906370a08231906106c8903090600401611720565b602060405180830381865afa1580156106e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107079190611734565b61070e565b475b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261076584826107cd565b6107c757604080516001600160a01b03851660248201525f6044808301919091528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526107bd908590610869565b6107c78482610869565b50505050565b5f5f5f846001600160a01b0316846040516107e89190610baa565b5f604051808303815f865af19150503d805f8114610821576040519150601f19603f3d011682016040523d82523d5f602084013e610826565b606091505b5091509150818015610850575080511580610850575080806020019051810190610850919061174b565b8015610860575061086085610941565b95945050505050565b5f6108bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166109509092919063ffffffff16565b905080515f14806108dd5750808060200190518101906108dd919061174b565b61093c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161040c565b505050565b6001600160a01b03163b151590565b606061095e84845f85610966565b949350505050565b6060824710156109c75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161040c565b5f5f866001600160a01b031685876040516109e29190610baa565b5f6040518083038185875af1925050503d805f8114610a1c576040519150601f19603f3d011682016040523d82523d5f602084013e610a21565b606091505b5091509150610a3287838387610a3d565b979650505050505050565b60608315610aa95782515f03610aa257610a5685610941565b610aa25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161040c565b508161095e565b61095e8383815115610abe5781518083602001fd5b8060405162461bcd60e51b815260040161040c9190610b91565b5f5f60208385031215610ae9575f5ffd5b82356001600160401b03811115610afe575f5ffd5b8301601f81018513610b0e575f5ffd5b80356001600160401b03811115610b23575f5ffd5b856020828401011115610b34575f5ffd5b6020919091019590945092505050565b5f5b83811015610b5e578181015183820152602001610b46565b50505f910152565b5f8151808452610b7d816020860160208601610b44565b601f01601f19169290920160200192915050565b602081525f610ba36020830184610b66565b9392505050565b5f8251610bbb818460208701610b44565b9190910192915050565b5f5f85851115610bd3575f5ffd5b83861115610bdf575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610c1d576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6001600160a01b0381168114610c38575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715610c7157610c71610c3b565b60405290565b604051608081016001600160401b0381118282101715610c7157610c71610c3b565b604051606081016001600160401b0381118282101715610c7157610c71610c3b565b60405161018081016001600160401b0381118282101715610c7157610c71610c3b565b604051601f8201601f191681016001600160401b0381118282101715610d0657610d06610c3b565b604052919050565b5f60a08284031215610d1e575f5ffd5b610d26610c4f565b823581526020808401359082015260408084013590820152606080840135908201526080928301359281019290925250919050565b803561054181610c24565b5f82601f830112610d75575f5ffd5b81356001600160401b03811115610d8e57610d8e610c3b565b610da1601f8201601f1916602001610cde565b818152846020838601011115610db5575f5ffd5b816020850160208301375f918101602001919091529392505050565b8015158114610c38575f5ffd5b5f60a08284031215610dee575f5ffd5b610df6610c4f565b90508135610e0381610c24565b8152602082810135908201526040820135610e1d81610c24565b60408201526060820135610e3081610c24565b606082015260808201356001600160401b03811115610e4d575f5ffd5b820160808185031215610e5e575f5ffd5b610e66610c77565b8135600b8110610e74575f5ffd5b81526020820135610e8481610c24565b602082015260408201356001600160401b03811115610ea1575f5ffd5b610ead86828501610d66565b60408301525060608201359150610ec382610dd1565b6060810191909152608082015292915050565b803560048110610541575f5ffd5b5f82601f830112610ef3575f5ffd5b81356001600160401b03811115610f0c57610f0c610c3b565b8060051b610f1c60208201610cde565b91825260208185018101929081019086841115610f37575f5ffd5b6020860192505b838310156110ba5782356001600160401b03811115610f5b575f5ffd5b86016060818903601f19011215610f70575f5ffd5b610f78610c99565b60208201356001600160401b03811115610f90575f5ffd5b6020818401019050610180818b031215610fa8575f5ffd5b610fb0610cbb565b813581526020808301359082015260408083013590820152610fd460608301610ed6565b6060820152610fe560808301610d5b565b6080820152610ff660a08301610d5b565b60a082015261100760c08301610d5b565b60c082015261101860e08301610d5b565b60e08201526101008281013590820152610120808301359082015261014080830135908201526101608201356001600160401b03811115611057575f5ffd5b6110638c828501610d66565b6101608301525082525060408201356001600160401b03811115611085575f5ffd5b6110948a602083860101610d66565b602083810191909152606093909301356040830152508352928301929190910190610f3e565b9695505050505050565b5f60a082840312156110d4575f5ffd5b6110dc610c4f565b90506110e782610d5b565b81526020828101359082015260408201356001600160401b0381111561110b575f5ffd5b61111784828501610ee4565b60408301525060608201356001600160401b03811115611135575f5ffd5b61114184828501610ee4565b60608301525060808201356001600160401b0381111561115f575f5ffd5b61116b84828501610d66565b60808301525092915050565b5f5f5f5f5f5f610140878903121561118d575f5ffd5b863561119881610c24565b955060208701356111a881610c24565b9450604087013593506111be8860608901610d0e565b92506101008701356001600160401b038111156111d9575f5ffd5b6111e589828a01610dde565b9250506101208701356001600160401b03811115611201575f5ffd5b61120d89828a016110c4565b9150509295509295509295565b6001600160a01b03169052565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b634e487b7160e01b5f52602160045260245ffd5b60018060a01b0381511682526020810151602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301525f608082015160a060808501528051600b81106112c4576112c4611257565b60a085015260208101516001600160a01b031660c08501526040810151608060e08601526112f6610120860182610b66565b905060608201511515610100860152809250505092915050565b6004811061132057611320611257565b9052565b5f82825180855260208501945060208160051b830101602085015f5b8381101561145557848303601f1901885281518051606080865281518187015260208201516080870152604082015160a087015281015161138460c0870182611310565b50608081015161139760e087018261121a565b5060a08101516113ab61010087018261121a565b5060c08101516113bf61012087018261121a565b5060e08101516113d361014087018261121a565b506101008101516101608601526101208101516101808601526101408101516101a086015261016081015190506101806101c08601526114176101e0860182610b66565b9050602082015185820360208701526114308282610b66565b6040938401519690930195909552506020988901989093509190910190600101611340565b50909695505050505050565b60018060a01b038151168252602081015160208301525f604082015160a0604085015261149160a0850182611324565b9050606083015184820360608601526114aa8282611324565b915050608083015184820360808601526108608282610b66565b6001600160a01b03878116825286166020820152604081018590526114ec6060820185611227565b6101406101008201525f61150461014083018561126b565b8281036101208401526115178185611461565b9998505050505050505050565b5f5f5f5f5f60a08688031215611538575f5ffd5b853561154381610c24565b9450602086013561155381610c24565b9350604086013592506060860135915060808601356001600160401b0381111561157b575f5ffd5b61158788828901610dde565b9150509295509295909350565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90610a329083018461126b565b5f5f5f5f5f5f61014087890312156115e3575f5ffd5b86356115ee81610c24565b955060208701356115fe81610c24565b9450604087013593506060870135925061161b8860808901610d0e565b91506101208701356001600160401b03811115611201575f5ffd5b6001600160a01b0387811682528616602082015260408101859052606081018490526116656080820184611227565b6101406101208201525f61167d610140830184611461565b98975050505050505050565b5f5f5f5f5f60a0868803121561169d575f5ffd5b85356116a881610c24565b945060208601356116b881610c24565b94979496505050506040830135926060810135926080909101359150565b5f5f5f606084860312156116e8575f5ffd5b83516116f381610c24565b602085015190935061170481610c24565b604085015190925061171581610c24565b809150509250925092565b6001600160a01b0391909116815260200190565b5f60208284031215611744575f5ffd5b5051919050565b5f6020828403121561175b575f5ffd5b8151610ba381610dd156fea2646970667358221220bac801c1dc7a5649fd8a81b89094ddef51ba4fbc1891702951fcbce10e85293a64736f6c634300081e0033",
30
+ "bytecode": "0x6080604052348015600e575f5ffd5b506119ec8061001c5f395ff3fe608060405260043610610020575f3560e01c8063ef4093631461002b575f5ffd5b3661002757005b5f5ffd5b348015610036575f5ffd5b5061004a610045366004610d0f565b610060565b6040516100579190610dc8565b60405180910390f35b60605f5f5f5f610070878761011b565b93509350935093505f73888888888889758f76e7103c6cbf23abbf58f9466001600160a01b031685856040516100a69190610de1565b5f6040518083038185875af1925050503d805f81146100e0576040519150601f19603f3d011682016040523d82523d5f602084013e6100e5565b606091505b5096509050806100f757855186602001fd5b6001600160a01b03821615610110576101108383610450565b505050505092915050565b5f606081808061012e600482888a610dfc565b61013791610e23565b9050365f610148886004818c610dfc565b90925090506001600160e01b0319831663092ccd6360e11b148061017c57506001600160e01b0319831663640fc23d60e11b145b8061019757506001600160e01b031983166376a4483f60e11b145b15610225575f80808080806101ae878901896113ae565b9550955095509550955095506101c3826104ef565b9c50888686868686866040516024016101e1969594939291906116fb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529b509499509297506104449350505050565b63c241e3ab60e01b6001600160e01b03198416016102c0575f8080808061024e8688018861175b565b94509450945094509450610261816104ef565b9b5087858585858560405160240161027d9594939291906117cb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529a5093985091965061044492505050565b6001600160e01b031983166358bda47560e01b14806102ef57506001600160e01b03198316630a94245f60e21b145b8061030a57506001600160e01b03198316637b8b4b9560e01b145b1561034f575f8080808061032086880188611804565b955095509550509450945087858561033787610616565b86868660405160240161027d9695949392919061186d565b633dde3dab60e11b6001600160e01b0319841601610400575f808080610377858701876118c0565b94509450509350935086848461038c86610616565b6040516001600160a01b03938416602482015292909116604483015260648201526084810184905260a4810183905260c40160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529950929750909550610444915050565b60405162461bcd60e51b81526020600482015260146024820152732aa729aaa82827a92a22a22fa9a2a622a1aa27a960611b60448201526064015b60405180910390fd5b50505092959194509250565b5f5f5f836001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561048f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b3919061190d565b9250925092506104cc83866104c78661075c565b6107cf565b6104da82866104c78561075c565b6104e881866104c78461075c565b5050505050565b5f80608083015151600a8111156105085761050861148e565b1415801561052d57506003608083015151600a81111561052a5761052a61148e565b14155b1561057b5781608001516060015161057b5760405162461bcd60e51b815260206004820152601160248201527014d0d0531157d254d7d491545552549151607a1b604482015260640161043b565b815161058690610899565b602083015281516001600160a01b03166105a257506020015190565b81516001600160a01b03165f9081526020819052604090205460ff166106115781516105ed906001600160a01b031673888888888889758f76e7103c6cbf23abbf58f9465f19610920565b81516001600160a01b03165f908152602081905260409020805460ff191660011790555b919050565b5f5f826001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610654573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610678919061190d565b50506040516370a0823160e01b81529091506001600160a01b038216906370a08231906106a9903090600401611957565b602060405180830381865afa1580156106c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e8919061196b565b6001600160a01b0382165f9081526020819052604090205490925060ff16610756576107336001600160a01b03821673888888888889758f76e7103c6cbf23abbf58f9465f19610920565b6001600160a01b0381165f908152602081905260409020805460ff191660011790555b50919050565b6040516370a0823160e01b81525f906001600160a01b038316906370a082319061078a903090600401611957565b602060405180830381865afa1580156107a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c9919061196b565b92915050565b805f036107db57505050565b6001600160a01b038316610880575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610832576040519150601f19603f3d011682016040523d82523d5f602084013e610837565b606091505b505090508061087a5760405162461bcd60e51b815260206004820152600f60248201526e195d1a081cd95b990819985a5b1959608a1b604482015260640161043b565b50505050565b6108946001600160a01b03841683836109ea565b505050565b5f6001600160a01b03821615610919576040516370a0823160e01b81526001600160a01b038316906370a08231906108d5903090600401611957565b602060405180830381865afa1580156108f0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610914919061196b565b6107c9565b4792915050565b5f63095ea7b360e01b838360405160240161093c929190611982565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061097a8482610a09565b61087a576040516001600160a01b03841660248201525f60448201526109e090859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610aa5565b61087a8482610aa5565b6108948363a9059cbb60e01b84846040516024016109a9929190611982565b5f5f5f846001600160a01b031684604051610a249190610de1565b5f604051808303815f865af19150503d805f8114610a5d576040519150601f19603f3d011682016040523d82523d5f602084013e610a62565b606091505b5091509150818015610a8c575080511580610a8c575080806020019051810190610a8c919061199b565b8015610a9c5750610a9c85610b78565b95945050505050565b5f610af9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b879092919063ffffffff16565b905080515f1480610b19575080806020019051810190610b19919061199b565b6108945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161043b565b6001600160a01b03163b151590565b6060610b9584845f85610b9d565b949350505050565b606082471015610bfe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161043b565b5f5f866001600160a01b03168587604051610c199190610de1565b5f6040518083038185875af1925050503d805f8114610c53576040519150601f19603f3d011682016040523d82523d5f602084013e610c58565b606091505b5091509150610c6987838387610c74565b979650505050505050565b60608315610ce05782515f03610cd957610c8d85610b78565b610cd95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043b565b5081610b95565b610b958383815115610cf55781518083602001fd5b8060405162461bcd60e51b815260040161043b9190610dc8565b5f5f60208385031215610d20575f5ffd5b82356001600160401b03811115610d35575f5ffd5b8301601f81018513610d45575f5ffd5b80356001600160401b03811115610d5a575f5ffd5b856020828401011115610d6b575f5ffd5b6020919091019590945092505050565b5f5b83811015610d95578181015183820152602001610d7d565b50505f910152565b5f8151808452610db4816020860160208601610d7b565b601f01601f19169290920160200192915050565b602081525f610dda6020830184610d9d565b9392505050565b5f8251610df2818460208701610d7b565b9190910192915050565b5f5f85851115610e0a575f5ffd5b83861115610e16575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610e54576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6001600160a01b0381168114610e6f575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715610ea857610ea8610e72565b60405290565b604051608081016001600160401b0381118282101715610ea857610ea8610e72565b604051606081016001600160401b0381118282101715610ea857610ea8610e72565b60405161018081016001600160401b0381118282101715610ea857610ea8610e72565b604051601f8201601f191681016001600160401b0381118282101715610f3d57610f3d610e72565b604052919050565b5f60a08284031215610f55575f5ffd5b610f5d610e86565b823581526020808401359082015260408084013590820152606080840135908201526080928301359281019290925250919050565b803561061181610e5b565b5f82601f830112610fac575f5ffd5b81356001600160401b03811115610fc557610fc5610e72565b610fd8601f8201601f1916602001610f15565b818152846020838601011115610fec575f5ffd5b816020850160208301375f918101602001919091529392505050565b8015158114610e6f575f5ffd5b5f60a08284031215611025575f5ffd5b61102d610e86565b9050813561103a81610e5b565b815260208281013590820152604082013561105481610e5b565b6040820152606082013561106781610e5b565b606082015260808201356001600160401b03811115611084575f5ffd5b820160808185031215611095575f5ffd5b61109d610eae565b8135600b81106110ab575f5ffd5b815260208201356110bb81610e5b565b602082015260408201356001600160401b038111156110d8575f5ffd5b6110e486828501610f9d565b604083015250606082013591506110fa82611008565b6060810191909152608082015292915050565b803560048110610611575f5ffd5b5f82601f83011261112a575f5ffd5b81356001600160401b0381111561114357611143610e72565b8060051b61115360208201610f15565b9182526020818501810192908101908684111561116e575f5ffd5b6020860192505b838310156112f15782356001600160401b03811115611192575f5ffd5b86016060818903601f190112156111a7575f5ffd5b6111af610ed0565b60208201356001600160401b038111156111c7575f5ffd5b6020818401019050610180818b0312156111df575f5ffd5b6111e7610ef2565b81358152602080830135908201526040808301359082015261120b6060830161110d565b606082015261121c60808301610f92565b608082015261122d60a08301610f92565b60a082015261123e60c08301610f92565b60c082015261124f60e08301610f92565b60e08201526101008281013590820152610120808301359082015261014080830135908201526101608201356001600160401b0381111561128e575f5ffd5b61129a8c828501610f9d565b6101608301525082525060408201356001600160401b038111156112bc575f5ffd5b6112cb8a602083860101610f9d565b602083810191909152606093909301356040830152508352928301929190910190611175565b9695505050505050565b5f60a0828403121561130b575f5ffd5b611313610e86565b905061131e82610f92565b81526020828101359082015260408201356001600160401b03811115611342575f5ffd5b61134e8482850161111b565b60408301525060608201356001600160401b0381111561136c575f5ffd5b6113788482850161111b565b60608301525060808201356001600160401b03811115611396575f5ffd5b6113a284828501610f9d565b60808301525092915050565b5f5f5f5f5f5f61014087890312156113c4575f5ffd5b86356113cf81610e5b565b955060208701356113df81610e5b565b9450604087013593506113f58860608901610f45565b92506101008701356001600160401b03811115611410575f5ffd5b61141c89828a01611015565b9250506101208701356001600160401b03811115611438575f5ffd5b61144489828a016112fb565b9150509295509295509295565b6001600160a01b03169052565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b634e487b7160e01b5f52602160045260245ffd5b60018060a01b0381511682526020810151602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301525f608082015160a060808501528051600b81106114fb576114fb61148e565b60a085015260208101516001600160a01b031660c08501526040810151608060e086015261152d610120860182610d9d565b905060608201511515610100860152809250505092915050565b600481106115575761155761148e565b9052565b5f82825180855260208501945060208160051b830101602085015f5b8381101561168c57848303601f1901885281518051606080865281518187015260208201516080870152604082015160a08701528101516115bb60c0870182611547565b5060808101516115ce60e0870182611451565b5060a08101516115e2610100870182611451565b5060c08101516115f6610120870182611451565b5060e081015161160a610140870182611451565b506101008101516101608601526101208101516101808601526101408101516101a086015261016081015190506101806101c086015261164e6101e0860182610d9d565b9050602082015185820360208701526116678282610d9d565b6040938401519690930195909552506020988901989093509190910190600101611577565b50909695505050505050565b60018060a01b038151168252602081015160208301525f604082015160a060408501526116c860a085018261155b565b9050606083015184820360608601526116e1828261155b565b91505060808301518482036080860152610a9c8282610d9d565b6001600160a01b0387811682528616602082015260408101859052611723606082018561145e565b6101406101008201525f61173b6101408301856114a2565b82810361012084015261174e8185611698565b9998505050505050505050565b5f5f5f5f5f60a0868803121561176f575f5ffd5b853561177a81610e5b565b9450602086013561178a81610e5b565b9350604086013592506060860135915060808601356001600160401b038111156117b2575f5ffd5b6117be88828901611015565b9150509295509295909350565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90610c69908301846114a2565b5f5f5f5f5f5f610140878903121561181a575f5ffd5b863561182581610e5b565b9550602087013561183581610e5b565b945060408701359350606087013592506118528860808901610f45565b91506101208701356001600160401b03811115611438575f5ffd5b6001600160a01b03878116825286166020820152604081018590526060810184905261189c608082018461145e565b6101406101208201525f6118b4610140830184611698565b98975050505050505050565b5f5f5f5f5f60a086880312156118d4575f5ffd5b85356118df81610e5b565b945060208601356118ef81610e5b565b94979496505050506040830135926060810135926080909101359150565b5f5f5f6060848603121561191f575f5ffd5b835161192a81610e5b565b602085015190935061193b81610e5b565b604085015190925061194c81610e5b565b809150509250925092565b6001600160a01b0391909116815260200190565b5f6020828403121561197b575f5ffd5b5051919050565b6001600160a01b03929092168252602082015260400190565b5f602082840312156119ab575f5ffd5b8151610dda8161100856fea264697066735822122089ba7f90f8a8ec7fe92464890e298e55ade897b364b9256bbdf3781f204f902364736f6c634300081e0033",
31
+ "deployedBytecode": "0x608060405260043610610020575f3560e01c8063ef4093631461002b575f5ffd5b3661002757005b5f5ffd5b348015610036575f5ffd5b5061004a610045366004610d0f565b610060565b6040516100579190610dc8565b60405180910390f35b60605f5f5f5f610070878761011b565b93509350935093505f73888888888889758f76e7103c6cbf23abbf58f9466001600160a01b031685856040516100a69190610de1565b5f6040518083038185875af1925050503d805f81146100e0576040519150601f19603f3d011682016040523d82523d5f602084013e6100e5565b606091505b5096509050806100f757855186602001fd5b6001600160a01b03821615610110576101108383610450565b505050505092915050565b5f606081808061012e600482888a610dfc565b61013791610e23565b9050365f610148886004818c610dfc565b90925090506001600160e01b0319831663092ccd6360e11b148061017c57506001600160e01b0319831663640fc23d60e11b145b8061019757506001600160e01b031983166376a4483f60e11b145b15610225575f80808080806101ae878901896113ae565b9550955095509550955095506101c3826104ef565b9c50888686868686866040516024016101e1969594939291906116fb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529b509499509297506104449350505050565b63c241e3ab60e01b6001600160e01b03198416016102c0575f8080808061024e8688018861175b565b94509450945094509450610261816104ef565b9b5087858585858560405160240161027d9594939291906117cb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529a5093985091965061044492505050565b6001600160e01b031983166358bda47560e01b14806102ef57506001600160e01b03198316630a94245f60e21b145b8061030a57506001600160e01b03198316637b8b4b9560e01b145b1561034f575f8080808061032086880188611804565b955095509550509450945087858561033787610616565b86868660405160240161027d9695949392919061186d565b633dde3dab60e11b6001600160e01b0319841601610400575f808080610377858701876118c0565b94509450509350935086848461038c86610616565b6040516001600160a01b03938416602482015292909116604483015260648201526084810184905260a4810183905260c40160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529950929750909550610444915050565b60405162461bcd60e51b81526020600482015260146024820152732aa729aaa82827a92a22a22fa9a2a622a1aa27a960611b60448201526064015b60405180910390fd5b50505092959194509250565b5f5f5f836001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561048f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b3919061190d565b9250925092506104cc83866104c78661075c565b6107cf565b6104da82866104c78561075c565b6104e881866104c78461075c565b5050505050565b5f80608083015151600a8111156105085761050861148e565b1415801561052d57506003608083015151600a81111561052a5761052a61148e565b14155b1561057b5781608001516060015161057b5760405162461bcd60e51b815260206004820152601160248201527014d0d0531157d254d7d491545552549151607a1b604482015260640161043b565b815161058690610899565b602083015281516001600160a01b03166105a257506020015190565b81516001600160a01b03165f9081526020819052604090205460ff166106115781516105ed906001600160a01b031673888888888889758f76e7103c6cbf23abbf58f9465f19610920565b81516001600160a01b03165f908152602081905260409020805460ff191660011790555b919050565b5f5f826001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610654573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610678919061190d565b50506040516370a0823160e01b81529091506001600160a01b038216906370a08231906106a9903090600401611957565b602060405180830381865afa1580156106c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e8919061196b565b6001600160a01b0382165f9081526020819052604090205490925060ff16610756576107336001600160a01b03821673888888888889758f76e7103c6cbf23abbf58f9465f19610920565b6001600160a01b0381165f908152602081905260409020805460ff191660011790555b50919050565b6040516370a0823160e01b81525f906001600160a01b038316906370a082319061078a903090600401611957565b602060405180830381865afa1580156107a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c9919061196b565b92915050565b805f036107db57505050565b6001600160a01b038316610880575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610832576040519150601f19603f3d011682016040523d82523d5f602084013e610837565b606091505b505090508061087a5760405162461bcd60e51b815260206004820152600f60248201526e195d1a081cd95b990819985a5b1959608a1b604482015260640161043b565b50505050565b6108946001600160a01b03841683836109ea565b505050565b5f6001600160a01b03821615610919576040516370a0823160e01b81526001600160a01b038316906370a08231906108d5903090600401611957565b602060405180830381865afa1580156108f0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610914919061196b565b6107c9565b4792915050565b5f63095ea7b360e01b838360405160240161093c929190611982565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905061097a8482610a09565b61087a576040516001600160a01b03841660248201525f60448201526109e090859063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610aa5565b61087a8482610aa5565b6108948363a9059cbb60e01b84846040516024016109a9929190611982565b5f5f5f846001600160a01b031684604051610a249190610de1565b5f604051808303815f865af19150503d805f8114610a5d576040519150601f19603f3d011682016040523d82523d5f602084013e610a62565b606091505b5091509150818015610a8c575080511580610a8c575080806020019051810190610a8c919061199b565b8015610a9c5750610a9c85610b78565b95945050505050565b5f610af9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610b879092919063ffffffff16565b905080515f1480610b19575080806020019051810190610b19919061199b565b6108945760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161043b565b6001600160a01b03163b151590565b6060610b9584845f85610b9d565b949350505050565b606082471015610bfe5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161043b565b5f5f866001600160a01b03168587604051610c199190610de1565b5f6040518083038185875af1925050503d805f8114610c53576040519150601f19603f3d011682016040523d82523d5f602084013e610c58565b606091505b5091509150610c6987838387610c74565b979650505050505050565b60608315610ce05782515f03610cd957610c8d85610b78565b610cd95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043b565b5081610b95565b610b958383815115610cf55781518083602001fd5b8060405162461bcd60e51b815260040161043b9190610dc8565b5f5f60208385031215610d20575f5ffd5b82356001600160401b03811115610d35575f5ffd5b8301601f81018513610d45575f5ffd5b80356001600160401b03811115610d5a575f5ffd5b856020828401011115610d6b575f5ffd5b6020919091019590945092505050565b5f5b83811015610d95578181015183820152602001610d7d565b50505f910152565b5f8151808452610db4816020860160208601610d7b565b601f01601f19169290920160200192915050565b602081525f610dda6020830184610d9d565b9392505050565b5f8251610df2818460208701610d7b565b9190910192915050565b5f5f85851115610e0a575f5ffd5b83861115610e16575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015610e54576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6001600160a01b0381168114610e6f575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715610ea857610ea8610e72565b60405290565b604051608081016001600160401b0381118282101715610ea857610ea8610e72565b604051606081016001600160401b0381118282101715610ea857610ea8610e72565b60405161018081016001600160401b0381118282101715610ea857610ea8610e72565b604051601f8201601f191681016001600160401b0381118282101715610f3d57610f3d610e72565b604052919050565b5f60a08284031215610f55575f5ffd5b610f5d610e86565b823581526020808401359082015260408084013590820152606080840135908201526080928301359281019290925250919050565b803561061181610e5b565b5f82601f830112610fac575f5ffd5b81356001600160401b03811115610fc557610fc5610e72565b610fd8601f8201601f1916602001610f15565b818152846020838601011115610fec575f5ffd5b816020850160208301375f918101602001919091529392505050565b8015158114610e6f575f5ffd5b5f60a08284031215611025575f5ffd5b61102d610e86565b9050813561103a81610e5b565b815260208281013590820152604082013561105481610e5b565b6040820152606082013561106781610e5b565b606082015260808201356001600160401b03811115611084575f5ffd5b820160808185031215611095575f5ffd5b61109d610eae565b8135600b81106110ab575f5ffd5b815260208201356110bb81610e5b565b602082015260408201356001600160401b038111156110d8575f5ffd5b6110e486828501610f9d565b604083015250606082013591506110fa82611008565b6060810191909152608082015292915050565b803560048110610611575f5ffd5b5f82601f83011261112a575f5ffd5b81356001600160401b0381111561114357611143610e72565b8060051b61115360208201610f15565b9182526020818501810192908101908684111561116e575f5ffd5b6020860192505b838310156112f15782356001600160401b03811115611192575f5ffd5b86016060818903601f190112156111a7575f5ffd5b6111af610ed0565b60208201356001600160401b038111156111c7575f5ffd5b6020818401019050610180818b0312156111df575f5ffd5b6111e7610ef2565b81358152602080830135908201526040808301359082015261120b6060830161110d565b606082015261121c60808301610f92565b608082015261122d60a08301610f92565b60a082015261123e60c08301610f92565b60c082015261124f60e08301610f92565b60e08201526101008281013590820152610120808301359082015261014080830135908201526101608201356001600160401b0381111561128e575f5ffd5b61129a8c828501610f9d565b6101608301525082525060408201356001600160401b038111156112bc575f5ffd5b6112cb8a602083860101610f9d565b602083810191909152606093909301356040830152508352928301929190910190611175565b9695505050505050565b5f60a0828403121561130b575f5ffd5b611313610e86565b905061131e82610f92565b81526020828101359082015260408201356001600160401b03811115611342575f5ffd5b61134e8482850161111b565b60408301525060608201356001600160401b0381111561136c575f5ffd5b6113788482850161111b565b60608301525060808201356001600160401b03811115611396575f5ffd5b6113a284828501610f9d565b60808301525092915050565b5f5f5f5f5f5f61014087890312156113c4575f5ffd5b86356113cf81610e5b565b955060208701356113df81610e5b565b9450604087013593506113f58860608901610f45565b92506101008701356001600160401b03811115611410575f5ffd5b61141c89828a01611015565b9250506101208701356001600160401b03811115611438575f5ffd5b61144489828a016112fb565b9150509295509295509295565b6001600160a01b03169052565b80518252602081015160208301526040810151604083015260608101516060830152608081015160808301525050565b634e487b7160e01b5f52602160045260245ffd5b60018060a01b0381511682526020810151602083015260018060a01b03604082015116604083015260018060a01b0360608201511660608301525f608082015160a060808501528051600b81106114fb576114fb61148e565b60a085015260208101516001600160a01b031660c08501526040810151608060e086015261152d610120860182610d9d565b905060608201511515610100860152809250505092915050565b600481106115575761155761148e565b9052565b5f82825180855260208501945060208160051b830101602085015f5b8381101561168c57848303601f1901885281518051606080865281518187015260208201516080870152604082015160a08701528101516115bb60c0870182611547565b5060808101516115ce60e0870182611451565b5060a08101516115e2610100870182611451565b5060c08101516115f6610120870182611451565b5060e081015161160a610140870182611451565b506101008101516101608601526101208101516101808601526101408101516101a086015261016081015190506101806101c086015261164e6101e0860182610d9d565b9050602082015185820360208701526116678282610d9d565b6040938401519690930195909552506020988901989093509190910190600101611577565b50909695505050505050565b60018060a01b038151168252602081015160208301525f604082015160a060408501526116c860a085018261155b565b9050606083015184820360608601526116e1828261155b565b91505060808301518482036080860152610a9c8282610d9d565b6001600160a01b0387811682528616602082015260408101859052611723606082018561145e565b6101406101008201525f61173b6101408301856114a2565b82810361012084015261174e8185611698565b9998505050505050505050565b5f5f5f5f5f60a0868803121561176f575f5ffd5b853561177a81610e5b565b9450602086013561178a81610e5b565b9350604086013592506060860135915060808601356001600160401b038111156117b2575f5ffd5b6117be88828901611015565b9150509295509295909350565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90610c69908301846114a2565b5f5f5f5f5f5f610140878903121561181a575f5ffd5b863561182581610e5b565b9550602087013561183581610e5b565b945060408701359350606087013592506118528860808901610f45565b91506101208701356001600160401b03811115611438575f5ffd5b6001600160a01b03878116825286166020820152604081018590526060810184905261189c608082018461145e565b6101406101208201525f6118b4610140830184611698565b98975050505050505050565b5f5f5f5f5f60a086880312156118d4575f5ffd5b85356118df81610e5b565b945060208601356118ef81610e5b565b94979496505050506040830135926060810135926080909101359150565b5f5f5f6060848603121561191f575f5ffd5b835161192a81610e5b565b602085015190935061193b81610e5b565b604085015190925061194c81610e5b565b809150509250925092565b6001600160a01b0391909116815260200190565b5f6020828403121561197b575f5ffd5b5051919050565b6001600160a01b03929092168252602082015260400190565b5f602082840312156119ab575f5ffd5b8151610dda8161100856fea264697066735822122089ba7f90f8a8ec7fe92464890e298e55ade897b364b9256bbdf3781f204f902364736f6c634300081e0033",
32
32
  "linkReferences": {},
33
33
  "deployedLinkReferences": {}
34
34
  }
@@ -0,0 +1,121 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.28;
4
+
5
+ import {PMath} from "./core/libraries/math/PMath.sol";
6
+
7
+ enum State {
8
+ B, // Benefitting
9
+ F // Forfeited
10
+ }
11
+
12
+ struct RoundData {
13
+ uint256 roundId;
14
+ uint256 totalPooled;
15
+ uint256 totalShares;
16
+
17
+ uint256 _pooledForfeited;
18
+ uint256 _sharesForfeited;
19
+ }
20
+
21
+ library RoundDataLib {
22
+ using PMath for uint256;
23
+
24
+ function sharesForfeited(RoundData storage self) public view returns (uint256) {
25
+ return self._sharesForfeited;
26
+ }
27
+
28
+ function sharesBenefitting(RoundData storage self) public view returns (uint256) {
29
+ return self.totalShares - self._sharesForfeited;
30
+ }
31
+
32
+ function pooledForfeited(RoundData storage self) public view returns (uint256) {
33
+ return self._pooledForfeited;
34
+ }
35
+
36
+ function pooledBenefitting(RoundData storage self) public view returns (uint256) {
37
+ return self.totalPooled.mulDown(self.totalShares) - self._pooledForfeited;
38
+ }
39
+ }
40
+
41
+ using RoundDataLib for RoundData;
42
+
43
+ struct UserData {
44
+ State state;
45
+ uint256 metaShares;
46
+ uint256 lastVotedRound;
47
+ uint256 forfeitedUntilRound;
48
+ }
49
+
50
+ contract StPendle {
51
+ using PMath for uint256;
52
+
53
+ mapping(address user => UserData) users;
54
+ mapping(uint256 roundId => RoundData) rounds;
55
+
56
+ uint256 curRound;
57
+ uint256 processedRound;
58
+
59
+ modifier onlyAdmin() {
60
+ // placeholder
61
+ _;
62
+ }
63
+
64
+ function hasInteractedBefore(address user) public view returns (bool) {
65
+ return users[user].metaShares > 0;
66
+ }
67
+
68
+ function curRoundData() internal view returns (RoundData storage stf) {
69
+ return rounds[curRound];
70
+ }
71
+
72
+ function getSideData(State state) public view returns (uint256 sidedPooled, uint256 sidedShares) {
73
+ RoundData storage rd = curRoundData();
74
+ return state == State.B //
75
+ ? (rd.pooledBenefitting(), rd.sharesBenefitting())
76
+ : (rd.pooledForfeited(), rd.sharesForfeited());
77
+ }
78
+
79
+ // helper to get user data with adjusted state and meta shares
80
+ function getUserData(address user) external view returns (UserData memory) {
81
+ // need to adjust user data based on curRound and processedRound
82
+ return users[user];
83
+ }
84
+
85
+ function sharesValue(uint256 numShares) public view returns (uint256) {
86
+ RoundData storage rd = curRoundData();
87
+ if (rd.totalShares == 0) {
88
+ return 0;
89
+ }
90
+ return (numShares * rd.totalPooled) / rd.totalShares;
91
+ }
92
+
93
+ function sharesOf(address user) public view returns (uint256) {
94
+ UserData memory data = users[user];
95
+ (, uint256 sidedShares) = getSideData(data.state);
96
+ return data.metaShares.mulDown(sidedShares);
97
+ }
98
+
99
+ function balanceOf(address user) external view returns (uint256) {
100
+ return sharesValue(sharesOf(user)); // demonstration only, need to be more precise
101
+ }
102
+
103
+ function distribute(uint256 amount) external onlyAdmin {
104
+ RoundData storage rd = curRoundData();
105
+ rd.totalPooled += amount;
106
+ rd._sharesForfeited = rd._pooledForfeited / rd.totalPooled;
107
+
108
+ ++processedRound;
109
+ }
110
+
111
+ function votingBegin() public onlyAdmin {
112
+ ++curRound;
113
+ }
114
+
115
+ function votingFinalize() public onlyAdmin {
116
+ // todo moving group logic
117
+ }
118
+
119
+ // just record a vote, no actual voting logic
120
+ function doVote() external {}
121
+ }
@@ -16,7 +16,7 @@ contract Reflector is TokenHelper, IPReflector {
16
16
  receive() external payable {}
17
17
 
18
18
  function reflect(bytes calldata inputData) external returns (bytes memory result) {
19
- (uint256 value, bytes memory newCalldata) = _getNewCalldata(inputData);
19
+ (uint256 value, bytes memory newCalldata, address receiver, address market) = _getNewCalldata(inputData);
20
20
  bool success;
21
21
 
22
22
  (success, result) = ROUTER.call{value: value}(newCalldata);
@@ -26,9 +26,14 @@ contract Reflector is TokenHelper, IPReflector {
26
26
  revert(add(32, result), mload(result))
27
27
  }
28
28
  }
29
+
30
+ if (market != address(0)) _sweepMarketDustBalance(receiver, market);
29
31
  }
30
32
 
31
- function _getNewCalldata(bytes calldata inputData) internal returns (uint256 value, bytes memory newCalldata) {
33
+ function _getNewCalldata(bytes calldata inputData)
34
+ internal
35
+ returns (uint256 value, bytes memory newCalldata, address receiver, address market)
36
+ {
32
37
  bytes4 selector = bytes4(inputData[:4]);
33
38
  bytes calldata data = inputData[4:];
34
39
 
@@ -48,12 +53,14 @@ contract Reflector is TokenHelper, IPReflector {
48
53
 
49
54
  value = _scaleTokenInputAndGetValue(v5);
50
55
  newCalldata = abi.encodeWithSelector(selector, v1, v2, v3, v4, v5, v6);
56
+ (receiver, market) = (v1, v2);
51
57
  } else if (selector == IPActionAddRemoveLiqV3.addLiquiditySingleTokenKeepYt.selector) {
52
58
  (address v1, address v2, uint256 v3, uint256 v4, TokenInput memory v5) =
53
59
  abi.decode(data, (address, address, uint256, uint256, TokenInput));
54
60
 
55
61
  value = _scaleTokenInputAndGetValue(v5);
56
62
  newCalldata = abi.encodeWithSelector(selector, v1, v2, v3, v4, v5);
63
+ (receiver, market) = (v1, v2);
57
64
  } else if (
58
65
  selector == IPActionAddRemoveLiqV3.addLiquiditySingleSy.selector
59
66
  || selector == IPActionSwapPTV3.swapExactSyForPt.selector
@@ -63,11 +70,13 @@ contract Reflector is TokenHelper, IPReflector {
63
70
  abi.decode(data, (address, address, uint256, uint256, ApproxParams, LimitOrderData));
64
71
 
65
72
  newCalldata = abi.encodeWithSelector(selector, v1, v2, _scaleSyInput(v2), v4, v5, v6);
73
+ (receiver, market) = (v1, v2);
66
74
  } else if (selector == IPActionAddRemoveLiqV3.addLiquiditySingleSyKeepYt.selector) {
67
75
  (address v1, address v2,, uint256 v4, uint256 v5) =
68
76
  abi.decode(data, (address, address, uint256, uint256, uint256));
69
77
 
70
78
  newCalldata = abi.encodeWithSelector(selector, v1, v2, _scaleSyInput(v2), v4, v5);
79
+ (receiver, market) = (v1, v2);
71
80
  } else {
72
81
  revert("UNSUPPORTED_SELECTOR");
73
82
  }
@@ -97,4 +106,12 @@ contract Reflector is TokenHelper, IPReflector {
97
106
  approved[address(SY)] = true;
98
107
  }
99
108
  }
109
+
110
+ function _sweepMarketDustBalance(address receiver, address market) internal {
111
+ (IStandardizedYield SY, IPPrincipalToken PT, IPYieldToken YT) = IPMarket(market).readTokens();
112
+
113
+ _transferOut(address(SY), receiver, _selfBalance(SY));
114
+ _transferOut(address(PT), receiver, _selfBalance(PT));
115
+ _transferOut(address(YT), receiver, _selfBalance(YT));
116
+ }
100
117
  }
@@ -46,7 +46,7 @@
46
46
  "poolDeployHelperV2": "0xF642d8Daa026B8aEd6dFE82FACbA2E077AF199E2",
47
47
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
48
48
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
49
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
49
+ "reflector": "0x30544e00Cf296B34A9eE59E5540Ae2f9CCCD55DD",
50
50
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
51
51
  "syFactory": "0x466CeD3b33045Ea986B2f306C8D0aA8067961CF8",
52
52
  "sparkLinearDiscountOracleFactory": "0x34C91651A070664279866E5f3d6B4d5F65cbbFFb",
@@ -44,7 +44,7 @@
44
44
  "poolDeployHelper": "0x439B4d66255eFf74e621FBacb00D7162b588Ff4b",
45
45
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
46
46
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
47
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
47
+ "reflector": "0x30544e00Cf296B34A9eE59E5540Ae2f9CCCD55DD",
48
48
  "vePendleAirdropDistributor": "0x3942F7B55094250644cFfDa7160226Caa349A38E",
49
49
  "externalRewardsDistributor": "0x33305665f69B4642D1275f4Ce81c23651674D21C",
50
50
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "deployer": "0x1FcCC097db89A86Bfc474A1028F93958295b1Fb7",
3
3
  "network": {
4
- "chainId": 130
4
+ "chainId": 130,
5
+ "wrappedNative": "0x4200000000000000000000000000000000000006"
5
6
  },
6
7
  "router": "0x888888888889758F76e7103c6CbF23ABbF58F946",
7
8
  "routerFacets": {
@@ -0,0 +1,9 @@
1
+ {
2
+ "pendleMulticallV2": "0x1ca3352a55A3D69cA8e5aB06006e08aaF2bD09f1",
3
+ "implicitSwapfeeContract": "0x82Fae57b2A79D893D88488A7D8BdF2AC6bd2C463",
4
+ "simulateHelper": "0xc23Dd2807e51dd1D317e1321CBeEb9ace98531EE",
5
+ "supperCapReader": "0x251CfB4E84CefecA6c1e6a4D8a0cb9c524e7484f",
6
+ "limitBackendHelperV2": "0xE3667BF5a5d8076c7a6e8b57C525150E4aFAe578",
7
+ "balanceReader": "0x2085F50305f656f96b22ECBfe0A4f5e786Ff0438"
8
+ }
9
+
@@ -30,7 +30,7 @@
30
30
  "routerStatic": "0x0013ACc071f732fd6BF8210AB46A3794a7D8945e",
31
31
  "pendleSwap": "0xd4F480965D2347d421F1bEC7F545682E5Ec2151D",
32
32
  "pyYtLpOracle": "0x5542be50420E88dd7D5B4a3D488FA6ED82F6DAc2",
33
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
33
+ "reflector": "0x30544e00Cf296B34A9eE59E5540Ae2f9CCCD55DD",
34
34
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
35
35
  "yieldContractFactoryV5": "0x0582D93FD9c9d42f26bE5D86a5f75291F92102C2",
36
36
  "marketFactoryV5": "0xFeE31A6eC6eBefa0b5A594Bf5b1139e3c6fAA0fB",
@@ -44,7 +44,7 @@
44
44
  "poolDeployHelper": "0xEE2eF4ADaf5Bd61FD107fD169CAe3AB79958B928",
45
45
  "limitRouter": "0x000000000000c9B3E2C3Ec88B1B4c0cD853f4321",
46
46
  "proxyAdmin": "0xA28c08f165116587D4F3E708743B4dEe155c5E64",
47
- "reflector": "0x73d5DBF81A4f3bFa7b335e6a2d4638D6017a4fA8",
47
+ "reflector": "0x30544e00Cf296B34A9eE59E5540Ae2f9CCCD55DD",
48
48
  "vePendleAirdropDistributor": "0x3942F7B55094250644cFfDa7160226Caa349A38E",
49
49
  "externalRewardsDistributor": "0x33305665f69B4642D1275f4Ce81c23651674D21C",
50
50
  "commonDeploy": "0x2Ed473F528E5B320f850d17ADfe0e558f0298aA9",