@lukso/lsp26-contracts 0.1.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.
- package/README.md +17 -0
- package/artifacts/ILSP26FollowerSystem.json +221 -0
- package/artifacts/LSP26FollowerSystem.json +248 -0
- package/contracts/ILSP26FollowerSystem.sol +75 -0
- package/contracts/Imports.sol +7 -0
- package/contracts/LSP26Constants.sol +10 -0
- package/contracts/LSP26Errors.sol +8 -0
- package/contracts/LSP26FollowerSystem.sol +164 -0
- package/contracts/mock/InfiniteLoopURD.sol +24 -0
- package/contracts/mock/ReturnBomb.sol +26 -0
- package/contracts/mock/RevertOnFollow.sol +20 -0
- package/contracts/mock/SelfDestructOnInterfaceCheck.sol +23 -0
- package/dist/index.cjs +12 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.mjs +9 -0
- package/package.json +55 -0
- package/types/index.ts +588 -0
package/README.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# LSP26 Follower System · [](https://www.npmjs.com/package/@lukso/lsp26-contracts)
|
2
|
+
|
3
|
+
Package for the LSP26 Follower System standard.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
```console
|
8
|
+
npm i @lukso/lsp26-contracts
|
9
|
+
```
|
10
|
+
|
11
|
+
## Available Constants & Types
|
12
|
+
|
13
|
+
The `@lukso/lsp26-contracts` npm package contains useful constants such as interface IDs, and specific constants related to the LSP26 Standard. You can import and access them as follows:
|
14
|
+
|
15
|
+
```js
|
16
|
+
import { INTERFACE_ID_LSP26, LSP26_TYPE_IDS } from "@lukso/lsp26-contracts";
|
17
|
+
```
|
@@ -0,0 +1,221 @@
|
|
1
|
+
{
|
2
|
+
"_format": "hh-sol-artifact-1",
|
3
|
+
"contractName": "ILSP26FollowerSystem",
|
4
|
+
"sourceName": "contracts/ILSP26FollowerSystem.sol",
|
5
|
+
"abi": [
|
6
|
+
{
|
7
|
+
"anonymous": false,
|
8
|
+
"inputs": [
|
9
|
+
{
|
10
|
+
"indexed": false,
|
11
|
+
"internalType": "address",
|
12
|
+
"name": "follower",
|
13
|
+
"type": "address"
|
14
|
+
},
|
15
|
+
{
|
16
|
+
"indexed": false,
|
17
|
+
"internalType": "address",
|
18
|
+
"name": "addr",
|
19
|
+
"type": "address"
|
20
|
+
}
|
21
|
+
],
|
22
|
+
"name": "Follow",
|
23
|
+
"type": "event"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"anonymous": false,
|
27
|
+
"inputs": [
|
28
|
+
{
|
29
|
+
"indexed": false,
|
30
|
+
"internalType": "address",
|
31
|
+
"name": "unfollower",
|
32
|
+
"type": "address"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"indexed": false,
|
36
|
+
"internalType": "address",
|
37
|
+
"name": "addr",
|
38
|
+
"type": "address"
|
39
|
+
}
|
40
|
+
],
|
41
|
+
"name": "Unfollow",
|
42
|
+
"type": "event"
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"inputs": [
|
46
|
+
{
|
47
|
+
"internalType": "address",
|
48
|
+
"name": "addr",
|
49
|
+
"type": "address"
|
50
|
+
}
|
51
|
+
],
|
52
|
+
"name": "follow",
|
53
|
+
"outputs": [],
|
54
|
+
"stateMutability": "nonpayable",
|
55
|
+
"type": "function"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"inputs": [
|
59
|
+
{
|
60
|
+
"internalType": "address[]",
|
61
|
+
"name": "addresses",
|
62
|
+
"type": "address[]"
|
63
|
+
}
|
64
|
+
],
|
65
|
+
"name": "followBatch",
|
66
|
+
"outputs": [],
|
67
|
+
"stateMutability": "nonpayable",
|
68
|
+
"type": "function"
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"inputs": [
|
72
|
+
{
|
73
|
+
"internalType": "address",
|
74
|
+
"name": "addr",
|
75
|
+
"type": "address"
|
76
|
+
}
|
77
|
+
],
|
78
|
+
"name": "followerCount",
|
79
|
+
"outputs": [
|
80
|
+
{
|
81
|
+
"internalType": "uint256",
|
82
|
+
"name": "",
|
83
|
+
"type": "uint256"
|
84
|
+
}
|
85
|
+
],
|
86
|
+
"stateMutability": "view",
|
87
|
+
"type": "function"
|
88
|
+
},
|
89
|
+
{
|
90
|
+
"inputs": [
|
91
|
+
{
|
92
|
+
"internalType": "address",
|
93
|
+
"name": "addr",
|
94
|
+
"type": "address"
|
95
|
+
}
|
96
|
+
],
|
97
|
+
"name": "followingCount",
|
98
|
+
"outputs": [
|
99
|
+
{
|
100
|
+
"internalType": "uint256",
|
101
|
+
"name": "",
|
102
|
+
"type": "uint256"
|
103
|
+
}
|
104
|
+
],
|
105
|
+
"stateMutability": "view",
|
106
|
+
"type": "function"
|
107
|
+
},
|
108
|
+
{
|
109
|
+
"inputs": [
|
110
|
+
{
|
111
|
+
"internalType": "address",
|
112
|
+
"name": "addr",
|
113
|
+
"type": "address"
|
114
|
+
},
|
115
|
+
{
|
116
|
+
"internalType": "uint256",
|
117
|
+
"name": "startIndex",
|
118
|
+
"type": "uint256"
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"internalType": "uint256",
|
122
|
+
"name": "endIndex",
|
123
|
+
"type": "uint256"
|
124
|
+
}
|
125
|
+
],
|
126
|
+
"name": "getFollowersByIndex",
|
127
|
+
"outputs": [
|
128
|
+
{
|
129
|
+
"internalType": "address[]",
|
130
|
+
"name": "",
|
131
|
+
"type": "address[]"
|
132
|
+
}
|
133
|
+
],
|
134
|
+
"stateMutability": "view",
|
135
|
+
"type": "function"
|
136
|
+
},
|
137
|
+
{
|
138
|
+
"inputs": [
|
139
|
+
{
|
140
|
+
"internalType": "address",
|
141
|
+
"name": "addr",
|
142
|
+
"type": "address"
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"internalType": "uint256",
|
146
|
+
"name": "startIndex",
|
147
|
+
"type": "uint256"
|
148
|
+
},
|
149
|
+
{
|
150
|
+
"internalType": "uint256",
|
151
|
+
"name": "endIndex",
|
152
|
+
"type": "uint256"
|
153
|
+
}
|
154
|
+
],
|
155
|
+
"name": "getFollowsByIndex",
|
156
|
+
"outputs": [
|
157
|
+
{
|
158
|
+
"internalType": "address[]",
|
159
|
+
"name": "",
|
160
|
+
"type": "address[]"
|
161
|
+
}
|
162
|
+
],
|
163
|
+
"stateMutability": "view",
|
164
|
+
"type": "function"
|
165
|
+
},
|
166
|
+
{
|
167
|
+
"inputs": [
|
168
|
+
{
|
169
|
+
"internalType": "address",
|
170
|
+
"name": "follower",
|
171
|
+
"type": "address"
|
172
|
+
},
|
173
|
+
{
|
174
|
+
"internalType": "address",
|
175
|
+
"name": "addr",
|
176
|
+
"type": "address"
|
177
|
+
}
|
178
|
+
],
|
179
|
+
"name": "isFollowing",
|
180
|
+
"outputs": [
|
181
|
+
{
|
182
|
+
"internalType": "bool",
|
183
|
+
"name": "",
|
184
|
+
"type": "bool"
|
185
|
+
}
|
186
|
+
],
|
187
|
+
"stateMutability": "view",
|
188
|
+
"type": "function"
|
189
|
+
},
|
190
|
+
{
|
191
|
+
"inputs": [
|
192
|
+
{
|
193
|
+
"internalType": "address",
|
194
|
+
"name": "addr",
|
195
|
+
"type": "address"
|
196
|
+
}
|
197
|
+
],
|
198
|
+
"name": "unfollow",
|
199
|
+
"outputs": [],
|
200
|
+
"stateMutability": "nonpayable",
|
201
|
+
"type": "function"
|
202
|
+
},
|
203
|
+
{
|
204
|
+
"inputs": [
|
205
|
+
{
|
206
|
+
"internalType": "address[]",
|
207
|
+
"name": "addresses",
|
208
|
+
"type": "address[]"
|
209
|
+
}
|
210
|
+
],
|
211
|
+
"name": "unfollowBatch",
|
212
|
+
"outputs": [],
|
213
|
+
"stateMutability": "nonpayable",
|
214
|
+
"type": "function"
|
215
|
+
}
|
216
|
+
],
|
217
|
+
"bytecode": "0x",
|
218
|
+
"deployedBytecode": "0x",
|
219
|
+
"linkReferences": {},
|
220
|
+
"deployedLinkReferences": {}
|
221
|
+
}
|
@@ -0,0 +1,248 @@
|
|
1
|
+
{
|
2
|
+
"_format": "hh-sol-artifact-1",
|
3
|
+
"contractName": "LSP26FollowerSystem",
|
4
|
+
"sourceName": "contracts/LSP26FollowerSystem.sol",
|
5
|
+
"abi": [
|
6
|
+
{
|
7
|
+
"inputs": [
|
8
|
+
{
|
9
|
+
"internalType": "address",
|
10
|
+
"name": "addr",
|
11
|
+
"type": "address"
|
12
|
+
}
|
13
|
+
],
|
14
|
+
"name": "LSP26AlreadyFollowing",
|
15
|
+
"type": "error"
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"inputs": [],
|
19
|
+
"name": "LSP26CannotSelfFollow",
|
20
|
+
"type": "error"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"inputs": [
|
24
|
+
{
|
25
|
+
"internalType": "address",
|
26
|
+
"name": "addr",
|
27
|
+
"type": "address"
|
28
|
+
}
|
29
|
+
],
|
30
|
+
"name": "LSP26NotFollowing",
|
31
|
+
"type": "error"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"anonymous": false,
|
35
|
+
"inputs": [
|
36
|
+
{
|
37
|
+
"indexed": false,
|
38
|
+
"internalType": "address",
|
39
|
+
"name": "follower",
|
40
|
+
"type": "address"
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"indexed": false,
|
44
|
+
"internalType": "address",
|
45
|
+
"name": "addr",
|
46
|
+
"type": "address"
|
47
|
+
}
|
48
|
+
],
|
49
|
+
"name": "Follow",
|
50
|
+
"type": "event"
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"anonymous": false,
|
54
|
+
"inputs": [
|
55
|
+
{
|
56
|
+
"indexed": false,
|
57
|
+
"internalType": "address",
|
58
|
+
"name": "unfollower",
|
59
|
+
"type": "address"
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"indexed": false,
|
63
|
+
"internalType": "address",
|
64
|
+
"name": "addr",
|
65
|
+
"type": "address"
|
66
|
+
}
|
67
|
+
],
|
68
|
+
"name": "Unfollow",
|
69
|
+
"type": "event"
|
70
|
+
},
|
71
|
+
{
|
72
|
+
"inputs": [
|
73
|
+
{
|
74
|
+
"internalType": "address",
|
75
|
+
"name": "addr",
|
76
|
+
"type": "address"
|
77
|
+
}
|
78
|
+
],
|
79
|
+
"name": "follow",
|
80
|
+
"outputs": [],
|
81
|
+
"stateMutability": "nonpayable",
|
82
|
+
"type": "function"
|
83
|
+
},
|
84
|
+
{
|
85
|
+
"inputs": [
|
86
|
+
{
|
87
|
+
"internalType": "address[]",
|
88
|
+
"name": "addresses",
|
89
|
+
"type": "address[]"
|
90
|
+
}
|
91
|
+
],
|
92
|
+
"name": "followBatch",
|
93
|
+
"outputs": [],
|
94
|
+
"stateMutability": "nonpayable",
|
95
|
+
"type": "function"
|
96
|
+
},
|
97
|
+
{
|
98
|
+
"inputs": [
|
99
|
+
{
|
100
|
+
"internalType": "address",
|
101
|
+
"name": "addr",
|
102
|
+
"type": "address"
|
103
|
+
}
|
104
|
+
],
|
105
|
+
"name": "followerCount",
|
106
|
+
"outputs": [
|
107
|
+
{
|
108
|
+
"internalType": "uint256",
|
109
|
+
"name": "",
|
110
|
+
"type": "uint256"
|
111
|
+
}
|
112
|
+
],
|
113
|
+
"stateMutability": "view",
|
114
|
+
"type": "function"
|
115
|
+
},
|
116
|
+
{
|
117
|
+
"inputs": [
|
118
|
+
{
|
119
|
+
"internalType": "address",
|
120
|
+
"name": "addr",
|
121
|
+
"type": "address"
|
122
|
+
}
|
123
|
+
],
|
124
|
+
"name": "followingCount",
|
125
|
+
"outputs": [
|
126
|
+
{
|
127
|
+
"internalType": "uint256",
|
128
|
+
"name": "",
|
129
|
+
"type": "uint256"
|
130
|
+
}
|
131
|
+
],
|
132
|
+
"stateMutability": "view",
|
133
|
+
"type": "function"
|
134
|
+
},
|
135
|
+
{
|
136
|
+
"inputs": [
|
137
|
+
{
|
138
|
+
"internalType": "address",
|
139
|
+
"name": "addr",
|
140
|
+
"type": "address"
|
141
|
+
},
|
142
|
+
{
|
143
|
+
"internalType": "uint256",
|
144
|
+
"name": "startIndex",
|
145
|
+
"type": "uint256"
|
146
|
+
},
|
147
|
+
{
|
148
|
+
"internalType": "uint256",
|
149
|
+
"name": "endIndex",
|
150
|
+
"type": "uint256"
|
151
|
+
}
|
152
|
+
],
|
153
|
+
"name": "getFollowersByIndex",
|
154
|
+
"outputs": [
|
155
|
+
{
|
156
|
+
"internalType": "address[]",
|
157
|
+
"name": "",
|
158
|
+
"type": "address[]"
|
159
|
+
}
|
160
|
+
],
|
161
|
+
"stateMutability": "view",
|
162
|
+
"type": "function"
|
163
|
+
},
|
164
|
+
{
|
165
|
+
"inputs": [
|
166
|
+
{
|
167
|
+
"internalType": "address",
|
168
|
+
"name": "addr",
|
169
|
+
"type": "address"
|
170
|
+
},
|
171
|
+
{
|
172
|
+
"internalType": "uint256",
|
173
|
+
"name": "startIndex",
|
174
|
+
"type": "uint256"
|
175
|
+
},
|
176
|
+
{
|
177
|
+
"internalType": "uint256",
|
178
|
+
"name": "endIndex",
|
179
|
+
"type": "uint256"
|
180
|
+
}
|
181
|
+
],
|
182
|
+
"name": "getFollowsByIndex",
|
183
|
+
"outputs": [
|
184
|
+
{
|
185
|
+
"internalType": "address[]",
|
186
|
+
"name": "",
|
187
|
+
"type": "address[]"
|
188
|
+
}
|
189
|
+
],
|
190
|
+
"stateMutability": "view",
|
191
|
+
"type": "function"
|
192
|
+
},
|
193
|
+
{
|
194
|
+
"inputs": [
|
195
|
+
{
|
196
|
+
"internalType": "address",
|
197
|
+
"name": "follower",
|
198
|
+
"type": "address"
|
199
|
+
},
|
200
|
+
{
|
201
|
+
"internalType": "address",
|
202
|
+
"name": "addr",
|
203
|
+
"type": "address"
|
204
|
+
}
|
205
|
+
],
|
206
|
+
"name": "isFollowing",
|
207
|
+
"outputs": [
|
208
|
+
{
|
209
|
+
"internalType": "bool",
|
210
|
+
"name": "",
|
211
|
+
"type": "bool"
|
212
|
+
}
|
213
|
+
],
|
214
|
+
"stateMutability": "view",
|
215
|
+
"type": "function"
|
216
|
+
},
|
217
|
+
{
|
218
|
+
"inputs": [
|
219
|
+
{
|
220
|
+
"internalType": "address",
|
221
|
+
"name": "addr",
|
222
|
+
"type": "address"
|
223
|
+
}
|
224
|
+
],
|
225
|
+
"name": "unfollow",
|
226
|
+
"outputs": [],
|
227
|
+
"stateMutability": "nonpayable",
|
228
|
+
"type": "function"
|
229
|
+
},
|
230
|
+
{
|
231
|
+
"inputs": [
|
232
|
+
{
|
233
|
+
"internalType": "address[]",
|
234
|
+
"name": "addresses",
|
235
|
+
"type": "address[]"
|
236
|
+
}
|
237
|
+
],
|
238
|
+
"name": "unfollowBatch",
|
239
|
+
"outputs": [],
|
240
|
+
"stateMutability": "nonpayable",
|
241
|
+
"type": "function"
|
242
|
+
}
|
243
|
+
],
|
244
|
+
"bytecode": "0x608060405234801561001057600080fd5b50610d6c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c8063645487071161007657806399ec3a421161005b57806399ec3a421461013c578063b2a8d0691461015f578063cf8711c81461017257600080fd5b806364548707146101165780638dd1e47e1461012957600080fd5b8063015a4ead146100a857806330b3a890146100bd5780634dbf27cc146100e35780635a39c581146100f6575b600080fd5b6100bb6100b6366004610a01565b610185565b005b6100d06100cb366004610a01565b610191565b6040519081526020015b60405180910390f35b6100bb6100f1366004610a01565b6101b8565b610109610104366004610a1c565b6101c1565b6040516100da9190610a4f565b6100d0610124366004610a01565b610292565b6100bb610137366004610ae3565b6102b3565b61014f61014a366004610b90565b6102f5565b60405190151581526020016100da565b61010961016d366004610a1c565b61031e565b6100bb610180366004610ae3565b6103e5565b61018e81610423565b50565b6001600160a01b03811660009081526020819052604081206101b2906105d0565b92915050565b61018e816105da565b606060006101cf8484610bd9565b905060008167ffffffffffffffff8111156101ec576101ec610a9c565b604051908082528060200260200182016040528015610215578160200160208202803683370190505b50905060005b828110156102885761024e6102308288610bec565b6001600160a01b038916600090815260016020526040902090610752565b82828151811061026057610260610bff565b6001600160a01b039092166020928302919091019091015261028181610c15565b905061021b565b5095945050505050565b6001600160a01b03811660009081526001602052604081206101b2906105d0565b60005b81518110156102f1576102e18282815181106102d4576102d4610bff565b6020026020010151610423565b6102ea81610c15565b90506102b6565b5050565b6001600160a01b0382166000908152600160205260408120610317908361075e565b9392505050565b6060600061032c8484610bd9565b905060008167ffffffffffffffff81111561034957610349610a9c565b604051908082528060200260200182016040528015610372578160200160208202803683370190505b50905060005b82811015610288576103ab61038d8288610bec565b6001600160a01b038916600090815260208190526040902090610752565b8282815181106103bd576103bd610bff565b6001600160a01b03909216602092830291909101909101526103de81610c15565b9050610378565b60005b81518110156102f15761041382828151811061040657610406610bff565b60200260200101516105da565b61041c81610c15565b90506103e8565b33600090815260016020526040812061043c9083610780565b905080610485576040517fc70bad4e0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b03821660009081526020819052604090206104a79033610780565b50604080513381526001600160a01b03841660208201527f083700fd0d85112c9d8c5823585c7542e8fadb693c9902e5bc590ab367f7a15e910160405180910390a16105036001600160a01b038316631aed5a8560e21b610795565b156102f1576040516bffffffffffffffffffffffff193360601b1660208201526001600160a01b03831690636bb56a14907f9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f906034015b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610586929190610c52565b6000604051808303816000875af19250505080156105c657506040513d6000823e601f3d908101601f191682016040526105c39190810190610c8c565b60015b156102f157505050565b60006101b2825490565b6001600160a01b038116330361061c576040517fea61954200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602052604081206106359083610864565b905080610679576040517f6feacbf60000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161047c565b6001600160a01b038216600090815260208190526040902061069b9033610864565b50604080513381526001600160a01b03841660208201527fbccc71dc7842b86291138666aa18e133ee6d41aa71e6d7c650debad1a0576635910160405180910390a16106f76001600160a01b038316631aed5a8560e21b610795565b156102f1576040516bffffffffffffffffffffffff193360601b1660208201526001600160a01b03831690636bb56a14907f71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a9060340161055a565b60006103178383610879565b6001600160a01b03811660009081526001830160205260408120541515610317565b6000610317836001600160a01b0384166108a3565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561084d575060208210155b80156108595750600081115b979650505050505050565b6000610317836001600160a01b038416610996565b600082600001828154811061089057610890610bff565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561098c5760006108c7600183610bd9565b85549091506000906108db90600190610bd9565b90508181146109405760008660000182815481106108fb576108fb610bff565b906000526020600020015490508087600001848154811061091e5761091e610bff565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061095157610951610d20565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101b2565b60009150506101b2565b60008181526001830160205260408120546109dd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101b2565b5060006101b2565b80356001600160a01b03811681146109fc57600080fd5b919050565b600060208284031215610a1357600080fd5b610317826109e5565b600080600060608486031215610a3157600080fd5b610a3a846109e5565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b81811015610a905783516001600160a01b031683529284019291840191600101610a6b565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610adb57610adb610a9c565b604052919050565b60006020808385031215610af657600080fd5b823567ffffffffffffffff80821115610b0e57600080fd5b818501915085601f830112610b2257600080fd5b813581811115610b3457610b34610a9c565b8060051b9150610b45848301610ab2565b8181529183018401918481019088841115610b5f57600080fd5b938501935b83851015610b8457610b75856109e5565b82529385019390850190610b64565b98975050505050505050565b60008060408385031215610ba357600080fd5b610bac836109e5565b9150610bba602084016109e5565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b818103818111156101b2576101b2610bc3565b808201808211156101b2576101b2610bc3565b634e487b7160e01b600052603260045260246000fd5b600060018201610c2757610c27610bc3565b5060010190565b60005b83811015610c49578181015183820152602001610c31565b50506000910152565b8281526040602082015260008251806040840152610c77816060850160208701610c2e565b601f01601f1916919091016060019392505050565b600060208284031215610c9e57600080fd5b815167ffffffffffffffff80821115610cb657600080fd5b818401915084601f830112610cca57600080fd5b815181811115610cdc57610cdc610a9c565b610cef601f8201601f1916602001610ab2565b9150808252856020828501011115610d0657600080fd5b610d17816020840160208601610c2e565b50949350505050565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220fdbde54f04e460123466f56d0f89ae6e981f38ee5c0d4fe6cbc1b9b266aa702364736f6c63430008110033",
|
245
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c8063645487071161007657806399ec3a421161005b57806399ec3a421461013c578063b2a8d0691461015f578063cf8711c81461017257600080fd5b806364548707146101165780638dd1e47e1461012957600080fd5b8063015a4ead146100a857806330b3a890146100bd5780634dbf27cc146100e35780635a39c581146100f6575b600080fd5b6100bb6100b6366004610a01565b610185565b005b6100d06100cb366004610a01565b610191565b6040519081526020015b60405180910390f35b6100bb6100f1366004610a01565b6101b8565b610109610104366004610a1c565b6101c1565b6040516100da9190610a4f565b6100d0610124366004610a01565b610292565b6100bb610137366004610ae3565b6102b3565b61014f61014a366004610b90565b6102f5565b60405190151581526020016100da565b61010961016d366004610a1c565b61031e565b6100bb610180366004610ae3565b6103e5565b61018e81610423565b50565b6001600160a01b03811660009081526020819052604081206101b2906105d0565b92915050565b61018e816105da565b606060006101cf8484610bd9565b905060008167ffffffffffffffff8111156101ec576101ec610a9c565b604051908082528060200260200182016040528015610215578160200160208202803683370190505b50905060005b828110156102885761024e6102308288610bec565b6001600160a01b038916600090815260016020526040902090610752565b82828151811061026057610260610bff565b6001600160a01b039092166020928302919091019091015261028181610c15565b905061021b565b5095945050505050565b6001600160a01b03811660009081526001602052604081206101b2906105d0565b60005b81518110156102f1576102e18282815181106102d4576102d4610bff565b6020026020010151610423565b6102ea81610c15565b90506102b6565b5050565b6001600160a01b0382166000908152600160205260408120610317908361075e565b9392505050565b6060600061032c8484610bd9565b905060008167ffffffffffffffff81111561034957610349610a9c565b604051908082528060200260200182016040528015610372578160200160208202803683370190505b50905060005b82811015610288576103ab61038d8288610bec565b6001600160a01b038916600090815260208190526040902090610752565b8282815181106103bd576103bd610bff565b6001600160a01b03909216602092830291909101909101526103de81610c15565b9050610378565b60005b81518110156102f15761041382828151811061040657610406610bff565b60200260200101516105da565b61041c81610c15565b90506103e8565b33600090815260016020526040812061043c9083610780565b905080610485576040517fc70bad4e0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b6001600160a01b03821660009081526020819052604090206104a79033610780565b50604080513381526001600160a01b03841660208201527f083700fd0d85112c9d8c5823585c7542e8fadb693c9902e5bc590ab367f7a15e910160405180910390a16105036001600160a01b038316631aed5a8560e21b610795565b156102f1576040516bffffffffffffffffffffffff193360601b1660208201526001600160a01b03831690636bb56a14907f9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f906034015b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610586929190610c52565b6000604051808303816000875af19250505080156105c657506040513d6000823e601f3d908101601f191682016040526105c39190810190610c8c565b60015b156102f157505050565b60006101b2825490565b6001600160a01b038116330361061c576040517fea61954200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526001602052604081206106359083610864565b905080610679576040517f6feacbf60000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161047c565b6001600160a01b038216600090815260208190526040902061069b9033610864565b50604080513381526001600160a01b03841660208201527fbccc71dc7842b86291138666aa18e133ee6d41aa71e6d7c650debad1a0576635910160405180910390a16106f76001600160a01b038316631aed5a8560e21b610795565b156102f1576040516bffffffffffffffffffffffff193360601b1660208201526001600160a01b03831690636bb56a14907f71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a9060340161055a565b60006103178383610879565b6001600160a01b03811660009081526001830160205260408120541515610317565b6000610317836001600160a01b0384166108a3565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561084d575060208210155b80156108595750600081115b979650505050505050565b6000610317836001600160a01b038416610996565b600082600001828154811061089057610890610bff565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561098c5760006108c7600183610bd9565b85549091506000906108db90600190610bd9565b90508181146109405760008660000182815481106108fb576108fb610bff565b906000526020600020015490508087600001848154811061091e5761091e610bff565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061095157610951610d20565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101b2565b60009150506101b2565b60008181526001830160205260408120546109dd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101b2565b5060006101b2565b80356001600160a01b03811681146109fc57600080fd5b919050565b600060208284031215610a1357600080fd5b610317826109e5565b600080600060608486031215610a3157600080fd5b610a3a846109e5565b95602085013595506040909401359392505050565b6020808252825182820181905260009190848201906040850190845b81811015610a905783516001600160a01b031683529284019291840191600101610a6b565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610adb57610adb610a9c565b604052919050565b60006020808385031215610af657600080fd5b823567ffffffffffffffff80821115610b0e57600080fd5b818501915085601f830112610b2257600080fd5b813581811115610b3457610b34610a9c565b8060051b9150610b45848301610ab2565b8181529183018401918481019088841115610b5f57600080fd5b938501935b83851015610b8457610b75856109e5565b82529385019390850190610b64565b98975050505050505050565b60008060408385031215610ba357600080fd5b610bac836109e5565b9150610bba602084016109e5565b90509250929050565b634e487b7160e01b600052601160045260246000fd5b818103818111156101b2576101b2610bc3565b808201808211156101b2576101b2610bc3565b634e487b7160e01b600052603260045260246000fd5b600060018201610c2757610c27610bc3565b5060010190565b60005b83811015610c49578181015183820152602001610c31565b50506000910152565b8281526040602082015260008251806040840152610c77816060850160208701610c2e565b601f01601f1916919091016060019392505050565b600060208284031215610c9e57600080fd5b815167ffffffffffffffff80821115610cb657600080fd5b818401915084601f830112610cca57600080fd5b815181811115610cdc57610cdc610a9c565b610cef601f8201601f1916602001610ab2565b9150808252856020828501011115610d0657600080fd5b610d17816020840160208601610c2e565b50949350505050565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220fdbde54f04e460123466f56d0f89ae6e981f38ee5c0d4fe6cbc1b9b266aa702364736f6c63430008110033",
|
246
|
+
"linkReferences": {},
|
247
|
+
"deployedLinkReferences": {}
|
248
|
+
}
|
@@ -0,0 +1,75 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.17;
|
3
|
+
|
4
|
+
interface ILSP26FollowerSystem {
|
5
|
+
/// @notice Emitted when following an address.
|
6
|
+
/// @param follower The address that follows `addr`
|
7
|
+
/// @param addr The address that is followed by `follower`
|
8
|
+
event Follow(address follower, address addr);
|
9
|
+
|
10
|
+
/// @notice Emitted when unfollowing an address.
|
11
|
+
/// @param unfollower The address that unfollows `addr`
|
12
|
+
/// @param addr The address that is unfollowed by `follower`
|
13
|
+
event Unfollow(address unfollower, address addr);
|
14
|
+
|
15
|
+
/// @notice Follow an specific address.
|
16
|
+
/// @param addr The address to start following.
|
17
|
+
/// @custom:events {Follow} event when following an address.
|
18
|
+
function follow(address addr) external;
|
19
|
+
|
20
|
+
/// @notice Follow a list of addresses.
|
21
|
+
/// @param addresses The list of addresses to follow.
|
22
|
+
/// @custom:events {Follow} event when following each address in the list.
|
23
|
+
function followBatch(address[] memory addresses) external;
|
24
|
+
|
25
|
+
/// @notice Unfollow a specific address.
|
26
|
+
/// @param addr The address to stop following.
|
27
|
+
/// @custom:events {Unfollow} event when unfollowing an address.
|
28
|
+
function unfollow(address addr) external;
|
29
|
+
|
30
|
+
/// @notice Unfollow a list of addresses.
|
31
|
+
/// @param addresses The list of addresses to unfollow.
|
32
|
+
/// @custom:events {Follow} event when unfollowing each address in the list.
|
33
|
+
function unfollowBatch(address[] memory addresses) external;
|
34
|
+
|
35
|
+
/// @notice Check if an address is following a specific address.
|
36
|
+
/// @param follower The address of the follower to check.
|
37
|
+
/// @param addr The address being followed.
|
38
|
+
/// @return True if `follower` is following `addr`, false otherwise.
|
39
|
+
function isFollowing(
|
40
|
+
address follower,
|
41
|
+
address addr
|
42
|
+
) external view returns (bool);
|
43
|
+
|
44
|
+
/// @notice Get the number of followers for an address.
|
45
|
+
/// @param addr The address whose followers count is requested.
|
46
|
+
/// @return The number of followers of `addr`.
|
47
|
+
function followerCount(address addr) external view returns (uint256);
|
48
|
+
|
49
|
+
/// @notice Get the number of addresses an address is following.
|
50
|
+
/// @param addr The address of the follower whose following count is requested.
|
51
|
+
/// @return The number of addresses that `addr` is following.
|
52
|
+
function followingCount(address addr) external view returns (uint256);
|
53
|
+
|
54
|
+
/// @notice Get the list of addresses the given address is following within a specified range.
|
55
|
+
/// @param addr The address whose followed addresses are requested.
|
56
|
+
/// @param startIndex The start index of the range (inclusive).
|
57
|
+
/// @param endIndex The end index of the range (exclusive).
|
58
|
+
/// @return An array of addresses followed by the given address.
|
59
|
+
function getFollowsByIndex(
|
60
|
+
address addr,
|
61
|
+
uint256 startIndex,
|
62
|
+
uint256 endIndex
|
63
|
+
) external view returns (address[] memory);
|
64
|
+
|
65
|
+
/// @notice Get the list of addresses that follow an address within a specified range.
|
66
|
+
/// @param addr The address whose followers are requested.
|
67
|
+
/// @param startIndex The start index of the range (inclusive).
|
68
|
+
/// @param endIndex The end index of the range (exclusive).
|
69
|
+
/// @return An array of addresses that are following an addresses.
|
70
|
+
function getFollowersByIndex(
|
71
|
+
address addr,
|
72
|
+
uint256 startIndex,
|
73
|
+
uint256 endIndex
|
74
|
+
) external view returns (address[] memory);
|
75
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.17;
|
3
|
+
|
4
|
+
bytes4 constant _INTERFACEID_LSP26 = 0x2b299cea;
|
5
|
+
|
6
|
+
// keccak256('LSP26FollowerSystem_FollowNotification')
|
7
|
+
bytes32 constant _TYPEID_LSP26_FOLLOW = 0x71e02f9f05bcd5816ec4f3134aa2e5a916669537ec6c77fe66ea595fabc2d51a;
|
8
|
+
|
9
|
+
// keccak256('LSP26FollowerSystem_UnfollowNotification')
|
10
|
+
bytes32 constant _TYPEID_LSP26_UNFOLLOW = 0x9d3c0b4012b69658977b099bdaa51eff0f0460f421fba96d15669506c00d1c4f;
|