@aurigami/sdk 1.6.4 → 1.6.5
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/ChangeLog.md +159 -0
- package/dist/SDK.d.ts +4 -7
- package/dist/abis/index.d.ts +14 -0
- package/dist/consts/constants.d.ts +2 -2
- package/dist/consts/dummy.d.ts +1 -2
- package/dist/contracts/{airdrop-lottery.d.ts → Airdrop.d.ts} +0 -5
- package/dist/contracts/MoneyMarket.d.ts +3 -4
- package/dist/contracts/Multicall.d.ts +1 -1
- package/dist/contracts/Papermill.d.ts +2 -7
- package/dist/contracts/Staking.d.ts +2 -5
- package/dist/contracts/index.d.ts +2 -1
- package/dist/contracts/misc.d.ts +26 -0
- package/dist/entities/auriEnv.d.ts +13 -0
- package/dist/entities/index.d.ts +1 -0
- package/dist/entities/tokenAmount.d.ts +1 -1
- package/dist/helpers/priceFetcher.d.ts +1 -1
- package/dist/helpers/transfer-event-query.d.ts +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/sdk.cjs.development.js +579 -104416
- package/dist/sdk.cjs.development.js.map +1 -1
- package/dist/sdk.cjs.production.min.js +1 -1
- package/dist/sdk.cjs.production.min.js.map +1 -1
- package/dist/sdk.esm.js +582 -104421
- package/dist/sdk.esm.js.map +1 -1
- package/package.json +7 -6
- package/src/SDK.ts +23 -330
- package/src/abis/index.ts +30 -0
- package/src/consts/constants.ts +15 -16
- package/src/consts/dummy.ts +4 -14
- package/src/contracts/Airdrop.ts +80 -0
- package/src/contracts/MoneyMarket.ts +56 -160
- package/src/contracts/Multicall.ts +5 -10
- package/src/contracts/Papermill.ts +32 -113
- package/src/contracts/Referral.ts +4 -7
- package/src/contracts/Staking.ts +18 -59
- package/src/contracts/index.ts +2 -1
- package/src/contracts/misc.ts +281 -0
- package/src/entities/BlockchainEntity.ts +2 -6
- package/src/entities/auriEnv.ts +39 -0
- package/src/entities/index.ts +1 -0
- package/src/entities/token.ts +1 -1
- package/src/entities/tokenAmount.ts +4 -12
- package/src/helpers/aurora-api-helpers.ts +3 -6
- package/src/helpers/helpers.ts +5 -17
- package/src/helpers/priceFetcher.ts +21 -62
- package/src/helpers/transfer-event-query.ts +4 -6
- package/src/index.ts +1 -1
- package/src/types/index.ts +1 -1
- package/src/abis/Faucet.json +0 -157
- package/src/abis/IUniswapV2Pair.json +0 -663
- package/src/abis/Oracle.json +0 -247
- package/src/abis/dummy.json +0 -3
- package/src/contracts/airdrop-lottery.ts +0 -320
- package/src/misc/airdrop_misc/auTokensInfo.json +0 -34
- package/src/misc/airdrop_misc/whitelist.json +0 -102629
|
@@ -1,34 +1,22 @@
|
|
|
1
|
+
import AuriLensABI from '@aurigami/contracts/artifacts/contracts/AuriLens.sol/AuriLens.json';
|
|
2
|
+
import { IUniswapV2Pair, PriceOracle } from '@aurigami/contracts/typechain';
|
|
3
|
+
import axios from 'axios';
|
|
1
4
|
import BigNumber from 'bignumber.js';
|
|
2
|
-
import {
|
|
5
|
+
import { BigNumber as BN, Contract, providers } from 'ethers';
|
|
6
|
+
import { AuriOracleABI, IUniswapV2PairABI } from '../abis';
|
|
3
7
|
import {
|
|
4
8
|
DECIMAL_PRECISION,
|
|
5
9
|
HARDCODE_PRICE_TOKENS,
|
|
6
10
|
networkAddresses,
|
|
7
11
|
PRICE_WHITELISTED,
|
|
8
12
|
} from '../consts/constants';
|
|
9
|
-
import OracleABI from '../abis/Oracle.json';
|
|
10
|
-
import {
|
|
11
|
-
isSameAddress,
|
|
12
|
-
decimalFactor,
|
|
13
|
-
getDecimal,
|
|
14
|
-
assert,
|
|
15
|
-
devLog,
|
|
16
|
-
} from './helpers';
|
|
17
|
-
import { IUniswapV2Pair, PriceOracle } from '@aurigami/contracts/typechain';
|
|
18
13
|
import { TokenAmount } from '../entities/tokenAmount';
|
|
19
14
|
import { Address, TokenValuation } from '../types';
|
|
20
|
-
import
|
|
21
|
-
import AuriLensABI from '@aurigami/contracts/artifacts/contracts/AuriLens.sol/AuriLens.json';
|
|
22
|
-
import axios from 'axios';
|
|
15
|
+
import { assert, decimalFactor, devLog, getDecimal, isSameAddress } from './helpers';
|
|
23
16
|
|
|
24
|
-
|
|
25
|
-
export async function fetchPriceFromCoingeckoAPI(
|
|
26
|
-
id: string
|
|
27
|
-
): Promise<BigNumber> {
|
|
17
|
+
export async function fetchPriceFromCoingeckoAPI(id: string): Promise<BigNumber> {
|
|
28
18
|
const price = await axios
|
|
29
|
-
.get(
|
|
30
|
-
`https://api.coingecko.com/api/v3/simple/price?ids=${id}&vs_currencies=usd`
|
|
31
|
-
)
|
|
19
|
+
.get(`https://api.coingecko.com/api/v3/simple/price?ids=${id}&vs_currencies=usd`)
|
|
32
20
|
.then((res: any) => {
|
|
33
21
|
return res.data;
|
|
34
22
|
});
|
|
@@ -62,11 +50,7 @@ export async function fetchLPPositions(
|
|
|
62
50
|
reserve1: BN;
|
|
63
51
|
totalSupply: BN;
|
|
64
52
|
}> {
|
|
65
|
-
const LPContract = new Contract(
|
|
66
|
-
LPAddress,
|
|
67
|
-
IUniswapV2PairABI.abi,
|
|
68
|
-
provider
|
|
69
|
-
) as IUniswapV2Pair;
|
|
53
|
+
const LPContract = new Contract(LPAddress, IUniswapV2PairABI.abi, provider) as IUniswapV2Pair;
|
|
70
54
|
var promises: any[] = [];
|
|
71
55
|
promises.push(LPContract.token0());
|
|
72
56
|
promises.push(LPContract.token1());
|
|
@@ -99,10 +83,7 @@ export async function fetchLPPrice(
|
|
|
99
83
|
// Should NOT call `fetchPrice`, it will cause an infinite loop
|
|
100
84
|
// because the token can be PLY. To calculate PLY price, we need to
|
|
101
85
|
// call `fetchPrice` again...
|
|
102
|
-
const tokenPrice: BigNumber = await _fetchPrice(
|
|
103
|
-
tokenReverse.address,
|
|
104
|
-
provider
|
|
105
|
-
);
|
|
86
|
+
const tokenPrice: BigNumber = await _fetchPrice(tokenReverse.address, provider);
|
|
106
87
|
const tokenDecimal = getDecimal(tokenReverse.address);
|
|
107
88
|
|
|
108
89
|
// reserveUSD will be divided by 10^tokenDecimal later for more precision
|
|
@@ -137,9 +118,7 @@ export async function fetchLPPrice(
|
|
|
137
118
|
}
|
|
138
119
|
|
|
139
120
|
function processPriceFromOracle(rawPrice: BN, underlyingDecimal: number) {
|
|
140
|
-
return new BigNumber(rawPrice.toString()).div(
|
|
141
|
-
decimalFactor(36 - underlyingDecimal)
|
|
142
|
-
);
|
|
121
|
+
return new BigNumber(rawPrice.toString()).div(decimalFactor(36 - underlyingDecimal));
|
|
143
122
|
}
|
|
144
123
|
export async function fetchPriceFromOracle(
|
|
145
124
|
auTokenAddress: Address,
|
|
@@ -148,16 +127,14 @@ export async function fetchPriceFromOracle(
|
|
|
148
127
|
): Promise<BigNumber> {
|
|
149
128
|
const oracleContract: PriceOracle = new Contract(
|
|
150
129
|
networkAddresses.misc.oracle,
|
|
151
|
-
|
|
130
|
+
AuriOracleABI.abi,
|
|
152
131
|
provider
|
|
153
132
|
) as PriceOracle;
|
|
154
133
|
const rawPrice = await oracleContract.getUnderlyingPrice(auTokenAddress);
|
|
155
134
|
return processPriceFromOracle(rawPrice, underlyingDecimal);
|
|
156
135
|
}
|
|
157
136
|
|
|
158
|
-
export async function fetchUnderlyingTokensPrices(
|
|
159
|
-
provider: providers.Provider
|
|
160
|
-
): Promise<
|
|
137
|
+
export async function fetchUnderlyingTokensPrices(provider: providers.Provider): Promise<
|
|
161
138
|
{
|
|
162
139
|
auToken: string;
|
|
163
140
|
underlyingPrice: BigNumber;
|
|
@@ -168,9 +145,7 @@ export async function fetchUnderlyingTokensPrices(
|
|
|
168
145
|
AuriLensABI.abi,
|
|
169
146
|
provider
|
|
170
147
|
);
|
|
171
|
-
const auTokenAddresses = networkAddresses.auTokens.map(
|
|
172
|
-
(auToken) => auToken.address
|
|
173
|
-
);
|
|
148
|
+
const auTokenAddresses = networkAddresses.auTokens.map((auToken) => auToken.address);
|
|
174
149
|
const underlyingDecimals = networkAddresses.auTokens.map((auToken) =>
|
|
175
150
|
getDecimal(auToken.underlying)
|
|
176
151
|
);
|
|
@@ -178,10 +153,7 @@ export async function fetchUnderlyingTokensPrices(
|
|
|
178
153
|
return rawPrices.map((res: any, ind: number) => {
|
|
179
154
|
return {
|
|
180
155
|
auToken: res.auToken,
|
|
181
|
-
underlyingPrice: processPriceFromOracle(
|
|
182
|
-
res.underlyingPrice,
|
|
183
|
-
underlyingDecimals[ind]
|
|
184
|
-
),
|
|
156
|
+
underlyingPrice: processPriceFromOracle(res.underlyingPrice, underlyingDecimals[ind]),
|
|
185
157
|
};
|
|
186
158
|
});
|
|
187
159
|
}
|
|
@@ -211,30 +183,21 @@ function shouldFetchFromCoingecko(address: string) {
|
|
|
211
183
|
/**
|
|
212
184
|
* Fetch price from Oracle or Coingecko
|
|
213
185
|
*/
|
|
214
|
-
async function _fetchPrice(
|
|
215
|
-
address: Address,
|
|
216
|
-
provider: providers.Provider
|
|
217
|
-
): Promise<BigNumber> {
|
|
186
|
+
async function _fetchPrice(address: Address, provider: providers.Provider): Promise<BigNumber> {
|
|
218
187
|
assert(
|
|
219
188
|
PRICE_WHITELISTED.has(address.toLocaleLowerCase()),
|
|
220
189
|
`Address ${address} is not whitelisted for price fetching`
|
|
221
190
|
);
|
|
222
191
|
|
|
223
|
-
if (isSameAddress(address, networkAddresses.tokens.stNEAR))
|
|
224
|
-
|
|
225
|
-
if (shouldFetchFromCoingecko(address))
|
|
226
|
-
return fetchPriceFromCoingecko(address);
|
|
192
|
+
if (isSameAddress(address, networkAddresses.tokens.stNEAR)) return fetchStNEARPrice();
|
|
193
|
+
if (shouldFetchFromCoingecko(address)) return fetchPriceFromCoingecko(address);
|
|
227
194
|
|
|
228
195
|
const matchingAuToken = networkAddresses.auTokens.find((auToken) => {
|
|
229
196
|
return isSameAddress(auToken.underlying, address);
|
|
230
197
|
});
|
|
231
198
|
|
|
232
199
|
if (matchingAuToken !== undefined) {
|
|
233
|
-
return fetchPriceFromOracle(
|
|
234
|
-
matchingAuToken.address,
|
|
235
|
-
getDecimal(address),
|
|
236
|
-
provider
|
|
237
|
-
);
|
|
200
|
+
return fetchPriceFromOracle(matchingAuToken.address, getDecimal(address), provider);
|
|
238
201
|
} else {
|
|
239
202
|
throw Error(`Unable to fetch price for ${address}`);
|
|
240
203
|
}
|
|
@@ -256,16 +219,12 @@ export async function fetchPrice(
|
|
|
256
219
|
return _fetchPrice(address, provider);
|
|
257
220
|
}
|
|
258
221
|
|
|
259
|
-
export async function fetchPLYPrice(
|
|
260
|
-
provider: providers.Provider
|
|
261
|
-
): Promise<BigNumber> {
|
|
222
|
+
export async function fetchPLYPrice(provider: providers.Provider): Promise<BigNumber> {
|
|
262
223
|
//TODO: Fetch PLY price from CEX?
|
|
263
224
|
return fetchToken0PriceByLP(networkAddresses.tokens.PLYWNEAR, provider);
|
|
264
225
|
}
|
|
265
226
|
|
|
266
|
-
export async function fetchPULPPrice(
|
|
267
|
-
provider: providers.Provider
|
|
268
|
-
): Promise<BigNumber> {
|
|
227
|
+
export async function fetchPULPPrice(provider: providers.Provider): Promise<BigNumber> {
|
|
269
228
|
//TODO: Calculate PULP price
|
|
270
229
|
return new BigNumber(0);
|
|
271
230
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { BlockchainEntityRead } from '../entities/BlockchainEntity';
|
|
2
|
-
import { NetworkConnection } from '../types';
|
|
3
|
-
import { AuToken } from '@aurigami/contracts/typechain';
|
|
4
1
|
import AuTokenABI from '@aurigami/contracts/artifacts/contracts/AuToken.sol/AuToken.json';
|
|
2
|
+
import { AuToken } from '@aurigami/contracts/typechain';
|
|
5
3
|
import { BigNumber as BN, Contract } from 'ethers';
|
|
4
|
+
import { BlockchainEntityRead } from '../entities/BlockchainEntity';
|
|
5
|
+
import { NetworkConnection } from '../types';
|
|
6
6
|
|
|
7
7
|
type SimpleTransfer = {
|
|
8
8
|
from: string;
|
|
@@ -39,9 +39,7 @@ export class TransferEventQuery extends BlockchainEntityRead {
|
|
|
39
39
|
|
|
40
40
|
const events = (
|
|
41
41
|
await Promise.all(
|
|
42
|
-
filters.map((filter) =>
|
|
43
|
-
this.auToken.queryFilter(filter, fromBlock, toBlock)
|
|
44
|
-
)
|
|
42
|
+
filters.map((filter) => this.auToken.queryFilter(filter, fromBlock, toBlock))
|
|
45
43
|
)
|
|
46
44
|
).flat();
|
|
47
45
|
|
package/src/index.ts
CHANGED
package/src/types/index.ts
CHANGED
package/src/abis/Faucet.json
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_format": "hh-sol-artifact-1",
|
|
3
|
-
"contractName": "Faucet",
|
|
4
|
-
"sourceName": "contracts/mock/Faucet.sol",
|
|
5
|
-
"abi": [
|
|
6
|
-
{
|
|
7
|
-
"inputs": [
|
|
8
|
-
{
|
|
9
|
-
"components": [
|
|
10
|
-
{
|
|
11
|
-
"internalType": "address",
|
|
12
|
-
"name": "token",
|
|
13
|
-
"type": "address"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"internalType": "uint256",
|
|
17
|
-
"name": "dripAmount",
|
|
18
|
-
"type": "uint256"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
|
-
"internalType": "struct Faucet.TokenConfig[]",
|
|
22
|
-
"name": "_testTokensConfigs",
|
|
23
|
-
"type": "tuple[]"
|
|
24
|
-
}
|
|
25
|
-
],
|
|
26
|
-
"stateMutability": "nonpayable",
|
|
27
|
-
"type": "constructor"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"anonymous": false,
|
|
31
|
-
"inputs": [
|
|
32
|
-
{
|
|
33
|
-
"indexed": true,
|
|
34
|
-
"internalType": "address",
|
|
35
|
-
"name": "previousOwner",
|
|
36
|
-
"type": "address"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"indexed": true,
|
|
40
|
-
"internalType": "address",
|
|
41
|
-
"name": "newOwner",
|
|
42
|
-
"type": "address"
|
|
43
|
-
}
|
|
44
|
-
],
|
|
45
|
-
"name": "OwnershipTransferred",
|
|
46
|
-
"type": "event"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"inputs": [],
|
|
50
|
-
"name": "drip",
|
|
51
|
-
"outputs": [],
|
|
52
|
-
"stateMutability": "nonpayable",
|
|
53
|
-
"type": "function"
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
"inputs": [
|
|
57
|
-
{
|
|
58
|
-
"internalType": "address",
|
|
59
|
-
"name": "",
|
|
60
|
-
"type": "address"
|
|
61
|
-
}
|
|
62
|
-
],
|
|
63
|
-
"name": "dripAmounts",
|
|
64
|
-
"outputs": [
|
|
65
|
-
{
|
|
66
|
-
"internalType": "uint256",
|
|
67
|
-
"name": "",
|
|
68
|
-
"type": "uint256"
|
|
69
|
-
}
|
|
70
|
-
],
|
|
71
|
-
"stateMutability": "view",
|
|
72
|
-
"type": "function"
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
"inputs": [],
|
|
76
|
-
"name": "owner",
|
|
77
|
-
"outputs": [
|
|
78
|
-
{
|
|
79
|
-
"internalType": "address",
|
|
80
|
-
"name": "",
|
|
81
|
-
"type": "address"
|
|
82
|
-
}
|
|
83
|
-
],
|
|
84
|
-
"stateMutability": "view",
|
|
85
|
-
"type": "function"
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"inputs": [],
|
|
89
|
-
"name": "renounceOwnership",
|
|
90
|
-
"outputs": [],
|
|
91
|
-
"stateMutability": "nonpayable",
|
|
92
|
-
"type": "function"
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
"inputs": [
|
|
96
|
-
{
|
|
97
|
-
"internalType": "uint256",
|
|
98
|
-
"name": "",
|
|
99
|
-
"type": "uint256"
|
|
100
|
-
}
|
|
101
|
-
],
|
|
102
|
-
"name": "testTokens",
|
|
103
|
-
"outputs": [
|
|
104
|
-
{
|
|
105
|
-
"internalType": "address",
|
|
106
|
-
"name": "",
|
|
107
|
-
"type": "address"
|
|
108
|
-
}
|
|
109
|
-
],
|
|
110
|
-
"stateMutability": "view",
|
|
111
|
-
"type": "function"
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"inputs": [
|
|
115
|
-
{
|
|
116
|
-
"internalType": "address",
|
|
117
|
-
"name": "newOwner",
|
|
118
|
-
"type": "address"
|
|
119
|
-
}
|
|
120
|
-
],
|
|
121
|
-
"name": "transferOwnership",
|
|
122
|
-
"outputs": [],
|
|
123
|
-
"stateMutability": "nonpayable",
|
|
124
|
-
"type": "function"
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
"inputs": [
|
|
128
|
-
{
|
|
129
|
-
"components": [
|
|
130
|
-
{
|
|
131
|
-
"internalType": "address",
|
|
132
|
-
"name": "token",
|
|
133
|
-
"type": "address"
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
"internalType": "uint256",
|
|
137
|
-
"name": "dripAmount",
|
|
138
|
-
"type": "uint256"
|
|
139
|
-
}
|
|
140
|
-
],
|
|
141
|
-
"internalType": "struct Faucet.TokenConfig[]",
|
|
142
|
-
"name": "_testTokensConfigs",
|
|
143
|
-
"type": "tuple[]"
|
|
144
|
-
}
|
|
145
|
-
],
|
|
146
|
-
"name": "updateTokenConfigs",
|
|
147
|
-
"outputs": [],
|
|
148
|
-
"stateMutability": "nonpayable",
|
|
149
|
-
"type": "function"
|
|
150
|
-
}
|
|
151
|
-
],
|
|
152
|
-
"bytecode": "0x60806040523480156200001157600080fd5b5060405162000c4038038062000c40833981016040819052620000349162000272565b6200003f33620000f9565b60005b8151811015620000f1576200007d82828151811062000065576200006562000363565b6020026020010151600001516200014960201b60201c565b81818151811062000092576200009262000363565b60200260200101516020015160026000848481518110620000b757620000b762000363565b602090810291909101810151516001600160a01b031682528101919091526040016000205580620000e88162000379565b91505062000042565b5050620003a3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b600154811015620001ac57816001600160a01b03166001828154811062000177576200017762000363565b6000918252602090912001546001600160a01b0316141562000197575050565b80620001a38162000379565b9150506200014c565b506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715620002395762000239620001fe565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200026a576200026a620001fe565b604052919050565b600060208083850312156200028657600080fd5b82516001600160401b03808211156200029e57600080fd5b818501915085601f830112620002b357600080fd5b815181811115620002c857620002c8620001fe565b620002d8848260051b016200023f565b818152848101925060069190911b830184019087821115620002f957600080fd5b928401925b81841015620003585760408489031215620003195760008081fd5b6200032362000214565b84516001600160a01b03811681146200033c5760008081fd5b81528486015186820152835260409093019291840191620002fe565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200039c57634e487b7160e01b600052601160045260246000fd5b5060010190565b61088d80620003b36000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80639f678cca1161005b5780639f678cca146100c9578063b9293286146100d1578063e980416a146100e4578063f2fde38b1461011257600080fd5b8063715018a614610082578063741f83ef1461008c5780638da5cb5b1461009f575b600080fd5b61008a610125565b005b61008a61009a366004610697565b610190565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b61008a61028b565b6100ac6100df36600461076b565b6103a2565b6101046100f2366004610784565b60026020526000908152604090205481565b6040519081526020016100c0565b61008a610120366004610784565b6103cc565b6000546001600160a01b031633146101845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61018e60006104a7565b565b6000546001600160a01b031633146101ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017b565b60005b81518110156102875761021c82828151811061020b5761020b6107a6565b60200260200101516000015161050f565b81818151811061022e5761022e6107a6565b60200260200101516020015160026000848481518110610250576102506107a6565b602090810291909101810151516001600160a01b03168252810191909152604001600020558061027f816107d5565b9150506101ed565b5050565b60005b60015481101561039f57600181815481106102ab576102ab6107a6565b6000918252602082200154600180546001600160a01b039092169263a9059cbb92339260029291879081106102e2576102e26107a6565b6000918252602080832091909101546001600160a01b039081168452908301939093526040918201902054905160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815292909116600483015260248201526044016020604051808303816000875af1158015610368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038c9190610835565b5080610397816107d5565b91505061028e565b50565b600181815481106103b257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146104265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017b565b6001600160a01b0381166104a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161017b565b61039f815b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60015481101561056a57816001600160a01b031660018281548110610539576105396107a6565b6000918252602090912001546001600160a01b03161415610558575050565b80610562816107d5565b915050610512565b506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610626576106266105d4565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610673576106736105d4565b604052919050565b80356001600160a01b038116811461069257600080fd5b919050565b600060208083850312156106aa57600080fd5b823567ffffffffffffffff808211156106c257600080fd5b818501915085601f8301126106d657600080fd5b8135818111156106e8576106e86105d4565b6106f6848260051b0161062c565b818152848101925060069190911b83018401908782111561071657600080fd5b928401925b8184101561076057604084890312156107345760008081fd5b61073c610603565b6107458561067b565b8152848601358682015283526040909301929184019161071b565b979650505050505050565b60006020828403121561077d57600080fd5b5035919050565b60006020828403121561079657600080fd5b61079f8261067b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561082e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60006020828403121561084757600080fd5b8151801515811461079f57600080fdfea26469706673582212200b56248e3867f8c6afaf02091fa7b57d47168960cfdfc133122e492377adaa3264736f6c634300080b0033",
|
|
153
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80639f678cca1161005b5780639f678cca146100c9578063b9293286146100d1578063e980416a146100e4578063f2fde38b1461011257600080fd5b8063715018a614610082578063741f83ef1461008c5780638da5cb5b1461009f575b600080fd5b61008a610125565b005b61008a61009a366004610697565b610190565b6000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b61008a61028b565b6100ac6100df36600461076b565b6103a2565b6101046100f2366004610784565b60026020526000908152604090205481565b6040519081526020016100c0565b61008a610120366004610784565b6103cc565b6000546001600160a01b031633146101845760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b61018e60006104a7565b565b6000546001600160a01b031633146101ea5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017b565b60005b81518110156102875761021c82828151811061020b5761020b6107a6565b60200260200101516000015161050f565b81818151811061022e5761022e6107a6565b60200260200101516020015160026000848481518110610250576102506107a6565b602090810291909101810151516001600160a01b03168252810191909152604001600020558061027f816107d5565b9150506101ed565b5050565b60005b60015481101561039f57600181815481106102ab576102ab6107a6565b6000918252602082200154600180546001600160a01b039092169263a9059cbb92339260029291879081106102e2576102e26107a6565b6000918252602080832091909101546001600160a01b039081168452908301939093526040918201902054905160e085901b7fffffffff0000000000000000000000000000000000000000000000000000000016815292909116600483015260248201526044016020604051808303816000875af1158015610368573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038c9190610835565b5080610397816107d5565b91505061028e565b50565b600181815481106103b257600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146104265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161017b565b6001600160a01b0381166104a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161017b565b61039f815b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b60015481101561056a57816001600160a01b031660018281548110610539576105396107a6565b6000918252602090912001546001600160a01b03161415610558575050565b80610562816107d5565b915050610512565b506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610626576106266105d4565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610673576106736105d4565b604052919050565b80356001600160a01b038116811461069257600080fd5b919050565b600060208083850312156106aa57600080fd5b823567ffffffffffffffff808211156106c257600080fd5b818501915085601f8301126106d657600080fd5b8135818111156106e8576106e86105d4565b6106f6848260051b0161062c565b818152848101925060069190911b83018401908782111561071657600080fd5b928401925b8184101561076057604084890312156107345760008081fd5b61073c610603565b6107458561067b565b8152848601358682015283526040909301929184019161071b565b979650505050505050565b60006020828403121561077d57600080fd5b5035919050565b60006020828403121561079657600080fd5b61079f8261067b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561082e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60006020828403121561084757600080fd5b8151801515811461079f57600080fdfea26469706673582212200b56248e3867f8c6afaf02091fa7b57d47168960cfdfc133122e492377adaa3264736f6c634300080b0033",
|
|
154
|
-
"linkReferences": {},
|
|
155
|
-
"deployedLinkReferences": {}
|
|
156
|
-
}
|
|
157
|
-
|