From 8ef8af4d6600b53db416d865658ac21f47fe701c Mon Sep 17 00:00:00 2001 From: Zahra Date: Wed, 20 Jul 2022 16:17:01 +0430 Subject: [PATCH 001/406] add mrc20_presale --- general/mrc20_presale.constant.json | 52 +++++ general/mrc20_presale.js | 302 ++++++++++++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 general/mrc20_presale.constant.json create mode 100644 general/mrc20_presale.js diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json new file mode 100644 index 0000000..048282b --- /dev/null +++ b/general/mrc20_presale.constant.json @@ -0,0 +1,52 @@ +{ + "allocation": { + "0x4CC129Ca88ff495C1E1Fb33688FEf77461dD2b10": { + "1": 500, + "2": 1000, + "3": 2000 + } + }, + + "PUBLIC_PHASE": { + "4": 500, + "5": 1000, + "6": 2000 + }, + + "ABI_roundBalances": [ + { + "inputs": [ + { "internalType": "address", "name": "", "type": "address" }, + { "internalType": "uint8", "name": "", "type": "uint8" } + ], + "name": "roundBalances", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + } + ], + + "ABI_totalBalance": [ + { + "inputs": [], + "name": "totalBalance", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + } + ], + + "IDO_PARTICIPANT_TOKENS": 3000000, + + "chainMap": { + "ETH": 4, + "BSC": 97, + "MATIC": 80001 + }, + + "LockType": { + "ALLOCATION": "ALLOCATION", + "COOL_DOWN": "COOL_DOWN" + }, + "DEPOSIT_LOCK": "mrc20-deposit-lock" +} diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js new file mode 100644 index 0000000..0cb6dd3 --- /dev/null +++ b/general/mrc20_presale.js @@ -0,0 +1,302 @@ +const { toBaseUnit, soliditySha3, BN, recoverTypedMessage, Web3, ethCall } = + MuonAppUtils +const { + ABI_roundBalances, + ABI_totalBalance, + allocation, + IDO_PARTICIPANT_TOKENS, + chainMap, + LockType, + DEPOSIT_LOCK, + PUBLIC_PHASE +} = require('./mrc20_presale.constant.json') + +const getTimestamp = () => Date.now() + +// the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct +const START_TIME = 1658210410 +const PUBLIC_TIME = START_TIME * 1000 + 6 * 24 * 3600 * 1000 +const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 + +function getTokens() { + return { + ert_d6: { + decimals: 6, + address: '0xfBB0Aa52B82dD2173D8ce97065b2f421216A312A', + price: 1, + chains: [97, 4] + }, + + ert: { + decimals: 18, + address: '0x701048911b1f1121E33834d3633227A954978d53', + price: 1, + chains: [80001] + } + } +} + +const getDay = (time) => + (Math.floor((time - START_TIME * 1000) / (24 * 3600 * 1000)) + 1).toString() + +const MRC20Presale = { + [chainMap.ETH]: '0xe769eB67d024D53EE29DC688b430F6f35F5c2F8e', + [chainMap.BSC]: '0xf3FedAa069b4553046f4dafAf0Ec273036C5972b', + [chainMap.MATIC]: '0x10b09c7EE431C477267f85b27dA7C1D230715E51' +} + +module.exports = { + APP_NAME: 'mrc20_presale', + + readOnlyMethods: ['checkLock'], + + checkLock: async function (params) { + const { forAddress } = params + const allocationForAddress = allocation[forAddress] + let currentTime = getTimestamp() + + if (!allocationForAddress && currentTime < PUBLIC_SALE) { + return { + message: `Allocation is 0 for your address.`, + lockType: LockType.ALLOCATION, + lock: true, + lockTime: PUBLIC_SALE, + expireAt: PUBLIC_SALE, + PUBLIC_TIME, + PUBLIC_SALE, + day: getDay(currentTime) + } + } + + let lock = await this.readNodeMem({ + 'data.name': DEPOSIT_LOCK, + 'data.value': forAddress + }) + + if (lock) { + return { + message: `Your address is locked. Please wait.`, + lock: true, + lockType: LockType.COOL_DOWN, + lockTime: 6 * 60, + expireAt: lock.expireAt, + PUBLIC_TIME, + PUBLIC_SALE, + day: getDay(currentTime) + } + } + return { + message: `Not locked.`, + lock: false, + PUBLIC_TIME, + PUBLIC_SALE, + day: getDay(currentTime) + } + }, + + onArrive: async function (request) { + const { + method, + data: { params } + } = request + switch (method) { + case 'deposit': + const { forAddress } = params + let memory = [ + { type: 'uint256', name: DEPOSIT_LOCK, value: forAddress } + ] + let lock = await this.readNodeMem({ + 'data.name': DEPOSIT_LOCK, + 'data.value': forAddress + }) + if (lock) { + throw { + message: { + message: `Your address is locked. Please wait.`, + lockTime: 6 * 60, + expireAt: lock.expireAt + } + } + } + await this.writeNodeMem(memory, 6 * 60) + return + + default: + break + } + }, + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'deposit': + let { token, forAddress, amount, sign, chainId, hashTimestamp } = params + if (!token) throw { message: 'Invalid token' } + if (!amount) throw { message: 'Invalid deposit amount' } + if (!forAddress) throw { message: 'Invalid sender address' } + if (!sign) throw { message: 'Invalid signature.' } + if (!chainId) throw { message: 'Invalid chainId' } + let allocationForAddress = allocation[forAddress] + let currentTime = getTimestamp() + + if (allocationForAddress === undefined && currentTime < PUBLIC_SALE) + throw { message: 'Allocation is 0 for your address.' } + const day = getDay(currentTime) + console.log({ day }) + let tokenList = await getTokens() + if (!Object.keys(tokenList).includes(token.toLowerCase())) + throw { message: 'Invalid token.' } + + token = tokenList[token.toLowerCase()] + if (!token.chains.includes(chainId)) + throw { message: 'Token and chain is not matched.' } + + let typedData = { + types: { + EIP712Domain: [{ name: 'name', type: 'string' }], + Message: [{ type: 'address', name: 'forAddress' }] + }, + domain: { name: 'MRC20 Presale' }, + primaryType: 'Message', + message: { forAddress: forAddress } + } + + let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + + if (signer.toLowerCase() !== forAddress.toLowerCase()) + throw { message: 'Request signature mismatch' } + + let tokenPrice = toBaseUnit(token.price.toString(), 18) + let finalMaxCap + if (currentTime < PUBLIC_SALE) { + allocationForAddress = allocationForAddress[day] + console.log(allocationForAddress) + let maxCap = new BN( + toBaseUnit(allocationForAddress.toString(), 18).toString() + ) + let allPurchase = {} + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + // TODO calculate purchase day + let purchase = await ethCall( + MRC20Presale[chainId], + 'roundBalances', + [forAddress, day], + ABI_roundBalances, + chainId + ) + allPurchase = { ...allPurchase, [chainId]: new BN(purchase) } + } + let sum = Object.keys(allPurchase) + .filter((chain) => chain != chainId) + .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) + finalMaxCap = maxCap.sub(sum).toString() + } else if (currentTime >= PUBLIC_SALE && currentTime < PUBLIC_TIME) { + let maxCap = new BN( + toBaseUnit(PUBLIC_PHASE[day].toString(), 18).toString() + ) + let allPurchase = {} + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + // TODO calculate purchase day + let purchase = await ethCall( + MRC20Presale[chainId], + 'roundBalances', + [forAddress, day], + ABI_roundBalances, + chainId + ) + allPurchase = { ...allPurchase, [chainId]: new BN(purchase) } + } + let sum = Object.keys(allPurchase) + .filter((chain) => chain != chainId) + .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) + finalMaxCap = maxCap.sub(sum).toString() + } else { + let totalBalance = {} + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + let purchase = await ethCall( + MRC20Presale[chainId], + 'totalBalance', + [], + ABI_totalBalance, + chainId + ) + totalBalance = { ...totalBalance, [chainId]: new BN(purchase) } + } + let sum = Object.keys(totalBalance).reduce( + (sum, chain) => sum.add(totalBalance[chain]), + new BN(0) + ) + + let baseToken = new BN(10).pow(new BN(token.decimals)) + let usdAmount = new BN(amount).mul(tokenPrice).div(baseToken) + let usdMaxCap = IDO_PARTICIPANT_TOKENS * 0.1 + if ( + Number(Web3.utils.fromWei(usdAmount, 'ether')) + + Number(Web3.utils.fromWei(sum, 'ether')) > + usdMaxCap + ) + throw { message: 'Amount is not valid' } + finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() + } + const data = { + token: token.address, + forAddress, + day, + extraParameters: [ + finalMaxCap, + chainId.toString(), + tokenPrice.toString(), + amount.toString(), + ...(hashTimestamp ? [request.data.timestamp] : []) + ] + } + console.log(data) + let lock = await this.readNodeMem( + { 'data.name': DEPOSIT_LOCK, 'data.value': forAddress }, + { distinct: 'owner' } + ) + if (lock.length !== 1) throw { message: 'Atomic run failed.' } + + return data + + default: + throw { message: `Unknown method ${params}` } + } + }, + + hashRequestResult: function (request, result) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'deposit': + let { hashTimestamp } = params + let { token, day, forAddress, extraParameters } = result + return soliditySha3([ + { type: 'uint32', value: this.APP_ID }, + { type: 'address', value: token }, + { type: 'uint8', value: day }, + { type: 'uint256', value: extraParameters[3] }, + ...(hashTimestamp + ? [{ type: 'uint256', value: request.data.timestamp }] + : []), + { type: 'address', value: forAddress }, + { type: 'uint256', value: extraParameters[0] }, + { type: 'uint256', value: extraParameters[1] }, + { type: 'uint256', value: extraParameters[2] } + ]) + + default: + return null + } + } +} From f6a37e47164a061b78f46ca5566132a62112559b Mon Sep 17 00:00:00 2001 From: Zahra Date: Thu, 21 Jul 2022 13:39:53 +0430 Subject: [PATCH 002/406] add validation --- general/mrc20_presale.constant.json | 1 + general/mrc20_presale.js | 31 ++++++++++++----------------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 048282b..3edb2dc 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -37,6 +37,7 @@ ], "IDO_PARTICIPANT_TOKENS": 3000000, + "MUON_PRICE": 0.1, "chainMap": { "ETH": 4, diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 0cb6dd3..70a2fae 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -8,7 +8,8 @@ const { chainMap, LockType, DEPOSIT_LOCK, - PUBLIC_PHASE + PUBLIC_PHASE, + MUON_PRICE } = require('./mrc20_presale.constant.json') const getTimestamp = () => Date.now() @@ -134,9 +135,12 @@ module.exports = { switch (method) { case 'deposit': - let { token, forAddress, amount, sign, chainId, hashTimestamp } = params + let { token, forAddress, amount, sign, chainId } = params if (!token) throw { message: 'Invalid token' } - if (!amount) throw { message: 'Invalid deposit amount' } + if (!amount || amount === '0') + throw { message: 'Invalid deposit amount' } + if (typeof amount !== 'string') + throw { message: 'amount must be string' } if (!forAddress) throw { message: 'Invalid sender address' } if (!sign) throw { message: 'Invalid signature.' } if (!chainId) throw { message: 'Invalid chainId' } @@ -181,7 +185,6 @@ module.exports = { let allPurchase = {} for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] - // TODO calculate purchase day let purchase = await ethCall( MRC20Presale[chainId], 'roundBalances', @@ -202,7 +205,6 @@ module.exports = { let allPurchase = {} for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] - // TODO calculate purchase day let purchase = await ethCall( MRC20Presale[chainId], 'roundBalances', @@ -236,7 +238,7 @@ module.exports = { let baseToken = new BN(10).pow(new BN(token.decimals)) let usdAmount = new BN(amount).mul(tokenPrice).div(baseToken) - let usdMaxCap = IDO_PARTICIPANT_TOKENS * 0.1 + let usdMaxCap = IDO_PARTICIPANT_TOKENS * MUON_PRICE if ( Number(Web3.utils.fromWei(usdAmount, 'ether')) + Number(Web3.utils.fromWei(sum, 'ether')) > @@ -251,13 +253,12 @@ module.exports = { day, extraParameters: [ finalMaxCap, - chainId.toString(), + chainId, tokenPrice.toString(), - amount.toString(), - ...(hashTimestamp ? [request.data.timestamp] : []) + amount, + request.data.timestamp ] } - console.log(data) let lock = await this.readNodeMem( { 'data.name': DEPOSIT_LOCK, 'data.value': forAddress }, { distinct: 'owner' } @@ -272,23 +273,17 @@ module.exports = { }, hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request + let { method } = request switch (method) { case 'deposit': - let { hashTimestamp } = params let { token, day, forAddress, extraParameters } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: token }, { type: 'uint8', value: day }, { type: 'uint256', value: extraParameters[3] }, - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []), + { type: 'uint256', value: request.data.timestamp }, { type: 'address', value: forAddress }, { type: 'uint256', value: extraParameters[0] }, { type: 'uint256', value: extraParameters[1] }, From fc7246359e059f5e38dc16024ef12d9cdf93a61c Mon Sep 17 00:00:00 2001 From: Zahra Date: Thu, 21 Jul 2022 14:05:32 +0430 Subject: [PATCH 003/406] condition amount zero --- general/mrc20_presale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 70a2fae..667361f 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -137,7 +137,7 @@ module.exports = { case 'deposit': let { token, forAddress, amount, sign, chainId } = params if (!token) throw { message: 'Invalid token' } - if (!amount || amount === '0') + if (!amount || parseInt(amount) === 0) throw { message: 'Invalid deposit amount' } if (typeof amount !== 'string') throw { message: 'amount must be string' } From 40d7475eee13a32b8154158a689e27781471c2a5 Mon Sep 17 00:00:00 2001 From: Zahra Date: Sat, 23 Jul 2022 13:49:44 +0430 Subject: [PATCH 004/406] fix bug --- general/mrc20_presale.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 667361f..e7a1bc2 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -136,6 +136,8 @@ module.exports = { switch (method) { case 'deposit': let { token, forAddress, amount, sign, chainId } = params + chainId = Number(chainId) + if (!token) throw { message: 'Invalid token' } if (!amount || parseInt(amount) === 0) throw { message: 'Invalid deposit amount' } From 6274dc81084adab79302e9bd9ed3e77ed211892b Mon Sep 17 00:00:00 2001 From: Zahra Date: Tue, 26 Jul 2022 16:42:45 +0430 Subject: [PATCH 005/406] add startTime to checkLock --- general/mrc20_presale.constant.json | 3 +-- general/mrc20_presale.js | 11 +++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 3edb2dc..1daa5e8 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -9,8 +9,7 @@ "PUBLIC_PHASE": { "4": 500, - "5": 1000, - "6": 2000 + "5": 1000 }, "ABI_roundBalances": [ diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index e7a1bc2..6595feb 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -15,7 +15,7 @@ const { const getTimestamp = () => Date.now() // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1658210410 +const START_TIME = 1658835005 const PUBLIC_TIME = START_TIME * 1000 + 6 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 @@ -65,6 +65,7 @@ module.exports = { expireAt: PUBLIC_SALE, PUBLIC_TIME, PUBLIC_SALE, + START_TIME, day: getDay(currentTime) } } @@ -83,6 +84,8 @@ module.exports = { expireAt: lock.expireAt, PUBLIC_TIME, PUBLIC_SALE, + START_TIME, + day: getDay(currentTime) } } @@ -91,6 +94,8 @@ module.exports = { lock: false, PUBLIC_TIME, PUBLIC_SALE, + START_TIME, + day: getDay(currentTime) } }, @@ -139,7 +144,7 @@ module.exports = { chainId = Number(chainId) if (!token) throw { message: 'Invalid token' } - if (!amount || parseInt(amount) === 0) + if (!amount || parseInt(amount) === '0') throw { message: 'Invalid deposit amount' } if (typeof amount !== 'string') throw { message: 'amount must be string' } @@ -152,7 +157,6 @@ module.exports = { if (allocationForAddress === undefined && currentTime < PUBLIC_SALE) throw { message: 'Allocation is 0 for your address.' } const day = getDay(currentTime) - console.log({ day }) let tokenList = await getTokens() if (!Object.keys(tokenList).includes(token.toLowerCase())) throw { message: 'Invalid token.' } @@ -180,7 +184,6 @@ module.exports = { let finalMaxCap if (currentTime < PUBLIC_SALE) { allocationForAddress = allocationForAddress[day] - console.log(allocationForAddress) let maxCap = new BN( toBaseUnit(allocationForAddress.toString(), 18).toString() ) From eee8dde855ce36459af875035d1ef8dd4304f690 Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Fri, 29 Jul 2022 10:36:00 +0430 Subject: [PATCH 006/406] update read only method sample --- custom/sample.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/custom/sample.js b/custom/sample.js index 3827cc3..b9f6541 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -23,7 +23,7 @@ module.exports = { 'invokeTestMethod', ], - myReadOnlyMethod: async function(params){ + myReadOnlyMethod: async function({params}){ return { message: "sample readonly method", data: [ @@ -33,7 +33,7 @@ module.exports = { } }, - invokeTestMethod: async function(params) { + invokeTestMethod: async function({params}) { let request = { method: 'call', data: { From cee87027b1174fe460b4a5ec88a03829368e7938 Mon Sep 17 00:00:00 2001 From: Zahra Date: Sat, 30 Jul 2022 14:30:55 +0430 Subject: [PATCH 007/406] fix bug --- general/fear_presale.js | 4 +++- general/mrc20_presale.js | 23 +++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/general/fear_presale.js b/general/fear_presale.js index 14d346e..10aeca2 100644 --- a/general/fear_presale.js +++ b/general/fear_presale.js @@ -3980,7 +3980,9 @@ module.exports = { readOnlyMethods: ['checkLock'], checkLock: async function (params) { - const { forAddress } = params + const { + params: { forAddress } + } = params const allocationForAddress = allocation[forAddress] let currentTime = Date.now() diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 6595feb..6807a19 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -15,7 +15,8 @@ const { const getTimestamp = () => Date.now() // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1658835005 +const START_TIME = 1659331182 + const PUBLIC_TIME = START_TIME * 1000 + 6 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 @@ -52,7 +53,9 @@ module.exports = { readOnlyMethods: ['checkLock'], checkLock: async function (params) { - const { forAddress } = params + const { + params: { forAddress } + } = params const allocationForAddress = allocation[forAddress] let currentTime = getTimestamp() @@ -74,18 +77,16 @@ module.exports = { 'data.name': DEPOSIT_LOCK, 'data.value': forAddress }) - if (lock) { return { message: `Your address is locked. Please wait.`, lock: true, lockType: LockType.COOL_DOWN, - lockTime: 6 * 60, + lockTime: 5 * 60, expireAt: lock.expireAt, PUBLIC_TIME, PUBLIC_SALE, START_TIME, - day: getDay(currentTime) } } @@ -95,7 +96,6 @@ module.exports = { PUBLIC_TIME, PUBLIC_SALE, START_TIME, - day: getDay(currentTime) } }, @@ -108,6 +108,8 @@ module.exports = { switch (method) { case 'deposit': const { forAddress } = params + let currentTime = getTimestamp() + let memory = [ { type: 'uint256', name: DEPOSIT_LOCK, value: forAddress } ] @@ -119,12 +121,13 @@ module.exports = { throw { message: { message: `Your address is locked. Please wait.`, - lockTime: 6 * 60, - expireAt: lock.expireAt + lockTime: 5 * 60, + expireAt: lock.expireAt, + day: getDay(currentTime) } } } - await this.writeNodeMem(memory, 6 * 60) + await this.writeNodeMem(memory, 5 * 60) return default: @@ -142,7 +145,7 @@ module.exports = { case 'deposit': let { token, forAddress, amount, sign, chainId } = params chainId = Number(chainId) - + // TODO use await out side of for if (!token) throw { message: 'Invalid token' } if (!amount || parseInt(amount) === '0') throw { message: 'Invalid deposit amount' } From ab4c5d56756c89fd142dd5aca72f4b9cfd647bbe Mon Sep 17 00:00:00 2001 From: Zahra Date: Sun, 31 Jul 2022 10:41:19 +0430 Subject: [PATCH 008/406] refactore mrc20-presale --- general/mrc20_presale.js | 73 ++++++++++++++++++++++++++++------------ 1 file changed, 51 insertions(+), 22 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 6807a19..7874101 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -145,7 +145,7 @@ module.exports = { case 'deposit': let { token, forAddress, amount, sign, chainId } = params chainId = Number(chainId) - // TODO use await out side of for + if (!token) throw { message: 'Invalid token' } if (!amount || parseInt(amount) === '0') throw { message: 'Invalid deposit amount' } @@ -160,6 +160,8 @@ module.exports = { if (allocationForAddress === undefined && currentTime < PUBLIC_SALE) throw { message: 'Allocation is 0 for your address.' } const day = getDay(currentTime) + if (day <= 0) throw { message: 'No Active Sale' } + let tokenList = await getTokens() if (!Object.keys(tokenList).includes(token.toLowerCase())) throw { message: 'Invalid token.' } @@ -191,16 +193,24 @@ module.exports = { toBaseUnit(allocationForAddress.toString(), 18).toString() ) let allPurchase = {} + let purchasePromises = [] + for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] - let purchase = await ethCall( - MRC20Presale[chainId], - 'roundBalances', - [forAddress, day], - ABI_roundBalances, - chainId + purchasePromises.push( + ethCall( + MRC20Presale[chainId], + 'roundBalances', + [forAddress, day], + ABI_roundBalances, + chainId + ) ) - allPurchase = { ...allPurchase, [chainId]: new BN(purchase) } + } + let purchase = await Promise.all(purchasePromises) + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + allPurchase = { ...allPurchase, [chainId]: new BN(purchase[index]) } } let sum = Object.keys(allPurchase) .filter((chain) => chain != chainId) @@ -211,33 +221,52 @@ module.exports = { toBaseUnit(PUBLIC_PHASE[day].toString(), 18).toString() ) let allPurchase = {} + let purchasePromises = [] for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] - let purchase = await ethCall( - MRC20Presale[chainId], - 'roundBalances', - [forAddress, day], - ABI_roundBalances, - chainId + purchasePromises.push( + ethCall( + MRC20Presale[chainId], + 'roundBalances', + [forAddress, day], + ABI_roundBalances, + chainId + ) ) - allPurchase = { ...allPurchase, [chainId]: new BN(purchase) } } + let purchase = await Promise.all(purchasePromises) + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + allPurchase = { ...allPurchase, [chainId]: new BN(purchase[index]) } + } + let sum = Object.keys(allPurchase) .filter((chain) => chain != chainId) .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) finalMaxCap = maxCap.sub(sum).toString() } else { let totalBalance = {} + let purchasePromises = [] + for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] - let purchase = await ethCall( - MRC20Presale[chainId], - 'totalBalance', - [], - ABI_totalBalance, - chainId + purchasePromises.push( + ethCall( + MRC20Presale[chainId], + 'totalBalance', + [], + ABI_totalBalance, + chainId + ) ) - totalBalance = { ...totalBalance, [chainId]: new BN(purchase) } + } + let purchase = await Promise.all(purchasePromises) + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + totalBalance = { + ...totalBalance, + [chainId]: new BN(purchase[index]) + } } let sum = Object.keys(totalBalance).reduce( (sum, chain) => sum.add(totalBalance[chain]), From 772d5b678df0c95b27d7c6deae12bd847567a61b Mon Sep 17 00:00:00 2001 From: Zahra Date: Mon, 1 Aug 2022 09:00:52 +0430 Subject: [PATCH 009/406] change price in mrc20-presale --- general/mrc20_presale.constant.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 1daa5e8..346f9de 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -36,7 +36,7 @@ ], "IDO_PARTICIPANT_TOKENS": 3000000, - "MUON_PRICE": 0.1, + "MUON_PRICE": 0.02, "chainMap": { "ETH": 4, From 12dc6658b9b8161186ea535453f20a729e870e74 Mon Sep 17 00:00:00 2001 From: Zahra Date: Mon, 1 Aug 2022 10:11:19 +0430 Subject: [PATCH 010/406] add another wallet to allocation for test --- general/mrc20_presale.constant.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 346f9de..f9c701d 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -4,6 +4,11 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x4CE6Fc21d309F7A27Bdc42D50168e2AEEfe80966": { + "1": 500, + "2": 1000, + "3": 2000 } }, From bb9ca2ceb82ca54fec1779cff3075a39da197ca4 Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Mon, 1 Aug 2022 11:59:18 +0430 Subject: [PATCH 011/406] sample app update --- custom/sample.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/custom/sample.js b/custom/sample.js index b9f6541..0e54ee0 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -101,27 +101,34 @@ module.exports = { case 'test_speed': { return 'speed test done.' } + case 'test_redis':{ let previews = await this.redis.get('last-exec-time'); let current = `${Math.floor(Date.now()/1000)}` this.redis.set("last-exec-time", current); return "done"; } - case 'lock': + + case 'test_memory': { let { user } = params + return `Data stored in memory for user: ${user}` + } + + case 'lock': { + let {user} = params // You can check for atomic run of the lock method let lock = await this.readNodeMem({"data.name": LOCK_NAME, "data.value": user}, {distinct: "owner"}) - if(lock.length === 0) { + if (lock.length === 0) { throw {message: 'Memory write not confirmed.'} - } - else if(lock.length > 1) { + } else if (lock.length > 1) { throw {message: 'Atomic run failed.'} } return 'lock done.' + } - case 'btc_price': + case 'btc_price': { let result = await getBtcPrice() let price = toBaseUnit( result.bpi.USD.rate_float.toString(), @@ -134,6 +141,8 @@ module.exports = { price, price_float: result.bpi.USD.rate_float } + } + default: return 'test done' } @@ -144,6 +153,7 @@ module.exports = { switch (request.method) { case 'test_speed': case 'test_redis': + case 'test_memory': case 'lock': return soliditySha3([{type: 'string', value: result}]) case 'btc_price': @@ -161,7 +171,7 @@ module.exports = { * store data on request confirm */ onMemWrite: (req, res) => { - if (req.method === 'lock') { + if (req.method === 'test_memory') { let { data: { params: { user } From 4b0836a3ecdd6d7ac3d187adb0f85009c35b1624 Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 2 Aug 2022 02:03:08 +0430 Subject: [PATCH 012/406] Add mrc20 presale white list --- general/mrc20_presale.constant.json | 11225 ++++++++++++++++++++++++++ 1 file changed, 11225 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index f9c701d..1a974a5 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -9,6 +9,11231 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x8849857Ee94b3558A91F6C4B32e776c6f6A8A6f7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5E18Fe3cdD39C924f7d2F03fe9511Abd3d31A6D9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x720d07C87123c203300e3D06454Cc52642e3DB21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0D4b88E19157ba9522B279211403Ad99fe8B7278":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x14108773Ca6b9572af48CE19f0625e7154bDf2E1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0324ad8B269a7CDC9Ff3d7962D3257F9C94c4b3B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x449020a39C9Dc3966Db7f12a3E1C8Ee9EdD23B9e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x918DeF53676ad8D5955C637c43983d1D7Db46DEA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x61BEa29643aC187088e916609cA2c1BcB5c3875D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1aCe01A1fB96aD6325f99877b08a40fed5f89A04":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3bC7893646C7F842C02F37eFdaB2805aC5142ed7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0d97cd6C9DEc4255ae4F0ED88593fdfbB2015ccB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1fd8563c594cB7480919a5470EBc21EfbAcDEC9b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEb30Deac6db83eD3e1ef97FDED89a92bBcaC263d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6e61fD005E8fC4E120fD288a8dE47AF343028d3a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x478de03AC3671051F0Ca1b406892322785B36816":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x02F3C467118850Db8cc8e49f8B0159F63B44909D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x556e8feA3b3E44588edA68CaEB633CC14d998c20":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe12D11df5e9D626Ed3c46fa6160bdD94B5Bb193b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9Ce8BfA40942C180B4c40c72632351681325F2D0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x054D816635A5966121f47107A8CC3e4F1609d934":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd80672Deca426e918F7F3D2c5D98bc2ae745B947":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB4CdaE28Cca629Fb033cf170032a2A3079F1a7Ba":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x243791675B5C0db7165159E0D4689B2D4f558d5D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC19d8a0872666741A15F370eaf30115D1Ee6B135":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD4E5e3e9f936a59568C3A7c6159c5cFCE328D496":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x465F302C87D19FAD8D0f3C5156eCfBEe2B97D342":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFb891072aE0B15B2BC60d53E5b91f9Cfb7C47289":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE9709Da4B1cA1B7296d6c64633cD2f3F505186AE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x41f6f76F0Aeece29556bA1cB8CAa59e8904B5d19":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1Df2b2Fe0da71EAF9F3aDb0C3e6Fb584932Fc93A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9f52A6888e9D0ED7DaF51DfE1CBF5C3d25987014":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1D63d1ac6ab0Ab7d003b12946b0ba590c14f708c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1b0649B83354a57c4C851092F20E7833Ee848305":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7ec6bE1c8630A54DF55D98530b89cDfEa1C11022":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33870B891b4462a2cB3820ffA27BBF2568251b6F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc959c8c2Ccd5f8CDa447fC593c8b335484901790":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa650DEd93F54D02920E0Ec5217DddeE2c9e6198C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x84Ee322C64569aFA8C0f126723452202D9d906Dd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcD180Eca01740098321951e9698a43520C3B6fAB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63Dc9faDD8d4291D094bEEE268468f2946C71F37":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x64bdeA412a5175faE2d084D0FA5f553AE107d466":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1eb8DDdf92Db67D55D57cb0Abed31acd538cd34e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe9fC8D24063e4fC60863E59CF7d355A9f446Df9A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x054513707f310a7D12Ad6367eC875FD8a4E396aF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6183445b14A09f3BAEf63Bc4839Ef54FF1fb059E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x56F6Fad9310d0D45C7272F4e4D2294CC10D1321E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x286199ceAF739294Be9f2fe985eED0b001Fd3F0D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb0224F15eEAa741Bd0E861ab13398F6d975456e7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf9b2F57e9d828f84b07ccdABB77FfB404a8506B9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2615b5D4f7793063E037D51D54DBaA69254C9ec1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa28ac1264Ea4Dc2fcAe85C379A25E24B44A1aAe0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2f384331714D0ED9f549e133e402E42f38376F36":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC39B0d8c598ee1Bf6D98B9F918f253Af99A2744d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x50b818d4bF0E3Ee535e6356b560AE0cdf4c5afDB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC06d8FA518Ab6441438BEc506fFf785b66ae9912":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9efCC59a68a27f07Dd946eC8a63dF5CFf760eD4C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42664Bf05C3c126b00D26EA3093A5c3B3D898a15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x94A49666Bd0453C925c8612a0822E48Db86C8235":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x206067193a7fea2e88b33FB8B2B0542731FED46B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb44FC6b75576BeD059BACb188c0B466A408Ac7AE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29F6710aFac24D28A4D3F329eb4Ed874d0Cb6921":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD64C20e9627a2832D4e57b33314dF88D2FFfb52a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x884FF2A87d0E4349445bC91dEF1ebdF2B6cbefd4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4AAE8E210F814916778259840d635AA3e73A4783":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5DfFb97792fF5f1F728DC560feC28e420B6fD9e6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDDE733b93C63a777b9ff1De617BBF54dB16410D0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9E8efEe74aeff5c49342B4A498a2ADa84854c67c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7f278CC17fC894208314deFA44ab64dC3B34F47A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7BadFf2D5e606AC60ABF6719049466b2E624E291":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5B1461b986D6Cb70aBFA3D924C5767B18D49E14B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC7C53721dD281D8C590C548f3c35A3412403e60B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD91C6F109BA732b8a16EDF920d8491fDB05935dB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xab4363Ad5C48B8B28Cb3C15cF653Cc0988bFBBFf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x14C330459B21967323E74f8517e5F54915792a7b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa76bA11Ae56fd4966B019dfEa634eCBd426ca55e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd3b4e4466f385562bb7dc65f3e4fcdfc7414dafe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x928b60D66343F159C85B3dab8a614016B774856E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x029290c564Ef921c56a784AA16C97E930dAF7372":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x538F418DF790c7009CE59eD69F2494E3b79b2c55":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3fFe16385983264b51814FD7A5e3Bf34B43847c7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcc89fCf092918cECcB460b41D27AfB860Fb96345":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x16b59935FCf119C914302a3cF2D06A5e202ed22a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x23B71AdDF8eEa49506aD7FaFBC394adf348E97Ae":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6F8497037A48D3fD51838284F49Ad59985862865":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf698e7cEb84D072eBc02B355A393a67516003CEa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBBAbc2B3BEF7af5913987C4ebbD9E0c2876eB717":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4C43928621C0A39a9753184C2aB3B073f85eab40":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC75ae9180E8508488bf52f56fbf3e5d9b72fd28f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3D068D615486d5E7DDE0538dAB236E85329A0021":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x10b0D4C689DDfc02cE07C28F46B9Ae4C9ADC3C44":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2007D6f803F33dd0e7a307faC889958632712d8B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFcAadc14Ee1A6f5B030Fca5454Ebb060C8bf563d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0d378E5c8Eecb1f0214447d6231448F56a3ee35D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC90F53218b8021D8369f57084FcD78f5C37398DB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x55e75e6710A3629478fF44Ca50d224FEe89E0F9d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1131722410Cb8FDc299Ea0669256bcC00b208B1D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE4e6852c8e89056F96031283cDCA8CBdE435fA3B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8590FE40fdc8cd6bF9e67Bf2073716230FF16f42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbC61053AaC2acC27bB8AC15F88Fd44b326F3e72c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0C1098c79876ff421B29a2097dF182E7dae1116c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd534f1799298cbE201a55E52FeCb2C80a2A73adE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc1fa50dfcc60dfb656d5b3ea80a162da896cc7f0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA80709ae5E6Ad89Aa11d09B90d6A6531499C03A6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf00C65c7113E9b98225fe5444121C4bF967d0650":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x19cfbC0C0Edd85803049E8cc45e3b1F88BBa94a2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0bd20EFB6cCd3585675EF91874a9818AbE2b45B9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe13dd5586392b8C16CbDc3Be3E45Bb79006205cb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x23Fe0e8C664c47ad3392388e9C438a2768973f79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4c4201806Bd97F3acB301CE20D62ed51fa29E461":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7A166f2Fe92551d6058777367634aC0D471c9C80":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA130f341f1100Ed2b4600336a6Fb855043C46731":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9B741A1Bfb5DE7bF6dCAfC4b0648Dc2430e6e0AA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x124c5B4e6544D73A47f0A14433F5A75C92b9Fe73":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3500ad34614b89544BD5671AF549C6F7Bb948cDf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9af5b257B8209D6008A2436594DF12a0F13FB747":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA43Fbf78d74D7B5818B34b0805d459A438345641":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x402824c43D9b95c3337892b4d39f4b222A46cB7F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1eff5c785c43E37A3D2BADb3631743cd6c5E40Fa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD3a426D3E1ddB5bb1dbDfA9D409132c036bCCdDD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5ba65990cf61a963059af3d6f193D967e9343BE0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33528E95db263686935F11c1a35931C1dd421CAb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbEa177fAABad8d84b3691BE73645A4B455Dd20d2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x30452F6B44EA87a1A9Dd518fEb4f5E292bd91e1f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb0491ca1BE2dc5FfB86cE7972FbD5459DdcF5184":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa1ade4CFfEBE30590A9552fbe6C27BA2def37D19":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x502366d60c5ECF92ac96E202837951A86D0e6102":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdb3c9373FE06E4DBb31A0F90c872e3Fd848cbf2A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x413f35c8b02260f0a199aBE8da78557918ebC46c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8A72F456f4e3F153634d7713a8Dc32cC4AD9dd83":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x527ED2DF55E8e32C95C2f4f510F22B5a9BCC3Ed9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfe99A10424FcB3D3030192d87302C94238d56e8A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd6F6a387019961592C97670FC4C243F5fC6D2153":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x255ba29130ba7930c22c1D5Ab33E99A17C45E317":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x580e5Ef735e0E83285e5Ee0e8C03677a3Ce30C7b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD63Eb32F5CEA9c05876712d8C41f228Dd9Ea49Db":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6ccf5211fdbcb0707ee1ac2735d9ddf8909d1c19":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbcdd07326A797a06A392Ac79a1d7Dc329F589067":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB2C3B1299554e37DBBB39b9F7b151734545b05E2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB7E9b1010e203C397b009f831e45D520Fbe5723a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB3f9abE9D41368596201c605d439A5C7fdeeD094":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0b542E727C96AC25df977960C1c85B89aD41437D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6AA33d1F92f2b64db7Be6d8190390091dC69c8Ff":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65e2fddb87c8ec5d0b51244a9ecd029e8df32d16":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaE86A6E79aE2642b6413D43c4b192cD4B4ECf59C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBD430cfb43f0787a2E73e4b8720544f4bd09DF50":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2e3De63eCf7421944412509fd4A0b79466455349":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe0B299D802a3De40C8b74e3845ee48B75cb8Af9C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeACcB1042405415723A91d216771d535857aB410":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x66d24924D124EE838C580063bFD1658dDfc13A05":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAfEc889E1e57F4970425323d71C7abb085265729":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0422b3E153a305aBE093f2B2dC90aa1094CE653d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x12E0694e7BaC62747f2Ef62F4504a25199B5ca27":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfA7eb6278d3bFCb6b5607A01e6603422150d4419":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB3a00c3CA08A1BD29341519A4f1eaEdBBa82ca39":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5acc27d89bd9752f7c07093bf958ec7c647c6f2a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb902b6a41000a3807f7fe19744bf111224abbd9f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc1fadb61d41bfe71b990145390cea8f99e0284e5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfc477F3b1A2195948580253829877aC07662e237":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9246a01542D2779635CE29AC3A33500779442452":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb9368A8296E48FD7527e5b258e593e53FF7F32Ac":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2c9748a2762103363e08273922c686dd6febf17b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77884B7aEaCcbf1B8A0C5a33E254391b9B49eA8e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x61Ac114D3BaEA159cBdFb8C0613B8C84277D8B72":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1355E2808b19d460F57d9650f5b3725956B7D060":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1dc21e09c310cE0273F8D5554AEDD848dac97f74":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9C797e2350Aa0FFb6c52b01DCFb6EF89D6D255d2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF47fCCeBD8650838001588271C9BFfcba4CbF1AE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf927F8B12dFc263b05e5355cdEd0a0008294b026":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6e58132B48A5E72c6EE5204fCc9011638116d3C0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9F6f49aB08bb5b6df9bD7D357E01e88839EbC9Ca":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5bB10BcBdc20a928eB07DDCF481dEA7c667698bb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0dc23062D8886b45a210325Fe95Fb4986B634561":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7e841Bf726d8B72c84CE4cfa9Aa7cE8059e4B3d1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0c6410396Eb84105Ad728b52244178BE34545fE2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE9973d1f9Ac6D372a2B26c253e17078Bc90277D6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDdc9B3886d7bf6B8eC6886bfbB38aa381bA47e09":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x95AD56dFF3AbA310504328CfD939F479cAA699F5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFe8eC7DC678af28675893890Af13bb0c7B242C51":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x01b23f8cc7FBF107b0F39AA0Ba7C17eBAFb5D618":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x40903584F46E4e59a16F726DeB2F3088FF7d6306":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc27636e29fa870dc22fd7240da3104bf1e5ff195":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81FD1f668BF14736231166dda22b10D3bc9388D7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x87a819287d0e55155e7578c499E5B0571Fb00BBb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42AA6878019689A61720DB7512d20655f9d2E4b6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc27FCCaB56B16156804F735e2140012bb84aB1f7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3DD3FbB690cee983681dA5c083569f2E7e3b47fA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbef62042A3828011Ec5E65BD3Bb1D04196ac8720":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9A598e7Ce9C79e7555739440A62C6eF3430F6bBe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6B4A1FEd369aF43cb0901219fDB523C91709347B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81839EaE0E46885faBa7082203ee9308D785871C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x86A0253f3E40342E5bBbfD19F6b189939a5879AC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68e1a75F7d44463F30225e1a57F6aFd81E736f3c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x53563Efbf3CCb1014dcB37978a6e9663712a4c7f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF087aCcB193b5a22407878ED324B5B547A2EB4CE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7939aa0E09b806763fd4533014C9158dC74ad0cB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5954174A6f56F24130066b21a9D866E3D348f363":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x56A226049f88C078A4F25F13ADdF254DD5986446":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x37ED81Ad6f49E5aE1A3E9AD54Ed3b9eD30b47cec":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD653443d008181D2733Cf7428aC63d96784e801c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0AF2B1A2C5714d2291049Bf65A4Daa4Df79eb93E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x043CF0414AD2991e910e464E4F3e80F14D7Cf0b9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5045Bcd57256462bA2639231d9639b9B290A0a7C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD871915A0bd59103AbA2172E1dF959e55146977e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8caC061efbc42F8e9bB48772B42AB07ACA89c86A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x34B6680552E959Ce353C9C794495FFA9d7d7fff4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x287037283Dd2A60458C74C675746e18Ce319F205":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x51892CF8845384E612E419284b4dC636315e810c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaC1865e71552c8FfE239F8E95461d7E6D74d2D42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD58bB5E99621EEe8768E651bB36007FC622e9CCE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAecDc6B2bAA5D611796C10ce6ec7CE1Bf37f30bD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0F13D70A9C7D4661B57195AF9F443908aEc9daC2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcF24f9DB11D7cf69b1f6f438c1A5b576456F6df2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x49ac6A3d7830292D2BE2f1416D4A53ac367a7463":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x01524bf6926c04898fea53be4ab34e8adbc931f3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBae396d264452921FCA831B534902e806b166c4f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD95AD0E63f724632ED496786361ba9b6DfaEF9CC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x11faf40FFc2F2a60d22d5431ace9D9d61612D22d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAEBba2585c2628B00b3f224Ee727e7bb3dAf6d07":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x343C80183e14183024D3a2C822612B78C94ed2D9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfF7fD844B7AecFD4cFf577d2deBf7C524ea5D6c7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5844DA3A1472FE6A811E28331daA66B32a4e624D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3a32affF419bC3a41c68Ddf793917CEdc6FF9Ad4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5a6481496c2da4a7FD40fC43842178cB2F599d90":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5D9C651bbc2d41FBb83a0DD1fA59188fDB897098":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x91cf6f1601aC171f277CaAe84b79293280fFb1E4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9663B3d553e63172608D29b2c5530b53a1ABC263":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEb60bA7321e9fd8F811C50B2d9a036797982f523":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0ab4eb43af17f29ed36e33e9f9eb60dd5a5e866c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73b1572C0D1BdCd3aa9E4A98e6A03B5d8e6917aB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1c9782a047C2918f7C7e34B20Cc9aB821b4914dB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf2384194eab2aa0b4dc25f8fcd958f7efcff3cc1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfbf0A6D5580203623255385D00163B83a4a68707":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38e14a38cfa5d2c97253c7815bf1d888ff7d9f0c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd8F87aCb4b9f86Dc65B0ea9A69522127e0f53Dc4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3fB39dB5F14FcE1900dcf98162747C90f1b3c37c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7BDB641547759e184ec5439FddE496937d197355":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0cAF40437269caC99B47F6Eaf19BD04B17024d76":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDd5dB43e5B360F07aE0DD0cbD562a6d1617FA716":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4a586D0B9eDB0605D8C63f16b13CFb63Ef9f88Ae":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA2C434F6A06D59f8d4584F82Ae39219Dc74CdB5f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x849c2dfa3b19fd683bcf82a345f9f630d79d6215":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD11B8C663714A3AEA6F968009677987329c43aE4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65382c6DCaD251Ecea9000497C683f7Aa3850aF1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCBefA20f73335A8B7B434E040C610aF247794dc9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2de5f2A28c6fC68bac4A7e64c51A025217f5E09e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC4D3F6feCdAe82fCEE242c794a08093D3024b576":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa62FbdF01F661BCBeE4766bcb126EE44f1E8FBFf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdcc8EBe0fE65B8f0321509437EE5a0d11cBebb94":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaA8995b4126e15FbFc629744bC506ca05c3Ee3fA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x290FCd4556BDcd4D05DA39600881cE55556c8dE3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x55ea799597fd1331bc8F55c115a9C3e20c133e5A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3155066B5C0C80E9efEF37FD9D44BB7D201dd71A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDcA5971689e7f561aE4B84954C821b87764B3d9C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC7CA66152d91141B5637fFBCFB2157d9Ebb4A63f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB01BcC2c7b6f8B852866cE59fcdEd3981a9FB95d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3D4AC8f94A03544Ad6CC37eBe815c27e1C6e11aF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x28aFDAa65B529fb53fdf8B73C78e8b66AB1824f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x746a8780C65b53e7881aD6e5EC0772e2c645C10C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd2c66f5f1F83c05E811917Ba44cC2745A66e9cB2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3d4113b1cecdee2e91e7054c7600ef25f7915be6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x05098506dcb81680d181e6C311019b4F2E700200":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA830A850589Ea45F909D12F13Ef892c59F3C2FD4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCDaE337877ADA30CfEf47995788c4496839E333F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0213ac7D6417C10c1aB433612a522b1a4975fE67":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDBC60536ed5D774F00b6FE4F4270F42b713c3896":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8224A48B79e69041A075643946c85C2316E43428":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x15fb86328E91299B707242c71aFE13353c96B6Da":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb5189e17d3dedb230567a40de17ba919712a5f21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb69B6e08288AADa7CC8D99327EB42213Fb6bbeDc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc2443942ecFb90ae63e3c46eB2314d1F0E3c3a4a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcFf7BE8332c5c001ecD32566e6C5c1507E7E7435":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd8A60C70C9194641A4379ed5150E6BaB11341Ab6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75dd5b5B3D5FA3261b41e62b90772fc1FbF1510b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFFa76AA8387450e54ae290c821A56d3152A8dB92":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd7925A5cD172C203353ACA3dD71b8cA05148ad3B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2b6c7641f13Eb16c9dBFFf2F43032af426E3FcA4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2f5dbb63cfc56a7a22a0a39898C6CC8C5A7aFBCC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0927A8554E7Aa892F4B6381Cd04E33fAf5b8cbfd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB6146745aCe59Bd6B15Fbe7B52CDB97794291f4D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC742A2F67D245970cB0588Ffe0807dCF194eBF1b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x537AE9D9021bDfeE352E6eAdb9bb41F3E45FDBF0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29423f7d062c8CFad0f1DFaD2D325E28bff2777B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7de6b064b1c72bb804ab8f1be30112fce84b6693":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcebeD608B507B9dc2A5Bd2bdF3FF6121315Cc2dE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa6Eb5264D6B427Eb8840C690972516F931A28c37":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x37267E9Fa3eDaF91e0f3582B53d5DD00025D3a74":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x80b744588fd2feA8ef14386bd953493A097eadb0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6C795Be0a4887816Ce761D41e482fcF4fBCa9963":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2b4E19f8D24b33937dDF3210A81D6AeA54402e2d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb79BD4C2FeEc4189025FA553715EE297E110D36c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2fd42110f478433812EB741AaCB4d6005301edf9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8Fa33056D9067Ba93BC89a3366AAD64952743028":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9f3E36Ef3c24Ef8fD5e8e3194AbB386b20aF9b65":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF370c2a150dCe78F6625658A498443Ab68ca3A73":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x715Cc50A7aEA3ebA30b5574E7b469577e4C547F7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF7DFcd5cB081791BEb3CDC7271c29C8EE860FaDe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3496eed23CC2B0219F31916044595c6787d8279":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x385757F0364eeD6148042961dDb92cA9FA600307":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcC72D781BF4F263EB1afAC43632905aaCD960736":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5a2bFf68d2591480d06a98840805F14e65cC3aaC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4c18FFEd1d4C2eE1169DD938C96D3BFd84A8EC00":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x71848CD5FDADA3a5055623b30B09ebD6a2124Ce7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8f9946AecC395eD458abeE7983e04A7B082081F1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe53D26e4E941D06AE5E00C70B613bc8e8ed87512":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x91e3d5bD52E1E3d6765Ac3d8BdE3dEf74CCdcD97":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x66679b38688a4bFEBd90A83838c39BDe36d0A161":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1BaF16c71Acdc044bD7B6E5805D93A8b2bE90E78":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x12797b71154fCB311D6C92914729E86253dd7D0D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x97528D8E28741240ED6219Dd6E1A848Dd57529A3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6A9b3e3D95CA45e39cDdA9345de9c1e667a645f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeA72507A3b094F03492DfCebAD1202BC83596DDf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEa585De16bC74E2fce7d7b17C2D1e3D5D783a5C1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA7e7843B27b89d692269F3CEB1577b649b77F05b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x416C1018Fef46d19F7d6D32E00836Bd0C8aE2CC7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa972836F256533A8f39661d6c061C3211C80cbB0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42E4F53b09250BbbFF141B4c7EFdff2AD9873eD0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA878f074Db0d79B9613812d3316e40352ec5aA64":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc191a29203a83eec8e846c26340f828C68835715":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf4d1B6fdE396C478741c30E045009e3EdD92669F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF9dc1Ea1B25a752CC4882F7B5fDf3aA53cc32eBE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD188fbB8bbf515D5b06c3c1e77130C056f8F88bD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7A5EE74414213611378DbbCC40f64b58c3d2A46B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x129fF5246b9bB4825Fa352792Fb04550Aa8a587E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaE529B3ee1e0F66FdCb1eaEcc3678896dA19CEbF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x407410d84E15f79642272eDAeb437aC65D7298E6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x916b42Daad94D97A0b9a41d0c26eBf7F5939b8C6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCf4e75c9CCFfBc6dB98d43256a4D3721C7d09B2b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73F9639F79555f64DcC2de5A57ec98d1a2AB3180":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33f6EE932cEa603Fafd6854827259bE172C91Da4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf298D142486bd66C76C3D9adFc4de57ccB2A9Cae":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x423aFf57B3b3f60fff3560E9FA6EE93c5a8C2b7e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33CD689Cf11F1B045a71819524c7D48F3B647d35":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f3Ac9539b3aA46E69F81b691B9FE5FBdC37ea27":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd0DfA9Cc867b775e096277BfBaed57918CBD40cB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x685876A4e1506Cd6079e1076249170Ed82116341":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x48fd419BA149B17937a0678a783A96F7E2AF9ec3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x08065afb0c0fe66e084a8e544e12986b969950c9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43D21D4Ad607c5Da1c2CA50C76fA5136586dD75A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF08A969B766a2442182E69fD562a2c760C308405":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x555664f29cdF66345E13fc2983821dd74e3a32df":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9Eb90b15c757a9c3d2bfBD8Cee3a51Dc5B114225":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9151Ec4e84931baBCC821e0bfb3b035D38aacd24":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x51BFff5F990bCa32de6a61EDDbD5b51747e932FC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD9BD8760Aaa6fcce928Aa0ef2c80590Fd6e80a52":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4B2D6458a187ffe306cc284f329602100f5444Fc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x267CcA18263d82e1D2B6E094149Da5462cF5C961":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe418fb36dD92Bc996D5cB8C1bDcd7c2628626ca7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x04C98a96DcB4a078dE1E31487CaCf436c5D9Eb0E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73179b92ff5538e873B1B4B52801a2933729e0f0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD2Bb962EF85B8389c83C89fa78C241C5Ce0C51a2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFB4344312Bf0988A9a9D75a45FAf4F1FE8Eb6B79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x324f0477ed3dba6bf5fa4f34d2aa3b912d452500":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE8503f0484c2B8bBDCad489A25e699542cc14139":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x62d7eb2560d757c6df8a14f9077137e4b0af4dd5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x645C946BB911458326D6e83393126Ca3479C7ff3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6C163AEed3aC423019e4164c8485530325759c85":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF08CC2AaDf3Cb934475daA8D427eE2600636A198":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3aD9C62F816E7D35159D69ce8fF5F57E29c0F239":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdCCf8F98877666e0De8B03a8df16352ADAd2B87E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0C2d640DfCdd73c02e85526dBc9EBbBE83117F58":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdf8FcD3FE63Ebcd8aDD490d3f4dBaaa7C23128CA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8206C4ab88425dC33828d4bC5F16d7E45D6ffe85":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x70e7676a7b33F8d2c07049cD0cb880fb2C4ce91d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x59baCA5484D0048eA2E46F8F365769E3343478A0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x03b2e329a42c31AEb614F06f17e634D4CCE08a49":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa4DF12C097D10502E45da975C3E40e58BDe1c97a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5a4c7629Ed8d3E7869Eb52A7dE794378C655f2F1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd91B8eb0f224B0908877770946EAFaEa96395178":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc2ff78d2eb719a5814ba006806b710fea5652edf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3213cee23db014511a3df039f82c71e8cab3bc89":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xec30e1978f1a07b6ff256ecc22c273b225d7db33":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7F856571d64A78fB015e89AD3A4EAAb4f21e355D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7E230EAC1e30106feB33cE8081d6836c489d0144":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x592111050fcb5f530Ea499447f2cbC0D1C57621D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE12a08BDE0C8DCBd8bbB84783aC9eF8fcb8Cbf5a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe98aF36E6250d5599F76FA3D2b012b378c1C783B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf22144a4c87610C829272B76D0Ca36De2D3E16CB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8c70305772E2b5A4A5d12c817AD4Cf71A37D36F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f9DF833FD89786e0295549561daf819191eEB56":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3bdCE7FdADb022369188d7158f338a4e117981B1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2499A83CbcBE1aC68bD786eB6F4AA19D8Bd55925":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9C9f725f9E47e84f05a1d38e450250Def76315A5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD8afBb227f3E5f4156a2D798de247810dfc5CE79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF2Ee543f185fefDBbce85A87EE0938cD2026C9Ae":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAA297E64fD3A3DDA2950dDCb3A82e75B704e88C2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2c3E8a5a0B846cfFA080C628a25287B38FB6A58F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCCa264fA1E621E64A78E36a123392A0974884911":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x53f3B0c934781b39Dc9b4e74c5E0FC047470F190":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39FCC5C249305E5666684f25A9E4e8FC8834f38b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9f1d33eab6a24c8fae6f1867c885fdc42d4352f0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x17Bd178D155669D34Aec86bb404E12b7d4905385":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB4607c767dB6b3a1D85200Fc09eE24370331aF53":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x667daB2FFBb94a4f85cBD62268799D0904045C47":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7aDceaC5EB67f5973424DDD6841172548dbFa2dF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2de8c7BA53572f8CeEB5bC2F9789a415ECF1AEB9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd063407b7854e413db278782A8F934Bdba8D1D55":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd715ddCed1deF460Fe042b1Ce142C76549B6a713":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF0b8168e24Bead4A23ab9c3116B15734e4457662":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0c97e931aB720760a5dB28721CC5DA30b486E692":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0E30731a598A85c707AF85EE435D387b04400cC4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB1bEA90CF6EDC9ad6F7449E22A74E3F19229E14f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfd2d2b856813b6f58ef4d5A442B43d1B37088220":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4c23da391D47338FeF38306D509c01911EB53cfe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3C46F44814b9aAe2AD796bf9b563E13917edFf82":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd409BF118809e11A5443d7BA6343DD3A1B36c2C3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA6d1766144D215AD46A83c7aE7D1500880Ab08bD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1964044B21C8A468B0B0e99733a458FA8F3fD0De":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4ed641e82F276fC3533FC884F06d3744631ee560":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0822fA326F199E62BBC7800864aBd91dB044Ba5B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x711d64273eb08013bd50bb2dd05d902004a47aef":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x19409ED3dd77c455306181d63e49f4d6C077271D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5594a207548d65602b82b6fc8c1FF38c406c2547":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa8E8e46b34C790b9eCbdC6d3dd8139e7c39B6f0E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3Fd184Ce671a131cd0cc32F012d0390C6d6069B6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x76c3C27d51693bAe283a44148105B0B823EE8641":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x854c3CDF79757043dB6905e8922c1b0a2d9cf1ec":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5f67387d30a19c58580fa2e169d412718b099f27":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x45268aEf5B86974946bD073e9D26D34F951D4B4f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb8bda4c3a269c7b4b64732a1812334dd043dd450":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF3ef55B4e1F5963C8efCe7E081f11dA8618dFB9F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x12db173E3c3C33f26b046735258fdf76620E276d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE80acd2F19577dc778881086EE71772e65c24148":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5441fFCCBBd3CBa5FA802744D08CDa82b6C39ff3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaaFf4A882ae2cA575279Dd98c2DE4214f5A8c010":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd3318aea4c90716F3742c619af1351CF51BC845b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x96930ce4b4078f5ff0ab80fc30de00bb62e58ade":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1c2128ee78d1c33747c1561f0f2510544f3d9afc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5dc533fFae3A4AC8785BE4BAd1e652ebBD4280c9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9f384068b2dfb70ef97b361f10b33636a4ee44f9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0bc9f83bc42af59e43562b4c6662ac2a4b579b35":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD3D94e771FbdCB55Ef11380cd154Fffb94760b3e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x23f59429Bb6F8f2271441C5a0fa7CA303312Af03":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x52b66cB6a5Eba9524F4eDE6784FcA99fF8EA7aD6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb5e0a06217682641Fea5e3E2a953Ac842fCB49A9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x521436b5be5e2b771131bb2cdbc46fc2d88f88f3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA1514130AB14826F37e0Fb368E5889E201F6D8D3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3ff2dd38c029870623cfcd8ba4d396aedcdd8bd8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x040BA68D5496e5f3da094BD1D498A6e83DfC7bbc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaF7b40906CE5bdFC68CA80B95C400c735087B4b0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x049e660Eef111d2D3be2436c70C540480F863a41":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2569A2F03812E6EA2cA08108bE180F520227Cb3A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3e791938e080aC514e380958441b3Ee38A9e4327":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9C2e50F45cdF6B85d5ea14AF9EdeB9A8d4145Fd7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x28257d5aB4aC21a88D42095cE669819b8B6aF5a7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC376fF31C02CBf4DC5134f11BcF76D6C150Eb370":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77eb6203033a1deA9353dd257309E54A257692A4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x402Ce3283e75Ee1E0BeB9e1DcEF64e60a955D33B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x76A2648ecfEB54960D14d38C749bC56a6ed0f81E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75EB9d84A45D841912a48619E69376497dB62232":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8dabc71fdf0b088a0f91749b126e55064c21ddb9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB1f2e73De40cB9d426F19D4937994142981906E2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfbD059E3FAcD81e32B1e284DF1845409E584d5Eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x559cAEB18C27f2580457308df8864e3Ca035dC2b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4121Ef83bE1496Ec9FFb76171B0Be9Ae21200542":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEfD20aDE1F3292d382C8Afe53D6498ecD07c6aE0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6477c71c2c406c4e55d2aea28b69a06b8ab4d330":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xffD6Ac4BFbAbaB1D53b408c08d52C796667c5326":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6088f3b87a1ab72af831a5577216ef8099b60c7d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x456682cd2ff91c31Bad97fBD4BB6DA43d3538212":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C958fa18F69044E0C67A0639c952d952006cE21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x648eb8AE01801F9f6eC4aa1C33cC68068882dFbb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9c19a2CC0366D2443d36EFe9813Efa2152f29312":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x705fd20C1DE8bad42446E324354eEb7e25763f85":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2760db1a05afbd1876b933cc18b041ec8692645a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaf5aa8a8a990ef0064749481e21389753166773b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6da1e366489c8a281ed40e3330a29a0aa3cfa57c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD35f8d7dc52b38e14bD2FC76458fe54c3A287A8b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD21b64cC090A7E09b3187A5D12Dd0a125938CdFA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38DB681146711524cc0d0a8CeF51d3E1Bf1fCA02":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAFFa6F661c506720878aCDB8c50D7cF8CC459d74":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x358cCe899e541a860FaD2BE5C980C721D4E07321":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3E3190fcB09315a21faFa6f8b200E31d1E2abA33":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa63226Ba25769Ad47F741d82f7aBA95d843b6473":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe31813faAEBf8ac9518d085c74a5b2737636235c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x753B8c442F536Efe5Ae559D889AfB4dbC498d9ef":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf99774b739a1f8007a2afcBAEaA9069b83667199":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6a6ffEfB26AAd3EeACfA2b217984F1D17D330fA1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeA8EF43fE5D4b6E5Eb4313F32A5820c1F2Bd6a8f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd59dA3BE0E413337d7d931369522a5CFcEF8A0E1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x49F3Ff21E64780d6b4cc44712024c0Df3ee33805":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73B06899838D34F9febAB5c69BeCbe8f0CFfAecF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x907AF363423C3386A3Ec77223390CEE0395Ce9ED":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x761FC9A2ff111D8C21182FdbE0E550cD654CE3B7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCC4e37F04Ca5AC6C7c23411DF3e63e44aD5fe349":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6935a786e5849DA3bc8B9F56d6634F7031Ef809b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc0ed78bd7c72ddd77ae556f10a98c958b9cd6ac2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x76de1e8b1f6a0ea213e26cc6fceac3fc9e1b31a3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x378d5b33e79e25b55748c5e8edfc7d9d7e3f2e97":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0e993084d3dfd21c7d12f22423c28bc302065748":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbb6edd9Fe8B931319C9C76036146e3aDCD5cFC15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF09137b540F678Bb955a9316eeC65E8e3A2b1A9B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5CD546b78fa7038Abbc931819e97F6A1f2B8FaFb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68edA9592E0973F829A2B76Bc689aDb4b42453BD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x99d0d726B9c308540Fe2B0cD0ca1898741f37Af8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8aDd097754F6eaa353A01eC8F3F478F0f5b87d21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x52a8D238A5c1a3f99d5f37FEc62B3e3BE726302A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x45C21bC0b2E9b4d20EEf6b267Ace1720a5499ABf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1707BD3a35c3C2925241F9A9cBbE1262364b353C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB84aFC36379f6E36161CE0125F4E198aF36C00c5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8407bd34d1f042fDA57848442B23b8f496DC31A5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbe2c524e015ea016e7fc70a83bf85419f7375595":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC66aef4C7c2e74d831c0A44b3Ad87D80111A12a2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9C2426B8D862A8ff941faba634365c8ccd715025":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x34512eb82b7ddb4b2602129de7a21150a08162fa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc961018af27a176fcc36050394bf898c0a80289d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x093bf182e4D2C58616Df7578B9a9953A134596Bd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5Df2F1c7dbB4D0B05B03E38ac0d40b6782f18445":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCbd094e2901E3E27cC8471e40f85D2408fba0992":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0284250461473BB84D3Ca090680032dDcA372336":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x20E3c3aA41e1A6b12932C38cb1A3fd9Eb7ACb5Ec":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1e008b42205fca18f7fee70fd7e097014a1f84dc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF6f64b470Cd078d92e023E4B2eB8E66AD7a7F6ED":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x655cff08986761264357a667b73b871117a5104a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9A2a204648740B44F40f9662BD930320CE5de182":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC3483C41f0f4e16E943587E183908580b641f52D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe89e7ef0efa47c4E43A17EC1eCf0Cb488e54f717":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0a5BF321eAE8238978eB3aE80220c1376aC31965":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x64B4b3F4F3f6992d839e9074Dde54A019a02F3AE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8b7cf462AA2C8eed2cF5Fb57589d395C013eee89":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57277634682D991FE831fdE822EbF703aBC657b2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe4d9F174e9B9F987836030Ca0b244A5b4F615869":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7862Ca0fCb33845FdC64db0aE4F9F97d03b46af0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x62BD4CDb6a9CfE6B3Ca3ad57Ea7db61b9eA2eC42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6455ADC2219aDA25587e74d475ed605762505802":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb3CBB7A07D4b8640DA21AE5Cea72c551814a7Bbf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x851925CDd9Dc031df1257Aee4FA15Ff7c269ecac":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE4db86a306A55c9C18c17d0869D552B796a83759":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x008eb737B5029a92475e49aA502B87cd21B67f15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xed6E4576849826081fE2ffD0d94753838ed0E1b4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb937697858A59DD906cfB5D2B50A73b86dC0B670":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x806dBC5c7c588b23Bcb3d71f4861FDaf37a99e79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5dB239D5b52b0b738a4975B1791Fd37519fCC881":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA819A27C5D2e7c07f7739FCf2b620ED6b597023f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x683fB8955D01553491508F0815fc519406958dde":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4Ad8a20CE02aC9c24890014C6212760b562C26ee":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33d6683f62e7fF6bF89Aaa581C73fAd73090FD43":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAAA0fFf476aFE3d015247eFD63151364263DEcF8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd5C1cA79B5e5A3A383034eB37c8C0C8fE9F9871f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe108974cE7Ec5F01161305Fd808C61d1A2322192":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc0812866e59d7f8055d25fc32b74b0a6762a5880":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x97387Cd12239da78d3FF9046C225AC8Dd44b6892":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1fe57f502363b796b1f6bc7db82d00fed91a137d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x61A06C3D45a9e5A087B83a0211c01ed2D6f0F43F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2B6a048bF4a4B2F2Ae71850648cCAcd32FF81025":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xea3d1b241925c61ac490ef767aa57afba29c406c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc252FaD4840A21101e9425B585208feBAE5fd588":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x67ae28021CA9E6aC751858A81b2B3c7EEBdD4864":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x84706593AC692b9ac8f721579C1FF12AABCF74a7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x52F761A82fE381f539881786C34686Fa12620c9B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2aF129557c88732f5Bf9C619666051EC009d8B87":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc7c0529897b146B6f7A27db73763742028dA2880":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x753D5b68510Ee838A85Da4F0B10E9B9c1BD7554c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63cb360e704f2f4779d5608a8a5e3528fffc5771":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe61db1ddc44a3c740f5468ee27e5459af5c48303":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x20b0617cc839b321827C68BFc87b632f6835E57e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd647200E22395213609BDFFc0dA202542EBe2584":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x344269Cbf90a777304360B06c3482A4B3F9F7511":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf3815Be5fd65d6CD56748C4381Ef2E711dB5956B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdde01Dd8d0640a6a812061d06b6B72203147f42a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc4fAECabe1D33eCE2E83c7852d5fb743Af6720F9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x70B0eF7BD6cd353cf89791a72986b3CB2dbD72E0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x66dEe2b23f95af7cA3AEeABA670053DAC6913067":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x94d61261AEdEdd27141C0Ce4c90164e16C5e6fC7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63EcE9430F424661c0fC7351AD6e71d4281b64DF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xac4d52d7AADfCc7Dac17FD91B12D95F425463c82":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3F56CFCfD8DF725D548175FE8B68626ffA60b684":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD0c0CA89ac0cDe709bCde39066cbD63E1c6cf766":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0909c919007Db07CdA603e4BE121c3e1C9766479":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa00A24ae4C3d3799b206A0347F29285aF8513199":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x22873033143D426E98903C8bE423969329DbdB42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9BDb46655344A13aE88C0F76A408580e2740FA95":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x489E52AB06D2E5cD68Ab12918813470E5ad776eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x05eD9F2e22187b90c3DfEFb9B02A88e9A2f4be8d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE57C2d78Df84C41b3A4a9F335550F69e10e10B19":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa6D8a3d21Ed1e371A1E74B4dB085D1A267cDCBDD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9dB9901C9f2e94340429b3aC9B53234f0B6df51c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbf5047b7b86612cde3c556121460B73142cBa343":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x50B18ff7D78B1Ac8bC2BbC373a6Fb30E0f107C19":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x69440F6762160Eb39bb41FA438838B535379c180":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3fFB580DAB3EA10Da58B0B9C4C079b339b0d9470":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x688c0a468ad7BE8Dc2e1cB92cc1b9b6fdca84d5A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39b0b46956638d395fFB44Ea49A436c8ca438CF7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb697ceA2DD7A0b9C90Be7DA172831D91C32B70F8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8fd9304026dd59eb74717e5c73ac0002c46ea00f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1A8918F18e31a2Da51e316cD5d33D50F54822115":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdc77942427e282cC38CD2F836F2e0006287c3fb7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDC2834718DCB0629A3B0ef7D83136e3e9d84dfFF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd43BA4193920dA3A288AAf3400dcb5be62fB1dee":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC1fd374ca9DE2437004799136D748dB235c5ECED":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf845A40a01763ba1b83462BEeCee331bc4653ED1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x27149c5b6137037b1FBb7CF04091eb4576D01F0E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf4a99104e15515Ba8EB0F3D7b745f75007Ab6cf2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcF0e7B312E7F59F62FC1228d66b182B4345B2F16":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfA5eaA5d72cF76E92764E1E9128A7aE792C8486C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4d2D638454E465229aB104116B74596BD993a636":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4F36394A5D937f8e13689D9F965c6ACC05000456":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD38476D3c1EaeEb5cA68aa7f4EF75dd0b18473EB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcFcFfE706f54910DD3C98f9A7297B76BF663295D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDDb5aE2D3348AbDf185c74865FeEa8f90505D43c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x705d493C82305BAC4eDc527A6487eE5Cd1D1AAF1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8B139211fD5f39C9f4943D0C2039957E8609e960":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5D137303c07A35664FeC8B68805937902b56E1da":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4286419E11938Ab8EcdeC7D74438e1FC201153F4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC187B535241357D7299C6f403D382d02eB88BF0d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD80A167ab58795bD2737d9D8697fE754CA1f0C7D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE7467cA8BE38beA9073a94B2F48724e90e9c239C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C7F4B0319D549C8Ca8bA06a7694AD7DcB88837b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x96e70215d17611491F32B1D3c9035E0Dba90E11F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63C1d4CE3f0eA0a37Eda12376205e25D2298Af3a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA1e71C2D12D70506E040cc91b28399F777D078E7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2e9923548988759EEF8B902Ff67CBC0f1BB4a876":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe1F3bfeE5365046ddcbeA48dEa8679e127DDc312":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1A48B674b52D9912De8c2d72C542d863215fa714":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcf5ae86a10d4730035c166c30e0c0e91dcbd5bf4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x171f5Ce1e0752da51A9dF92b9f48601b91fF7FFE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0fBF737Ab724180216D4A3b0cA277Cf47D0cC74d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF165E3d91fBAf01B18cB23bc770C7AeDFCAEb497":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0b7F08CDacDAa6E0b9f8e7b334d42551EE96f0b0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbb7cd10547f34a986d5663c8e4632521ddd58947":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8579752e97A3ABe2a56C3FBf166924C2fE5c610D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa50b0E76Af8320aeBca39Bb925472F23b59e0FA8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4cfF121c7cCb12B54B46757D8bd1250dB0d7B2Ec":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xecb3d784d93125bac7610c79148f1fc4d105d071":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC7eAEE43B7f235d3380C77d55D639aa97c0643bd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6f39c1fbd5c43071bbb5ea52a576f8d126633fe1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD8a730967F2Cf1A2cebEe1781892AFecF4506ADe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x41f7B7f1C0805fFe647e2d533767d2Ecd1ef4875":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x068D1a6030BB3e8cf185b0433Dd3c48C6D3157b8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb5efd4ac2f2f80bacfd5bc5ad94b20a5de023409":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x10a2c645ae42dcef8c45b8de397b8a4d9c47fba3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x32accaefa35620b51c061901aff1b74991e7322b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdEffE0596B5759E87FE88256415F9Ff7BF78C2b3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6E4996cB18E2619dec2C32841981CCA3001eAf54":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa721d41a817723707f6Ec5169C36539989d02cFc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x549F2eB041Bb5b89d954d4ae18fFe1f0d4377056":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0ecd084eD57d964a74eb4620dd7942F5384e30aE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6FB3af602BBdc75C03d1C5A442E2637615CC9b4f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x90B390AA2ab89C7DEA543951B54A1cAf7B6Fa771":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8af7810012012Ff02f0734D46d09Ec1dd058cAe8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0c4601E5AebeFe2c0854D6Da4BEbd376570B9fBA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb2017a931F206F40CF06268E8FcFDd3d4E4f5E80":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2667Acb34671815eA4b242Dc397101B06c170430":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x14E9999E96b7394600CF39E243f0212434810f52":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x159F7ed0D057494F0de525b758682F5904B75Ff1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x82393D1fA94c15729628eadD9E1811705369F8bE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc2e4358ad08202eB0071221d0E5C68E14a0e266B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCA4fA1eF929D7Dbb9Ad02719C499FE9412cA176d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5A2db2C9F0C7a048f7b9836525886EF331AE05E9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x361D7E3Be644f68f663E5D3E49c808818eFc9814":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf0b1d2562AE198c6557b53DF5923514d01aC9Ca9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x84e40CBf192E4c68Ed1E59af454E258eD3403754":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf8BeeE9Da85484a60b90939018E34124C78e24E6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x255be04Ce7C721679440de2735D231C3c893f262":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7333E0A08BeaCF70f04e43EDf3eb86A8a053f64B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x600D2B986355D25EC23155c90041a3571D12aD45":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x95735465cdf5896f5678fdf83a5c9ce4f518ff81":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaeCe85B275B7EF34838DD28C0608E48C8Bd3171D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf6136507E755492035593E4df10De733996Be2ae":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3F638b6CB4F208710F9a768F1567a45015c3c3F0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc4A6E3D1454ce9F2F7b2cdc59fe5825B35619C15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC2cEB2B35Fd94D06F13e3E194173F0bde152098C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7AAFd5eF980C17EcA27a2107e76Cd047C90659e7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb04B688b2Fa620effdCfEE808ee64D08482caEA4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0CFa219FE4b24e25e4cbf26e448d2De37CEda4e3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3eeCc796B8aa53d139404c13a3610C16A17e5aF6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x325409632bccFfAc706d378A2Eca57Cafa21ab11":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf90EEB769Fb55eaBE7a8dE6Fc162863cf724a58b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2F02c4E2Da54A0df1F40DFeC773dED5125dC28bF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8506c53488eC8235ce858049fD68F23599879328":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x04937c1c74B0b850E58f663B550736e16FE37Fe0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1CD53b78A2c1a67132eac4b3D584Db8806238f15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x291c26B3A8FAaD1bf4B3606883E8a85A7763F8D7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xec82ec222e99dccba7d4ba69112706e82715a8c1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x59F41Fc34604DFBF310B1Abd35230F8abF349053":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43D57590472FCbA03402b80A3CCA22c52dFB7219":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75D446065f56FcB187EEa55B50CcDD7D495E0481":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3ac97095995da83fb3784e63e67e98e228f4fbdc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB4fB7571B239CA85A049f9f42214D1E238823440":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0f1ff4e59a52A17F0c0b2E39576C19CADa46F1E2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1530F2940Bd7E9d9E8a8c5EaA37409Bd22dbFB3F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe797F884588095Ee7Da45981E0eD469aA9cEb009":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaecfff554d4bc60203f9a3ab79fa31e623f695a1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbe6e477b30aa4919fdb2192b74c0d64d36004d9b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6186496d413c09c7758cbfc245dc6db34acd5825":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x286d9E38217097eC8dFbEcA01dce517994fe8C4f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2F2d1Ebed1b0E301fAf5Ed551eEc06621593aF23":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0491FbF3b495Fbf4Aa6D73F44Bd5b39eC43195cC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBe2cA6F56C541eEa195f258D7db77d51dD6B106A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x56f76fC1848863afDFF65dB8c953b67997881723":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xac3269A2a0704bDe92E2a019c5b0E4F5fE323191":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb5543f90d0e039374b80fd1da0f3e0c242f67dc2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE3dFB1beE32d13bD09841e52387D05eEA58Ed61f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1db35f617c96d1b87175ac08d3bdab9b38559d22":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29B79c547f1E81AF85eEFEA168D7478ABDd082C9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEB10a1BD46E15e36a25baE13C49283518a000cDF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x358Aec0953239C84EaBB6C61f61d7a1D1B7dfd93":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6cc77695e67BBbb4E07515189a1323965cAd6a1C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAEA735BBD150d3397b79dEd73F278aD635eFF561":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2354CBAeED67B41522E8bF2445B904c8F1631DC6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA18D33a6F72B5E5bc1BE1fE494D83B8C7B2b224e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa9E993B57a1878b59a33DE3A753E1291FeBC6A59":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE308Ef1a6E6606476996c5A821c1F1Da991cC12B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xae8F0E1Be19DEAa4eadb7F61607C9570304ca46f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdEABAA81a54725E7Aae80951E93e7AA45d92Bc7B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6667EebC2e8A033f60f0db49ba30Ffe7A06FD1FE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xacad95570031453be812b88da058a074c26e3535":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEb0A73934c99ed7E150F343bf2F56c662FeAF2C1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE7f54A1a866Fb841ebf1290a02C2a2B179B38a72":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDa8e18501Db98C9898321064f5BBF0D06031A4a3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3E0ECb366a64b94345F61f679869a5313903ab5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0402E6aC3476DDF96fbE75a5E6Ea1824cE00a7b9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcB5a998Cd81ff0d7613981A64eA2B1d49783b8e5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7dd62BdCE70D3fdD2D7D72451281Bb12503F662a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x732806C441e29078F70c9d51f4A72021fDfa7354":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x694b7075fe32a0a424Cc4203410aD0315F5D7Ee0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5663F391cF21C2CB65e4696bB6f9280d0a58Db8d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x030A9230CBeB809C51FC71eDeb50E15A802A9535":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5041848f86a219eDaf331091f81eE271FBd56004":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc988f7844c820cf3e979c3F48Be627b389120B4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81F556097Cc0898aafA2c10141196C5a73a05472":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6e0B792F6808D2Cd4AE37FC7C9370157801EBe4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAFE9787A96F5811b1513c6408FB5e85979Eb23De":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA025cDf80b2474762987CBD727c70539b252918B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf3384875dd5905F9004E40aC0f2761433F5082a8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33C2d1Ea6e63e29D56C6CE07C73660c115b2F717":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x336a4Eff61de62337B0E2b5D584079940Dd5F4CB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6FC23962D71eFCB8742E109b62C7977cD392082c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa0852a883B0b3900395667814638C0151B547088":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3fed65Fde5151635e240D37c69ACb414f3751Add":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf600BF216Cc468dfA31d90AD99e3BE2607Ac620d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2C9eE9409c052Ec8f540552216c29A2f4289D2Eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA9dC4ECa1BCAc5a7CADA4FCB71F6995355bE2026":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x35Cb3Ec240eE2127ADA7Ada6ea98e6e1cf8B8810":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb6d470ab7871b8Cfa8F2ff6A44C9C6E9EA2544df":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcDF33a991B66811cD25a42b7887FceAc776CF0c8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5fe1d92b85478e99dd6880a647cc150445b5aedb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb6160B705CfFF47a163bB5c41907BA8286656D6f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1E5B9E4b1F29d0629Ad130Ebc5904ad9AB2a61A1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEF9F50716CDC3a6b32213D04ce0977909Bdc9F62":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc08bD156Ad0A2E529Ac3798B6F3F74DE4116Be49":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD470F08E94259bBA8E3c0b83CB637E15d896E27E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe30Db1C12b250AcD85C78ac5E40510C410abC902":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3Dd3F3a57A98e3c673744Ad9D1B9Da7AFd96f4fe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0C14B646CEa888b58f6265614cea02219DCB291f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC17C30ff3c6A9fB8cA42fCCB974C8BabA066224b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6673dfef0ce1b0ba9bccc4373d5ede4ce12039fc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3Ced7d36F4B2C5a32B2927817BD009e7e1A4974F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5F068AaCFEFc3A8a047A390d654f4093f1bdf65C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x810f8Aa09e9e3f1f77eEe61ca3Eb7AE85808b59d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb3935740aac0c7eab611ecee993bd0d11fe43845":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7E826Cc1c9f60333C6d6CAB9A294C766ce01b2A9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x375b52A960642Cc9bdF5404412450b934d0618e0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4765609A84A1F13aBad4e3d70dF4A6d5856c70AB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x820d131a0532797c1baea4bd378eaad9a5618024":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC8B0b4Bd1A759d76314EeeCD212FcB89D862553D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9925D8054db7c1f5F5A9dC2D70E416010904bE92":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75e04Cc0a0E9bf1739735F040eBB52fd85Cf78bA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1b615eBF9045e7A015672d183FcD1A4A9A84C17c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6b16B40f113349587cE744e3C196085A60F473d6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x596ba74a37684bd9516a50342165a61446585d8e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5EE9b5C0470F18baEEfE36D8c4DA8DC4e580eADB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0Ec52403Ca74EBecbBb64a02bAA7550b3eEaF7bA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x676bb38c6c70e8d6b68b54007d8e2791f6256b24":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65a012AfFD8AC32C9a5c8fC97D383de16e7dF1E2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x083897a7bCd62b82CEB054Fc939Cdb13136f0f13":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDB46bcE3408cA4cD3cfaA7CEb121f679c13f88eE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0EEa261426e0610C69921568C254D457C882EDF9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE26f1Ec65D9526Da7C8D76f4a67E5f296E26F47c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x98000f240f63364E5849e32F9d14f1f5733cCB26":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6f77A0c5015DE4BdcD6126EEc78278e3d97864de":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB1C37a2DaFd8824C618c1571F14bC0bF381f8ae7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0a70b9F030Fc2Da0a2FBeDcB5040f5992f675c40":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5E67A1aA062834a621568df6e6Ee9e4AafcC920f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9597C3F0EDe6B7f7D69a340de865E60E829d969C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdc6edf61f104ccd0d5b05970ac4ed4c2a8790bb6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x48dE181811e57A46e8418Cd8A13fE88F502d4aB4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4e05455a4aC6710fA775E7DEfd028bC557f247DB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x24DF2a29aDEa0255A978C048262F6F0D5256c78f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x754fd4B6d458aA5d4c470a3cEfD20e7E5948042E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD7615BD06BC3195aD4299f2cF6f630535e4BF4eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1948DbDF972e7f8cF536000c6396e2EE46DA3B04":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfB299adA3b1BD0D983F74ee7867ca42E68e1c779":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4d1ffe982e2ef4dc5fb2aC85fC8b34523A6D531B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x980fffdC7C1F91834C2752464e40E111fF11BB79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x87DAbCfE72125A79049d46354dF731595a4DBC78":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x209cf51d8952DCa86d36924B68525994A5E4674a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdC97DEE77A522315f288db3197a0802Fb673A279":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5ad608A2d923451cD4F19bC39E986C45aFAacE6f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x14D9BdC2C87a526649462be31A310772086889A1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x19fa643dd736427E78b91a8982525aC162b890C2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x71bfb8031F56646c20CFB862842E9dC5F1162ee8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE40207F3A8234D58CA30d572b5f28C85Ec0f0EF8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7110eda00d37a20D41FE9fc4a5580338ca57bA44":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcc8703E26550862E0DFCb9ADB27ED7a62cd7162D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa6ccab3c06bbcd73a8b956889c33e5236d850c43":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x559E2eD7bB9FC9aCa24d47F61c9d32269e98A160":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaF42CaF01afD2Bc1FaEd6610B82a22117497476f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7dA927B17F45a4eaC7bBe0A95A483F740439A915":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x245407c29a29D99ACAf25557D9DE5871fa217001":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x58ce7D2b62570e7fecAFA9548AfB12B312C0cE70":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x82466a963cE2441DE00623d83136895D32CFcd1d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAE417614DDA7fB748C7c34bB1c241692b91ae852":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2187F349561dF26540934953b70E47489c4F9783":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73bc37f92396a8bf4FBeFc7D8fe7913344D36366":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33757219ac4775b3e3e81b6d0e053d5f770ecbed":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBE1ae2C71F384CCa7d0B506F5c2166DfC33d3dcb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x52b4E2C41222882c1CbC6519ce4e3B4a5A0b6841":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf2d13C49ebCe7BA851d7e9d059d6Bef996D10bc0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe02d99d813b952a9548680d3c3e132842f73136a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7E8EdA3d91D50d0af6b4dC987a39DaBc0A5D6506":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9c4Da550d6a9875d78C36Ec4E4DB655032ABc36D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x54C08cC64314902b6c80C8f28f0b96Fbfc25e21e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x40e5b28211c2E55F8589f200e664eD95584f8eb4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0EFa887eE2804B2D9F3827E327C01F3198992c4C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4f4aa432cbba04c6ab90ec7ecc50ca5f28bb77f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x17E33448B40D5b19169840D2B8bafe988e0745a9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7711d293dd96508bC476f629501ee2c22660Db3E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBcA8f0d158cA3600C457DfFCd0012B5AB9e2b21B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6b73e69fBeb4b4110579229DbBEb48586aaD0F1B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa5727b878ddf21b4ccb8331e0d38423e6af37dba":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x20C48fBaE18602cdf29F3112fEaCDF549351E6C3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFB8100A5d3de4e5dA3506B4b8D71D0Ca20Ab790F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5681b5A25Dc7ea8f89fF933652dA855053f39302":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7Ff6AFBC176965159a97970aAb9048C184F6edf7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1a754f76162e9f28B75583F07Db3Db78A291a915":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x76c8F3806258FB6306A06c8531d67664F2684D8a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2d7A95C4f6a28B9339F4eA0adFd40b7c6bC8E499":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x149fFA1e656420f04d273CA1D9759036fE64dC65":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x686F14Ec33b1bCfD40672baEc71AF993b9522293":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdE3aC990cad7E76F704DA58fCA67b9bA7415CFdB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1400B82FDDD3c27428A5fbAFb784CBA816861DEe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6f5B7ad7feD96C51F39D360c05d862593A9EcFC8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x843dEeD8F4A017aB863d6d5a044F5C040f3a4692":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5aDe16Dd99F980B8526687A678733D32b9d6f059":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x66D50A87689fbA41b9c942aa7FBF3Ba1395b91d9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeCa94432A404A1f232B9e8A1B5e53096a9D0D4cf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa7d55Cdd48C5376bA1080937c0a2Ae01F202E02F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7bedf27a1499132E083c26dCfAF96D1D5A78F3ad":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x724186d0C9AcF65bA3335573b2C81D8C9ddab282":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAd1f70fb535dF67f18E1fb47fF12b4b4461B3419":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x420429c0ef8d86b5351C72d4EC92eB03c1Ef265C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1654B10f586803e41C0D4cE9E1A0F75a7Ca9B98D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf543ca33060972EDc3668fb52b5FdE2ad8090386":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x60747e058c40f9D60A9340B0a651d4Ea36740D6E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8eaC39817AA7A1072c6e81859afF383f534A4105":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa1801088BE935b0Cffb00551D465518C77C97250":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb61ED12f4C3704E1a836E885AF1407b11e3e431d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2b8C1bE0FfEb264081586f5Bc49eaC8786282940":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5844c616eAa7C35dfC395eF57eaA2fBBC91dfe81":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5E403F8Babd4aEf845ffE441602E072d1fC91136":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x107c2941Ef7767DaaBA6b28CfE2C85e88207E15A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3bC6c50B8D38c850778300A84513Ddeee9179088":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD461d3eA392609f17F187145D8BBaC8172C8Aa28":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38140E35FDA3F160ddb06E0637488a3E174ACbBc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe1Eb9169D7D386cf404590e74Faa4De8cB58258a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc304B2DB3a3d21a4CDfF05e94f499a431023D94A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeaA0d37b9E7616799491F0c756b255F25d16B646":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7Cb3a0876Bc051596dd7c575dd34a323b9b61106":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29DdE95e4ED3457a5A97E4Fbc5CfAA3d4b461A18":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2eAe56BE1533A1f78D05059364187CA680A0c506":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfCd6Fa6ce7F0d572990a9Fe2Fe63F16E390de012":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC6B5C4Dc30F4F0697b2Dc85591ED34D4803A46CE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAF174C62393f18F6EEA9AF11A9752F82771EeAe5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7da8aAaBb8080419bA604fcF102f75A9922cadcA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfa8300A4846Ab6eDf272A5BF61374A53Cc872ed1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc8734Db9E2CFCF62acBb131970aE94Db0C772a8A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x236C684e8424015f8c8c1E308E7eE14a299e0DD9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF19F2fD99a86327A3A8bFd583a2645D936C6A3e6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb0131f2091e555E994F7e2c0E78E3AE8749b1CBD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x93B8B552A6b7de7A32b40a6154Fc96b3c71E07B4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x913aDC9c72b6996B18fe057e22fbAEe33897c3a5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x88f573eD553F6F182b524D99c9B4f3703c351CE3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43bfaa06F33F277109571c5445c7b3E7eeC452F3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39Ce625C059b2E737512850FDEbe372B0d61eB9A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x51c626aE5758C07eD2b628937dedA1a0D09B6261":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb990f570f1B3d3d7b5bbf188119D16089bB25c72":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCF2bb6cb68C7A31aFF0516Ac7dbCc41B8BC310c1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43E3c50bACfD8C1A99ca8A4F6Fcbd55cEa4AE19A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4E1eeE3a53f0007Adb18931B52db9E3103ac757E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEa9c986de4Aa6414bE13063c5A0627A459E195D9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd2debC2328a540c855484a3a6C8DE89F295C37A4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8e8a0C22083fFC02357A5d0647A591b221F110Db":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x059EEEdFe126FF4C918Da928a33826deF7402744":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42D455B219214FDA88aF47786CC6e3B5f9a19c37":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x779677c15162419B30Ec8220236AD7151b872411":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x041683A2642344ce5a784AaEEeDe75e5Fa08df47":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfDEC5417282F5c04A5835060C69519B7E9D50Fe0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDa03120A3a7c67612e6D2c31b2b7498a876d2987":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xde35Dc8826D86421F4C9fE8394746E40a2BF67b7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa4d937D71A0B679a7937668c5D488190de8c209F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3EA35425B7E3563A281dC6be65cA8c90D08F1877":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0FdB24bb9626ea8032b5D2B02c05e2fFb059113F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x201f9bE259124a728827d276a690e06A5C75870a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x23Ff4fBB437708BFae0A2F94F11Cd5bC27e93df8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x05a703f545672C17218e3D7ebcF3f330433b71fF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x539E7F735954c051791C8d39cb79d187f9F6Eb81":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3fdF5006e050F79D2802D0442106bF828744d2Bf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29A8D4D96e9138E5bD5670F6b7947896e9267B13":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE7E3A0f710C0504fE07EDe2e042348831a2d405a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7b252516F2abce705315C3f767A9B0075F97aC32":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4E3e667628bCB97377E76d473C7FFB2c9394b594":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9279c71c2e0c9C38aCdB253A8e36A566686df5a0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4059F9ED26B982aAc1FCc565f9A3350Ce60d63B0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1E76E800745D5e6CC76E11eA9fFdE2D65b4f60db":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc3bF8B600092650a76B020430b06B8e5f705604A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFCAcbac2CA1bC385de62f404a47B9D88b3E6f101":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf6613Ee41BE851a3B1f18040f3A8759Efe4c390d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAe00Ad7463D7B42745b95B33137eA0416ddBA3C7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x72538eeFeDf9D1a381bc7ecb74d2444CE7475CB1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdBA37fc71c53842c0E0e7DBd8f7fAd52Fe05F4A4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C1679Eb432Be2d59548a8ca188e104159D1db8E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8167c61351073A874A9F8f1Da34fE214d2100C6a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE7592533Ab4201D2ded90216b3037cE5d050D2c1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x755CE5F31617deD6e41D15Cc51D8FF642CE10e9d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd3D648c59109566f0bc10F0eBbf9100718E95B88":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4d1b9D045c743D2FAf90c36935B0D5505931Cd3b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe03DEd53a4CD6Bab75C92Dc8e9bC7bbD90b7F71B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6dA80bC3D3807148fC19f9893b690CF6f22a58A6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8902CC62A40C264cd0dC5E7dA60AafaB1606dcC9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x00fE7c919D67a36A78c89F2AdFc11C4A9d88B76C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe9b75D0b68b475f36c15f49b9BbaBeFc3c458281":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd053bA216119A067A4C5aDC956a34a821d338704":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x002b1e9E42505816de211119339359a03c916924":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb9d28C5a609F53ee48f8374038d47811b18983e8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x15f94245a4Ca9534Afbb018699c85F320c270721":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb8426Ff2981f450452C063e4942f0e09218C622c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb9d37ba15235fFab9F6FD6e2001c93784A76486D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfCBC81E0bd5b43361b17173697Babb1f131683dc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4e8c101BD3beaAA049E42b0Db1877C9c5f90b724":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x78656cB8299081C4374fB8D081f30cB28Fe2f608":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x791dF79d5ad94271e78C6fE695C5AC42983F47fB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x93559526954A35A690357b303518cBB331f1fFAD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x74e4fD1Fde7ee919055F01125ce70721efCaB2e1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfF589102d5B5dA5977147413239a3481a4E7334e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf270Ff01b896a5c7BE06a17ADa9a6BA1E130974A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf7dd33F4AB790059B9CE53F00f8F14F39E10657b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE3cfb032a487144cbD03461a2a2b296A9f9E96b1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdAD4169C8B59B6d564d157497847356Fdf5ac092":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb4b70fD16f2Ebc217A242c60b20c8a59e16755bB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x87Eb26E17392ba673E3bD775B13Af3B684a8FC79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5F1D42eC75074741Dc7B8956562EF9faFA1aC6bf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfD4a6E8D21230fe448d411DB726DB3e0AB5cd6b3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9580e99605c46A4a2C45910E624533F611Fa254F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdFc92422d29ba035D2bA7612Fb045382B5AFbfCe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEfd90A54886f9D3632585f135b1cac0B71e4B2cf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3ac0B8294ad1B6F4a6D656545663f60209cacC8F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7AcDdd5D8d13BfCcF6555728aFE5F54BF5Ae8E5f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf6309ebe619ab9eb221fc5d8dacadb2fe4f889c6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9192a21b4e12a3DE2221BF97c4BDFCb5a95Bb25E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbe8B73AFE0d791dcA27ea1afCb26f8028F52Dea1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0e0e756672B912Ca645298Aa1726312A63D6Afca":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb590827BCd1Ce352Ae4A7089114AAd6Ff29F8667":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x001DFEed100BC14859A337de5032ec3DbE36eB1C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x66F91039549108E595A3936aC634f57f7558dDd9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc4B8FF9d89Aa1ffC67e636d14A52770DcEC62f45":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcA67387d6688760CEA19DD2e320a6E1F24684aE7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7601F24564F3132fD612F5f19b6B8f37Fb096F68":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF5001895e6349f0e37F08e8487067ecEd7d8DD23":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb80E0371732504f76Bbf365f119769137f6a86BA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbB366173eD0b64E83bdb2fc31fA48F0F6A7cf412":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe15D8DC0519ba0e69296FE49bF7588CEb805bab5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6c24570a39248819024B1800AE2f9e629DE1376d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x125D8585a465D19C0fa0156c0a860986b0d74d42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE6fFc6389065570ae97984cDe29E5ce1F150FA51":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb5189E17D3dedb230567a40de17bA919712a5f21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeb369022C2E2632a6CFBcB308b68177409c0e5Df":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5f5d217E5419ac51B3a270FBB4E8059c4299A79a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x95cebd1650394b66f49fC7302f9a3874283b00a5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAb8245FB683121B20876965FfdB41164c6FD8756":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8e2eb28b91E2A4134Bc896356dBc925849Ab5278":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDc25ea1C0EB8E2F3dC3Dd7c8a07E1d83b41fDD40":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcEEfe31E9FC859a6C6bC55e7Dc566c65366E048a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe894A24C5823d8339Ea43Be889d975DB57D4EEc2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3FD8311383c90CAe13eb17441FFDC9f71a5ef72c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73C6c2aD6e276f40d15194CD92721d7c2d6A443E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeddc4062002714ca4aa4b16634d151875af0b3e9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68539F69667c76b6d35DEa93FB332042DC74635D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0a2f1f54d54c5321dA9C27A05cb3baEe8d94197b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x59481139bCFa6C57c11a892D77d0cc16F20D4151":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x64DB70e8cBB6F1cBB04154A378389F51b5C3682D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7aC159f266bE93E67c24f91cAf18a42bE711ED12":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x64f582318BBE4Ace0145007Ff636649ed12cDBff":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x13d2Ba431846fce4737944B1D4008B0B256969a6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8dB21c3F4EFb3D70CDe3A9764Bbd39D8c6bdf9fC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc250Da366Ee67A98eF094274d73B7B71e1131bB0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6B4d9fffcAf0626A958157b288e48A282fa66444":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa74974367597159D97442ac54496f3F2Afd0f984":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x061663C4b80DFeDf8a1970173766A7F0110E32C8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x503A623911095e2c506CE900B90Ae3E1097a24E6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF0c8953df924FcC59E718A8D51B3baa29C0807b6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x709f0Bf568a63ED28d72D342ebFDcb3b1c81E804":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x096c08408a86A5C060AD730B509aa61EE2BCbC6d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3f259c90639421Fa664BE8A2C9d1f6d25cCba3D7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC2EAc8EC7Fad3328F51466B0c7AA789E28D17416":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x70015e62e7aA017d7A7594A51219fe4C276D6AFb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1c41f4b0Cc9B1aDa7DADE18d0c2DECa6a593B33A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8fc43381d89EBdaFa7b2E0A8479F37e97b0b277D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB6A4C852Fa867544b0462EbA736Bc03421127f48":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF12127aa0e1e165793c7511F904c011Cc24A8C32":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3D87BA26aA6E6f7378d6437AdD3A16cdDF4f5A7E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbAD19E37e23Ebb8E91Ad0B7BfdBC193F4010ba2e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2d499824BacB2E045b49D5bF6FFb8cc30a569259":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2e52fef95Eff67d04fF2F1DEF9819A295bEea770":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x853Fc277EC612BBde4f69deaBa852EBb6d7f5BBd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x873D2ddC99175E7B82ceD021f0b29050eE14eeDc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43d41e511F0B98B959bA1f423b630f31E11f11cA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x728f3EB85c904E75d1b658f7264Ce845aD965B52":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x07A27705eD393003Dc066160d2706394A5B96d61":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe877D2ecD4a646995c3fcb52afbcebaB647A732d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x014208c7C3C4fC25ca755567ee8864742329efB5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc1DF8Da79636716E957B1894dBB5cb5A8AeB62a5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x93822a1D799FDd43C206034be0C9cF84724049c3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeE2da0eF62f230134b4bA8cF4221975AF885B797":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC04be3860e35D34D12995F36D41306feFdF63455":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2aA822D1B91D0D82C6Ea9c3a0740f84b619EF858":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x04b21287ea720C0C9f491B21A8a7B687cEe77892":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa6289e145C78D4c28459496c25cd69bdb3E715bc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x10e3EEE744F2ED92b38413145868419AFc82BE41":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0801964739CeffC59b3390DDbc851553C7585EAE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7E5D174FCAc4e06949b7d3f82c18EDC4199DA0fC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDfDE0F3B4e533cBF46d30E4a97946402dAd04F28":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0bE56342FB71Ac706E87134e039C7E61B5278079":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0Ee4E6D826e94d92A24CC4ca2e481773Aa724B25":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x07d084110eC4Effbe165292CC249fAef89F4720c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB3DE62a6374742cE05953767FB24A9F1764D2771":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8F20AaE44F6242fD32Fab01E78eE96506f91e57b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x54356dda1d00a913494918859e8936dbf3d7b659":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x22a06D61630F110A552147d9Cb93d407E30Ed8B6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6058aB417C18cFb1Ae17Ffc80beAb7172A83049a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8Bb729e2C82Bb9024a54c5d38fa571d1ecF8289E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfa74C11a96c937D2Bd9D6821C2E75C98A70cB690":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x225964311b7dc020ef0f981feed4285d1b685ca7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcACABFafF911d7fE25247E9aB6b8C8D19E37F21a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF50120D2c245A530Af7b0D53b361cddF8e3B409E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x40A25b3C5eD876111962dfEFdaaEe426c8fbd789":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x082C44223bA863db824Eaa86D707e1e21c19c878":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x504f2284A7fE2dB636435fe654d23DD2803Bf067":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x116Fa052D6Be17352365f78cBBCc4610c32f8182":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEAc902Da57A1E4EC5941d0c8d2A363d274B5AE15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x27Cf11a70621690371fabEF536408E9687aFc38f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBb60cB422Fba4dFcF785eDb06432fe5eB0FdC51A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE74b69aEDd6B159FDef0370BA911DA7409a590Af":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x96822331D79AC7e4f45E83dA92F0335555FE8466":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x956290cae406BF01a4047035f1a8975Eed11D1E4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4F1B83Bc5CDbcE3Dc933022501Cb277dC1894593":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39Cf2bA670396BEFcb894989dea401d215aDA942":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA2860b55082333445fc2F0C6F3f3c1E80d5751F4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe3fE0E17D58C09404C55a9f792E62227e8f06983":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6145882f8Fc4388B7Baef6f9EcdE8dF83065F5FE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD64cE7ddAA9E42C715ED6bf0c976416e14Dea7BF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3578495d34A0f32Eb144c800BFC6fefD7828982f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x392ADd568C8c910d480D549E69CD86630942C0E1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77b51054262FAbFA05C7eB573CEA28038CE535A0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x60ba87b357ff0e8380fb907809afedcb765cb54b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7f5928C0c6DB6C8e09c53cCcE23F589d1b457333":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaF4C390caACCb0B92572328cFcc25442eEB682fD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6249cE46c4593cA7912E8b5E80dD25EC3Bed56Fa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1a6EA184bC940CDd75D500901bae67b3FBCDAD9E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaF26e9E6DcC5B14b93C7B9b0f98B24108fAb5818":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x415F9cB3b8682BF1748452812e9FE60440Cf27D6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f8A8ba81d32dA0Fd84ee40e9019Ab2BD82465F3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdF3b03c0BF5355538BF7eC9535dFE593Bc6c4B43":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x55CD6f77ce2E803FD49623dC5c09a42aDEEF1840":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9e13Cd95ac011a6587EC54245A16c5333EFcEeF4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x40d6D9adf9aE71A427903a26618247cDd0Cbab60":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC54f4a560609DBFEE9c6F96597b861521802774A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x87e9509c818482E0eEb9251869303D5ebd237396":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x49C153Ac64F5B620D2c864DE9081d1E1a4a7df44":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAB2F4075FFc0AeE5ec1b32f61Fd660a348388544":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc7ce2Bf0d26148f8CA5501d22EA98C62bc165fC5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x525F6FfE9718524dfCa10c00AeEcbAc37B0c6FfB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4821462CC328EF4cbF926fbEd9697eBf8a565b89":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf39CA9e29dbe35702B21D1d2B7a42B95Ad8EE8e4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaA483A73315d5e130B46f6C8EF3de3C2dcd35714":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6444c8B19638aba814bC794C0eA58cD2e179d50d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x87605C060b0cE7d18C67fAeee765E2d92050f459":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA9C65614Fa718CfD201721066A31EbaF1C7Ae609":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf1472d1EC24cA685f3704584315670fbdd2cb4e7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4FE38170E5B1Ae39a59c1E5314BB5CB64B9FFed1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFb530d5A828a0D8664Ee8f5944Bc761ac0Ba6CC3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x37227Fd3351F34ccC647B95e43b6334Bb56b2BDE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEa9abE4810a2e47C1852D0570008A6BE9D2F719e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0b9aed5Cb3934Fd831Cc84E40a1987F006F000B8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3F83F54AA5ad97CBfb880cb7E086AC5e5c303b4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3C30B69722403CC740D30A1FB551E59f81a2954C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x558a9d7Cf72DBd49052D615A178b11C38fD22650":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaaD98aB328c928d94Ed068ad937bbc09a3F79753":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x41Bb607B8Dc98242EEC3c95584418706FdE4bfe9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9E39bCabA973984023897978EAF19Bfd1c95412D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE7aa853276Ba0173C5F9fd41BA33C0A67068cF43":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1B8989A7fA866c83Fe40423597C7fc972575628C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDe11B75525a09C4D444eA8ee57921a4d5fBf702E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4730eb54a065a31b407607e2dDd14fCA66A0fE6e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6f197e77bA45C7852D2A7E3879e787476a936d4d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9d9720eBcC4B521147C45d81D4a49D6e58644025":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8ED4B5d84a2bC0574094499074D2D00Ca951f538":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x588Ad37bf23763d75eb2B33D18694fA8F292c486":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDdFa52349350144d306af9b7bD69B3e9594b6A4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA9209e0B6650065dAB92D5ecE6C60945544A7997":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeB08058a37e2AdEEecab2148df12895F311c3e61":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57bC3Ca2Ab93A08062aF9017D35C96245fA0F26f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33118c1F28867d185d41b5634ED33aD176EefF30":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8d9812347f55194d0C071e384D059ff78fDcDB2F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa702a1465d060263d6070c83f1ac81ac80f65dd8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x20ABe68290b1e0dEEEf4B5E09aA5D862D511D9aa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x03B7d4F397F3EA07a3A0959B63077E2eB24f954a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2889f8b764cc5519C6Fc2780006965c35fd44EFd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6d8441F832c151349f0C1De3901Beee5839563Ee":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB27cc46A9430aF5047d853aa3de8fad1F2C80486":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBed03ad2B5e1ba98A9b67b4f12b4C5FEe486d40F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA7aCF59b3Fd0D4B70ac0A96a8ca773FA0a793Ade":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7F914fdc79f2aAe5B33A5D0B27240134bDe749F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x043969ff3b18b57aa273264fB09E7c1BeE5Fab39":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5bAA688DdFFA6B0cFf959A8FA06671cEBa330A20":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x06c7aA5625571F50ae39ff4f72D7808b1EEa13d5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDdc75Fbc4dbd72bd3F82e43E48E453381d6F6F6f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC8c2C0329FA96Cb88D3fe903Afc473A820d3581C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfe9E6efEF101b8E17d7367b081E1D64Be3CFA862":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC1491119314d67455f50ab9799D7bec54EA681DA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x15D4BC2D5bd1ef7Fc46a112f4da12f7F1626F433":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEa4B4242f2915bA771146C1C427B2d44C513a445":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x44F7D684401A3C6fe7E650f2589579c6F47FE3dE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x58D00D09A5df8697114ce8347647B1CFC93253E5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb7521e177b4C0324CBb022e27b339607e903D593":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x67b1FF96DF1d0923467A5d8F972d0533C300cf43":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0B24a36ca239Fe261BA74caBED3B62A36C215D2C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA7c97163dcDC44BF7890EB3239B938E02f1b12F9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1448a70529a705768a6890E9D1D81f9779561cdf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCe1B114d6Aea522b4bbA9C8677b46fB402E223ea":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x69b2176Eba6cD2654298043f1CcD808A1cB82DF8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38F44E9a396C45D8D13687D0ee2B3cC6F39826C7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x350e62847Efd61Fbf6D4569a93BeDD2D5C530170":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1B45BcB98a28e48707DbF1b689Bccb5094a97A5C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75484d72e0DDcB858c1771A26704C13BBE37CCb4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf829f2Ab41FCCB9168867eAA6Ee0ff19C56367B0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBf8C3989D348b9B9e584144BEE2eada26693a01a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF009428BE1A9a550f2d5DB7e49FF439617928097":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBA60283Db86f9fB7F16c03fD7a79355708739530":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7Cfa0A0b4BC50378769372962d7fC2c94D5eB929":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x773647C7D04501fF4cd2A4E359C03AdD48db770F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9d7d75fea832c709829c9390924f7bdbf35991e6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x59370435391aFbC36997Ff5774100045c02105dA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x052658C0e56C1ba8D45401d6b2eA032427E2Aab0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x95c6f877097112048642a07ea2c98884294Cd69d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE06cc086c3babf8FeA8b08E0BAcb4030F9AD5740":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe8bB7407A2A675F2A5A40e39B09C872360F3e571":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe6468327D24d1F19Cc1093a75ccb0aB69DFEb62E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCE67F1933b69ed0CA1E3b4DF1c2C2286Fb643Bad":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe29786A93F37E7A631DC3f0B315928A9083364ed":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCBC7416FB4a252DA1f07a3F1Ab8175a35E897bf4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbAe81DcFF994a196FDa5022425C92ee7D40Eed7a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE161663eDFd3cbC26E237729eAb4fE88c193fCAe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD4A1B479eE0a90E3720E22eb51d74aAFDbBcDaeC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x519A54747d42ffB8Ad1cA8A36Db0438679D34aa2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C6553f0c8f75c2746c6B6d4Dc5492c2E9b5Ad4f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x224BA14C02238fFf93e5902FFa550Adc55ad33ee":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42BF007D2837A93825B4e43Bd294cf854967A9A1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x061eA8E5c045a2A10a96d089081710B046DA1e6a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x837fA98272ed6f7E4bB493dfc664Fc7589c95934":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB40F96443A59C3bA6c47A9700c299382dB5e7979":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA4EcB643c6A5b6bfF5eA8CDcd2C2802e8642b052":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38E3cA0988eDD369B8725214e094A463348797c2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x743E3deD7CD4F294544be62996364c27Db24BC6f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc0c168A8B4D516533008A8a1D17be20f3dEeCA68":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x11414661E194b8b0D7248E789c1d41332904f2bA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaD1DeA5b919E13Da54482ef0eb29ba9bd8DBc4FA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x16f7A5fedFE957C950bA41039133CE0BFEcbaa79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd355511aF9445882d3398D8dC22fe9D78273aF54":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4e40c26E1C788777c7BD76418a95649266d65DD4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x45DA549856896a4F2CEb02d7512C8Dc41a6f0A86":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCa1Cf5879522f566FdA87C7a3850B7d83F0AdC55":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDdB5DEc686a9dBC0bE659b553a7097523232C777":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9E817382A12D2b1D15246c4d383bEB8171BCdfA9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf3453f0a63f72BEE573449d446895C805920A4b1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF22163A24BB35916531C22da0EA44ce56AEea2C9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4C2b8dd251547C05188a40992843442D37eD28f2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe22c86d319875A65c659a65667988441Dec87FaA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe5FCFCA8519154aD9D73893E381Db99fCAFBF5af":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x54b04cFD7B35543bcA96CccfaC0a768CBB880bAb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x89D6eA05CE4dcF165cC801287348Ae81dcE5E511":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x574795f73afae9fd16dc42bd89686b86203921e6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4530C72C1C2E8143fA0DdEc579eF4020D5543cF2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd1D65C4C6A1318140F99521c4A4129e4be58aCC0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0D2Be688Cb203Ee577B6bABbf84B933961497128":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x72261E972A5A958d043f1Fb8B2a4Fb162D715898":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC02F61E6b2dE98c72DC67FCC1974f97341f777d5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x34241ff275b21faafcc405d20e9c264a775ea5c8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA1fB97AE62F778f61EFf54E3210A3fF83fDF6f98":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA004A6edd7f640F1b4DE345bd6e0c63cb1B2b092":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5Fb0058280611B57E7fd96dc4bA3616bD0d29806":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x986c989A5265E9eC3b8d9a37BD41b2412998006F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x49E59dE5DBF06ED83116AfAA0570Bfe13a8D5bA7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x528935B9889780e8FFe3B3AbFb614d31718D9965":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0766053F1Db632a0b29C5cBed33F12eE2875823C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFb69e4B694a62812b1C6543bD9723cB4CC001D91":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA6D9a105163fC67a61F0A4D1d5c4032A1E51501B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8E5DE30509a7C6e2Cf39CE1C96B17c1028Ce6Aea":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6b9100896b556cf3eb01be2c7c368f263771fe61":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x381DCd13738D9347b84BC5fd67aCAb6eDFdE341F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x375f554a38A66D12f57c2E2a5FDA5b062020b0f7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAbd0C2cf37661841dF0C842764590f133A1F6233":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x36Ba357C27c999fc0a686a6B5B553f134C770A9d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa4B8598bC8AB2Be2c69e65594b1E518F823939e2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAD5d12d71DC6DB8ED6111f50115754078982415C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD9D7A48644e1dA98d5241e0b26dCbF7995013972":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5165a4E25bdDc813e595Ae963f6CB9FCc4F77207":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb4f0C739fa3C9fCb577b7002D8C292f2078Fb14F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe93086375044d0ac07acb498bf6d8b25bd53fcb1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x92f20eA9a71f5DBdaA161171A16Ea905b3528D69":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x85d130a96691D74067cBbaa7AA32bb247FC16784":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1992C0DAc6Ecaa27D07633dF09196C6c45210130":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x35e683D062490Dc9244486d271A9B8de2E3e1C9E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbf8627F3849d60421D0F5978Fc7685e561f7F8c0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5A5515952a36E60128e763D222ec41a087E4423e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9F9692FfF5Ce2C81737f62bccA101a7a7bC31c46":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE0681Ea1B25dbeA82719b7309F80C7635874685b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCad92Bb29DFF2B0Cd101C8D677E47f9aDc3f979B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA31a1e8c5d6E325f0e5c1882B5200B955B3e30DB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x32e73D646C0F9EC5BCFc18DE6F70d4304e72bfE7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE828556a57d75cf439A5003180CdC8161a838137":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE469cFC3Deed061D38d401508A0638ff149CAB9C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBa4624b03043B21F5D7e1506bfC5C9340c38be64":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF427f1700b07d22146837D851213aD2aeC3807DF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1a3f00A013670BEcaF3E51B5DB8c0A530B5Bf08f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x649Fc67B3f798789734bCC750C6e370056b94EAf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA6a0c9A482fc762D5496185261998Fb3c706928e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x01cCD75b739eA68983C53dbb2f30F47f7370a352":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3Ed4B701620564869Ad2b1fbEc2b52D87240A990":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x46706ecCb18E5220Ad1B85b362169a744Aa9dc00":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f0d15602014f5C551F398821A0Bda50696b9189":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9a4cB63E919AdB3132C5576048ad40Ad341171A9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8f49F87A75e31080FbF7FBF538f52751b5Afe829":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3A52ceFecc09C9D60B300117Fab3795275d01D4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4183b2B7651521Fd453Be8e75269FE702Bb7721d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0D5B8EE06d2f8176A2b866ae0a9773208a5F4B58":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5B775fE6cD248458e85abd122b50C6102bd06868":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77f167cDC43b967658EB8aE473f94402c1672986":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x259F5697eA17b6Aac36677aDeb77290f6162d6cA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7F620D7e30e7C76175b1459158097F6531b3988f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6a0dC12A4bC0e04Abca323153171e5AB12F11117":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6D9E74aeB88F07A99F7828e89520029f91b36162":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C97DdaaE28448a51e1856424efD7E16D2CBa3cF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x88902117D492794c19e16785369ccABB65475c1d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf35FFDa03B930A5AEaBa8D9b8c5B559fe085d676":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9e3633234ecc2e2e2816b6a94132f6b2e49E4fb9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7A092e4943FD3b045f8A05AEc3e56C82e05a173f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x98757ef6865414Cb0121b3242f97D78fe12f9a2C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73C27b2542a3E7481B796a47C95759B4216a4bd2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81f89a3878638f497598d79c42F7f4935D0c6A61":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAC35b5e59fCb88FeC8821D3E464E4366A82CBA44":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6899440EE02F541fCbf4684A762F3837e7ECae7b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7E06ead7629a725Fd77F8BB2D21C93588DA6B65d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1257D26064800Efe43aD71e4284c07D14d78E4A4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39AaDFB93DefC465b6Fa3FDb409E9B868f6639eA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x471D696cC52152CFAF0f3071528D6d3bC570ff4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD09d42e00C55A7E4d24FF55CCD812a2CF0aE4EF3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbd1931F023dDDaCD57B7175d342F881c6467bE11":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x066EA6c41058512a16e28685D628b2D666aBc88D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1079778B3F805b8030f5b9fEDc52E92D65f70cE2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x804c3083d6565426a35482611a514948abfb00ac":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa1D1F0E5370331048Ec481E3518fA92206af325C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x04c4a90801d1ef5aE8576A0A5bDd8EEAb362a644":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1D00ced4D79852748147Eb74598ce56836dD5563":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xab2035D3b57b986B395398714743289e974cA568":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD2283F49C88f818041B6402084ca22778df4BdA7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x611adb9C24482D446bfB562C87c6135d952Bf171":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9E3D240FfE816566bb4B9d981f409Fdd92343bA6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8a461D8c7B7f83249Ce904B6AC5Bd543FcBcfbC0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfC8C19E6f71af8282A307b9278dAEc7AB5917964":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB76B88baadf6a33544a50CE755dba88C8e40DE64":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdD65C5E9d1D4124A4730A9BaD9BA5784F9B1d1EC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd507D4Af71088BAfbf2eA0CdB6962694F850DE01":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa47d3FDD0EaB701a5C5fEfB794E538273f0d25d1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x17D3a75B5eBFc4AbA3F2fa0833bE73905788D847":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8272786E9bbc769135344f21b98586615Ea2a379":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbA00D84Ddbc8cAe67C5800a52496E47A8CaFcd27":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xecf37cf863a1979c939b458b6ac149820e3182c2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF3c9821FE05b656D32148ADD93671DC1b53b3928":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb458FcE9B00E79586259E27498Ee26cBD0e1e6Ac":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCA2Ba6FcCea3aCD02f1173653E2AF738d9eCaC41":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x91A22a39c32204e3f75F2f5e90FC7536BbC2f42f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF846638AaB987d031c79bf12703500d8bD5963A4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39Fa9C5d71A0eCd684B6Ce62c5EE897a6D2874d2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1b82602271dF9e355edc5d54476A18b3B1A544fb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2D4888499D765d387f9CbC48061b28CDe6bC2601":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6c36e66695c38598A08B15e1C6bea9aE0bcf860e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA39642F947518F417595849BB614158998D054B2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3185EF019BA1C04B8d65eDB64c1c34C3eaE52271":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7D76E1A176F4893b30247D5cFd451807C2a7d54F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C4Cc4eAD08221A5b3FbD8F5E20b4Abce1b22be9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2d74E7aeAfb9dB4379B72f310D2120b485B07065":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5915ebc0bD2729b428554fC783B9B9B0876286F3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF88D367DcFEDA5C91A1B8C012dd92603b8D58467":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe63F5eF0297dE25EBd997360C112bba05C5178F3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9Fc6eB776fA1795DE8d05c7E2dCeda4F7c63cEfC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x16174273B883ec5b2AD3bD9AEea08E67A2711D0D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3721c97E0282a1FBa7daB91fD570813FB4E9Df2a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x566C6599f9Df969819B3d213B362ad5fe6e39975":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7E7aA15C7f04376223a03A111e21401228824DD8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x977bc167F889dcd7A6eCe301C92A059DE7B1772c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7D03216b776639c7dbfA2089F4D8Bd00b4E79D54":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x560D03F2b20e9047714Fea87Cc113D95a3fc7179":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38E5d5239327F1735905057647bA8137d194bc48":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa046932c87E3972807dF273bd9A936eFFa86D163":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75EC476b1d809CF1450Dd7530dDAEeb2C21b32c1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB57CC94Fc53b28fB42bf7E869e460d0ec5FBb32F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x703adE3D59A79a2261A818F5787cB2cC437D375b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfbBbc0Bc739A46DBe6f0ac768d2d6fd4949ab733":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33eB60Af276F573343BdbeA5A514e22a0bFe9514":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdaEf56Ce18eeA40C40BfCc12Cc80fe110960bd7C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7d8b05E372e7E040394A558D6A5210ee697DAB57":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x088b5E59Eb1109c3b0dCa1dd905298409ECDe83E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xccEE88812Bea9Ba2820afA1737E25771988D57d1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x465a8228594a8437014b092f65e925bc0473e6fd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9C6319eD03BCD939921A4b5c46044C2F56e507b1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x572bB56D7F23B41A507d07E02f2C454d378828c7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD2eE347a9055cA63ba207CE5701bB513f769A988":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x66fDc765040E6E2fb46816169Da209Ee72C14D3f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x76F34d1a4535241eC054b49d969bdB37F444eb38":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE0da04083f712bd8431037D05469D6314a0af7A4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1DE869688cF52ac2eBC0E789c54d492615714438":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x123aEDA9e353a64ee46fBA894f6c631db9aBe76c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3eee02f8a71992546889c7f22d759b2f6e8c2a1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57C191389cb4cf776830564e35d2cE3C5b744531":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB6fD2Ea15bf02b1669DAff86Cd157e181b478CD7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf1189995B5AB3745C806d48355088183C33C813B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD5908c1C3b34cB41f89EB5b1478D13c55eE22060":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdeB0dA5D7c8BdEB7792c8Da952dF187d67b2c9cd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9f93DbbC5acE2E0Fac0647EE55497F9E994D2450":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x791F3bbB14a6cd83d36835cE90A1b4B69e7fbbeF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe869E83bC68b9b5Cd72a1c62dAac6acBb4965466":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3267c7cA67667ceB4A1fD1Ea89275DB5aC8b607c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2010Da1E3801d98110a04bFefA1c7720d6a572D5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x60aA466Be00Acc37DC5e3b89ff299331907Df045":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x101d015Cb6320a74b0ca35911C80c41e44cd29F2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe49CdB7f9821A47304b9BF98cD10Cd92cD282e3E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc3A6e9F874E048f0B88BB8e43c0F38bEd6905B71":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x71535AAe1B6C0c51Db317B54d5eEe72d1ab843c1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7e3aC6C1927418AB5B5B1FEEA75Fbef94b1cdE69":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD492aFF2A83d9B73EFBcC29C707a6756F6905e87":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x60Da45F8530042D06580F45a092D014B52aCdBBa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8d9A3B477a5d85f945973aeeBB438BB20620e074":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC8D86F5C950f4eC0B7db7A7238369784D87D68A7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x638aF69053892CDD7Ad295fC2482d1a11Fe5a9B7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x744d6b531570951a8A51622746C796a3Ad86B4a5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBaa9B493bCCBe1A900b39870980f41356f85822a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd61FB49B764194FB30d3D360774692dFbd6263f2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7e53187f378E1C04Ac3f349b44c74D71De310021":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x51C2A5Fbb0F4362466B0b2c1FC0A7ee2686D9176":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa25b152FfCbf927AD1eA80269889370326f9186F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9c5E42D8915E20472079ec483555FEcB3EFFFE84":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB75500721D659c44f07dF306D168f9De01968DC3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x03feF62a00c67520e1f77F07e34a8e64787Ea2a2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x27EF5f1Fa276E8394681A260F77208ccD0305013":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc063ff5c81c5B932E6dfb7ee9841456266C5b585":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc821cd39EA427d701e5A76C75B8626392086EC18":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd7ecc768313dc3baad238600a466d7bf08b028fe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa01f4973d8193ca2534ec8467c4eE308b0C5cF80":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7F310c961b2C695A418DE85Ee5B18DA2D96493Eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB5a3E180CB7436EfE43eA2e248Be8acC489d0eD5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x34A640A430a5DC2bD5187dB98bE819985248006d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xacAD95570031453BE812b88Da058A074C26E3535":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x209f9c887d04A06F61710e4A2B1f4dc3ab1546F3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9AFfe964574192aAb6DA32aceC63D79b3671bE4b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfB93E3927dE373ec9915FeB89b176D428808DFD7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x026bc5E126E133Ab2d662BAe650f6ABFA2aD5d6e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdc906edB65fc858F80FAA6Bb38d3f6Cf0E54D866":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5f36b1Ac2b16FE18C784dc113DEb789c0188166B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38ED9BC1a1E17662CafBeBd359F6E9122faB7314":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA893d78D5d4014B6Eb2eCDef97c225890264A5f9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2EE3300306c156948947a9c63959e89d9d60824F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8aa4243Ef5fE3D6ebe375fA6D47A710266Cb0CaF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfa4937670686c09f180c71a9b93e2ffcc3a79f47":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x508C27BC844990f219579470EA6B7C9c44E226Cc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8D8eCA22730D06b125eDcEe0EBcd251693659faE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC850CBEA5bFCe6CF15136d9920261F054A53d1E2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA770d4A353293385C0eDB30ad9519a1997b471a3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1fAe7DAb3A21DBE307d4EF3bD047325B5B63b17E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38ca8396e04e23299635ea06fbb657e2a4e693c4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x01BB2320fAea7f514B790A04812461112687bB19":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFc193599Fa211539D85B3925D62FF351885F112b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1449507bAB28b616149b79078C0380875ab28E16":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2090F48E26a758d52ad48A449daA5c20C8CdB30d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8d345c1DCF02495A1E7089a7Bc61C77fe2326027":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x71D7138C14C34Cd9d6e600D3Eb2d615B805C7761":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x837D1b20e21119Fe641DBF369F775825B51b2db4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4ec7cdf61405758f5ced5e454c0b4b0f4f043df0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3Fc809baC271a2f6a7C61AF3F3ADD424fbc0935c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcb9cadd85c510ff5a4fb2d2bb6fb4b74ff3aee34":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x91aA505769BceA5DCa318e2a2F3A1095A804e865":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x35fF7C02E7B58DA5F4323CFCbcBe8969E4C638A5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD749a274d85040ea4eCBdb670505a7679070Cf4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1ba529Bad0303e368cb58673E4D1aE8738D6449e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA0efD27acC781549D5b78e89E561AA0903932d56":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC289403317518a547e3920f6407CaD72B600f340":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb6741c05958bb9F8436927309E92F286E636Ee37":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7059dF82d93aEa2a02B9b137a028749526be369f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8D915AE1e48A237e97d34C1853320F1869C532D7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe345b57A27145685D4945872dB357CB453a238E6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa21FeD132341f41c7f96Cd9A5CDb3965bc0b74B0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1E2AdFb70b077318ACbc94A5a2C0421D9f0775cb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x45E2FEB81BD6630c3b136E489674C8B61170eb22":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x645147d317B5058F8442C77b0F1b42A3B03d0679":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63e508F44A87051CF7A0848330Ba2760CCF375B0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x78a7b3846f6b0407c051aef02e365a76cef586e0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1546B970afC85bb7448B2c50504be0C4640408dd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x08b7Ab9bbC3a07cF7f75b4aCEC5b536b7e040Cfc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x243314f50bF9A5172Fe44F580B72cd0895280691":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC69e8275592F10a7ebeF418F8743A12e645953F0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1332f3755F48A9C7f618681ae3BDBE618Ddf65D9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA69C61c28932BfD6181A37F4203A0919614F2761":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa8226dc65d9EB3000895E47fDB40A42b06dAD43B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf89fBeb1D803A2e2Cf38e32a0E7187890Cb67A56":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6eAa0dc601a4C273856fDFCC51E4e4A6E6c44559":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x492261c62C8F0e1783b6F3e60D5C03e2e532F167":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x126ED947de7b84ab29526D35CEF99C9b72B285A5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd7F6bad6Fc716b889F84a94fEE046188f08988ce":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x766Ba6581319429143098c40290fC1595776b8D3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa2edc47F1659dad8db3027eAEc3D23273E473D3C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf66128575d8efff079205bda33a1cddc7e82c72a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2f108Bbd7E05cb6a360EFf8ff77B4e9D098a51Ef":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x26A89D6a6A9470ac84734658A795e66662DD4EBD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA3Bce8C3c75b290E420130369df037C477d34a45":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb8dC5739b7024ed22E00447706ec5F3DfFc5aa0F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x969a3454ec5DC48D11802bEb77218A7A8744a9dF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x15c8857A10c732b5F8bbe8AE351Be8704a81CCd6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4Ca148bf94F6DFe9a36534ffd9D78dFE58B9de57":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57A901Ca3688d505234241d2D6F5a02Ab41c0762":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6c7EA81Bb46ec44720AF326a25dF1DDE93BC4B87":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1B1d11143c69d7c361582569b46fABCD78D8AD08":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcf7fb3adc0a9a4e6f7caff2ca8c365325fd19277":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE02bBf8E1507427e07D9F8063a8FFc7d37309C89":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDcd4FE2842612743d45a3A66169E9DBA8038e60D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE457134dB87f4246865882a7E3835AA84C4b8D6e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x39ceE75B11596E64f8516EEaf3E17c170442b6f5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9dC9597A419Bb3D7c727f57a53a45c39937ee61F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7732dC4f380fdfE7041d799A605473578A5De58b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd1b1a4BEe37b861fafabD05E5F306A862b94D037":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6b2d94177E937E090307DCe76C4e294aE889779c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbCC44956d70536bed17C146a4D9E66261BB701DD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0c3467E55ea5367f383aeBeda2A68D886A5cb944":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f677CeF6550Aa3972dfC47524d913b4e78D6a29":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFD7bD29E1050932829c1FC080eA42D7394C42847":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5848a1eB8a10AE88525E97559Ca007618195ad89":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x133D93566f9699B3Af46fE150daA8a67a9563ED6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFd6422196C78E4f05106423B6dB46c7DF6c63cA7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1D3B7C3c9245aE2840c96F0E49705E7C155E36a7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x28bB020fD8d73d39B3e2C1c49990102A2EeF3eDc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7dbe4E37Fc0147A29E399d25c55f9cE817dFbff8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x14a967d549B6cA6722d5591Ae118f69Fe2E8920C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6c1FB03612E943d2b7cB0bbde0FB3470a0e633f2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x52f300747aFE206Ad2fC35863849c4A0594635B6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3a8Efb3a57EA4fFb5b3B2a1Fb1D16C804Ad235fF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6BC3e7B5010f588cfe347473c610b9a5d363e140":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa09e4F96e5ABC839ea82946f47e79AF93759D3Fb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6A5252ECeA88672002fEE4D6141e8d0e2C2952e5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa294A99A55F03b2b0A42B4388eaF30FE4C2893f8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x03B721075A42103bD560aEB745Bec088c540124e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFB31b6746478B80402eB055f3F55Fea6df204610":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0900404261A24027C849de1a268BDEfA8407A9a3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0D8fFd05c3B56604ef791AfdEbE4fC45f7AD69a0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x23cd04A4C2deA3CF49BAF61c04AFCB4a23acC573":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x41f31bC9357f34e51115E232Cfb1Be525AC60B82":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x14652DB5C36325b8FCA22cf1325a8eAf121CAB9C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB0A9d798f7c8028B0e467b913a02b547D0528C4A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x022d5912C50F0b2bb08C52Bf403BAA51bDb63fce":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0bCc303a9170a830F28a57Af7C2757c1FD1714aE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x276777C67D20b25172f683D0Cd56Fd46E040E885":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf42FD5F1f398c8EB827d65BcF67007E89b992008":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0eC8A702B3012e19B1655A77724eF8981178B259":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3AB1c7848B48a2B900e16D03a7B91D0e675Fe38a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1906Bd0244b749381e2974192fc581Fe0DA4D363":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7128fa11515ac9985f449f02f4358c9018cd8cac":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x98838021D6dFd264b0FE6b6c7b3cE23385A8cFD5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcD47ba0aDDCb12081a7Cf0cD6962e99e8ABC3FCC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa8C7864111e1e29ea89140900aB0b997be47f1bf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFa9237190Dea4a58b5E39f88cDEe901b89ad6662":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD80775766186eF44c73422fDF97D92701C27f70E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7dEFcCdc77213AD10222866D9F2eeBd9a5B8Be70":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x51F1e782FB7eDeA34389EA47516ca7c31E9C073C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x913F2E804035200E7dDF33C2AEA922d6D5B65021":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x481797f295d086dd536e22d36f34e8116f8f0985":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x38913De54C1dbe16E4079bb8A2a3E0973BC63D0a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5e46A8ecd4f4f0737ad7b7D243E767861885ed06":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD85782De3a7bFF8d30B8f7B7ae4fEB6Fbf0600BD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x075873d2F1342828d86E47c71B261e6a33044ebE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE11C94a5F28222001bE49D01f5Bdaedf9B9B0620":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6bD616DD6c8145e2151c378dd443AE15222CE833":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa07ae4f9e2D41715416ae074c7A6fe857693de4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x704332b1c8051D112E5Bbc178D2bd2414842c240":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x183034EdA5dA3CC088C7326114B09A2A5e57e044":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3cdc6F91d41F1738e8E1cbD2A06F64dc6Da5b0c0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3f312DBf7d8b5A86CCF37024eF69D79661e4fA89":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x80cB01Fe8D4E5aCF333C2D3dbe0A42357a391A91":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x12c6DE027b16D59dD449cD9078E5f09E9a77A73C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe7661Cd7988C3a3f7B417ae10cBB7afF525ad921":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75Fe3943a6C8866e1C41e1F35c74A9fB7a77b835":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2124ed5982e1d3384C4800ff57B9f883b2e2F47C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFCba0693FC16DCb2a4E8FA7eD3DA31f5296993E4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x90077550db8D23f3825634C3497AD3a594013137":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa1E223A5eD88e272E7B652AE898701cea20993d7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2Fe95bA46D36e6Bbc8d3bbC6BF3F18c85C91f3aF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe9c2F269ac049c6D2C3f893EB5465F8B33E561FC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDc5b17F7e80Ba5f2C06E9d04bd202d394165E093":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6A5fcA2bC2F971889Cd51FEe0bBC1014D03DCcD4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd892f1cac31704c0f4fe586d142238e933945be5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFEeDfe9c2aCb949Ef80b0fa714E282D66Bd2f955":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x00DA72BA500D6e7c5DBF6EF79fF90b741d6d053c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEFFDb9141B8fAFBe36235aBbC903c6D1b924BBCe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x79e96fA806B9b688d366be81Fa618dA49c6c5685":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf48F679B60A4F690613D9695a67933e6014f9b43":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3CEFb79aF1F4126DC679D52f5f7458A25CE74B42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1436267A9814316C6ca9212D38dB060bc365AcCD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBd48dd506E9179a757AE229d04745476ce6C2aad":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x632F93865823557466340E49BC120e3B668A2C2e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4E003EB4382d35e1fd245E7793AdAe3fE9AEb1aC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1681CCE61B0338232B80AEa861413A3D26880DA6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFae01460fD7Ad6b9d6a8ae73c14aFb2409B48B92":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF9cDE0Edd06f05A7f0b412dB3B4c48c87160b5F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6D0036a91f8447F7d28B6d3AF8a8258688a93896":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf78177359b40AD2733432e593f6e0F730c6E5165":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEeC0D28Ec4eb457033DBb3B1Dc0F27b45F1e20a4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6C59816c3Ba468759381B0bAE2FcbE3A27027488":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5305095cf75cdd312c202e27f6aaf3ca7da79a5e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x94625be060d1e09698c616a5808efb083c769166":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7fc361edA50DBB5Bb03aCf37DC62A7A43cad2EeD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF5EDFCDE8B5e43EcfE382Fd5855612b3bf611224":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x861051050074D31B0fc8682D0C383e6Ab01DF0eB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9ad2bca0d3316bdcb8ca5135671bc0290e24e6c9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA6A2AD1320Cec227f24f404fcCC120B71b41757d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68820E5cDbDBB1cB131151dBB203d4fef563Fa4D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf4d63bae0ac9c6fc57ecfb25a1e0077dba6aa091":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdE33e58F056FF0f23be3EF83Ab6E1e0bEC95506f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x658205D6D9d3bb93B4463dF7088dE4BEd1D3e88C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA38e40797fAA6EcbCFa4A64F14c7622d090e8a31":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDD2184C8954427474e04a0894b7d126c9da6e755":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0F8f7Afa8314dA4dEb6be2086601FcB084A30791":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAD6C9574a601fdAD18ecb0Ca7EA2Aa08222F4AE2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x09c0CB705477D94F0c25D9e535D58d75eE8895A8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc22c41E02952a88cAC1Ff34cd707360557e26713":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x304fD132F9CD88A53E432F79A04FA2573Ec4995e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA641475dA364ec7F6e964Ff6E2400cd14e13303f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1D005c2514f6507A4829e0bDb9F2957f0cdaDFD6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xba3a4398A4646dBaBabE2dd342138165914f4F33":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5709569405723E366656c7346A2Ad100D0cF03d9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb9C9BE1Ee54b1842bA20387aAfE867796FbFc365":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE9F120BbF6a096b3776FBBDa792F27565A2c4A3f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x01f96D72AAE9AF89C055B7588c590870836f65f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x86D0f719Da3e41dC34c41b395c0AC48ed781f1C3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4D640D6d2CaE44C3192a70Dc1179aA890484cC7e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f8c7def38b418dfc255f08f390476285d578b05":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x74726c43FafD8f9C3d50A9F63820bfB8860F3481":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x078Ccaf9d0B60A5f4ff6FB3BFdF54f0eAB9c7AD2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x07E8617796E30Ef3Fb0E45B59446E28fc7E4FBEC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x19E45bDfe8f01cD24f62381Dbe41e8f9fff58C1F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd9adD884288d623d14dDFec402E4493BAc9f4F15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x394333707d70Af2Ae14F6B422256b4D74a948b4a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x69eb356c440C88a37931afFcdD2cf316fE30a79E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf010031498dF4886a99ef659f830693C839E7198":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x965fb931ce14D8210053fF90f39d00F443FCa7E8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x798e9dBf975BcFe74Be0fA3f9f3Ed24D208F74f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEDb78aB669Da097dE99D82df95d187Eca20F7E47":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf1f3050671ad54Bc0201BbDA76A2a7880A64a1E0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC73a01E10848881F3c4FbBcbd3252151204cf3FB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC15e7Bf5b20e19e50Ca097862211dAfACae196b3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6a2829E0E388a438a0994c02ebca077bf1aB6303":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDf8BeaAbFed67Fb3FbD3d9Fff14E2e176AE10e17":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57e98f563309996b3648ed398c761aBd6093fBaD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x258214591AC4572399FBbae9f807E159e69B1Ec5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9740D5Cf593Aabfca5598f746C072D73F5408A30":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x34fBC236b6a76B19eBBE138cB84C6C63C3A85a23":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9968eFe1424D802e1f79FD8aF8dA67b0f08C814d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33Bd7e2d0fBA88940FAC57091d09ba8E9982960E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xde2c345fd3a921222af6c3837728c0e628ce43ef":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x473E2F6E83924E955926D287384d5879EaA3eC12":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDb89f642E287175B6139372899178624719871Ea":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAE6e4C7A07F2a2b7690e101a9B6BbF86f856D970":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x10AEe62e812103d361380dD94246E0Ef3a6D8FfE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8312D523e565B418810dEeE43b28C5BF89Be0e1A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x35856dbE75CfEDc4A14AA88efe1f90d87706E760":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81aFcF6Dd79897cBa488471eCEc2f41BF3f7CA9B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x479322AE62348eB17BA1F2aD0BB52852768d883A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7650376aD17592801bb2CC73BC08F4e777DEa7F5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x56A3887c5326321A39FE5c66b72215d8f5B04c9A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x79F6c043669ad90a79Bb2CcA3B890EF3A54E5128":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFe57DC4B1291384a56e5d90fDc1340b7036f3767":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x23Ed05AaD698cD4bE7c9c5F2C6F8c04ed1827793":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4288E54710A478D269E51cf72689fA3d42f4cA0D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD0B0b919Cc9FcDCD0B2DcDA7ED844584FdC00355":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0adD13cDe4C61734f46E245b1B5Fe3AfE9b6bC29":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68e1176f872417A9b8081C516F1b1421e9bB36aF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf14F92FEe5452c297B84a2971bfBf995440e4061":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6e536E5Dd61DB8627388c0721e8d5F823fAb2D1A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x93C1FDF5b0d5bE85099A80beabADE1328783F2C0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6ee569Bdee53AD43DfBc9417FDbE932DbDf524Ca":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xec5021815178d72609e6Da42b6B8Fd457AB4699c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA8213ad427CC7C16cf6248e0653553bC3008A191":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfffaf54a65eb198d704ea8C0B48eeE29679120F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbf832B66AE1056105A48A310143dc49dEf034061":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x938c708De2bbC63A4e72Df7b4d2Ce1da645f73bA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6522E32b435c79a9eacFFe738bc711E094a52725":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf4cF8a63b89A456e576a45e6c1419307A520f8FC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8c0AA6B70CbBC5550D0a9948eC50c8d973F8E802":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5576e77b664FC8f064a23402050AdF088ade56b4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9d1f1BB15b4440968B51ecd7Ff99582c59Ae56B6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x113d21e5E2B35Ba08D0A5c826ea6850eaAdC28ad":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x96d94f4549A03411DcD60BBEDCa7A170EAC644D8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD0AF4dA42b7D4F0b92c386fb44b4Da451A2C22F4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd2A3E6323DC5A05F07420FfA0282b1461B660a55":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAc0eD2862eff16F3FBbd083f2b44e2CD4ff1D381":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x699fec4921001c4Aab3b6810019BDbe87C481F7d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3e448909Fc3f9d1044DBEF478482A5d1d064EFE0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc00A397e5328527734D5F44638C401658f939819":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xac2251f7c1c18B91Da2Ed7F186d2A5C9E1Fc3d22":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCa9ba74eE20917211ef646AC51ACcc287F27538b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6Dd8AFD0338510eEf17DB0Fb4F76B0CFAb9002D3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc6c91E8fA5225227491255415bcb61d6f2D18C2d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xACCb019890BF879d19f5aAB1db068057e4CEA0F4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF24b42D4d75E7afAd9167BDBed1B6342CCD54494":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x12845Ac3Ee7c93b355f4fa95fc77d8A0FFbB3602":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbd313d514ECd15a0224da4dE050C79E2CD8382aB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc8f64d227c715aE078D642C0e3a15D44FE7a48B1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42Fe01565e60D0687Ab793dE8caFc1e8a39816A8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa0d6e23c10C2C4331264c59e01A5483a22b1d543":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x13C4A327De6F7E5aa01bF49141Cc982Ab1f87316":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc6B0F7e747C23f65E1f99617B379fe69b56Cee32":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x99093FDAbdfD53Ba64B710801433795cF1216dc6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe175c44341736349fcB4c1498eB27d77b96d7Bb3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEEf114D114f1947BA4a2979159818E4171E91D14":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81477d5014adb4B4a57029c848B3df4a797Ab849":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x58502052C920EE837c3Ca71Ccd7cf8cB0457CA9F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x07a1f6fc89223c5ebD4e4ddaE89Ac97629856A0f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeE432D08d766a8DFe198c29a9b68b7Df422c3a0A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x47C5700674C7d11E4213D5d8caBeaFA849469995":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9f2678Bb8EcD50B65714816b4Dcd5fA24D67F978":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAbe6D5D0F96E2d407318bd2563566Ff4F17cfC76":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3c2078d07196837e3E15Ad61f1Bd12B84ddEa47B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD3E1127272C69A8A743a98F4175abA549c2721bD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x05388b4a5f5D176f01157Cf93DB3991ce3EBD077":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x32cC3793f3103f72fDC40f04F0C03C019eD46638":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x554eE99540949C14cb9Fa64Cf00A09A8047fa747":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5b113cEEd63a4D92820FD7eCf6fCe119cEC75AaD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4Ef5Ca1A8724B0b01D1D729D8AcC99EDeD068c37":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4c0264Af1c7502581ecB8aa261E1a9c0C7CCA397":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x320Eb9c685d069F100Acd17B64d90b963C2b7EE8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65a7C3Cb6d1C3cEf361063C57936d9d4c9D7bCAB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcc690047a38334d72B7fac68AfA3D6aA62252D29":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xade53346A42BfFfd0b4546dE3F83b15f24E6ff7d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x85312D6a50928F3ffC7a192444601E6E04A428a2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe36DA3923724ccaBBe9487E4133ba43d8509f1fE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65ceD347A006B95C8FA74Dea8DE4F688A264f9B0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0fef584af9fb31411671f721a77b9d2a1d1c3e23":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x325eBc81dEc49b15b22459D98834C051C5b3E09D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x54881c1b56e0E7a62a3f0752180036976435b891":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF602c90E89d5fE4c7D2AEF3eC84e2dF880Bf2075":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDDa40f30197C903A43525154Be3f1a0aFf5A1D44":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfefB81Fb50FbDf623B1523BE3bC4E52C7d6d5353":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7ACEe696E2165e33c578d8956cbCf575e5d631d1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x18854d2816c141294AA20A5317CA58EB69AF5FC7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x04Ddb8ed83C1cbd593619F55579B11CE8B29e3A1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6F74f38cD701d3f6E8f6baCFE29DC65Ce7D42d34":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x27F8602E403B6EA18f8711A7858fa4a94ef3269b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2DadD6dF80Ff7008CEDde37aFFeC883655480Ff9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x00c512d8efc7bcb786f97a0f83b2087eeded25a8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa6d0e6ea70a666f8fc525b0dcf2e09c83d27a09d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x87C3953E534f24D30e5A1361ce404063Af43983E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0000000901C92bb92C98DF004bE56D37D1604C93":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x12E307075F20Baf6B67F73C9017251818F7e5d81":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0A5418B84b6Fb083c6a57C2a304C9fddc592090C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8AF74a55936ED855a676cb93e839Bc4A1d307639":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4eD7A3Cdb17c9a3363b5c6F5AAF981EE2DfF43f9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3A45468c2B85A969Ab3999f9b286da9bab226709":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xba04F91807dCB266d0976F70c6685B63A2E862d7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x41cA142B14757529A5c8988252f1B4Ea6b47F7Cb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x765CAF0DeaB530c043eFbc494bE66Ed1c238d324":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3151d8b3b34aA22287d76532096eb71CD9E50A4a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0168459886Bd2Aa322c18ED0b209887095aFcACb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB87ef7588e58728885E4Be915c0749E33f1D6A67":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57356852964f83aF7b59cA1cE9fA0EE8ec0eDcf3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2ECA89d84843266d271c98A1e11D95b1CF002765":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43374601caF79d672af8eF27e22C378Cb37048bf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa28e586e24e6d78d05e822188DDC118Ac2fB034b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0CE3841FFf2c2489d3231fb74269cB90FDD86883":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd5817F09469D9F9d9FfC54592959238576Ca9bb4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x58fa1983f7E45dda5b681f5e860B008e796f224b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcd4749e62Dea7EbaC7e8877b6B4869A4a6748143":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0d2217979Df6C832d756830869B33D5014e596A6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe3629035803867E65f2503506c948D3ee31F3Caa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x200CCf3eb57f40D5F99FC53135187999F780c20E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdfc638BAf130f8Cde8944d36F36115c995D5618c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5aa184B1D8bc72022B36bd724bB723E62148ff8C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf55893F0ae16F8867F7a9c7Ae47c12422FD59943":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb4683AeB715092fc0442532b4De476EC56ea1592":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0206Bc8FC7C1e8635D14F73c0fdb035493F2FD84":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5fAf276f6E3e0b10213f8A04BD6C872f8752949B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x79EbBEd5297daD97020BDEeed99b317C840f9d22":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x69ce31018C82CA3D2d9E4C5a6D83161B4320f9e9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4D85B56C459fe2AAe459B1BB0C36b33592998d0b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9AEba50C5d0727D5bEE2D71B10ac98E898d416DF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x15A3F14bbd9a1D2f6472f0C6081C730F8AfAb3a7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f7B1afeb239552Dc1B0DD13a9eBC8d9ec6E079E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x166056AE7450135b9AAd3b45CC6b6625F78BE1a8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaD6ED7545a32ae8B005687Bf7db1E882b53bf8a2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0988D84619708DCe4a9298939e5449d528Dc800B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1F1163c6c0a85E91fE60f8DD5d1a7007DdBf95c9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDD6f58573929d44b95248ebe038cB8cbf48a48d2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x608b10b5CB5154132564e1d415B116dEF66A3960":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdF4f0Ad809b9476FB90475F728aF100dEF5E9678":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f46E479555d93049aB0FaFcbDD8C47bbF67901B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCbd20e9A39441166A1e3f45971df14c3c2d87479":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x206A428716a6D27890210306AA2af9cb805C7B78":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x386eEA5d7e85f19Ee162D7C15B385e896038756a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x942A79202a94222819466594D6a0854cfEa082Cb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3B2A91617Bf4f4f6468ad3f225d57f4A967Ba38b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x16f86449f135CBD16eD5119bdb66138E42B50B2b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5Aec24AcA614bf525D26087AE41ee3f9c7B0eBEe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x70aD81d18F2838b8650D88740d8E337032c9BaAC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB68Dabf88e221fb4469928bA1ea6Dd312a342Aaa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4A669f017c74b1F6890846FCCCA2F380356BE107":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6E9ad4e3145d2be858152d9608FE008f8D1EBc5D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0ab9e31f358fca6a43f8392ff65af2592885b749":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x34224315D978b48686242cEE16E4fcCD3aDdf952":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb987b8c5Dad75e631030295fA23e697Cf4486315":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2BAA98f2bD4F5CFCaE3f3a2e2eCfa3B1Ae9d04F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4D04f4DF74438b21B3e7298A13aA9c316b47C632":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC561C9b7035732B4EbDbAe6aC43D6a293aB53896":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7267db34b6072080923F92E626C2Fc5DA91fF25b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFe3C6993920Ac33bA28378A9f92e18De52795117":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdd1c90a381b759fcfc4e25c7eb28dae80a01a8f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x795a76D8180d05B7465351a83Ee5AC3bcEa7f836":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9DdDC6321304caFFD40a2F848123763532401DeB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x97DfaF239e902071285a72Aae5F1812Fd49a491f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3f5d5c850ce1fE1Da479B4DE9de336CF3C68D2eE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8Bcf10D5bD8a0FF835221dD2a9C794B435c52813":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x93a4a366dE322dCFC68b629D6086C6b19Be4aECe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1F507bE0F25fdED2b4ACf27C5b3467E61477C39b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD3a58489C18b759BE1c282Ef8885F70cebc2f1F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC04509cdc603589e79612576eDeAe16c1f00D2c6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68b53Aa18D1b8437B7CD9524040C776E2261e06d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5a8207adF52729c8BBbd42BB0E40155AdEBdD101":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfb09d6570a9c1de1b22367e46932685e14077dca":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x195dC9FF8AfBD22E176B6705e270586B6D641Fb2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf49B0c716c788d4F91e367136c814A7BA6A8b7B6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfdd7C88dB10A4e099337A09B1651A7fE5124D88f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6D62F1d6b0D829F5bCF177Ef5C36EE4b53629CC0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x01e45E43a093453Ca6Dc018543063a71Ee1f7Ba0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x56a7a158A7C0fD45A2f8071BCEec69F3b1c912AC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8f9fca3144B194Aad5572bC483d33726282c8a31":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcac63fdd00e0ffc5046ecb80197cf6c51e356737":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb70524bE392B9f4681eFfe0cde9FdA3153DbC886":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7a781f490927ca1c92affdf15f580a9de317ee99":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb52ce4240900D3a1A4a6E1286E90272d292dE4F8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5Dfe145B69BA905Bd774f2e51cc0618F1d56EBe6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3C50849d873CF92F04F0EE7E624B384Ca4Ad586F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2973787DBDF4f3E851Ab420785FB6bf68a84fC4e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaD99F536266E2aeAC263ffD9556d02fBb37558ED":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x000000000000000000000000000000000000dEaD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA3C1831D7A56a736a0300B614a78206A4E2C4BAf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x00001ef108843aB7c937974c54c42360da8F9000":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81aDFA0309A1629f68dB6A6cfF37a1fE68FFdd2a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd636cC1dE0163a9de320FA2Be4465Bb4E25A9694":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42598d735a4Bf52878f18F8a299F31128272Bc3F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0571467fe10285430AAc57627F0Bd1223a909865":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCd0ba640AF5bc02bDCFEda5dB547263A2AD07232":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD7985653E99D5A7218FDfF738eB420523a205F21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe26E2466e070BD45C6E159010dBE4445FBba46d0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x99ef210F7d6e92150b2Fd2a114d2f013001E9022":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9D3F2735904881EA4f1E1097A7Ce07e503FaB0d5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x526c17b64d59fbDFC50FA0fA306683Cb5Aa8cE07":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x042b863B999827ca68311243210FbBf22210dD9A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdFB6623Fe1eF1974EAD1D775bcaFD45A5CcCfaA8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8aBc16e919C61D5863b34F920dfb4Dc4a97bF036":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0c4061DAC92AE19563dEf9F8728Eb26af471FD22":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x09Bb1B41BD79EfD19050Dd62AaEFCBd4a96d895b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5423D3177A9F07BfC1de140190D080801c68199a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6127cb39Ac8e6066C469aCE0edcC3506feaAbF94":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7DA220633dFaA2dD4eF3e3B222e836a2E23A496b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD6dbFCE2d957103Fc8E0f66c7d24AC2B481E913A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF38DF4E0C9029Abd0644B9F01C0A5797656D3e7e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9fcdc049601f9dff3bc74b783af0f26e15f5c6f4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF28dCe94A86f64606bb80B38182C2962157BB2Ca":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbE782eC98CE7135A056E31300a9831fA35D52865":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4Fa6B043DC07ac6081F0fFD1D62E937f5E4D63cF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb4FEa52fb488Ab8Ef349e6f8f7d3159075B14235":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6E4D8279F71F417A80F7A951DFa2bBDd2A7A3f2a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5BBB655ce71A0655Ccf1762A6482fc54A8465b5a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x22f53AB05e84AF7D0Fb3faF5e2d58eC764B18110":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE2D7C679AeDc71DCFD65Eb381107f8beb0F65666":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1D2026Dc4ce6a25a596542829fED4b1489aa3D2D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6946A82C4A2Eee8C3F3C9f9ca5e4fD5c6e415f6b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x61d2Bb94d0151457102Fc32Bc08D0F1B146D54Ea":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdA4B92fC2A73Cf8f65fe043D3A3Cf80BF06acaEF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x07a30C79D8E9E75417ee78411c34eD5F083FC5c0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2A15764B19edA4F2ef2d7F31f6A3fE59A04E29C0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x06D3da385a3802DE81cbF61d852b05c23FDf245B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf84F39554247723C757066b8fd7789462aC25894":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x74Fb1010db5F44021904803A7793A204ca11775d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd30AB27542DA631fD4bEdC9FaeF5B223A131cEda":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x285bE47bEE9f9e4d9A16d9707c868EED10667020":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3792c198ED0c3C0Fb662f8d4d9Ca27544268781a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4b14727117215d7E347728fA426D384A5971addf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x42c6Be1400578B238aCd8946FE9682E650DfdE8D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd7f818aea7A6E26F9c1ca96ebE980D39159DA069":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf8D5230E47AF11De499a4F8cF4528dE5f3f692CC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF2D54033190bbc5a322cb93c7B36c65670D63264":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x05A55847945b8eBa38419d8fAa56431566C79f71":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3944a52E0F316df45B920CBD3D40aa8eb5E3D76":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75eb35c20180b5d2f661dCD03Ec7ca70F30867D3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x45358BFC9a1F52b6623fD299a214CDd88244cAb8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf6C24783A22bb9A39F6317c24F9208Af9f539937":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x73105075FbADe3896270A594fB5d963F5683C935":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF264951C9992BD57f6c0d9b06308AB92a21fAf4e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1254D21A56CDaB81E1a123f582bb7A47d1be5EDF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7B6010da8365BDFd89Cdb0983FB0E0f07eA28442":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1Db5a7Ab4ef7bAD6b0153d334f69ACA563Cd0bD6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1a0191c323D4c6630a180690F22793E914209097":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x48002B13dc82762372e124605c2E1Af7b43c3c08":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfbbD6e7d90C19b602B602731c9029119d89490FC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6BAbCcf93b1B8D511d9029D7aCA71102f35F30ec":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2A8640383B34da0d2c8C9e5F49376B6d844c95f6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x41aF90cD357748928c5e85e6a9bab4d4872DFF54":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2805847D172e21fCD8519c7ba7927EB2111C920C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x061Be9A1e21C24D5e217310E479DbDBdD811E824":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcc6E17ed3E8dE4752329FC8228eD22Bb4a092533":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x45376F3927b74d4625d5c1CE3fFf609dcbf8245a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb2a86E3051bB321910CF4eE10251C22562d58B5d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x51a418f72115B30d092F2A2FA271B74cF21c528B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9FbfA9EBC8930158df2778948403ECCfA3E43206":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8D979a82ED53b603d5BEde17844Bc86f3813B2c7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x94181fCf980FbEC537f2133e596b3Cab1360f847":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x78ce74e941273907164D449C7511ba7783022144":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x829A31859894aD2791F58ef165a698a59F1845Ef":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE9E3b7570b65d4e4b9946D0CEa4653aF0D0708BC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd9adb2916a9c726d169c3740506f87069f4fcc7e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1B47235150bCCcD6B51F60F175174dD2d579Bc13":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5d981215Ea25503Ecd34f6EDa4b1Aa4Bb6946E3B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFfDe865353Cb473544b8f98965A9D1f284ddA3b5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4c2c95ec9e13316a23237B0c21aA92A32a9ebFf4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD18B8d61c160e779ceFEb61d47600061007a6130":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD8C2275eb9Ca4E6FCc2b52582faEE40C8743048B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x57400664F4543214711d9fcB5a9f4639DD954EE5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3f2bb48E3365a558c8C3F45760504d6ff3B4B63":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x16EC5EE1cC431cA95de00b6C88d21D0B4d3Fc2a6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6934c6dD16a5F629fd807f3B22374E4cd5D41387":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9A90b8F8Ab571Ba5815Cac0B65a3D34127135D2D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd905effc7204CC9e7992FAa1b68041bB548ECf0d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x58aA18A6294b3Ad4592d8A3336aB78D8D5424227":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x788dc97cd03d04f8D1634FC4A82e6E3F140CB4e7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA75834A3c8cEAc5863923091bfD07167b246FA2D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd034055741d9627FcEB231f4E30cf03773949c2F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2D617029e2413887DB9bB4702fdd1c39De570aFb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x477bE27B2085D890DF293AA23BCf010363cFB2F2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x79Fe7B208422b97a83ABF30149070bFD7B096160":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xDc232401fF59C1457123A1b59E2DA06C3B0C6102":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x827E301419d2eE967fC62C3223AbB7eE90651D79":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xabc42b6a90C2A5962C1Be78be7344A7D05848eE4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF5B4C93a02B7264F5bCF6443cDC70728cEd257c8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x280dEd1b7e430BeD0Cbb0Aace452Fd2ADEf2b581":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc1E5b72B1a017F7b837b016F64BbE4374162333D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x041635715c70ea53C35552Ee6d1fAF34b4c9E8fA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd99E28EF233B2B61020927E85Bf89d4bba7e07dF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5665785813011A5c37c10972f8d3D463441637C3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x689A416F33c4984403Cb52E4D200De4FC1810Bd6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x55eA3d952cF89DA45272d9EB9BB45B46790c55aE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7417E3bCdE8726908895152A8F3925a756b1894D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcA4f70E0f3C22f70EFd9De62F96DF357CCCc4Ef6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2a231e4308C07cc69D5C4467fbE6a18b2Fa6Ef93":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd64780b6D3685d10eb0f32A4eC62170633b27AB7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEcB1E78A73DD83C3520af55d1B6BDE50626eFd67":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3F4117a7d074A20ed06a145a872F5B870f3C9847":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x72Fd4cdcA6d93897cCabeE904bc776b6660bb83b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9ffFEbf54cccd2DFE9531Edba4Cb413b2A6C1Be2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6f1a417e2dB2EC1183b9d91def83346ae8d842F4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7f9d2b26b90bF421a35A5B7150365598FCe153aA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x22C8D09305D827F1CDF696D1b9Ee309227938F95":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3e412B95f268f7f12c8EEB27EA1dA31C813075d2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x22347EE5359db71F2b8B5DAE1D15518EBe50Ff07":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2FB85b488CbFD871f3c84C42Ca3c8DC11c8Ab9fe":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4D04dd786C88D31e3d2d146A3c6320c23A3132D5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8fABCf470152e44E01750d50f3631F538b8C5d8a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0FacA1A5Cb35F7259B8F2380466be0A05DD4d3eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8750543C3c4D4cA1342e20DDfee80B2ef7Aa1a90":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x298016db488516E9FdB860E12424366f47E3Df2a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x62501959d7D549b5625E569342CB93299f572B69":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2DB6D8C600b3c55C770b0B821A975e22F88D0349":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2E380DBdc3bF0112A3d23b32ec56aBcA2Bbd47Ab":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAdebe12Fd6E08B5e7235ec07912f838db7AA3265":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0866f8D156DDdeC441a333117156A4fd23aFEE62":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5D62a226eEDdb698706bF0C54169c5FEE3F4713E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x818854b363b90791a9ebc29e2f9c7f1055ee5a4d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9cDdb9d39eb98DF24F381fA551a6D43410A34ED2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x91adb02D63c18F6575F59c68161B8a68c5E41C62":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29458f736833e336b4209B4514685f3Dd98FB4a6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD8aBcfeC16caE6E4beE297dAab7643B37e593AAb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFD1779090710934F2c381ECcA22B68075aaf3DfB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf0A067EAAE33F91F4ebb25e123334a1Ca8970f3F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7C888b5da98453668579a8A2E7B323f91E445f4c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1beB509874D823e6Bea7404B2F2793EC8659f63A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCcD3CA7841EAeb081d8CA9289B7E8A6D6ccCC3C4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9D6E610a671A3FBB6e302909617b3Ae2604692dD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x56EC2cebD7b7A163218A789cA0f2826012721eD6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63C964dc8fa9DEd3510af5fBe5Fe18baC844E69D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFE0a42CdcF65DF69e6f89998764FC509ff3b1dF9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAaD02d9Cc52aB8Ac6CC9d48F9a59dfe514aAA539":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd70b5947d42B3b3FD09c922633DcF299f47E0d2E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0d21acEB6A14f076dFBb3ceB997306C8d1bd77cA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0E91Fe225Dc45567e224E5cF413f618A1074b2B6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfdB58a3A3aBE546ED8f89d894A27f9B5DcF2f8AB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x060f648c33d7227d16c4f2b41bc95c5ffcc8e0cd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x167f2028e2410E0A5C51c62F63B8c1d4D26f4cE4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe21Ffc0C426FB963cc5c2af8e2166F31Ea35eD91":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeD5632E56c526F3bd1B47d5e88d0Fe5d53315AF8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3c4dd566C5F9B441e59cBE4dA0822B81B9500afD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdB3641140585AaabC22e26C72F6cBFaC4dF7eFe7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3EC360c21218887974984dAFfC30480D327f870d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x82767B4b962A2C8d0F60df6e4797D77aFb108904":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7711A9a7Da504edF800Fe80f7E52A3aA33DAD07a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x25eA6deA6CeB1Beb08453DEa701caed3bCe46484":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6708687b9F61f6515114440d59233dDb0fc2AF4B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbfC7235331682C98DFCd12a9319dfe02dB6CCD00":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x16F88BBccF3a483B19391278bdc9444F46f8828A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0bd6Cb52b48f084282174304A434EB44C995667A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa8E6aCea99357E010F3F88E3841ae1aa43D54e5a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x06AD2f93B61eB355e6e27D9eb8C67EF8eCcfA50E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbf35b80b9e771E8082Cb9740DD49FC5f26800d63":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE21D5E860E964fF9BFf3dA800ADFc2e6268ba410":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbb45051a5EDab022b6e39FfC7d3291c9aa267A4a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3592f06364FB1FFC68D320795dc57E742297ef7c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x40aa6b4479891C4bF2e5122ac90bfF31f4E8d324":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8281e0Aa17BdCA83611D038CE2CF0e4856Ba22f7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x92b39b14AA07C309317Ea0c1D5A76B2808Ef0ae4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd6347718074C3AE835a49ce31e293860b415813f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0a1d45542A6AaC01CceF66d2365b8fdD3532E4cB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5761774922b95084454c8720D647250bAD207EA2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xac552Ff53a21C170DD57DfA088d9899a07daD0e2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd2F1A5bBFCc1B4490ff5C3548bFbaFF1F74aF6A6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc42946F225dbc07797111B60738583D11DC54f2b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC90bDAFfa6bd488da7649744b6343e38b1f8a446":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB219f71958BeabaAfa343D78dc9b1F7AFbAddaC9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD7E17834F4AEF24F732DBB6F0D364AD5FDE9D516":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x30C80dd3e2De2e59316AD23eA960d3b013e93499":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe41748B199378b03978Bcca18Bd0401578201CD8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd880507D359af862A5f8F318c8e934Ab478CA818":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x212694d63a75124bbb898092d1F022f46FD0B6d3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd6109Dac18db4911B3642D9627E207cC8C6Ee6c1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5a4E4FbE8a951047bE0a7990DF46DD8Ee7a30B60":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEbECc0a1eB0A05f3cE7100f20Ec6b97cb93F0965":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x774D7A81C0D8331404eAe666b5822528b390B276":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc75dbdF1edF8301d5Ca89fE32F321eCec034C6a0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4aD330E8B16BCb8546f99239e1E4D95280C93226":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2e403B969a64BdD1CA18fE10BABA4546957bc31e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6b5b15d47ea518ca8daddf31f54662bb187de601":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5fA3A3872dd95f4Ca792059F9DeDe4a0C519f2F6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5C0042653AD001e74CbA934Dc38C7B9DdAb364AF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3bCCD29e913321fF41adBc8d128a12500b688241":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x003FF27Bc2a5dFaEe60D6e6450C516531aD8A153":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3dA56ae97f5606bE726f100891646d36c01fCb18":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe601Ce9b41a978eE16F437c9184FaCec9153Cb72":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfDC3492ab736B575d446d288E087aA69Be6c5b8b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x21a0B6Fd81ec697E326228DF279F9Add0D1B021A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x43b8b19B0064936EFe96ed635089743B5167DEB9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD38aAa4f17A3948edE996d3D8eA28b55B7C6eE7B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBaED8D4f349815568A9a36f45f6CC04eeC99D72E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1373867Db85bf48af9F3133Ab65097a1f561C069":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7Caf7DAC35eAc81d73272ebB30408D7fA6ee4dC2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB6D216c42324AD8e0119c5fEb495D2f174a03f04":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x26faC14186e4b247eAbD44c7bee15e4106303479":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x426aCF71Eb49ca11C3273379ee5c44885eD5Cc6D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x08f2E303CbAeED51376B8e948eD10ebFB8bdC1F2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf5ab4fD967A8D2513d5f5749905045d433aF6a90":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x03d835696c36443F32d98F059168D086E00e6270":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf8B41B4EB4D746696109b151F65CA1EA31d3A7B4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x71eC583a7442B97CFd30B398976b019f10683DBD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdb5720551425dEF9f5D766ACfFF33bEf88784d85":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2C0D8f4FdF2F5F98C3194B4EA5F5c1D67bcC4185":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x61CF430eEB4f75762C6f653291aC4463976b9aF7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeC8B371C2e20096af6e7B9d62e1EABC4a0852D98":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8E4d6f64ae10e74077F5DDa85371713C3aF3eC0d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1606c25f314165Dd5CC67919fBC149f3bd7BF9aC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x83443bc737af694cd26fd961bc13d5982292edac":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4a1332bE364B686AB1a1ADdC47287cFA58f51CE3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1100e400eaf3a587dd06880acd74cdb2bf52dcd0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCC991b0dA1C0eC2e7634B1e92Fe581614b86c7EA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x72DEeb5Ab757A53997b73086806d75299Cc7aDa7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x32882c68Ab8832044bbE9b0e9BeB738f60Ae4e2f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5aa084353AE452e07E890cA42Fb73Bf9B2D86D5F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9aD500F5595C9DDA818c3C061428E37b5c9af063":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x54fA8b5918B00f0e5024a2e5255AF61bd8bA7B95":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9787b0652B26A2916C561fa5256A90B04D088898":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7F0A650d08c5e7077C9075691ce66dF62e269F2B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77365aE372B9AF3B41b6BDa51cC87090aB19d1f7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4Bf15AB74F6A4CFA4CF02E1a84521523d897e4D9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x27019E69C37BD994A478fC858d9eddb5b6c72b5D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD575a54A345A43EfF67F90Cd5a54CFb4C79fa4F4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7f586889ccd5fb7bFbA7D40F2Cc64a96f444dd15":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6F4518B1512F7162BB798d4f5f9D879f101B6307":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8667603B91ffa9ff958893ac095A688FD80Dcf8a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0892eB3ABE97620056a6e13e3026711ECf5f33D6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaA73063743864e854135Ab81eAFcF29B9FC1e6ee":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x232E7d97d1A332cD9AebCea341cb2Fd6fD07f842":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB290Fd44A628A21FCCBf6347668D80dE4177dA42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD542363F17498c81aa07ae24140D7791640Eab0D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4Ae7421f4E2264CE3F38A998421a08AcFE766A3c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4148c36308021303CfbBbB46a47D7b34B2aCaEa3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb3EebC393516D23413E9d529694EbF68822a912C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3ae5381de8f6ca9e672ed55a3cd802286b45c9b4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x944DD180Cf568B55757CBBf3f14415E7f2be0d09":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x095768e52dC0E7702dd2784cfcDd919a04B6E4D0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x610C02e213496259DAeF68d8413CF13ce6306511":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x445FE772Fb15e70f7A400F32B6f5CC2E4bD30b84":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaDf094b2B6D2C6f4d8e60f714Be005A378b26D36":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2Df044d78017B06dFb41123bB4249174FB8728D4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x35eF5fFfdd91D6e3510Ff617B3B862c42bfA4371":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEC2DBbdAbcBe84E83108415A00c700756266fCF0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3BB649Ef4FBa1715e1B3FcF99D18A16b9Eea2E06":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaE86583bd7963433bcf2e59971fe2F6fB0cAFb6D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6dA31701A98fac38d0536E4889DD3149e4b961b8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2FE2D4362A95686093Cc24c58CAA7b239BD9fd2e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9be8e4E9D4A68bBdAa8DEcaE9f728Ed50599Be7c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6cd68e8f04490cd1a5a21cc97cc8bc15b47dc9eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xC08D2EF573ECEAE26E82A84B97A764CB1C39866B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3eC63E862D3421eBc8baFD5f467b29d9D8f3fcc0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5651aDBdcb766dCf855eCdcc47DCD89e4A281000":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAf750F69978B59a32b731BC88087A0E5A09dF8a6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x48b211039586619B04CfB3b040CDD12165e3a9cf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1f849e31d11cF3b9cA6125CD4Fd93E566f2A9E3f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8aEC5fcCa09c5c6310C13B6271fa1Fc405365F62":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3D18fC023a030d97D67Bfe5957d115083c8C4a49":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6767A7296ea3bDe8c01A1678E0ba3BeB2917cc80":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4b2161e13d3a8E3F4A13f9Fcbe31DA0C7a19998B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD141b54984321D36EE4B44bFC621191fCE95F8AB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFDE0c45cE2811Afe8A1eB05Ea8f2601AE3d67448":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x607f2b38E6d94bcEe160Fbba83EBB0Eb6D94d044":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3557E1f1062E233109fEa543931A59Aa922e8b5e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x30e02545ef15870C088e2cFCc8245056cf7fe4aC":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc75265Cc1928eC230D53914F3e9bC36845BaD820":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x736011B7d04d8a014EFdAe6a653E3405f3CDC720":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4a403ECc4e55DA801da79A6C5CB0B9fdAB87B296":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x805eb25d7c5e4d9446ac444f1f4eb85bcac2bc57":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb4361a60C18c992DC8eDdD27Addf8A8C29b18733":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc9961ACDF50a1cAb6D80241E0D7505B62054d788":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf947173d1D8D208252650eE8b66DA0e600266501":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x21cbff56FCcf44E5af5e1fCBa465b440800F87EF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3Be0cDbF9b1Cad6E6697fC153FbA56deA1bE4Ab7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4B0f861cA9455422fAfE7e7a6080F193B54AAa4c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7796a7f85F5C9E27B7ae6DC17711D49906D42a1b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x874F3C782cfDbD80f440abA5C63Ad69DEC41A605":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE5CeEE154AE2CCe4d37f0Ec24D3bc8cE5B0A78Be":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd3d4f998B66F0dbAfE5645D14f001e6852271Daa":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x13aef869b0187BA0d720C8E4de5A7D51D7B3423f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6D06a53578EffAC9c148a7D1669790bF83a6944B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x91A3054ba5A5DF8f1F6E67deEc46f99c9D693E4F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb94Be5cDf97401560507792E92c3A29102E5457F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB1BF8C88C258789a10144d1C476d47dcb2f41361":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x36a7CEd30611fEE2507F2678971867f4494980Ee":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb3215D514dE1a2380B7fA2d5E605D24193323eA5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x515873ec96A03F27EB801f4C3BAF4088f91B9bE5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcC1731bE4A6d2d6739CeA6C589aFdC54bf5495fE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa9fd776a50b60A1Cf2B872696A9866EceCbE1D3A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeb129015e51ee819E2A765B8dae3B76D13fAE3EE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x09c40F32890805a99392819c02Eb5860b71825C0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x29c813eCf79631f8C54e669dD74bccBaf577fA0A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa7B80231614C3985538535F0381a2A7ce2Bb9027":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA710c069237DDA9ffB25b5F7FAaE221274368c42":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf38B9784d7b2a6297b7aD7C7ff29A0Afc77F4EEd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8Cc6360E0Ebf3835616b56B970a7440F19066ce8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4e268ef3BB2B0eB025B42b7f1e93B9d42ea2Ebcd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xef252a2c56d61D5417BD59E2586aC0aDF3ce538e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1Cc6cA38F7791D9C725a3a30C5F24afA70813169":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x04440Be8b67D169F94678c2BC4834DCF3398F112":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x156fbdbA3a032751c6f7A23fCF68ee3B7ff3Ee71":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEB057C509CF30cc45b0f52c8e507Ac3Cf8E78777":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9eA0C4BB61096ade0638E52bf0241deA5c2424aD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEd03D5D86a113de246bB8C063401554F41108183":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5999498C4EEDBa03a6D9DD8b52DA5470d807d921":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x69374083e0A19e5Ef86F9DAFb2c007A65841Db1e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0c904bf30F05732c16e1886e2E2613E8cA778585":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1E6202c6799E41E444F912227b3E15A1eCd4b91e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5fb8B8d72A3986d9CEA5736675280C137b5e1F9A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2FF162e2C62fDc6112d9F304B416fB48Bd120B32":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa3bC1b0c0205847b5fAd18758571bDDAd56e5797":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xb781e00935CEe03C817c376b9DeBCdD19822b418":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7d608992A8c260DA65e1834C4f33Ddadc960F9c9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE2008Ef79a7d0D75EdAE70263384D4aC5D1A9f9A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7284BfCaD25b9d16c5bACf72783C8a16BDE5763B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFA13a1Fec81f66a31daFcCACE04Ecef65eddD06B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcB759D5a7D230E6eC0b02347dEEcD61a662777DE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2D5AA448e1Ec8B393f926a78dA64e60cD5d14703":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc16373B5Fdb767C5c10b1EF1668649F94F925E03":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8A5125928Ec63184EBdf2ecb5300D054085466b1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc2c0194cA72D647AC492D1A962658485D8Bd807A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbd0049aD63411d25819C200D5B5c2601eDC63A37":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCFFC9c89C666456819B9cdd4549cc04168986AcE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa2165c20395F602B1bd91a6f311858386531ea93":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xF5519780a8Fa2416b88C6E1d4d45cA29db101660":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x915D26FA87D887e165d6573A77461F79A3De37Ed":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x702428abEC56404D3045057462e1b43595ae67d8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x68EDd56e13524C78fC15b7F1FE24C3F5b60C928B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4706a731c981Baf43982624D648DD5c4F1E6151a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd4eBC013f5e30A6FCe6DA0391fD5b84e2e72c93A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0E8EA0e0c73827E436f2D6fcBdd5082bB60460B0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7D7753887915339438207763880674c1C7fBb482":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x13B6F48B7D831F875771EeCAc073A28eDA4b137c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9bFf070eA85902dE09e1FDa1798E9B805dF2975d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8ea1726128fe7a3de7f68b152d35276ce14207ad":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2e185636571c331d63993c7a1d0e8098321418f1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6B0b03631897C5e843d2572dA36eDA5F79E7a2C1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8DCd8703aD26a51d62F83a2A94d44aF87DB72367":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x11741D1cb1657DB35EdC8805eAE8C4911CEe2F71":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1563547DD0c62A802779bf55af1184E65BB1a6E5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xbdF4B597DC14ac8c64E5F34e4eB81110DDa5BfBb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1816308Ca8CF95B0EDEeFBd6d6cd48b59930c194":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfa2ffadf727d11b77756e3e9031615f5127507bd":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xBF4Bf9f705809bb341908342b0856c3c6fd5D64e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6FC44766204Bd263b0A8aB1B54dECc2C22dE3d50":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x52918e7457CB0e526fd592e2E573b67Bd17DeD2D":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0883cFB2aD3256Ef822AaAC610aee39127a08dCf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x46dc1c5f801822a00A268a7555533D440273C8ab":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1087281C196985BBf5B68677B2EeDf2f99cCB018":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0A389DAedcB0583838def855cd0495028a683E4c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9Cd75894548a8969E924F0B3aF6bF8dC27612b71":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf2d2a2831f411F5cE863E8f836481dB0b40c03A5":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x203750D4B97979e1ED4Ad083dB831a5AD232C169":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6232d7a6085D0Ab8F885292078eEb723064a376B":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6297D8F6832B3152EBbB679B6902f2D0C010940e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x78E86BAb5453213841b10cD427c9b77Ef82C329a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7b46f38AB6549c63479aeE82530b67e08b16dD59":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0b4Ae5B1db33c238844F7ad71CEBD258583d7100":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2DDa27632C48252Ff32678cb568491d85501dE28":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x81E2C758CA9c717E4b00B5dBa9DF7459B68290FD":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcd43AaD533e663b726DAe4a08185E9db8eBC9f6F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xaB6Fc9d3bc84954375DA9485b17A6F350f1D7dEB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9B7D7c4ce98036c4d6F3D638a00e220e083116c7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x478207b856E109FA77b423A2580F3f890b6933Cf":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8c2f0B4bcDAB83b1C05CB769262f692aF74EA2fB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x714C0F366ebBbA21FAc7B6A2De517A9EBeb7231A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xCa94516Ce155fFF1880F297fFCe99173b88822D1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x608Cb60905EfC0b59ebaD8A9C650A410fead95A0":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8Fb2A5d8736776291388827E9787F221a1d3633a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x0CF29C333A84064723B3c8d4630A5AF539F18E3c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x627FaAa13Ca3D25BF959325D44543e04C99cceC8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77b5B0266D16D55351680B8961784E1c85E12c14":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE139962e5d7B07A9378F159A4A1b7CABe9Df1d6E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x303fC875D1fC3126B1bA0B011eaB69a506C50a67":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x556D8baCD8cE1E0f59a1A3e9329C53530A9Edc01":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9c53635374a831dbb7049660bcb071a688e49930":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEd740E1463b085F34a245129564dcef539374C2A":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x25968e4c4Db0851422A065be460E6880A1E76141":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9819Ee2373457e5B92A3847a635490B242B25639":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xba69593F1F51D4b2ff0a73298c8bE0C8586be931":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8215503B7E5A27469C1861837c638198D1dCe238":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x735eD02655Bca15EC46491C0dE4946591135459b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdE8205E8Aadfe4Cc6e7A1Ea369dBcff4179D55b2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE807e147Df8F55Ee8E5AB4A7c48AD01e63FC67b6":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65C337B3d2b4C2E208801d95eA55Afb7409eaE2b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAcaF6D4B71f850b2Cd1875d6eA7f7DE2967Cc21c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf6DCa69BcdC99Cada8B5e069a4A3cc659D482559":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x17A525ae5C6004f5598CcA843Aab9F2CeBc886A2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd4154916d1330A7eAb4bF3e21295295805A1AB4f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x019d78D1b7f8D6DBb3A4472f8882344f7fdebD4e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3b7318457f091965c488dac7e58559993e4971DE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2F061aA574882C84649230b475a44D35795cC018":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE0bC753e49aCEcE82f436A00EFdAe9D70EDdc68C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd7BaF6EA8580Ba201e4C9B75f596f8e4859f0C75":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe1c15F1f8d2a99123F7a554865cef7b25e06d698":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xce08958266f58b638527b224d8b7141a3ff9c77e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5c2e883b16D73180F60FEbF687B74EC615D1D544":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xa0F6f7392283163E133BdafE35F8CD7d52520ED1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75662A623b3B1215be070FbDA87CeEb54C368907":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x94ADA56Bc45369dD0c1df315B3543d1397E7574e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2da6014cF9D8056645E2e9B1ab47b799EDE840aE":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7b2Af7a96Ae32d71EEc4d58708C046C588136683":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x891E8ebd0430Ab4360b7B74996C2AEe650A960d9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7ad517B61005cBc5fe33c06b7F485961CB6E61a9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6Fd4DeE3C0351AD3184ed041E719D260B8D4dc92":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7C7252B38450f92d27337dCcB0d013Fd0AF1ac74":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x435a05646bA2994751B3d93F5ab1450C109f768C":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x79776E826C78f0452a463ee27b9D66eBe8cEc865":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5bb872d51ba73847dcfc5031fee0af568d2d83e3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf06c79c4fa207df457295d81914ba74a7cac6bbb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd890B6F0551345B8146f66F8c329f70877c71119":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xd2B41B2209de76ed2B6224e9204248d055ee20c8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2AFBC4356Bf863a029ef58875Ad00CF6B8975A52":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE0e097247F0134DaAAbb03b9d9F7791a0BACE99c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2481fef92f6358a410f4b42a7672f23cac514c2a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xFC3733587E4066D664963c90CA3bAF76ff05fE46":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD69f170D82DE974cff7E81E6aB4Bb09A90dA71eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9d156bc7c8768294510A4A41883d5A4EB15b15E3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xEbd6dB5a58c9812df3297E2Bc2fF0BDFEac2453c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x28265b4188FF587E5Cfe1155606026cD2CCd243d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x393451651A91EF458e954dB8804D42Ae15bBC813":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x6E1368C42c9cB0a51A55228BF2de2c4738e83A60":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2eE6c0C72952F280876da353973caCBE238AB334":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9fD841A70b2Cf43964d46A742636d72Effa47DA2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x83720DB3C5675ec1Cf50471B7a6D3715e4a93693":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x958559eF569BE81A2EaFB55B86dB0fad8326b96a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc6cd72c56D94792fEC8aEFC492b185aB68DD9a21":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xcB9cADd85C510ff5a4Fb2D2bB6fB4b74ff3aEe34":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x814A19b98A84EC9F72b7609A24Cc6cD35a2d0B9e":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9F50183812BF7DAD0967e6CB42aa041919c13026":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xA75d28EF5aFe56DC916a4b18070a0Daa2d3429cc":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xB9F278Fe221CCCE7B3fBB8A8C1Dc5Bff49918054":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x761dE38d73B4E1b0240f731a1ed37bD879281229":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x2492A8400813764952c89a88232F1221858D9C10":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x77D74a7611DB43241E25c65888e6a26fa69019a1":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x5d90576d027480BF06f78AA3E9A9c346F61eEF29":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xeb74c6e3c046e16190dfefb7d3cba84db5790cc4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x63eE555F1fea9798f09069b4830CbaA7E6E251c2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD5730BBf7897607b2302540FBA00fBe6bcB42880":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x7B65803C229A2044534c95762018FFBe01207c27":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x4D00E2DDe0Da6386E888f2465e80162F273B7552":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE23CD65ac0253f67Aa75666765E3350D14117866":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf7bfad89da0a98AF22140fF10A700F56fED3ce22":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xca8d13631bAD77f49B7fB3dcb82A13A81faFff54":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8484fBedae4E9b2e26Df44b92cD5f81B71C8150E":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xfBf704AB4c8255a68d127A34D4e956594f7f0C2f":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xAAe99871b32A731dDeAEeE18517E365eBE44F395":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xe68f971B545570A469A6bCc99895119A4483AcB8":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x1Ca0196A35CA44540616945c27c79eEcC30D2c6F":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD4c6325Bc524bE5F9cD4A934A4e163F41f061aEA":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD433c1B56055b7aDf8e5e2982E7e2C00C378706a":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x69b8A24edc9053b3D007710E7B986dF40a0BC7eb":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x697560Ec40177d9f3B450abEA56700eD84df7cEF":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x8f179ce31fCd8E335410E1A2281B4AfBA815DE2b":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x885818188ff2FA182BAC9a8f0f427dd6dA804c81":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdb88e9CeDe3a24e7070450fb166Fcda4B787015d":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x461e76A4fE9f27605d4097A646837c32F1ccc31c":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xdd82139f133F25ACF2B711664acA8Bb676b85699":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x3D8555F7aA7647d24dFdAC7E4E6054534627b800":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x33c5756ed0a5eea92c4de11cf181910ee0e677e7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x65a441c7A0607f76B3B153fDe0fD2f3a920CC8FB":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9C1dCb699e6aF3AE59b7219e5EA7fEf6D9FcF9C3":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xc61CC53572f07062731b21685F07fb1d71495fC9":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xD9D4e0F4C81d13EDF3eE8ceC6Ff026a06D418301":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x05A13aeAD76EF4d601ee3675f7C31679970EE0C2":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xef8104c1F471C1995cb6F7276716E8B38dc1B9A7":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xE55c69cfD20Cfa25651c72b84383dE6104104Eb4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x75F2e07B7d6EE6CD0A5889DBc0083c428D9Ee3De":{ + "1":500, + "2":1000, + "3":2000 + }, + "0xf174Bf93251c264d0322171402D70CD1f3493A60":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9927D618FaDB02aFff86A8Ea7a2427A53182B711":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x9F5141e8715c6691E75188BDA726Df54c14721e4":{ + "1":500, + "2":1000, + "3":2000 + }, + "0x260eEb1441280Bd0987F717F0B045dE455208e71":{ + "1":500, + "2":1000, + "3":2000 } }, From 884b0e867a6c5289313e21a67e6e202dead9ee4b Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 2 Aug 2022 02:11:06 +0430 Subject: [PATCH 013/406] Add mrc20 presale test wallet --- general/mrc20_presale.constant.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 1a974a5..fb1db4e 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -1,5 +1,10 @@ { "allocation": { + "0xb57490CDAABEDb450df33EfCdd93079A24ac5Ce5": { + "1": 500, + "2": 1000, + "3": 2000 + }, "0x4CC129Ca88ff495C1E1Fb33688FEf77461dD2b10": { "1": 500, "2": 1000, From f46755f1c0f64bd2b9859b4c589588463e91ebac Mon Sep 17 00:00:00 2001 From: Zahra Date: Tue, 2 Aug 2022 11:42:23 +0430 Subject: [PATCH 014/406] refactor mrc20-presale --- general/mrc20_presale.constant.json | 2 +- general/mrc20_presale.js | 130 ++++++++++++---------------- 2 files changed, 58 insertions(+), 74 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index f9c701d..f413337 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -40,7 +40,7 @@ } ], - "IDO_PARTICIPANT_TOKENS": 3000000, + "IDO_PARTICIPANT_TOKENS": 37500000, "MUON_PRICE": 0.02, "chainMap": { diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 7874101..b19a94a 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -144,16 +144,15 @@ module.exports = { switch (method) { case 'deposit': let { token, forAddress, amount, sign, chainId } = params - chainId = Number(chainId) + chainId = parseInt(chainId) if (!token) throw { message: 'Invalid token' } - if (!amount || parseInt(amount) === '0') + if (!amount || parseInt(amount) === 0) throw { message: 'Invalid deposit amount' } - if (typeof amount !== 'string') - throw { message: 'amount must be string' } if (!forAddress) throw { message: 'Invalid sender address' } if (!sign) throw { message: 'Invalid signature.' } - if (!chainId) throw { message: 'Invalid chainId' } + if (!chainId || !Object.values(chainMap).includes(chainId)) + throw { message: 'Invalid chainId' } let allocationForAddress = allocation[forAddress] let currentTime = getTimestamp() @@ -186,42 +185,51 @@ module.exports = { throw { message: 'Request signature mismatch' } let tokenPrice = toBaseUnit(token.price.toString(), 18) - let finalMaxCap - if (currentTime < PUBLIC_SALE) { - allocationForAddress = allocationForAddress[day] - let maxCap = new BN( - toBaseUnit(allocationForAddress.toString(), 18).toString() - ) - let allPurchase = {} - let purchasePromises = [] - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - purchasePromises.push( - ethCall( - MRC20Presale[chainId], - 'roundBalances', - [forAddress, day], - ABI_roundBalances, - chainId - ) + let baseToken = new BN(10).pow(new BN(token.decimals)) + let usdAmount = new BN(amount).mul(tokenPrice).div(baseToken) + let usdMaxCap = IDO_PARTICIPANT_TOKENS * MUON_PRICE + let totalBalance = {} + let purchasePromises = [] + + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + purchasePromises.push( + ethCall( + MRC20Presale[chainId], + 'totalBalance', + [], + ABI_totalBalance, + chainId ) - } - let purchase = await Promise.all(purchasePromises) - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - allPurchase = { ...allPurchase, [chainId]: new BN(purchase[index]) } - } - let sum = Object.keys(allPurchase) - .filter((chain) => chain != chainId) - .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) - finalMaxCap = maxCap.sub(sum).toString() - } else if (currentTime >= PUBLIC_SALE && currentTime < PUBLIC_TIME) { - let maxCap = new BN( - toBaseUnit(PUBLIC_PHASE[day].toString(), 18).toString() ) + } + let purchase = await Promise.all(purchasePromises) + for (let index = 0; index < Object.keys(chainMap).length; index++) { + const chainId = chainMap[Object.keys(chainMap)[index]] + totalBalance = { + ...totalBalance, + [chainId]: new BN(purchase[index]) + } + } + let sum = Object.keys(totalBalance).reduce( + (sum, chain) => sum.add(totalBalance[chain]), + new BN(0) + ) + if ( + Number(Web3.utils.fromWei(usdAmount, 'ether')) + + Number(Web3.utils.fromWei(sum, 'ether')) > + usdMaxCap + ) + throw { message: 'Amount is not valid' } + + let finalMaxCap + if (currentTime >= PUBLIC_TIME) { + finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() + } else { let allPurchase = {} let purchasePromises = [] + for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] purchasePromises.push( @@ -234,7 +242,9 @@ module.exports = { ) ) } + let purchase = await Promise.all(purchasePromises) + for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] allPurchase = { ...allPurchase, [chainId]: new BN(purchase[index]) } @@ -243,47 +253,21 @@ module.exports = { let sum = Object.keys(allPurchase) .filter((chain) => chain != chainId) .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) - finalMaxCap = maxCap.sub(sum).toString() - } else { - let totalBalance = {} - let purchasePromises = [] - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - purchasePromises.push( - ethCall( - MRC20Presale[chainId], - 'totalBalance', - [], - ABI_totalBalance, - chainId - ) + if (currentTime < PUBLIC_SALE) { + allocationForAddress = allocationForAddress[day] + let maxCap = new BN( + toBaseUnit(allocationForAddress.toString(), 18).toString() ) + finalMaxCap = maxCap.sub(sum).toString() + } else { + let maxCap = new BN( + toBaseUnit(PUBLIC_PHASE[day].toString(), 18).toString() + ) + finalMaxCap = maxCap.sub(sum).toString() } - let purchase = await Promise.all(purchasePromises) - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - totalBalance = { - ...totalBalance, - [chainId]: new BN(purchase[index]) - } - } - let sum = Object.keys(totalBalance).reduce( - (sum, chain) => sum.add(totalBalance[chain]), - new BN(0) - ) - - let baseToken = new BN(10).pow(new BN(token.decimals)) - let usdAmount = new BN(amount).mul(tokenPrice).div(baseToken) - let usdMaxCap = IDO_PARTICIPANT_TOKENS * MUON_PRICE - if ( - Number(Web3.utils.fromWei(usdAmount, 'ether')) + - Number(Web3.utils.fromWei(sum, 'ether')) > - usdMaxCap - ) - throw { message: 'Amount is not valid' } - finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() } + const data = { token: token.address, forAddress, From fd5b2bce05c07e3518c74a690ed46589f5f92f11 Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 2 Aug 2022 13:09:07 +0430 Subject: [PATCH 015/406] Fix mrc20_presale wallet checksums --- general/mrc20_presale.constant.json | 22661 +++++++++++++------------- 1 file changed, 11375 insertions(+), 11286 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index c835b5f..78a99ad 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -1,11287 +1,11376 @@ { - "allocation": { - "0xb57490CDAABEDb450df33EfCdd93079A24ac5Ce5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4CC129Ca88ff495C1E1Fb33688FEf77461dD2b10": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4CE6Fc21d309F7A27Bdc42D50168e2AEEfe80966": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8849857Ee94b3558A91F6C4B32e776c6f6A8A6f7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5E18Fe3cdD39C924f7d2F03fe9511Abd3d31A6D9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x720d07C87123c203300e3D06454Cc52642e3DB21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0D4b88E19157ba9522B279211403Ad99fe8B7278":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x14108773Ca6b9572af48CE19f0625e7154bDf2E1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0324ad8B269a7CDC9Ff3d7962D3257F9C94c4b3B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x449020a39C9Dc3966Db7f12a3E1C8Ee9EdD23B9e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x918DeF53676ad8D5955C637c43983d1D7Db46DEA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x61BEa29643aC187088e916609cA2c1BcB5c3875D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1aCe01A1fB96aD6325f99877b08a40fed5f89A04":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3bC7893646C7F842C02F37eFdaB2805aC5142ed7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0d97cd6C9DEc4255ae4F0ED88593fdfbB2015ccB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1fd8563c594cB7480919a5470EBc21EfbAcDEC9b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEb30Deac6db83eD3e1ef97FDED89a92bBcaC263d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6e61fD005E8fC4E120fD288a8dE47AF343028d3a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x478de03AC3671051F0Ca1b406892322785B36816":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x02F3C467118850Db8cc8e49f8B0159F63B44909D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x556e8feA3b3E44588edA68CaEB633CC14d998c20":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe12D11df5e9D626Ed3c46fa6160bdD94B5Bb193b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9Ce8BfA40942C180B4c40c72632351681325F2D0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x054D816635A5966121f47107A8CC3e4F1609d934":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd80672Deca426e918F7F3D2c5D98bc2ae745B947":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB4CdaE28Cca629Fb033cf170032a2A3079F1a7Ba":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x243791675B5C0db7165159E0D4689B2D4f558d5D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC19d8a0872666741A15F370eaf30115D1Ee6B135":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD4E5e3e9f936a59568C3A7c6159c5cFCE328D496":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x465F302C87D19FAD8D0f3C5156eCfBEe2B97D342":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFb891072aE0B15B2BC60d53E5b91f9Cfb7C47289":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE9709Da4B1cA1B7296d6c64633cD2f3F505186AE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x41f6f76F0Aeece29556bA1cB8CAa59e8904B5d19":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1Df2b2Fe0da71EAF9F3aDb0C3e6Fb584932Fc93A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9f52A6888e9D0ED7DaF51DfE1CBF5C3d25987014":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1D63d1ac6ab0Ab7d003b12946b0ba590c14f708c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1b0649B83354a57c4C851092F20E7833Ee848305":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7ec6bE1c8630A54DF55D98530b89cDfEa1C11022":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33870B891b4462a2cB3820ffA27BBF2568251b6F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc959c8c2Ccd5f8CDa447fC593c8b335484901790":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa650DEd93F54D02920E0Ec5217DddeE2c9e6198C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x84Ee322C64569aFA8C0f126723452202D9d906Dd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcD180Eca01740098321951e9698a43520C3B6fAB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63Dc9faDD8d4291D094bEEE268468f2946C71F37":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x64bdeA412a5175faE2d084D0FA5f553AE107d466":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1eb8DDdf92Db67D55D57cb0Abed31acd538cd34e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe9fC8D24063e4fC60863E59CF7d355A9f446Df9A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x054513707f310a7D12Ad6367eC875FD8a4E396aF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6183445b14A09f3BAEf63Bc4839Ef54FF1fb059E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x56F6Fad9310d0D45C7272F4e4D2294CC10D1321E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x286199ceAF739294Be9f2fe985eED0b001Fd3F0D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb0224F15eEAa741Bd0E861ab13398F6d975456e7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf9b2F57e9d828f84b07ccdABB77FfB404a8506B9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2615b5D4f7793063E037D51D54DBaA69254C9ec1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa28ac1264Ea4Dc2fcAe85C379A25E24B44A1aAe0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2f384331714D0ED9f549e133e402E42f38376F36":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC39B0d8c598ee1Bf6D98B9F918f253Af99A2744d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x50b818d4bF0E3Ee535e6356b560AE0cdf4c5afDB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC06d8FA518Ab6441438BEc506fFf785b66ae9912":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9efCC59a68a27f07Dd946eC8a63dF5CFf760eD4C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42664Bf05C3c126b00D26EA3093A5c3B3D898a15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x94A49666Bd0453C925c8612a0822E48Db86C8235":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x206067193a7fea2e88b33FB8B2B0542731FED46B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb44FC6b75576BeD059BACb188c0B466A408Ac7AE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29F6710aFac24D28A4D3F329eb4Ed874d0Cb6921":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD64C20e9627a2832D4e57b33314dF88D2FFfb52a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x884FF2A87d0E4349445bC91dEF1ebdF2B6cbefd4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4AAE8E210F814916778259840d635AA3e73A4783":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5DfFb97792fF5f1F728DC560feC28e420B6fD9e6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDDE733b93C63a777b9ff1De617BBF54dB16410D0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9E8efEe74aeff5c49342B4A498a2ADa84854c67c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7f278CC17fC894208314deFA44ab64dC3B34F47A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7BadFf2D5e606AC60ABF6719049466b2E624E291":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5B1461b986D6Cb70aBFA3D924C5767B18D49E14B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC7C53721dD281D8C590C548f3c35A3412403e60B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD91C6F109BA732b8a16EDF920d8491fDB05935dB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xab4363Ad5C48B8B28Cb3C15cF653Cc0988bFBBFf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x14C330459B21967323E74f8517e5F54915792a7b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa76bA11Ae56fd4966B019dfEa634eCBd426ca55e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd3b4e4466f385562bb7dc65f3e4fcdfc7414dafe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x928b60D66343F159C85B3dab8a614016B774856E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x029290c564Ef921c56a784AA16C97E930dAF7372":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x538F418DF790c7009CE59eD69F2494E3b79b2c55":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3fFe16385983264b51814FD7A5e3Bf34B43847c7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcc89fCf092918cECcB460b41D27AfB860Fb96345":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x16b59935FCf119C914302a3cF2D06A5e202ed22a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x23B71AdDF8eEa49506aD7FaFBC394adf348E97Ae":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6F8497037A48D3fD51838284F49Ad59985862865":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf698e7cEb84D072eBc02B355A393a67516003CEa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBBAbc2B3BEF7af5913987C4ebbD9E0c2876eB717":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4C43928621C0A39a9753184C2aB3B073f85eab40":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC75ae9180E8508488bf52f56fbf3e5d9b72fd28f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3D068D615486d5E7DDE0538dAB236E85329A0021":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x10b0D4C689DDfc02cE07C28F46B9Ae4C9ADC3C44":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2007D6f803F33dd0e7a307faC889958632712d8B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFcAadc14Ee1A6f5B030Fca5454Ebb060C8bf563d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0d378E5c8Eecb1f0214447d6231448F56a3ee35D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC90F53218b8021D8369f57084FcD78f5C37398DB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x55e75e6710A3629478fF44Ca50d224FEe89E0F9d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1131722410Cb8FDc299Ea0669256bcC00b208B1D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE4e6852c8e89056F96031283cDCA8CBdE435fA3B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8590FE40fdc8cd6bF9e67Bf2073716230FF16f42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbC61053AaC2acC27bB8AC15F88Fd44b326F3e72c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0C1098c79876ff421B29a2097dF182E7dae1116c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd534f1799298cbE201a55E52FeCb2C80a2A73adE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc1fa50dfcc60dfb656d5b3ea80a162da896cc7f0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA80709ae5E6Ad89Aa11d09B90d6A6531499C03A6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf00C65c7113E9b98225fe5444121C4bF967d0650":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x19cfbC0C0Edd85803049E8cc45e3b1F88BBa94a2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0bd20EFB6cCd3585675EF91874a9818AbE2b45B9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe13dd5586392b8C16CbDc3Be3E45Bb79006205cb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x23Fe0e8C664c47ad3392388e9C438a2768973f79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4c4201806Bd97F3acB301CE20D62ed51fa29E461":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7A166f2Fe92551d6058777367634aC0D471c9C80":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA130f341f1100Ed2b4600336a6Fb855043C46731":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9B741A1Bfb5DE7bF6dCAfC4b0648Dc2430e6e0AA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x124c5B4e6544D73A47f0A14433F5A75C92b9Fe73":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3500ad34614b89544BD5671AF549C6F7Bb948cDf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9af5b257B8209D6008A2436594DF12a0F13FB747":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA43Fbf78d74D7B5818B34b0805d459A438345641":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x402824c43D9b95c3337892b4d39f4b222A46cB7F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1eff5c785c43E37A3D2BADb3631743cd6c5E40Fa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD3a426D3E1ddB5bb1dbDfA9D409132c036bCCdDD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5ba65990cf61a963059af3d6f193D967e9343BE0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33528E95db263686935F11c1a35931C1dd421CAb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbEa177fAABad8d84b3691BE73645A4B455Dd20d2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x30452F6B44EA87a1A9Dd518fEb4f5E292bd91e1f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb0491ca1BE2dc5FfB86cE7972FbD5459DdcF5184":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa1ade4CFfEBE30590A9552fbe6C27BA2def37D19":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x502366d60c5ECF92ac96E202837951A86D0e6102":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdb3c9373FE06E4DBb31A0F90c872e3Fd848cbf2A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x413f35c8b02260f0a199aBE8da78557918ebC46c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8A72F456f4e3F153634d7713a8Dc32cC4AD9dd83":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x527ED2DF55E8e32C95C2f4f510F22B5a9BCC3Ed9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfe99A10424FcB3D3030192d87302C94238d56e8A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd6F6a387019961592C97670FC4C243F5fC6D2153":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x255ba29130ba7930c22c1D5Ab33E99A17C45E317":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x580e5Ef735e0E83285e5Ee0e8C03677a3Ce30C7b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD63Eb32F5CEA9c05876712d8C41f228Dd9Ea49Db":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6ccf5211fdbcb0707ee1ac2735d9ddf8909d1c19":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbcdd07326A797a06A392Ac79a1d7Dc329F589067":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB2C3B1299554e37DBBB39b9F7b151734545b05E2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB7E9b1010e203C397b009f831e45D520Fbe5723a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB3f9abE9D41368596201c605d439A5C7fdeeD094":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0b542E727C96AC25df977960C1c85B89aD41437D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6AA33d1F92f2b64db7Be6d8190390091dC69c8Ff":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65e2fddb87c8ec5d0b51244a9ecd029e8df32d16":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaE86A6E79aE2642b6413D43c4b192cD4B4ECf59C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBD430cfb43f0787a2E73e4b8720544f4bd09DF50":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2e3De63eCf7421944412509fd4A0b79466455349":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe0B299D802a3De40C8b74e3845ee48B75cb8Af9C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeACcB1042405415723A91d216771d535857aB410":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x66d24924D124EE838C580063bFD1658dDfc13A05":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAfEc889E1e57F4970425323d71C7abb085265729":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0422b3E153a305aBE093f2B2dC90aa1094CE653d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x12E0694e7BaC62747f2Ef62F4504a25199B5ca27":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfA7eb6278d3bFCb6b5607A01e6603422150d4419":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB3a00c3CA08A1BD29341519A4f1eaEdBBa82ca39":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5acc27d89bd9752f7c07093bf958ec7c647c6f2a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb902b6a41000a3807f7fe19744bf111224abbd9f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc1fadb61d41bfe71b990145390cea8f99e0284e5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfc477F3b1A2195948580253829877aC07662e237":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9246a01542D2779635CE29AC3A33500779442452":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb9368A8296E48FD7527e5b258e593e53FF7F32Ac":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2c9748a2762103363e08273922c686dd6febf17b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77884B7aEaCcbf1B8A0C5a33E254391b9B49eA8e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x61Ac114D3BaEA159cBdFb8C0613B8C84277D8B72":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1355E2808b19d460F57d9650f5b3725956B7D060":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1dc21e09c310cE0273F8D5554AEDD848dac97f74":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9C797e2350Aa0FFb6c52b01DCFb6EF89D6D255d2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF47fCCeBD8650838001588271C9BFfcba4CbF1AE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf927F8B12dFc263b05e5355cdEd0a0008294b026":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6e58132B48A5E72c6EE5204fCc9011638116d3C0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9F6f49aB08bb5b6df9bD7D357E01e88839EbC9Ca":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5bB10BcBdc20a928eB07DDCF481dEA7c667698bb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0dc23062D8886b45a210325Fe95Fb4986B634561":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7e841Bf726d8B72c84CE4cfa9Aa7cE8059e4B3d1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0c6410396Eb84105Ad728b52244178BE34545fE2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE9973d1f9Ac6D372a2B26c253e17078Bc90277D6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDdc9B3886d7bf6B8eC6886bfbB38aa381bA47e09":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x95AD56dFF3AbA310504328CfD939F479cAA699F5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFe8eC7DC678af28675893890Af13bb0c7B242C51":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x01b23f8cc7FBF107b0F39AA0Ba7C17eBAFb5D618":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x40903584F46E4e59a16F726DeB2F3088FF7d6306":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc27636e29fa870dc22fd7240da3104bf1e5ff195":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81FD1f668BF14736231166dda22b10D3bc9388D7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x87a819287d0e55155e7578c499E5B0571Fb00BBb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42AA6878019689A61720DB7512d20655f9d2E4b6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc27FCCaB56B16156804F735e2140012bb84aB1f7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3DD3FbB690cee983681dA5c083569f2E7e3b47fA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbef62042A3828011Ec5E65BD3Bb1D04196ac8720":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9A598e7Ce9C79e7555739440A62C6eF3430F6bBe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6B4A1FEd369aF43cb0901219fDB523C91709347B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81839EaE0E46885faBa7082203ee9308D785871C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x86A0253f3E40342E5bBbfD19F6b189939a5879AC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68e1a75F7d44463F30225e1a57F6aFd81E736f3c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x53563Efbf3CCb1014dcB37978a6e9663712a4c7f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF087aCcB193b5a22407878ED324B5B547A2EB4CE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7939aa0E09b806763fd4533014C9158dC74ad0cB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5954174A6f56F24130066b21a9D866E3D348f363":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x56A226049f88C078A4F25F13ADdF254DD5986446":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x37ED81Ad6f49E5aE1A3E9AD54Ed3b9eD30b47cec":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD653443d008181D2733Cf7428aC63d96784e801c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0AF2B1A2C5714d2291049Bf65A4Daa4Df79eb93E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x043CF0414AD2991e910e464E4F3e80F14D7Cf0b9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5045Bcd57256462bA2639231d9639b9B290A0a7C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD871915A0bd59103AbA2172E1dF959e55146977e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8caC061efbc42F8e9bB48772B42AB07ACA89c86A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x34B6680552E959Ce353C9C794495FFA9d7d7fff4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x287037283Dd2A60458C74C675746e18Ce319F205":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x51892CF8845384E612E419284b4dC636315e810c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaC1865e71552c8FfE239F8E95461d7E6D74d2D42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD58bB5E99621EEe8768E651bB36007FC622e9CCE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAecDc6B2bAA5D611796C10ce6ec7CE1Bf37f30bD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0F13D70A9C7D4661B57195AF9F443908aEc9daC2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcF24f9DB11D7cf69b1f6f438c1A5b576456F6df2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x49ac6A3d7830292D2BE2f1416D4A53ac367a7463":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x01524bf6926c04898fea53be4ab34e8adbc931f3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBae396d264452921FCA831B534902e806b166c4f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD95AD0E63f724632ED496786361ba9b6DfaEF9CC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x11faf40FFc2F2a60d22d5431ace9D9d61612D22d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAEBba2585c2628B00b3f224Ee727e7bb3dAf6d07":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x343C80183e14183024D3a2C822612B78C94ed2D9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfF7fD844B7AecFD4cFf577d2deBf7C524ea5D6c7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5844DA3A1472FE6A811E28331daA66B32a4e624D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3a32affF419bC3a41c68Ddf793917CEdc6FF9Ad4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5a6481496c2da4a7FD40fC43842178cB2F599d90":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5D9C651bbc2d41FBb83a0DD1fA59188fDB897098":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x91cf6f1601aC171f277CaAe84b79293280fFb1E4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9663B3d553e63172608D29b2c5530b53a1ABC263":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEb60bA7321e9fd8F811C50B2d9a036797982f523":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0ab4eb43af17f29ed36e33e9f9eb60dd5a5e866c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73b1572C0D1BdCd3aa9E4A98e6A03B5d8e6917aB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1c9782a047C2918f7C7e34B20Cc9aB821b4914dB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf2384194eab2aa0b4dc25f8fcd958f7efcff3cc1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfbf0A6D5580203623255385D00163B83a4a68707":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38e14a38cfa5d2c97253c7815bf1d888ff7d9f0c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd8F87aCb4b9f86Dc65B0ea9A69522127e0f53Dc4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3fB39dB5F14FcE1900dcf98162747C90f1b3c37c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7BDB641547759e184ec5439FddE496937d197355":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0cAF40437269caC99B47F6Eaf19BD04B17024d76":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDd5dB43e5B360F07aE0DD0cbD562a6d1617FA716":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4a586D0B9eDB0605D8C63f16b13CFb63Ef9f88Ae":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA2C434F6A06D59f8d4584F82Ae39219Dc74CdB5f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x849c2dfa3b19fd683bcf82a345f9f630d79d6215":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD11B8C663714A3AEA6F968009677987329c43aE4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65382c6DCaD251Ecea9000497C683f7Aa3850aF1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCBefA20f73335A8B7B434E040C610aF247794dc9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2de5f2A28c6fC68bac4A7e64c51A025217f5E09e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC4D3F6feCdAe82fCEE242c794a08093D3024b576":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa62FbdF01F661BCBeE4766bcb126EE44f1E8FBFf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdcc8EBe0fE65B8f0321509437EE5a0d11cBebb94":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaA8995b4126e15FbFc629744bC506ca05c3Ee3fA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x290FCd4556BDcd4D05DA39600881cE55556c8dE3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x55ea799597fd1331bc8F55c115a9C3e20c133e5A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3155066B5C0C80E9efEF37FD9D44BB7D201dd71A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDcA5971689e7f561aE4B84954C821b87764B3d9C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC7CA66152d91141B5637fFBCFB2157d9Ebb4A63f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB01BcC2c7b6f8B852866cE59fcdEd3981a9FB95d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3D4AC8f94A03544Ad6CC37eBe815c27e1C6e11aF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x28aFDAa65B529fb53fdf8B73C78e8b66AB1824f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x746a8780C65b53e7881aD6e5EC0772e2c645C10C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd2c66f5f1F83c05E811917Ba44cC2745A66e9cB2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3d4113b1cecdee2e91e7054c7600ef25f7915be6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x05098506dcb81680d181e6C311019b4F2E700200":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA830A850589Ea45F909D12F13Ef892c59F3C2FD4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCDaE337877ADA30CfEf47995788c4496839E333F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0213ac7D6417C10c1aB433612a522b1a4975fE67":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDBC60536ed5D774F00b6FE4F4270F42b713c3896":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8224A48B79e69041A075643946c85C2316E43428":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x15fb86328E91299B707242c71aFE13353c96B6Da":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb5189e17d3dedb230567a40de17ba919712a5f21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb69B6e08288AADa7CC8D99327EB42213Fb6bbeDc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc2443942ecFb90ae63e3c46eB2314d1F0E3c3a4a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcFf7BE8332c5c001ecD32566e6C5c1507E7E7435":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd8A60C70C9194641A4379ed5150E6BaB11341Ab6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75dd5b5B3D5FA3261b41e62b90772fc1FbF1510b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFFa76AA8387450e54ae290c821A56d3152A8dB92":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd7925A5cD172C203353ACA3dD71b8cA05148ad3B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2b6c7641f13Eb16c9dBFFf2F43032af426E3FcA4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2f5dbb63cfc56a7a22a0a39898C6CC8C5A7aFBCC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0927A8554E7Aa892F4B6381Cd04E33fAf5b8cbfd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB6146745aCe59Bd6B15Fbe7B52CDB97794291f4D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC742A2F67D245970cB0588Ffe0807dCF194eBF1b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x537AE9D9021bDfeE352E6eAdb9bb41F3E45FDBF0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29423f7d062c8CFad0f1DFaD2D325E28bff2777B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7de6b064b1c72bb804ab8f1be30112fce84b6693":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcebeD608B507B9dc2A5Bd2bdF3FF6121315Cc2dE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa6Eb5264D6B427Eb8840C690972516F931A28c37":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x37267E9Fa3eDaF91e0f3582B53d5DD00025D3a74":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x80b744588fd2feA8ef14386bd953493A097eadb0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6C795Be0a4887816Ce761D41e482fcF4fBCa9963":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2b4E19f8D24b33937dDF3210A81D6AeA54402e2d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb79BD4C2FeEc4189025FA553715EE297E110D36c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2fd42110f478433812EB741AaCB4d6005301edf9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8Fa33056D9067Ba93BC89a3366AAD64952743028":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9f3E36Ef3c24Ef8fD5e8e3194AbB386b20aF9b65":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF370c2a150dCe78F6625658A498443Ab68ca3A73":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x715Cc50A7aEA3ebA30b5574E7b469577e4C547F7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF7DFcd5cB081791BEb3CDC7271c29C8EE860FaDe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3496eed23CC2B0219F31916044595c6787d8279":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x385757F0364eeD6148042961dDb92cA9FA600307":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcC72D781BF4F263EB1afAC43632905aaCD960736":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5a2bFf68d2591480d06a98840805F14e65cC3aaC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4c18FFEd1d4C2eE1169DD938C96D3BFd84A8EC00":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x71848CD5FDADA3a5055623b30B09ebD6a2124Ce7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8f9946AecC395eD458abeE7983e04A7B082081F1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe53D26e4E941D06AE5E00C70B613bc8e8ed87512":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x91e3d5bD52E1E3d6765Ac3d8BdE3dEf74CCdcD97":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x66679b38688a4bFEBd90A83838c39BDe36d0A161":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1BaF16c71Acdc044bD7B6E5805D93A8b2bE90E78":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x12797b71154fCB311D6C92914729E86253dd7D0D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x97528D8E28741240ED6219Dd6E1A848Dd57529A3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6A9b3e3D95CA45e39cDdA9345de9c1e667a645f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeA72507A3b094F03492DfCebAD1202BC83596DDf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEa585De16bC74E2fce7d7b17C2D1e3D5D783a5C1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA7e7843B27b89d692269F3CEB1577b649b77F05b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x416C1018Fef46d19F7d6D32E00836Bd0C8aE2CC7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa972836F256533A8f39661d6c061C3211C80cbB0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42E4F53b09250BbbFF141B4c7EFdff2AD9873eD0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA878f074Db0d79B9613812d3316e40352ec5aA64":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc191a29203a83eec8e846c26340f828C68835715":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf4d1B6fdE396C478741c30E045009e3EdD92669F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF9dc1Ea1B25a752CC4882F7B5fDf3aA53cc32eBE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD188fbB8bbf515D5b06c3c1e77130C056f8F88bD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7A5EE74414213611378DbbCC40f64b58c3d2A46B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x129fF5246b9bB4825Fa352792Fb04550Aa8a587E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaE529B3ee1e0F66FdCb1eaEcc3678896dA19CEbF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x407410d84E15f79642272eDAeb437aC65D7298E6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x916b42Daad94D97A0b9a41d0c26eBf7F5939b8C6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCf4e75c9CCFfBc6dB98d43256a4D3721C7d09B2b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73F9639F79555f64DcC2de5A57ec98d1a2AB3180":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33f6EE932cEa603Fafd6854827259bE172C91Da4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf298D142486bd66C76C3D9adFc4de57ccB2A9Cae":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x423aFf57B3b3f60fff3560E9FA6EE93c5a8C2b7e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33CD689Cf11F1B045a71819524c7D48F3B647d35":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f3Ac9539b3aA46E69F81b691B9FE5FBdC37ea27":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd0DfA9Cc867b775e096277BfBaed57918CBD40cB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x685876A4e1506Cd6079e1076249170Ed82116341":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x48fd419BA149B17937a0678a783A96F7E2AF9ec3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x08065afb0c0fe66e084a8e544e12986b969950c9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43D21D4Ad607c5Da1c2CA50C76fA5136586dD75A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF08A969B766a2442182E69fD562a2c760C308405":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x555664f29cdF66345E13fc2983821dd74e3a32df":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9Eb90b15c757a9c3d2bfBD8Cee3a51Dc5B114225":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9151Ec4e84931baBCC821e0bfb3b035D38aacd24":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x51BFff5F990bCa32de6a61EDDbD5b51747e932FC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD9BD8760Aaa6fcce928Aa0ef2c80590Fd6e80a52":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4B2D6458a187ffe306cc284f329602100f5444Fc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x267CcA18263d82e1D2B6E094149Da5462cF5C961":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe418fb36dD92Bc996D5cB8C1bDcd7c2628626ca7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x04C98a96DcB4a078dE1E31487CaCf436c5D9Eb0E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73179b92ff5538e873B1B4B52801a2933729e0f0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD2Bb962EF85B8389c83C89fa78C241C5Ce0C51a2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFB4344312Bf0988A9a9D75a45FAf4F1FE8Eb6B79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x324f0477ed3dba6bf5fa4f34d2aa3b912d452500":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE8503f0484c2B8bBDCad489A25e699542cc14139":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x62d7eb2560d757c6df8a14f9077137e4b0af4dd5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x645C946BB911458326D6e83393126Ca3479C7ff3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6C163AEed3aC423019e4164c8485530325759c85":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF08CC2AaDf3Cb934475daA8D427eE2600636A198":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3aD9C62F816E7D35159D69ce8fF5F57E29c0F239":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdCCf8F98877666e0De8B03a8df16352ADAd2B87E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0C2d640DfCdd73c02e85526dBc9EBbBE83117F58":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdf8FcD3FE63Ebcd8aDD490d3f4dBaaa7C23128CA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8206C4ab88425dC33828d4bC5F16d7E45D6ffe85":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x70e7676a7b33F8d2c07049cD0cb880fb2C4ce91d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x59baCA5484D0048eA2E46F8F365769E3343478A0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x03b2e329a42c31AEb614F06f17e634D4CCE08a49":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa4DF12C097D10502E45da975C3E40e58BDe1c97a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5a4c7629Ed8d3E7869Eb52A7dE794378C655f2F1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd91B8eb0f224B0908877770946EAFaEa96395178":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc2ff78d2eb719a5814ba006806b710fea5652edf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3213cee23db014511a3df039f82c71e8cab3bc89":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xec30e1978f1a07b6ff256ecc22c273b225d7db33":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7F856571d64A78fB015e89AD3A4EAAb4f21e355D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7E230EAC1e30106feB33cE8081d6836c489d0144":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x592111050fcb5f530Ea499447f2cbC0D1C57621D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE12a08BDE0C8DCBd8bbB84783aC9eF8fcb8Cbf5a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe98aF36E6250d5599F76FA3D2b012b378c1C783B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf22144a4c87610C829272B76D0Ca36De2D3E16CB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8c70305772E2b5A4A5d12c817AD4Cf71A37D36F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f9DF833FD89786e0295549561daf819191eEB56":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3bdCE7FdADb022369188d7158f338a4e117981B1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2499A83CbcBE1aC68bD786eB6F4AA19D8Bd55925":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9C9f725f9E47e84f05a1d38e450250Def76315A5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD8afBb227f3E5f4156a2D798de247810dfc5CE79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF2Ee543f185fefDBbce85A87EE0938cD2026C9Ae":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAA297E64fD3A3DDA2950dDCb3A82e75B704e88C2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2c3E8a5a0B846cfFA080C628a25287B38FB6A58F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCCa264fA1E621E64A78E36a123392A0974884911":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x53f3B0c934781b39Dc9b4e74c5E0FC047470F190":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39FCC5C249305E5666684f25A9E4e8FC8834f38b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9f1d33eab6a24c8fae6f1867c885fdc42d4352f0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x17Bd178D155669D34Aec86bb404E12b7d4905385":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB4607c767dB6b3a1D85200Fc09eE24370331aF53":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x667daB2FFBb94a4f85cBD62268799D0904045C47":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7aDceaC5EB67f5973424DDD6841172548dbFa2dF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2de8c7BA53572f8CeEB5bC2F9789a415ECF1AEB9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd063407b7854e413db278782A8F934Bdba8D1D55":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd715ddCed1deF460Fe042b1Ce142C76549B6a713":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF0b8168e24Bead4A23ab9c3116B15734e4457662":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0c97e931aB720760a5dB28721CC5DA30b486E692":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0E30731a598A85c707AF85EE435D387b04400cC4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB1bEA90CF6EDC9ad6F7449E22A74E3F19229E14f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfd2d2b856813b6f58ef4d5A442B43d1B37088220":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4c23da391D47338FeF38306D509c01911EB53cfe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3C46F44814b9aAe2AD796bf9b563E13917edFf82":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd409BF118809e11A5443d7BA6343DD3A1B36c2C3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA6d1766144D215AD46A83c7aE7D1500880Ab08bD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1964044B21C8A468B0B0e99733a458FA8F3fD0De":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4ed641e82F276fC3533FC884F06d3744631ee560":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0822fA326F199E62BBC7800864aBd91dB044Ba5B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x711d64273eb08013bd50bb2dd05d902004a47aef":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x19409ED3dd77c455306181d63e49f4d6C077271D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5594a207548d65602b82b6fc8c1FF38c406c2547":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa8E8e46b34C790b9eCbdC6d3dd8139e7c39B6f0E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3Fd184Ce671a131cd0cc32F012d0390C6d6069B6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x76c3C27d51693bAe283a44148105B0B823EE8641":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x854c3CDF79757043dB6905e8922c1b0a2d9cf1ec":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5f67387d30a19c58580fa2e169d412718b099f27":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x45268aEf5B86974946bD073e9D26D34F951D4B4f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb8bda4c3a269c7b4b64732a1812334dd043dd450":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF3ef55B4e1F5963C8efCe7E081f11dA8618dFB9F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x12db173E3c3C33f26b046735258fdf76620E276d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE80acd2F19577dc778881086EE71772e65c24148":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5441fFCCBBd3CBa5FA802744D08CDa82b6C39ff3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaaFf4A882ae2cA575279Dd98c2DE4214f5A8c010":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd3318aea4c90716F3742c619af1351CF51BC845b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x96930ce4b4078f5ff0ab80fc30de00bb62e58ade":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1c2128ee78d1c33747c1561f0f2510544f3d9afc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5dc533fFae3A4AC8785BE4BAd1e652ebBD4280c9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9f384068b2dfb70ef97b361f10b33636a4ee44f9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0bc9f83bc42af59e43562b4c6662ac2a4b579b35":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD3D94e771FbdCB55Ef11380cd154Fffb94760b3e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x23f59429Bb6F8f2271441C5a0fa7CA303312Af03":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x52b66cB6a5Eba9524F4eDE6784FcA99fF8EA7aD6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb5e0a06217682641Fea5e3E2a953Ac842fCB49A9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x521436b5be5e2b771131bb2cdbc46fc2d88f88f3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA1514130AB14826F37e0Fb368E5889E201F6D8D3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3ff2dd38c029870623cfcd8ba4d396aedcdd8bd8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x040BA68D5496e5f3da094BD1D498A6e83DfC7bbc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaF7b40906CE5bdFC68CA80B95C400c735087B4b0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x049e660Eef111d2D3be2436c70C540480F863a41":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2569A2F03812E6EA2cA08108bE180F520227Cb3A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3e791938e080aC514e380958441b3Ee38A9e4327":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9C2e50F45cdF6B85d5ea14AF9EdeB9A8d4145Fd7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x28257d5aB4aC21a88D42095cE669819b8B6aF5a7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC376fF31C02CBf4DC5134f11BcF76D6C150Eb370":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77eb6203033a1deA9353dd257309E54A257692A4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x402Ce3283e75Ee1E0BeB9e1DcEF64e60a955D33B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x76A2648ecfEB54960D14d38C749bC56a6ed0f81E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75EB9d84A45D841912a48619E69376497dB62232":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8dabc71fdf0b088a0f91749b126e55064c21ddb9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB1f2e73De40cB9d426F19D4937994142981906E2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfbD059E3FAcD81e32B1e284DF1845409E584d5Eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x559cAEB18C27f2580457308df8864e3Ca035dC2b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4121Ef83bE1496Ec9FFb76171B0Be9Ae21200542":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEfD20aDE1F3292d382C8Afe53D6498ecD07c6aE0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6477c71c2c406c4e55d2aea28b69a06b8ab4d330":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xffD6Ac4BFbAbaB1D53b408c08d52C796667c5326":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6088f3b87a1ab72af831a5577216ef8099b60c7d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x456682cd2ff91c31Bad97fBD4BB6DA43d3538212":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C958fa18F69044E0C67A0639c952d952006cE21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x648eb8AE01801F9f6eC4aa1C33cC68068882dFbb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9c19a2CC0366D2443d36EFe9813Efa2152f29312":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x705fd20C1DE8bad42446E324354eEb7e25763f85":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2760db1a05afbd1876b933cc18b041ec8692645a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaf5aa8a8a990ef0064749481e21389753166773b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6da1e366489c8a281ed40e3330a29a0aa3cfa57c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD35f8d7dc52b38e14bD2FC76458fe54c3A287A8b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD21b64cC090A7E09b3187A5D12Dd0a125938CdFA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38DB681146711524cc0d0a8CeF51d3E1Bf1fCA02":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAFFa6F661c506720878aCDB8c50D7cF8CC459d74":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x358cCe899e541a860FaD2BE5C980C721D4E07321":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3E3190fcB09315a21faFa6f8b200E31d1E2abA33":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa63226Ba25769Ad47F741d82f7aBA95d843b6473":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe31813faAEBf8ac9518d085c74a5b2737636235c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x753B8c442F536Efe5Ae559D889AfB4dbC498d9ef":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf99774b739a1f8007a2afcBAEaA9069b83667199":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6a6ffEfB26AAd3EeACfA2b217984F1D17D330fA1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeA8EF43fE5D4b6E5Eb4313F32A5820c1F2Bd6a8f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd59dA3BE0E413337d7d931369522a5CFcEF8A0E1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x49F3Ff21E64780d6b4cc44712024c0Df3ee33805":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73B06899838D34F9febAB5c69BeCbe8f0CFfAecF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x907AF363423C3386A3Ec77223390CEE0395Ce9ED":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x761FC9A2ff111D8C21182FdbE0E550cD654CE3B7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCC4e37F04Ca5AC6C7c23411DF3e63e44aD5fe349":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6935a786e5849DA3bc8B9F56d6634F7031Ef809b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc0ed78bd7c72ddd77ae556f10a98c958b9cd6ac2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x76de1e8b1f6a0ea213e26cc6fceac3fc9e1b31a3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x378d5b33e79e25b55748c5e8edfc7d9d7e3f2e97":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0e993084d3dfd21c7d12f22423c28bc302065748":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbb6edd9Fe8B931319C9C76036146e3aDCD5cFC15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF09137b540F678Bb955a9316eeC65E8e3A2b1A9B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5CD546b78fa7038Abbc931819e97F6A1f2B8FaFb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68edA9592E0973F829A2B76Bc689aDb4b42453BD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x99d0d726B9c308540Fe2B0cD0ca1898741f37Af8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8aDd097754F6eaa353A01eC8F3F478F0f5b87d21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x52a8D238A5c1a3f99d5f37FEc62B3e3BE726302A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x45C21bC0b2E9b4d20EEf6b267Ace1720a5499ABf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1707BD3a35c3C2925241F9A9cBbE1262364b353C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB84aFC36379f6E36161CE0125F4E198aF36C00c5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8407bd34d1f042fDA57848442B23b8f496DC31A5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbe2c524e015ea016e7fc70a83bf85419f7375595":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC66aef4C7c2e74d831c0A44b3Ad87D80111A12a2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9C2426B8D862A8ff941faba634365c8ccd715025":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x34512eb82b7ddb4b2602129de7a21150a08162fa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc961018af27a176fcc36050394bf898c0a80289d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x093bf182e4D2C58616Df7578B9a9953A134596Bd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5Df2F1c7dbB4D0B05B03E38ac0d40b6782f18445":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCbd094e2901E3E27cC8471e40f85D2408fba0992":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0284250461473BB84D3Ca090680032dDcA372336":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x20E3c3aA41e1A6b12932C38cb1A3fd9Eb7ACb5Ec":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1e008b42205fca18f7fee70fd7e097014a1f84dc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF6f64b470Cd078d92e023E4B2eB8E66AD7a7F6ED":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x655cff08986761264357a667b73b871117a5104a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9A2a204648740B44F40f9662BD930320CE5de182":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC3483C41f0f4e16E943587E183908580b641f52D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe89e7ef0efa47c4E43A17EC1eCf0Cb488e54f717":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0a5BF321eAE8238978eB3aE80220c1376aC31965":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x64B4b3F4F3f6992d839e9074Dde54A019a02F3AE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8b7cf462AA2C8eed2cF5Fb57589d395C013eee89":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57277634682D991FE831fdE822EbF703aBC657b2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe4d9F174e9B9F987836030Ca0b244A5b4F615869":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7862Ca0fCb33845FdC64db0aE4F9F97d03b46af0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x62BD4CDb6a9CfE6B3Ca3ad57Ea7db61b9eA2eC42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6455ADC2219aDA25587e74d475ed605762505802":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb3CBB7A07D4b8640DA21AE5Cea72c551814a7Bbf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x851925CDd9Dc031df1257Aee4FA15Ff7c269ecac":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE4db86a306A55c9C18c17d0869D552B796a83759":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x008eb737B5029a92475e49aA502B87cd21B67f15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xed6E4576849826081fE2ffD0d94753838ed0E1b4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb937697858A59DD906cfB5D2B50A73b86dC0B670":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x806dBC5c7c588b23Bcb3d71f4861FDaf37a99e79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5dB239D5b52b0b738a4975B1791Fd37519fCC881":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA819A27C5D2e7c07f7739FCf2b620ED6b597023f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x683fB8955D01553491508F0815fc519406958dde":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4Ad8a20CE02aC9c24890014C6212760b562C26ee":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33d6683f62e7fF6bF89Aaa581C73fAd73090FD43":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAAA0fFf476aFE3d015247eFD63151364263DEcF8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd5C1cA79B5e5A3A383034eB37c8C0C8fE9F9871f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe108974cE7Ec5F01161305Fd808C61d1A2322192":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc0812866e59d7f8055d25fc32b74b0a6762a5880":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x97387Cd12239da78d3FF9046C225AC8Dd44b6892":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1fe57f502363b796b1f6bc7db82d00fed91a137d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x61A06C3D45a9e5A087B83a0211c01ed2D6f0F43F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2B6a048bF4a4B2F2Ae71850648cCAcd32FF81025":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xea3d1b241925c61ac490ef767aa57afba29c406c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc252FaD4840A21101e9425B585208feBAE5fd588":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x67ae28021CA9E6aC751858A81b2B3c7EEBdD4864":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x84706593AC692b9ac8f721579C1FF12AABCF74a7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x52F761A82fE381f539881786C34686Fa12620c9B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2aF129557c88732f5Bf9C619666051EC009d8B87":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc7c0529897b146B6f7A27db73763742028dA2880":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x753D5b68510Ee838A85Da4F0B10E9B9c1BD7554c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63cb360e704f2f4779d5608a8a5e3528fffc5771":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe61db1ddc44a3c740f5468ee27e5459af5c48303":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x20b0617cc839b321827C68BFc87b632f6835E57e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd647200E22395213609BDFFc0dA202542EBe2584":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x344269Cbf90a777304360B06c3482A4B3F9F7511":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf3815Be5fd65d6CD56748C4381Ef2E711dB5956B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdde01Dd8d0640a6a812061d06b6B72203147f42a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc4fAECabe1D33eCE2E83c7852d5fb743Af6720F9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x70B0eF7BD6cd353cf89791a72986b3CB2dbD72E0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x66dEe2b23f95af7cA3AEeABA670053DAC6913067":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x94d61261AEdEdd27141C0Ce4c90164e16C5e6fC7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63EcE9430F424661c0fC7351AD6e71d4281b64DF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xac4d52d7AADfCc7Dac17FD91B12D95F425463c82":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3F56CFCfD8DF725D548175FE8B68626ffA60b684":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD0c0CA89ac0cDe709bCde39066cbD63E1c6cf766":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0909c919007Db07CdA603e4BE121c3e1C9766479":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa00A24ae4C3d3799b206A0347F29285aF8513199":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x22873033143D426E98903C8bE423969329DbdB42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9BDb46655344A13aE88C0F76A408580e2740FA95":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x489E52AB06D2E5cD68Ab12918813470E5ad776eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x05eD9F2e22187b90c3DfEFb9B02A88e9A2f4be8d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE57C2d78Df84C41b3A4a9F335550F69e10e10B19":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa6D8a3d21Ed1e371A1E74B4dB085D1A267cDCBDD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9dB9901C9f2e94340429b3aC9B53234f0B6df51c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbf5047b7b86612cde3c556121460B73142cBa343":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x50B18ff7D78B1Ac8bC2BbC373a6Fb30E0f107C19":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x69440F6762160Eb39bb41FA438838B535379c180":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3fFB580DAB3EA10Da58B0B9C4C079b339b0d9470":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x688c0a468ad7BE8Dc2e1cB92cc1b9b6fdca84d5A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39b0b46956638d395fFB44Ea49A436c8ca438CF7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb697ceA2DD7A0b9C90Be7DA172831D91C32B70F8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8fd9304026dd59eb74717e5c73ac0002c46ea00f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1A8918F18e31a2Da51e316cD5d33D50F54822115":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdc77942427e282cC38CD2F836F2e0006287c3fb7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDC2834718DCB0629A3B0ef7D83136e3e9d84dfFF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd43BA4193920dA3A288AAf3400dcb5be62fB1dee":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC1fd374ca9DE2437004799136D748dB235c5ECED":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf845A40a01763ba1b83462BEeCee331bc4653ED1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x27149c5b6137037b1FBb7CF04091eb4576D01F0E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf4a99104e15515Ba8EB0F3D7b745f75007Ab6cf2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcF0e7B312E7F59F62FC1228d66b182B4345B2F16":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfA5eaA5d72cF76E92764E1E9128A7aE792C8486C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4d2D638454E465229aB104116B74596BD993a636":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4F36394A5D937f8e13689D9F965c6ACC05000456":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD38476D3c1EaeEb5cA68aa7f4EF75dd0b18473EB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcFcFfE706f54910DD3C98f9A7297B76BF663295D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDDb5aE2D3348AbDf185c74865FeEa8f90505D43c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x705d493C82305BAC4eDc527A6487eE5Cd1D1AAF1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8B139211fD5f39C9f4943D0C2039957E8609e960":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5D137303c07A35664FeC8B68805937902b56E1da":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4286419E11938Ab8EcdeC7D74438e1FC201153F4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC187B535241357D7299C6f403D382d02eB88BF0d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD80A167ab58795bD2737d9D8697fE754CA1f0C7D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE7467cA8BE38beA9073a94B2F48724e90e9c239C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C7F4B0319D549C8Ca8bA06a7694AD7DcB88837b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x96e70215d17611491F32B1D3c9035E0Dba90E11F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63C1d4CE3f0eA0a37Eda12376205e25D2298Af3a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA1e71C2D12D70506E040cc91b28399F777D078E7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2e9923548988759EEF8B902Ff67CBC0f1BB4a876":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe1F3bfeE5365046ddcbeA48dEa8679e127DDc312":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1A48B674b52D9912De8c2d72C542d863215fa714":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcf5ae86a10d4730035c166c30e0c0e91dcbd5bf4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x171f5Ce1e0752da51A9dF92b9f48601b91fF7FFE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0fBF737Ab724180216D4A3b0cA277Cf47D0cC74d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF165E3d91fBAf01B18cB23bc770C7AeDFCAEb497":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0b7F08CDacDAa6E0b9f8e7b334d42551EE96f0b0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbb7cd10547f34a986d5663c8e4632521ddd58947":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8579752e97A3ABe2a56C3FBf166924C2fE5c610D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa50b0E76Af8320aeBca39Bb925472F23b59e0FA8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4cfF121c7cCb12B54B46757D8bd1250dB0d7B2Ec":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xecb3d784d93125bac7610c79148f1fc4d105d071":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC7eAEE43B7f235d3380C77d55D639aa97c0643bd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6f39c1fbd5c43071bbb5ea52a576f8d126633fe1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD8a730967F2Cf1A2cebEe1781892AFecF4506ADe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x41f7B7f1C0805fFe647e2d533767d2Ecd1ef4875":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x068D1a6030BB3e8cf185b0433Dd3c48C6D3157b8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb5efd4ac2f2f80bacfd5bc5ad94b20a5de023409":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x10a2c645ae42dcef8c45b8de397b8a4d9c47fba3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x32accaefa35620b51c061901aff1b74991e7322b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdEffE0596B5759E87FE88256415F9Ff7BF78C2b3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6E4996cB18E2619dec2C32841981CCA3001eAf54":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa721d41a817723707f6Ec5169C36539989d02cFc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x549F2eB041Bb5b89d954d4ae18fFe1f0d4377056":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0ecd084eD57d964a74eb4620dd7942F5384e30aE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6FB3af602BBdc75C03d1C5A442E2637615CC9b4f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x90B390AA2ab89C7DEA543951B54A1cAf7B6Fa771":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8af7810012012Ff02f0734D46d09Ec1dd058cAe8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0c4601E5AebeFe2c0854D6Da4BEbd376570B9fBA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb2017a931F206F40CF06268E8FcFDd3d4E4f5E80":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2667Acb34671815eA4b242Dc397101B06c170430":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x14E9999E96b7394600CF39E243f0212434810f52":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x159F7ed0D057494F0de525b758682F5904B75Ff1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x82393D1fA94c15729628eadD9E1811705369F8bE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc2e4358ad08202eB0071221d0E5C68E14a0e266B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCA4fA1eF929D7Dbb9Ad02719C499FE9412cA176d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5A2db2C9F0C7a048f7b9836525886EF331AE05E9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x361D7E3Be644f68f663E5D3E49c808818eFc9814":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf0b1d2562AE198c6557b53DF5923514d01aC9Ca9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x84e40CBf192E4c68Ed1E59af454E258eD3403754":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf8BeeE9Da85484a60b90939018E34124C78e24E6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x255be04Ce7C721679440de2735D231C3c893f262":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7333E0A08BeaCF70f04e43EDf3eb86A8a053f64B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x600D2B986355D25EC23155c90041a3571D12aD45":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x95735465cdf5896f5678fdf83a5c9ce4f518ff81":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaeCe85B275B7EF34838DD28C0608E48C8Bd3171D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf6136507E755492035593E4df10De733996Be2ae":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3F638b6CB4F208710F9a768F1567a45015c3c3F0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc4A6E3D1454ce9F2F7b2cdc59fe5825B35619C15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC2cEB2B35Fd94D06F13e3E194173F0bde152098C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7AAFd5eF980C17EcA27a2107e76Cd047C90659e7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb04B688b2Fa620effdCfEE808ee64D08482caEA4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0CFa219FE4b24e25e4cbf26e448d2De37CEda4e3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3eeCc796B8aa53d139404c13a3610C16A17e5aF6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x325409632bccFfAc706d378A2Eca57Cafa21ab11":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf90EEB769Fb55eaBE7a8dE6Fc162863cf724a58b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2F02c4E2Da54A0df1F40DFeC773dED5125dC28bF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8506c53488eC8235ce858049fD68F23599879328":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x04937c1c74B0b850E58f663B550736e16FE37Fe0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1CD53b78A2c1a67132eac4b3D584Db8806238f15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x291c26B3A8FAaD1bf4B3606883E8a85A7763F8D7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xec82ec222e99dccba7d4ba69112706e82715a8c1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x59F41Fc34604DFBF310B1Abd35230F8abF349053":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43D57590472FCbA03402b80A3CCA22c52dFB7219":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75D446065f56FcB187EEa55B50CcDD7D495E0481":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3ac97095995da83fb3784e63e67e98e228f4fbdc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB4fB7571B239CA85A049f9f42214D1E238823440":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0f1ff4e59a52A17F0c0b2E39576C19CADa46F1E2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1530F2940Bd7E9d9E8a8c5EaA37409Bd22dbFB3F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe797F884588095Ee7Da45981E0eD469aA9cEb009":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaecfff554d4bc60203f9a3ab79fa31e623f695a1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbe6e477b30aa4919fdb2192b74c0d64d36004d9b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6186496d413c09c7758cbfc245dc6db34acd5825":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x286d9E38217097eC8dFbEcA01dce517994fe8C4f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2F2d1Ebed1b0E301fAf5Ed551eEc06621593aF23":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0491FbF3b495Fbf4Aa6D73F44Bd5b39eC43195cC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBe2cA6F56C541eEa195f258D7db77d51dD6B106A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x56f76fC1848863afDFF65dB8c953b67997881723":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xac3269A2a0704bDe92E2a019c5b0E4F5fE323191":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb5543f90d0e039374b80fd1da0f3e0c242f67dc2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE3dFB1beE32d13bD09841e52387D05eEA58Ed61f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1db35f617c96d1b87175ac08d3bdab9b38559d22":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29B79c547f1E81AF85eEFEA168D7478ABDd082C9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEB10a1BD46E15e36a25baE13C49283518a000cDF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x358Aec0953239C84EaBB6C61f61d7a1D1B7dfd93":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6cc77695e67BBbb4E07515189a1323965cAd6a1C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAEA735BBD150d3397b79dEd73F278aD635eFF561":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2354CBAeED67B41522E8bF2445B904c8F1631DC6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA18D33a6F72B5E5bc1BE1fE494D83B8C7B2b224e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa9E993B57a1878b59a33DE3A753E1291FeBC6A59":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE308Ef1a6E6606476996c5A821c1F1Da991cC12B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xae8F0E1Be19DEAa4eadb7F61607C9570304ca46f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdEABAA81a54725E7Aae80951E93e7AA45d92Bc7B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6667EebC2e8A033f60f0db49ba30Ffe7A06FD1FE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xacad95570031453be812b88da058a074c26e3535":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEb0A73934c99ed7E150F343bf2F56c662FeAF2C1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE7f54A1a866Fb841ebf1290a02C2a2B179B38a72":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDa8e18501Db98C9898321064f5BBF0D06031A4a3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3E0ECb366a64b94345F61f679869a5313903ab5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0402E6aC3476DDF96fbE75a5E6Ea1824cE00a7b9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcB5a998Cd81ff0d7613981A64eA2B1d49783b8e5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7dd62BdCE70D3fdD2D7D72451281Bb12503F662a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x732806C441e29078F70c9d51f4A72021fDfa7354":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x694b7075fe32a0a424Cc4203410aD0315F5D7Ee0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5663F391cF21C2CB65e4696bB6f9280d0a58Db8d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x030A9230CBeB809C51FC71eDeb50E15A802A9535":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5041848f86a219eDaf331091f81eE271FBd56004":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc988f7844c820cf3e979c3F48Be627b389120B4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81F556097Cc0898aafA2c10141196C5a73a05472":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6e0B792F6808D2Cd4AE37FC7C9370157801EBe4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAFE9787A96F5811b1513c6408FB5e85979Eb23De":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA025cDf80b2474762987CBD727c70539b252918B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf3384875dd5905F9004E40aC0f2761433F5082a8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33C2d1Ea6e63e29D56C6CE07C73660c115b2F717":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x336a4Eff61de62337B0E2b5D584079940Dd5F4CB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6FC23962D71eFCB8742E109b62C7977cD392082c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa0852a883B0b3900395667814638C0151B547088":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3fed65Fde5151635e240D37c69ACb414f3751Add":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf600BF216Cc468dfA31d90AD99e3BE2607Ac620d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2C9eE9409c052Ec8f540552216c29A2f4289D2Eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA9dC4ECa1BCAc5a7CADA4FCB71F6995355bE2026":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x35Cb3Ec240eE2127ADA7Ada6ea98e6e1cf8B8810":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb6d470ab7871b8Cfa8F2ff6A44C9C6E9EA2544df":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcDF33a991B66811cD25a42b7887FceAc776CF0c8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5fe1d92b85478e99dd6880a647cc150445b5aedb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb6160B705CfFF47a163bB5c41907BA8286656D6f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1E5B9E4b1F29d0629Ad130Ebc5904ad9AB2a61A1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEF9F50716CDC3a6b32213D04ce0977909Bdc9F62":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc08bD156Ad0A2E529Ac3798B6F3F74DE4116Be49":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD470F08E94259bBA8E3c0b83CB637E15d896E27E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe30Db1C12b250AcD85C78ac5E40510C410abC902":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3Dd3F3a57A98e3c673744Ad9D1B9Da7AFd96f4fe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0C14B646CEa888b58f6265614cea02219DCB291f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC17C30ff3c6A9fB8cA42fCCB974C8BabA066224b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6673dfef0ce1b0ba9bccc4373d5ede4ce12039fc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3Ced7d36F4B2C5a32B2927817BD009e7e1A4974F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5F068AaCFEFc3A8a047A390d654f4093f1bdf65C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x810f8Aa09e9e3f1f77eEe61ca3Eb7AE85808b59d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb3935740aac0c7eab611ecee993bd0d11fe43845":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7E826Cc1c9f60333C6d6CAB9A294C766ce01b2A9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x375b52A960642Cc9bdF5404412450b934d0618e0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4765609A84A1F13aBad4e3d70dF4A6d5856c70AB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x820d131a0532797c1baea4bd378eaad9a5618024":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC8B0b4Bd1A759d76314EeeCD212FcB89D862553D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9925D8054db7c1f5F5A9dC2D70E416010904bE92":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75e04Cc0a0E9bf1739735F040eBB52fd85Cf78bA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1b615eBF9045e7A015672d183FcD1A4A9A84C17c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6b16B40f113349587cE744e3C196085A60F473d6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x596ba74a37684bd9516a50342165a61446585d8e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5EE9b5C0470F18baEEfE36D8c4DA8DC4e580eADB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0Ec52403Ca74EBecbBb64a02bAA7550b3eEaF7bA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x676bb38c6c70e8d6b68b54007d8e2791f6256b24":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65a012AfFD8AC32C9a5c8fC97D383de16e7dF1E2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x083897a7bCd62b82CEB054Fc939Cdb13136f0f13":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDB46bcE3408cA4cD3cfaA7CEb121f679c13f88eE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0EEa261426e0610C69921568C254D457C882EDF9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE26f1Ec65D9526Da7C8D76f4a67E5f296E26F47c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x98000f240f63364E5849e32F9d14f1f5733cCB26":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6f77A0c5015DE4BdcD6126EEc78278e3d97864de":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB1C37a2DaFd8824C618c1571F14bC0bF381f8ae7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0a70b9F030Fc2Da0a2FBeDcB5040f5992f675c40":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5E67A1aA062834a621568df6e6Ee9e4AafcC920f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9597C3F0EDe6B7f7D69a340de865E60E829d969C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdc6edf61f104ccd0d5b05970ac4ed4c2a8790bb6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x48dE181811e57A46e8418Cd8A13fE88F502d4aB4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4e05455a4aC6710fA775E7DEfd028bC557f247DB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x24DF2a29aDEa0255A978C048262F6F0D5256c78f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x754fd4B6d458aA5d4c470a3cEfD20e7E5948042E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD7615BD06BC3195aD4299f2cF6f630535e4BF4eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1948DbDF972e7f8cF536000c6396e2EE46DA3B04":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfB299adA3b1BD0D983F74ee7867ca42E68e1c779":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4d1ffe982e2ef4dc5fb2aC85fC8b34523A6D531B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x980fffdC7C1F91834C2752464e40E111fF11BB79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x87DAbCfE72125A79049d46354dF731595a4DBC78":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x209cf51d8952DCa86d36924B68525994A5E4674a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdC97DEE77A522315f288db3197a0802Fb673A279":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5ad608A2d923451cD4F19bC39E986C45aFAacE6f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x14D9BdC2C87a526649462be31A310772086889A1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x19fa643dd736427E78b91a8982525aC162b890C2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x71bfb8031F56646c20CFB862842E9dC5F1162ee8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE40207F3A8234D58CA30d572b5f28C85Ec0f0EF8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7110eda00d37a20D41FE9fc4a5580338ca57bA44":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcc8703E26550862E0DFCb9ADB27ED7a62cd7162D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa6ccab3c06bbcd73a8b956889c33e5236d850c43":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x559E2eD7bB9FC9aCa24d47F61c9d32269e98A160":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaF42CaF01afD2Bc1FaEd6610B82a22117497476f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7dA927B17F45a4eaC7bBe0A95A483F740439A915":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x245407c29a29D99ACAf25557D9DE5871fa217001":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x58ce7D2b62570e7fecAFA9548AfB12B312C0cE70":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x82466a963cE2441DE00623d83136895D32CFcd1d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAE417614DDA7fB748C7c34bB1c241692b91ae852":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2187F349561dF26540934953b70E47489c4F9783":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73bc37f92396a8bf4FBeFc7D8fe7913344D36366":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33757219ac4775b3e3e81b6d0e053d5f770ecbed":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBE1ae2C71F384CCa7d0B506F5c2166DfC33d3dcb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x52b4E2C41222882c1CbC6519ce4e3B4a5A0b6841":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf2d13C49ebCe7BA851d7e9d059d6Bef996D10bc0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe02d99d813b952a9548680d3c3e132842f73136a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7E8EdA3d91D50d0af6b4dC987a39DaBc0A5D6506":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9c4Da550d6a9875d78C36Ec4E4DB655032ABc36D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x54C08cC64314902b6c80C8f28f0b96Fbfc25e21e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x40e5b28211c2E55F8589f200e664eD95584f8eb4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0EFa887eE2804B2D9F3827E327C01F3198992c4C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4f4aa432cbba04c6ab90ec7ecc50ca5f28bb77f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x17E33448B40D5b19169840D2B8bafe988e0745a9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7711d293dd96508bC476f629501ee2c22660Db3E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBcA8f0d158cA3600C457DfFCd0012B5AB9e2b21B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6b73e69fBeb4b4110579229DbBEb48586aaD0F1B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa5727b878ddf21b4ccb8331e0d38423e6af37dba":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x20C48fBaE18602cdf29F3112fEaCDF549351E6C3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFB8100A5d3de4e5dA3506B4b8D71D0Ca20Ab790F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5681b5A25Dc7ea8f89fF933652dA855053f39302":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7Ff6AFBC176965159a97970aAb9048C184F6edf7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1a754f76162e9f28B75583F07Db3Db78A291a915":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x76c8F3806258FB6306A06c8531d67664F2684D8a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2d7A95C4f6a28B9339F4eA0adFd40b7c6bC8E499":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x149fFA1e656420f04d273CA1D9759036fE64dC65":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x686F14Ec33b1bCfD40672baEc71AF993b9522293":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdE3aC990cad7E76F704DA58fCA67b9bA7415CFdB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1400B82FDDD3c27428A5fbAFb784CBA816861DEe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6f5B7ad7feD96C51F39D360c05d862593A9EcFC8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x843dEeD8F4A017aB863d6d5a044F5C040f3a4692":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5aDe16Dd99F980B8526687A678733D32b9d6f059":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x66D50A87689fbA41b9c942aa7FBF3Ba1395b91d9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeCa94432A404A1f232B9e8A1B5e53096a9D0D4cf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa7d55Cdd48C5376bA1080937c0a2Ae01F202E02F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7bedf27a1499132E083c26dCfAF96D1D5A78F3ad":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x724186d0C9AcF65bA3335573b2C81D8C9ddab282":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAd1f70fb535dF67f18E1fb47fF12b4b4461B3419":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x420429c0ef8d86b5351C72d4EC92eB03c1Ef265C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1654B10f586803e41C0D4cE9E1A0F75a7Ca9B98D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf543ca33060972EDc3668fb52b5FdE2ad8090386":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x60747e058c40f9D60A9340B0a651d4Ea36740D6E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8eaC39817AA7A1072c6e81859afF383f534A4105":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa1801088BE935b0Cffb00551D465518C77C97250":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb61ED12f4C3704E1a836E885AF1407b11e3e431d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2b8C1bE0FfEb264081586f5Bc49eaC8786282940":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5844c616eAa7C35dfC395eF57eaA2fBBC91dfe81":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5E403F8Babd4aEf845ffE441602E072d1fC91136":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x107c2941Ef7767DaaBA6b28CfE2C85e88207E15A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3bC6c50B8D38c850778300A84513Ddeee9179088":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD461d3eA392609f17F187145D8BBaC8172C8Aa28":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38140E35FDA3F160ddb06E0637488a3E174ACbBc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe1Eb9169D7D386cf404590e74Faa4De8cB58258a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc304B2DB3a3d21a4CDfF05e94f499a431023D94A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeaA0d37b9E7616799491F0c756b255F25d16B646":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7Cb3a0876Bc051596dd7c575dd34a323b9b61106":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29DdE95e4ED3457a5A97E4Fbc5CfAA3d4b461A18":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2eAe56BE1533A1f78D05059364187CA680A0c506":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfCd6Fa6ce7F0d572990a9Fe2Fe63F16E390de012":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC6B5C4Dc30F4F0697b2Dc85591ED34D4803A46CE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAF174C62393f18F6EEA9AF11A9752F82771EeAe5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7da8aAaBb8080419bA604fcF102f75A9922cadcA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfa8300A4846Ab6eDf272A5BF61374A53Cc872ed1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc8734Db9E2CFCF62acBb131970aE94Db0C772a8A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x236C684e8424015f8c8c1E308E7eE14a299e0DD9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF19F2fD99a86327A3A8bFd583a2645D936C6A3e6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb0131f2091e555E994F7e2c0E78E3AE8749b1CBD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x93B8B552A6b7de7A32b40a6154Fc96b3c71E07B4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x913aDC9c72b6996B18fe057e22fbAEe33897c3a5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x88f573eD553F6F182b524D99c9B4f3703c351CE3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43bfaa06F33F277109571c5445c7b3E7eeC452F3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39Ce625C059b2E737512850FDEbe372B0d61eB9A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x51c626aE5758C07eD2b628937dedA1a0D09B6261":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb990f570f1B3d3d7b5bbf188119D16089bB25c72":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCF2bb6cb68C7A31aFF0516Ac7dbCc41B8BC310c1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43E3c50bACfD8C1A99ca8A4F6Fcbd55cEa4AE19A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4E1eeE3a53f0007Adb18931B52db9E3103ac757E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEa9c986de4Aa6414bE13063c5A0627A459E195D9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd2debC2328a540c855484a3a6C8DE89F295C37A4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8e8a0C22083fFC02357A5d0647A591b221F110Db":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x059EEEdFe126FF4C918Da928a33826deF7402744":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42D455B219214FDA88aF47786CC6e3B5f9a19c37":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x779677c15162419B30Ec8220236AD7151b872411":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x041683A2642344ce5a784AaEEeDe75e5Fa08df47":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfDEC5417282F5c04A5835060C69519B7E9D50Fe0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDa03120A3a7c67612e6D2c31b2b7498a876d2987":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xde35Dc8826D86421F4C9fE8394746E40a2BF67b7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa4d937D71A0B679a7937668c5D488190de8c209F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3EA35425B7E3563A281dC6be65cA8c90D08F1877":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0FdB24bb9626ea8032b5D2B02c05e2fFb059113F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x201f9bE259124a728827d276a690e06A5C75870a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x23Ff4fBB437708BFae0A2F94F11Cd5bC27e93df8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x05a703f545672C17218e3D7ebcF3f330433b71fF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x539E7F735954c051791C8d39cb79d187f9F6Eb81":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3fdF5006e050F79D2802D0442106bF828744d2Bf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29A8D4D96e9138E5bD5670F6b7947896e9267B13":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE7E3A0f710C0504fE07EDe2e042348831a2d405a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7b252516F2abce705315C3f767A9B0075F97aC32":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4E3e667628bCB97377E76d473C7FFB2c9394b594":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9279c71c2e0c9C38aCdB253A8e36A566686df5a0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4059F9ED26B982aAc1FCc565f9A3350Ce60d63B0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1E76E800745D5e6CC76E11eA9fFdE2D65b4f60db":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc3bF8B600092650a76B020430b06B8e5f705604A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFCAcbac2CA1bC385de62f404a47B9D88b3E6f101":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf6613Ee41BE851a3B1f18040f3A8759Efe4c390d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAe00Ad7463D7B42745b95B33137eA0416ddBA3C7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x72538eeFeDf9D1a381bc7ecb74d2444CE7475CB1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdBA37fc71c53842c0E0e7DBd8f7fAd52Fe05F4A4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C1679Eb432Be2d59548a8ca188e104159D1db8E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8167c61351073A874A9F8f1Da34fE214d2100C6a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE7592533Ab4201D2ded90216b3037cE5d050D2c1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x755CE5F31617deD6e41D15Cc51D8FF642CE10e9d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd3D648c59109566f0bc10F0eBbf9100718E95B88":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4d1b9D045c743D2FAf90c36935B0D5505931Cd3b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe03DEd53a4CD6Bab75C92Dc8e9bC7bbD90b7F71B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6dA80bC3D3807148fC19f9893b690CF6f22a58A6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8902CC62A40C264cd0dC5E7dA60AafaB1606dcC9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x00fE7c919D67a36A78c89F2AdFc11C4A9d88B76C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe9b75D0b68b475f36c15f49b9BbaBeFc3c458281":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd053bA216119A067A4C5aDC956a34a821d338704":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x002b1e9E42505816de211119339359a03c916924":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb9d28C5a609F53ee48f8374038d47811b18983e8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x15f94245a4Ca9534Afbb018699c85F320c270721":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb8426Ff2981f450452C063e4942f0e09218C622c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb9d37ba15235fFab9F6FD6e2001c93784A76486D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfCBC81E0bd5b43361b17173697Babb1f131683dc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4e8c101BD3beaAA049E42b0Db1877C9c5f90b724":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x78656cB8299081C4374fB8D081f30cB28Fe2f608":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x791dF79d5ad94271e78C6fE695C5AC42983F47fB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x93559526954A35A690357b303518cBB331f1fFAD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x74e4fD1Fde7ee919055F01125ce70721efCaB2e1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfF589102d5B5dA5977147413239a3481a4E7334e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf270Ff01b896a5c7BE06a17ADa9a6BA1E130974A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf7dd33F4AB790059B9CE53F00f8F14F39E10657b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE3cfb032a487144cbD03461a2a2b296A9f9E96b1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdAD4169C8B59B6d564d157497847356Fdf5ac092":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb4b70fD16f2Ebc217A242c60b20c8a59e16755bB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x87Eb26E17392ba673E3bD775B13Af3B684a8FC79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5F1D42eC75074741Dc7B8956562EF9faFA1aC6bf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfD4a6E8D21230fe448d411DB726DB3e0AB5cd6b3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9580e99605c46A4a2C45910E624533F611Fa254F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdFc92422d29ba035D2bA7612Fb045382B5AFbfCe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEfd90A54886f9D3632585f135b1cac0B71e4B2cf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3ac0B8294ad1B6F4a6D656545663f60209cacC8F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7AcDdd5D8d13BfCcF6555728aFE5F54BF5Ae8E5f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf6309ebe619ab9eb221fc5d8dacadb2fe4f889c6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9192a21b4e12a3DE2221BF97c4BDFCb5a95Bb25E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbe8B73AFE0d791dcA27ea1afCb26f8028F52Dea1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0e0e756672B912Ca645298Aa1726312A63D6Afca":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb590827BCd1Ce352Ae4A7089114AAd6Ff29F8667":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x001DFEed100BC14859A337de5032ec3DbE36eB1C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x66F91039549108E595A3936aC634f57f7558dDd9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc4B8FF9d89Aa1ffC67e636d14A52770DcEC62f45":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcA67387d6688760CEA19DD2e320a6E1F24684aE7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7601F24564F3132fD612F5f19b6B8f37Fb096F68":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF5001895e6349f0e37F08e8487067ecEd7d8DD23":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb80E0371732504f76Bbf365f119769137f6a86BA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbB366173eD0b64E83bdb2fc31fA48F0F6A7cf412":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe15D8DC0519ba0e69296FE49bF7588CEb805bab5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6c24570a39248819024B1800AE2f9e629DE1376d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x125D8585a465D19C0fa0156c0a860986b0d74d42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE6fFc6389065570ae97984cDe29E5ce1F150FA51":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb5189E17D3dedb230567a40de17bA919712a5f21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeb369022C2E2632a6CFBcB308b68177409c0e5Df":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5f5d217E5419ac51B3a270FBB4E8059c4299A79a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x95cebd1650394b66f49fC7302f9a3874283b00a5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAb8245FB683121B20876965FfdB41164c6FD8756":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8e2eb28b91E2A4134Bc896356dBc925849Ab5278":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDc25ea1C0EB8E2F3dC3Dd7c8a07E1d83b41fDD40":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcEEfe31E9FC859a6C6bC55e7Dc566c65366E048a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe894A24C5823d8339Ea43Be889d975DB57D4EEc2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3FD8311383c90CAe13eb17441FFDC9f71a5ef72c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73C6c2aD6e276f40d15194CD92721d7c2d6A443E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeddc4062002714ca4aa4b16634d151875af0b3e9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68539F69667c76b6d35DEa93FB332042DC74635D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0a2f1f54d54c5321dA9C27A05cb3baEe8d94197b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x59481139bCFa6C57c11a892D77d0cc16F20D4151":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x64DB70e8cBB6F1cBB04154A378389F51b5C3682D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7aC159f266bE93E67c24f91cAf18a42bE711ED12":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x64f582318BBE4Ace0145007Ff636649ed12cDBff":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x13d2Ba431846fce4737944B1D4008B0B256969a6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8dB21c3F4EFb3D70CDe3A9764Bbd39D8c6bdf9fC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc250Da366Ee67A98eF094274d73B7B71e1131bB0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6B4d9fffcAf0626A958157b288e48A282fa66444":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa74974367597159D97442ac54496f3F2Afd0f984":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x061663C4b80DFeDf8a1970173766A7F0110E32C8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x503A623911095e2c506CE900B90Ae3E1097a24E6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF0c8953df924FcC59E718A8D51B3baa29C0807b6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x709f0Bf568a63ED28d72D342ebFDcb3b1c81E804":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x096c08408a86A5C060AD730B509aa61EE2BCbC6d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3f259c90639421Fa664BE8A2C9d1f6d25cCba3D7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC2EAc8EC7Fad3328F51466B0c7AA789E28D17416":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x70015e62e7aA017d7A7594A51219fe4C276D6AFb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1c41f4b0Cc9B1aDa7DADE18d0c2DECa6a593B33A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8fc43381d89EBdaFa7b2E0A8479F37e97b0b277D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB6A4C852Fa867544b0462EbA736Bc03421127f48":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF12127aa0e1e165793c7511F904c011Cc24A8C32":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3D87BA26aA6E6f7378d6437AdD3A16cdDF4f5A7E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbAD19E37e23Ebb8E91Ad0B7BfdBC193F4010ba2e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2d499824BacB2E045b49D5bF6FFb8cc30a569259":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2e52fef95Eff67d04fF2F1DEF9819A295bEea770":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x853Fc277EC612BBde4f69deaBa852EBb6d7f5BBd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x873D2ddC99175E7B82ceD021f0b29050eE14eeDc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43d41e511F0B98B959bA1f423b630f31E11f11cA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x728f3EB85c904E75d1b658f7264Ce845aD965B52":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x07A27705eD393003Dc066160d2706394A5B96d61":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe877D2ecD4a646995c3fcb52afbcebaB647A732d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x014208c7C3C4fC25ca755567ee8864742329efB5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc1DF8Da79636716E957B1894dBB5cb5A8AeB62a5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x93822a1D799FDd43C206034be0C9cF84724049c3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeE2da0eF62f230134b4bA8cF4221975AF885B797":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC04be3860e35D34D12995F36D41306feFdF63455":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2aA822D1B91D0D82C6Ea9c3a0740f84b619EF858":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x04b21287ea720C0C9f491B21A8a7B687cEe77892":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa6289e145C78D4c28459496c25cd69bdb3E715bc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x10e3EEE744F2ED92b38413145868419AFc82BE41":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0801964739CeffC59b3390DDbc851553C7585EAE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7E5D174FCAc4e06949b7d3f82c18EDC4199DA0fC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDfDE0F3B4e533cBF46d30E4a97946402dAd04F28":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0bE56342FB71Ac706E87134e039C7E61B5278079":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0Ee4E6D826e94d92A24CC4ca2e481773Aa724B25":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x07d084110eC4Effbe165292CC249fAef89F4720c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB3DE62a6374742cE05953767FB24A9F1764D2771":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8F20AaE44F6242fD32Fab01E78eE96506f91e57b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x54356dda1d00a913494918859e8936dbf3d7b659":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x22a06D61630F110A552147d9Cb93d407E30Ed8B6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6058aB417C18cFb1Ae17Ffc80beAb7172A83049a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8Bb729e2C82Bb9024a54c5d38fa571d1ecF8289E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfa74C11a96c937D2Bd9D6821C2E75C98A70cB690":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x225964311b7dc020ef0f981feed4285d1b685ca7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcACABFafF911d7fE25247E9aB6b8C8D19E37F21a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF50120D2c245A530Af7b0D53b361cddF8e3B409E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x40A25b3C5eD876111962dfEFdaaEe426c8fbd789":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x082C44223bA863db824Eaa86D707e1e21c19c878":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x504f2284A7fE2dB636435fe654d23DD2803Bf067":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x116Fa052D6Be17352365f78cBBCc4610c32f8182":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEAc902Da57A1E4EC5941d0c8d2A363d274B5AE15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x27Cf11a70621690371fabEF536408E9687aFc38f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBb60cB422Fba4dFcF785eDb06432fe5eB0FdC51A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE74b69aEDd6B159FDef0370BA911DA7409a590Af":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x96822331D79AC7e4f45E83dA92F0335555FE8466":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x956290cae406BF01a4047035f1a8975Eed11D1E4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4F1B83Bc5CDbcE3Dc933022501Cb277dC1894593":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39Cf2bA670396BEFcb894989dea401d215aDA942":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA2860b55082333445fc2F0C6F3f3c1E80d5751F4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe3fE0E17D58C09404C55a9f792E62227e8f06983":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6145882f8Fc4388B7Baef6f9EcdE8dF83065F5FE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD64cE7ddAA9E42C715ED6bf0c976416e14Dea7BF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3578495d34A0f32Eb144c800BFC6fefD7828982f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x392ADd568C8c910d480D549E69CD86630942C0E1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77b51054262FAbFA05C7eB573CEA28038CE535A0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x60ba87b357ff0e8380fb907809afedcb765cb54b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7f5928C0c6DB6C8e09c53cCcE23F589d1b457333":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaF4C390caACCb0B92572328cFcc25442eEB682fD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6249cE46c4593cA7912E8b5E80dD25EC3Bed56Fa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1a6EA184bC940CDd75D500901bae67b3FBCDAD9E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaF26e9E6DcC5B14b93C7B9b0f98B24108fAb5818":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x415F9cB3b8682BF1748452812e9FE60440Cf27D6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f8A8ba81d32dA0Fd84ee40e9019Ab2BD82465F3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdF3b03c0BF5355538BF7eC9535dFE593Bc6c4B43":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x55CD6f77ce2E803FD49623dC5c09a42aDEEF1840":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9e13Cd95ac011a6587EC54245A16c5333EFcEeF4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x40d6D9adf9aE71A427903a26618247cDd0Cbab60":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC54f4a560609DBFEE9c6F96597b861521802774A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x87e9509c818482E0eEb9251869303D5ebd237396":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x49C153Ac64F5B620D2c864DE9081d1E1a4a7df44":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAB2F4075FFc0AeE5ec1b32f61Fd660a348388544":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc7ce2Bf0d26148f8CA5501d22EA98C62bc165fC5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x525F6FfE9718524dfCa10c00AeEcbAc37B0c6FfB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4821462CC328EF4cbF926fbEd9697eBf8a565b89":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf39CA9e29dbe35702B21D1d2B7a42B95Ad8EE8e4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaA483A73315d5e130B46f6C8EF3de3C2dcd35714":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6444c8B19638aba814bC794C0eA58cD2e179d50d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x87605C060b0cE7d18C67fAeee765E2d92050f459":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA9C65614Fa718CfD201721066A31EbaF1C7Ae609":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf1472d1EC24cA685f3704584315670fbdd2cb4e7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4FE38170E5B1Ae39a59c1E5314BB5CB64B9FFed1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFb530d5A828a0D8664Ee8f5944Bc761ac0Ba6CC3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x37227Fd3351F34ccC647B95e43b6334Bb56b2BDE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEa9abE4810a2e47C1852D0570008A6BE9D2F719e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0b9aed5Cb3934Fd831Cc84E40a1987F006F000B8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3F83F54AA5ad97CBfb880cb7E086AC5e5c303b4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3C30B69722403CC740D30A1FB551E59f81a2954C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x558a9d7Cf72DBd49052D615A178b11C38fD22650":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaaD98aB328c928d94Ed068ad937bbc09a3F79753":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x41Bb607B8Dc98242EEC3c95584418706FdE4bfe9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9E39bCabA973984023897978EAF19Bfd1c95412D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE7aa853276Ba0173C5F9fd41BA33C0A67068cF43":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1B8989A7fA866c83Fe40423597C7fc972575628C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDe11B75525a09C4D444eA8ee57921a4d5fBf702E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4730eb54a065a31b407607e2dDd14fCA66A0fE6e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6f197e77bA45C7852D2A7E3879e787476a936d4d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9d9720eBcC4B521147C45d81D4a49D6e58644025":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8ED4B5d84a2bC0574094499074D2D00Ca951f538":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x588Ad37bf23763d75eb2B33D18694fA8F292c486":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDdFa52349350144d306af9b7bD69B3e9594b6A4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA9209e0B6650065dAB92D5ecE6C60945544A7997":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeB08058a37e2AdEEecab2148df12895F311c3e61":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57bC3Ca2Ab93A08062aF9017D35C96245fA0F26f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33118c1F28867d185d41b5634ED33aD176EefF30":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8d9812347f55194d0C071e384D059ff78fDcDB2F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa702a1465d060263d6070c83f1ac81ac80f65dd8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x20ABe68290b1e0dEEEf4B5E09aA5D862D511D9aa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x03B7d4F397F3EA07a3A0959B63077E2eB24f954a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2889f8b764cc5519C6Fc2780006965c35fd44EFd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6d8441F832c151349f0C1De3901Beee5839563Ee":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB27cc46A9430aF5047d853aa3de8fad1F2C80486":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBed03ad2B5e1ba98A9b67b4f12b4C5FEe486d40F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA7aCF59b3Fd0D4B70ac0A96a8ca773FA0a793Ade":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7F914fdc79f2aAe5B33A5D0B27240134bDe749F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x043969ff3b18b57aa273264fB09E7c1BeE5Fab39":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5bAA688DdFFA6B0cFf959A8FA06671cEBa330A20":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x06c7aA5625571F50ae39ff4f72D7808b1EEa13d5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDdc75Fbc4dbd72bd3F82e43E48E453381d6F6F6f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC8c2C0329FA96Cb88D3fe903Afc473A820d3581C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfe9E6efEF101b8E17d7367b081E1D64Be3CFA862":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC1491119314d67455f50ab9799D7bec54EA681DA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x15D4BC2D5bd1ef7Fc46a112f4da12f7F1626F433":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEa4B4242f2915bA771146C1C427B2d44C513a445":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x44F7D684401A3C6fe7E650f2589579c6F47FE3dE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x58D00D09A5df8697114ce8347647B1CFC93253E5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb7521e177b4C0324CBb022e27b339607e903D593":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x67b1FF96DF1d0923467A5d8F972d0533C300cf43":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0B24a36ca239Fe261BA74caBED3B62A36C215D2C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA7c97163dcDC44BF7890EB3239B938E02f1b12F9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1448a70529a705768a6890E9D1D81f9779561cdf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCe1B114d6Aea522b4bbA9C8677b46fB402E223ea":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x69b2176Eba6cD2654298043f1CcD808A1cB82DF8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38F44E9a396C45D8D13687D0ee2B3cC6F39826C7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x350e62847Efd61Fbf6D4569a93BeDD2D5C530170":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1B45BcB98a28e48707DbF1b689Bccb5094a97A5C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75484d72e0DDcB858c1771A26704C13BBE37CCb4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf829f2Ab41FCCB9168867eAA6Ee0ff19C56367B0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBf8C3989D348b9B9e584144BEE2eada26693a01a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF009428BE1A9a550f2d5DB7e49FF439617928097":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBA60283Db86f9fB7F16c03fD7a79355708739530":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7Cfa0A0b4BC50378769372962d7fC2c94D5eB929":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x773647C7D04501fF4cd2A4E359C03AdD48db770F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9d7d75fea832c709829c9390924f7bdbf35991e6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x59370435391aFbC36997Ff5774100045c02105dA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x052658C0e56C1ba8D45401d6b2eA032427E2Aab0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x95c6f877097112048642a07ea2c98884294Cd69d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE06cc086c3babf8FeA8b08E0BAcb4030F9AD5740":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe8bB7407A2A675F2A5A40e39B09C872360F3e571":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe6468327D24d1F19Cc1093a75ccb0aB69DFEb62E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCE67F1933b69ed0CA1E3b4DF1c2C2286Fb643Bad":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe29786A93F37E7A631DC3f0B315928A9083364ed":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCBC7416FB4a252DA1f07a3F1Ab8175a35E897bf4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbAe81DcFF994a196FDa5022425C92ee7D40Eed7a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE161663eDFd3cbC26E237729eAb4fE88c193fCAe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD4A1B479eE0a90E3720E22eb51d74aAFDbBcDaeC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x519A54747d42ffB8Ad1cA8A36Db0438679D34aa2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C6553f0c8f75c2746c6B6d4Dc5492c2E9b5Ad4f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x224BA14C02238fFf93e5902FFa550Adc55ad33ee":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42BF007D2837A93825B4e43Bd294cf854967A9A1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x061eA8E5c045a2A10a96d089081710B046DA1e6a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x837fA98272ed6f7E4bB493dfc664Fc7589c95934":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB40F96443A59C3bA6c47A9700c299382dB5e7979":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA4EcB643c6A5b6bfF5eA8CDcd2C2802e8642b052":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38E3cA0988eDD369B8725214e094A463348797c2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x743E3deD7CD4F294544be62996364c27Db24BC6f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc0c168A8B4D516533008A8a1D17be20f3dEeCA68":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x11414661E194b8b0D7248E789c1d41332904f2bA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaD1DeA5b919E13Da54482ef0eb29ba9bd8DBc4FA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x16f7A5fedFE957C950bA41039133CE0BFEcbaa79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd355511aF9445882d3398D8dC22fe9D78273aF54":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4e40c26E1C788777c7BD76418a95649266d65DD4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x45DA549856896a4F2CEb02d7512C8Dc41a6f0A86":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCa1Cf5879522f566FdA87C7a3850B7d83F0AdC55":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDdB5DEc686a9dBC0bE659b553a7097523232C777":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9E817382A12D2b1D15246c4d383bEB8171BCdfA9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf3453f0a63f72BEE573449d446895C805920A4b1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF22163A24BB35916531C22da0EA44ce56AEea2C9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4C2b8dd251547C05188a40992843442D37eD28f2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe22c86d319875A65c659a65667988441Dec87FaA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe5FCFCA8519154aD9D73893E381Db99fCAFBF5af":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x54b04cFD7B35543bcA96CccfaC0a768CBB880bAb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x89D6eA05CE4dcF165cC801287348Ae81dcE5E511":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x574795f73afae9fd16dc42bd89686b86203921e6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4530C72C1C2E8143fA0DdEc579eF4020D5543cF2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd1D65C4C6A1318140F99521c4A4129e4be58aCC0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0D2Be688Cb203Ee577B6bABbf84B933961497128":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x72261E972A5A958d043f1Fb8B2a4Fb162D715898":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC02F61E6b2dE98c72DC67FCC1974f97341f777d5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x34241ff275b21faafcc405d20e9c264a775ea5c8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA1fB97AE62F778f61EFf54E3210A3fF83fDF6f98":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA004A6edd7f640F1b4DE345bd6e0c63cb1B2b092":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5Fb0058280611B57E7fd96dc4bA3616bD0d29806":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x986c989A5265E9eC3b8d9a37BD41b2412998006F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x49E59dE5DBF06ED83116AfAA0570Bfe13a8D5bA7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x528935B9889780e8FFe3B3AbFb614d31718D9965":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0766053F1Db632a0b29C5cBed33F12eE2875823C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFb69e4B694a62812b1C6543bD9723cB4CC001D91":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA6D9a105163fC67a61F0A4D1d5c4032A1E51501B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8E5DE30509a7C6e2Cf39CE1C96B17c1028Ce6Aea":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6b9100896b556cf3eb01be2c7c368f263771fe61":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x381DCd13738D9347b84BC5fd67aCAb6eDFdE341F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x375f554a38A66D12f57c2E2a5FDA5b062020b0f7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAbd0C2cf37661841dF0C842764590f133A1F6233":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x36Ba357C27c999fc0a686a6B5B553f134C770A9d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa4B8598bC8AB2Be2c69e65594b1E518F823939e2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAD5d12d71DC6DB8ED6111f50115754078982415C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD9D7A48644e1dA98d5241e0b26dCbF7995013972":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5165a4E25bdDc813e595Ae963f6CB9FCc4F77207":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb4f0C739fa3C9fCb577b7002D8C292f2078Fb14F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe93086375044d0ac07acb498bf6d8b25bd53fcb1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x92f20eA9a71f5DBdaA161171A16Ea905b3528D69":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x85d130a96691D74067cBbaa7AA32bb247FC16784":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1992C0DAc6Ecaa27D07633dF09196C6c45210130":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x35e683D062490Dc9244486d271A9B8de2E3e1C9E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbf8627F3849d60421D0F5978Fc7685e561f7F8c0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5A5515952a36E60128e763D222ec41a087E4423e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9F9692FfF5Ce2C81737f62bccA101a7a7bC31c46":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE0681Ea1B25dbeA82719b7309F80C7635874685b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCad92Bb29DFF2B0Cd101C8D677E47f9aDc3f979B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA31a1e8c5d6E325f0e5c1882B5200B955B3e30DB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x32e73D646C0F9EC5BCFc18DE6F70d4304e72bfE7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE828556a57d75cf439A5003180CdC8161a838137":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE469cFC3Deed061D38d401508A0638ff149CAB9C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBa4624b03043B21F5D7e1506bfC5C9340c38be64":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF427f1700b07d22146837D851213aD2aeC3807DF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1a3f00A013670BEcaF3E51B5DB8c0A530B5Bf08f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x649Fc67B3f798789734bCC750C6e370056b94EAf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA6a0c9A482fc762D5496185261998Fb3c706928e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x01cCD75b739eA68983C53dbb2f30F47f7370a352":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3Ed4B701620564869Ad2b1fbEc2b52D87240A990":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x46706ecCb18E5220Ad1B85b362169a744Aa9dc00":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f0d15602014f5C551F398821A0Bda50696b9189":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9a4cB63E919AdB3132C5576048ad40Ad341171A9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8f49F87A75e31080FbF7FBF538f52751b5Afe829":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3A52ceFecc09C9D60B300117Fab3795275d01D4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4183b2B7651521Fd453Be8e75269FE702Bb7721d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0D5B8EE06d2f8176A2b866ae0a9773208a5F4B58":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5B775fE6cD248458e85abd122b50C6102bd06868":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77f167cDC43b967658EB8aE473f94402c1672986":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x259F5697eA17b6Aac36677aDeb77290f6162d6cA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7F620D7e30e7C76175b1459158097F6531b3988f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6a0dC12A4bC0e04Abca323153171e5AB12F11117":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6D9E74aeB88F07A99F7828e89520029f91b36162":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C97DdaaE28448a51e1856424efD7E16D2CBa3cF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x88902117D492794c19e16785369ccABB65475c1d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf35FFDa03B930A5AEaBa8D9b8c5B559fe085d676":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9e3633234ecc2e2e2816b6a94132f6b2e49E4fb9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7A092e4943FD3b045f8A05AEc3e56C82e05a173f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x98757ef6865414Cb0121b3242f97D78fe12f9a2C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73C27b2542a3E7481B796a47C95759B4216a4bd2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81f89a3878638f497598d79c42F7f4935D0c6A61":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAC35b5e59fCb88FeC8821D3E464E4366A82CBA44":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6899440EE02F541fCbf4684A762F3837e7ECae7b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7E06ead7629a725Fd77F8BB2D21C93588DA6B65d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1257D26064800Efe43aD71e4284c07D14d78E4A4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39AaDFB93DefC465b6Fa3FDb409E9B868f6639eA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x471D696cC52152CFAF0f3071528D6d3bC570ff4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD09d42e00C55A7E4d24FF55CCD812a2CF0aE4EF3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbd1931F023dDDaCD57B7175d342F881c6467bE11":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x066EA6c41058512a16e28685D628b2D666aBc88D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1079778B3F805b8030f5b9fEDc52E92D65f70cE2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x804c3083d6565426a35482611a514948abfb00ac":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa1D1F0E5370331048Ec481E3518fA92206af325C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x04c4a90801d1ef5aE8576A0A5bDd8EEAb362a644":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1D00ced4D79852748147Eb74598ce56836dD5563":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xab2035D3b57b986B395398714743289e974cA568":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD2283F49C88f818041B6402084ca22778df4BdA7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x611adb9C24482D446bfB562C87c6135d952Bf171":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9E3D240FfE816566bb4B9d981f409Fdd92343bA6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8a461D8c7B7f83249Ce904B6AC5Bd543FcBcfbC0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfC8C19E6f71af8282A307b9278dAEc7AB5917964":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB76B88baadf6a33544a50CE755dba88C8e40DE64":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdD65C5E9d1D4124A4730A9BaD9BA5784F9B1d1EC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd507D4Af71088BAfbf2eA0CdB6962694F850DE01":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa47d3FDD0EaB701a5C5fEfB794E538273f0d25d1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x17D3a75B5eBFc4AbA3F2fa0833bE73905788D847":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8272786E9bbc769135344f21b98586615Ea2a379":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbA00D84Ddbc8cAe67C5800a52496E47A8CaFcd27":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xecf37cf863a1979c939b458b6ac149820e3182c2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF3c9821FE05b656D32148ADD93671DC1b53b3928":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb458FcE9B00E79586259E27498Ee26cBD0e1e6Ac":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCA2Ba6FcCea3aCD02f1173653E2AF738d9eCaC41":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x91A22a39c32204e3f75F2f5e90FC7536BbC2f42f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF846638AaB987d031c79bf12703500d8bD5963A4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39Fa9C5d71A0eCd684B6Ce62c5EE897a6D2874d2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1b82602271dF9e355edc5d54476A18b3B1A544fb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2D4888499D765d387f9CbC48061b28CDe6bC2601":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6c36e66695c38598A08B15e1C6bea9aE0bcf860e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA39642F947518F417595849BB614158998D054B2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3185EF019BA1C04B8d65eDB64c1c34C3eaE52271":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7D76E1A176F4893b30247D5cFd451807C2a7d54F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C4Cc4eAD08221A5b3FbD8F5E20b4Abce1b22be9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2d74E7aeAfb9dB4379B72f310D2120b485B07065":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5915ebc0bD2729b428554fC783B9B9B0876286F3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF88D367DcFEDA5C91A1B8C012dd92603b8D58467":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe63F5eF0297dE25EBd997360C112bba05C5178F3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9Fc6eB776fA1795DE8d05c7E2dCeda4F7c63cEfC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x16174273B883ec5b2AD3bD9AEea08E67A2711D0D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3721c97E0282a1FBa7daB91fD570813FB4E9Df2a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x566C6599f9Df969819B3d213B362ad5fe6e39975":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7E7aA15C7f04376223a03A111e21401228824DD8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x977bc167F889dcd7A6eCe301C92A059DE7B1772c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7D03216b776639c7dbfA2089F4D8Bd00b4E79D54":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x560D03F2b20e9047714Fea87Cc113D95a3fc7179":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38E5d5239327F1735905057647bA8137d194bc48":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa046932c87E3972807dF273bd9A936eFFa86D163":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75EC476b1d809CF1450Dd7530dDAEeb2C21b32c1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB57CC94Fc53b28fB42bf7E869e460d0ec5FBb32F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x703adE3D59A79a2261A818F5787cB2cC437D375b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfbBbc0Bc739A46DBe6f0ac768d2d6fd4949ab733":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33eB60Af276F573343BdbeA5A514e22a0bFe9514":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdaEf56Ce18eeA40C40BfCc12Cc80fe110960bd7C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7d8b05E372e7E040394A558D6A5210ee697DAB57":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x088b5E59Eb1109c3b0dCa1dd905298409ECDe83E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xccEE88812Bea9Ba2820afA1737E25771988D57d1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x465a8228594a8437014b092f65e925bc0473e6fd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9C6319eD03BCD939921A4b5c46044C2F56e507b1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x572bB56D7F23B41A507d07E02f2C454d378828c7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD2eE347a9055cA63ba207CE5701bB513f769A988":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x66fDc765040E6E2fb46816169Da209Ee72C14D3f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x76F34d1a4535241eC054b49d969bdB37F444eb38":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE0da04083f712bd8431037D05469D6314a0af7A4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1DE869688cF52ac2eBC0E789c54d492615714438":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x123aEDA9e353a64ee46fBA894f6c631db9aBe76c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3eee02f8a71992546889c7f22d759b2f6e8c2a1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57C191389cb4cf776830564e35d2cE3C5b744531":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB6fD2Ea15bf02b1669DAff86Cd157e181b478CD7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf1189995B5AB3745C806d48355088183C33C813B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD5908c1C3b34cB41f89EB5b1478D13c55eE22060":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdeB0dA5D7c8BdEB7792c8Da952dF187d67b2c9cd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9f93DbbC5acE2E0Fac0647EE55497F9E994D2450":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x791F3bbB14a6cd83d36835cE90A1b4B69e7fbbeF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe869E83bC68b9b5Cd72a1c62dAac6acBb4965466":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3267c7cA67667ceB4A1fD1Ea89275DB5aC8b607c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2010Da1E3801d98110a04bFefA1c7720d6a572D5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x60aA466Be00Acc37DC5e3b89ff299331907Df045":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x101d015Cb6320a74b0ca35911C80c41e44cd29F2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe49CdB7f9821A47304b9BF98cD10Cd92cD282e3E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc3A6e9F874E048f0B88BB8e43c0F38bEd6905B71":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x71535AAe1B6C0c51Db317B54d5eEe72d1ab843c1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7e3aC6C1927418AB5B5B1FEEA75Fbef94b1cdE69":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD492aFF2A83d9B73EFBcC29C707a6756F6905e87":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x60Da45F8530042D06580F45a092D014B52aCdBBa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8d9A3B477a5d85f945973aeeBB438BB20620e074":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC8D86F5C950f4eC0B7db7A7238369784D87D68A7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x638aF69053892CDD7Ad295fC2482d1a11Fe5a9B7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x744d6b531570951a8A51622746C796a3Ad86B4a5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBaa9B493bCCBe1A900b39870980f41356f85822a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd61FB49B764194FB30d3D360774692dFbd6263f2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7e53187f378E1C04Ac3f349b44c74D71De310021":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x51C2A5Fbb0F4362466B0b2c1FC0A7ee2686D9176":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa25b152FfCbf927AD1eA80269889370326f9186F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9c5E42D8915E20472079ec483555FEcB3EFFFE84":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB75500721D659c44f07dF306D168f9De01968DC3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x03feF62a00c67520e1f77F07e34a8e64787Ea2a2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x27EF5f1Fa276E8394681A260F77208ccD0305013":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc063ff5c81c5B932E6dfb7ee9841456266C5b585":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc821cd39EA427d701e5A76C75B8626392086EC18":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd7ecc768313dc3baad238600a466d7bf08b028fe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa01f4973d8193ca2534ec8467c4eE308b0C5cF80":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7F310c961b2C695A418DE85Ee5B18DA2D96493Eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB5a3E180CB7436EfE43eA2e248Be8acC489d0eD5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x34A640A430a5DC2bD5187dB98bE819985248006d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xacAD95570031453BE812b88Da058A074C26E3535":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x209f9c887d04A06F61710e4A2B1f4dc3ab1546F3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9AFfe964574192aAb6DA32aceC63D79b3671bE4b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfB93E3927dE373ec9915FeB89b176D428808DFD7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x026bc5E126E133Ab2d662BAe650f6ABFA2aD5d6e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdc906edB65fc858F80FAA6Bb38d3f6Cf0E54D866":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5f36b1Ac2b16FE18C784dc113DEb789c0188166B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38ED9BC1a1E17662CafBeBd359F6E9122faB7314":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA893d78D5d4014B6Eb2eCDef97c225890264A5f9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2EE3300306c156948947a9c63959e89d9d60824F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8aa4243Ef5fE3D6ebe375fA6D47A710266Cb0CaF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfa4937670686c09f180c71a9b93e2ffcc3a79f47":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x508C27BC844990f219579470EA6B7C9c44E226Cc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8D8eCA22730D06b125eDcEe0EBcd251693659faE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC850CBEA5bFCe6CF15136d9920261F054A53d1E2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA770d4A353293385C0eDB30ad9519a1997b471a3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1fAe7DAb3A21DBE307d4EF3bD047325B5B63b17E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38ca8396e04e23299635ea06fbb657e2a4e693c4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x01BB2320fAea7f514B790A04812461112687bB19":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFc193599Fa211539D85B3925D62FF351885F112b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1449507bAB28b616149b79078C0380875ab28E16":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2090F48E26a758d52ad48A449daA5c20C8CdB30d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8d345c1DCF02495A1E7089a7Bc61C77fe2326027":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x71D7138C14C34Cd9d6e600D3Eb2d615B805C7761":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x837D1b20e21119Fe641DBF369F775825B51b2db4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4ec7cdf61405758f5ced5e454c0b4b0f4f043df0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3Fc809baC271a2f6a7C61AF3F3ADD424fbc0935c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcb9cadd85c510ff5a4fb2d2bb6fb4b74ff3aee34":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x91aA505769BceA5DCa318e2a2F3A1095A804e865":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x35fF7C02E7B58DA5F4323CFCbcBe8969E4C638A5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD749a274d85040ea4eCBdb670505a7679070Cf4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1ba529Bad0303e368cb58673E4D1aE8738D6449e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA0efD27acC781549D5b78e89E561AA0903932d56":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC289403317518a547e3920f6407CaD72B600f340":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb6741c05958bb9F8436927309E92F286E636Ee37":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7059dF82d93aEa2a02B9b137a028749526be369f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8D915AE1e48A237e97d34C1853320F1869C532D7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe345b57A27145685D4945872dB357CB453a238E6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa21FeD132341f41c7f96Cd9A5CDb3965bc0b74B0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1E2AdFb70b077318ACbc94A5a2C0421D9f0775cb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x45E2FEB81BD6630c3b136E489674C8B61170eb22":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x645147d317B5058F8442C77b0F1b42A3B03d0679":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63e508F44A87051CF7A0848330Ba2760CCF375B0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x78a7b3846f6b0407c051aef02e365a76cef586e0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1546B970afC85bb7448B2c50504be0C4640408dd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x08b7Ab9bbC3a07cF7f75b4aCEC5b536b7e040Cfc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x243314f50bF9A5172Fe44F580B72cd0895280691":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC69e8275592F10a7ebeF418F8743A12e645953F0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1332f3755F48A9C7f618681ae3BDBE618Ddf65D9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA69C61c28932BfD6181A37F4203A0919614F2761":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa8226dc65d9EB3000895E47fDB40A42b06dAD43B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf89fBeb1D803A2e2Cf38e32a0E7187890Cb67A56":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6eAa0dc601a4C273856fDFCC51E4e4A6E6c44559":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x492261c62C8F0e1783b6F3e60D5C03e2e532F167":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x126ED947de7b84ab29526D35CEF99C9b72B285A5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd7F6bad6Fc716b889F84a94fEE046188f08988ce":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x766Ba6581319429143098c40290fC1595776b8D3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa2edc47F1659dad8db3027eAEc3D23273E473D3C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf66128575d8efff079205bda33a1cddc7e82c72a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2f108Bbd7E05cb6a360EFf8ff77B4e9D098a51Ef":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x26A89D6a6A9470ac84734658A795e66662DD4EBD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA3Bce8C3c75b290E420130369df037C477d34a45":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb8dC5739b7024ed22E00447706ec5F3DfFc5aa0F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x969a3454ec5DC48D11802bEb77218A7A8744a9dF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x15c8857A10c732b5F8bbe8AE351Be8704a81CCd6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4Ca148bf94F6DFe9a36534ffd9D78dFE58B9de57":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57A901Ca3688d505234241d2D6F5a02Ab41c0762":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6c7EA81Bb46ec44720AF326a25dF1DDE93BC4B87":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1B1d11143c69d7c361582569b46fABCD78D8AD08":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcf7fb3adc0a9a4e6f7caff2ca8c365325fd19277":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE02bBf8E1507427e07D9F8063a8FFc7d37309C89":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDcd4FE2842612743d45a3A66169E9DBA8038e60D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE457134dB87f4246865882a7E3835AA84C4b8D6e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x39ceE75B11596E64f8516EEaf3E17c170442b6f5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9dC9597A419Bb3D7c727f57a53a45c39937ee61F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7732dC4f380fdfE7041d799A605473578A5De58b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd1b1a4BEe37b861fafabD05E5F306A862b94D037":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6b2d94177E937E090307DCe76C4e294aE889779c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbCC44956d70536bed17C146a4D9E66261BB701DD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0c3467E55ea5367f383aeBeda2A68D886A5cb944":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f677CeF6550Aa3972dfC47524d913b4e78D6a29":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFD7bD29E1050932829c1FC080eA42D7394C42847":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5848a1eB8a10AE88525E97559Ca007618195ad89":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x133D93566f9699B3Af46fE150daA8a67a9563ED6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFd6422196C78E4f05106423B6dB46c7DF6c63cA7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1D3B7C3c9245aE2840c96F0E49705E7C155E36a7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x28bB020fD8d73d39B3e2C1c49990102A2EeF3eDc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7dbe4E37Fc0147A29E399d25c55f9cE817dFbff8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x14a967d549B6cA6722d5591Ae118f69Fe2E8920C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6c1FB03612E943d2b7cB0bbde0FB3470a0e633f2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x52f300747aFE206Ad2fC35863849c4A0594635B6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3a8Efb3a57EA4fFb5b3B2a1Fb1D16C804Ad235fF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6BC3e7B5010f588cfe347473c610b9a5d363e140":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa09e4F96e5ABC839ea82946f47e79AF93759D3Fb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6A5252ECeA88672002fEE4D6141e8d0e2C2952e5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa294A99A55F03b2b0A42B4388eaF30FE4C2893f8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x03B721075A42103bD560aEB745Bec088c540124e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFB31b6746478B80402eB055f3F55Fea6df204610":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0900404261A24027C849de1a268BDEfA8407A9a3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0D8fFd05c3B56604ef791AfdEbE4fC45f7AD69a0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x23cd04A4C2deA3CF49BAF61c04AFCB4a23acC573":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x41f31bC9357f34e51115E232Cfb1Be525AC60B82":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x14652DB5C36325b8FCA22cf1325a8eAf121CAB9C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB0A9d798f7c8028B0e467b913a02b547D0528C4A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x022d5912C50F0b2bb08C52Bf403BAA51bDb63fce":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0bCc303a9170a830F28a57Af7C2757c1FD1714aE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x276777C67D20b25172f683D0Cd56Fd46E040E885":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf42FD5F1f398c8EB827d65BcF67007E89b992008":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0eC8A702B3012e19B1655A77724eF8981178B259":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3AB1c7848B48a2B900e16D03a7B91D0e675Fe38a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1906Bd0244b749381e2974192fc581Fe0DA4D363":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7128fa11515ac9985f449f02f4358c9018cd8cac":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x98838021D6dFd264b0FE6b6c7b3cE23385A8cFD5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcD47ba0aDDCb12081a7Cf0cD6962e99e8ABC3FCC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa8C7864111e1e29ea89140900aB0b997be47f1bf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFa9237190Dea4a58b5E39f88cDEe901b89ad6662":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD80775766186eF44c73422fDF97D92701C27f70E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7dEFcCdc77213AD10222866D9F2eeBd9a5B8Be70":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x51F1e782FB7eDeA34389EA47516ca7c31E9C073C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x913F2E804035200E7dDF33C2AEA922d6D5B65021":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x481797f295d086dd536e22d36f34e8116f8f0985":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x38913De54C1dbe16E4079bb8A2a3E0973BC63D0a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5e46A8ecd4f4f0737ad7b7D243E767861885ed06":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD85782De3a7bFF8d30B8f7B7ae4fEB6Fbf0600BD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x075873d2F1342828d86E47c71B261e6a33044ebE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE11C94a5F28222001bE49D01f5Bdaedf9B9B0620":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6bD616DD6c8145e2151c378dd443AE15222CE833":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa07ae4f9e2D41715416ae074c7A6fe857693de4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x704332b1c8051D112E5Bbc178D2bd2414842c240":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x183034EdA5dA3CC088C7326114B09A2A5e57e044":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3cdc6F91d41F1738e8E1cbD2A06F64dc6Da5b0c0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3f312DBf7d8b5A86CCF37024eF69D79661e4fA89":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x80cB01Fe8D4E5aCF333C2D3dbe0A42357a391A91":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x12c6DE027b16D59dD449cD9078E5f09E9a77A73C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe7661Cd7988C3a3f7B417ae10cBB7afF525ad921":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75Fe3943a6C8866e1C41e1F35c74A9fB7a77b835":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2124ed5982e1d3384C4800ff57B9f883b2e2F47C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFCba0693FC16DCb2a4E8FA7eD3DA31f5296993E4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x90077550db8D23f3825634C3497AD3a594013137":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa1E223A5eD88e272E7B652AE898701cea20993d7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2Fe95bA46D36e6Bbc8d3bbC6BF3F18c85C91f3aF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe9c2F269ac049c6D2C3f893EB5465F8B33E561FC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDc5b17F7e80Ba5f2C06E9d04bd202d394165E093":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6A5fcA2bC2F971889Cd51FEe0bBC1014D03DCcD4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd892f1cac31704c0f4fe586d142238e933945be5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFEeDfe9c2aCb949Ef80b0fa714E282D66Bd2f955":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x00DA72BA500D6e7c5DBF6EF79fF90b741d6d053c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEFFDb9141B8fAFBe36235aBbC903c6D1b924BBCe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x79e96fA806B9b688d366be81Fa618dA49c6c5685":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf48F679B60A4F690613D9695a67933e6014f9b43":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3CEFb79aF1F4126DC679D52f5f7458A25CE74B42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1436267A9814316C6ca9212D38dB060bc365AcCD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBd48dd506E9179a757AE229d04745476ce6C2aad":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x632F93865823557466340E49BC120e3B668A2C2e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4E003EB4382d35e1fd245E7793AdAe3fE9AEb1aC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1681CCE61B0338232B80AEa861413A3D26880DA6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFae01460fD7Ad6b9d6a8ae73c14aFb2409B48B92":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF9cDE0Edd06f05A7f0b412dB3B4c48c87160b5F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6D0036a91f8447F7d28B6d3AF8a8258688a93896":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf78177359b40AD2733432e593f6e0F730c6E5165":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEeC0D28Ec4eb457033DBb3B1Dc0F27b45F1e20a4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6C59816c3Ba468759381B0bAE2FcbE3A27027488":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5305095cf75cdd312c202e27f6aaf3ca7da79a5e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x94625be060d1e09698c616a5808efb083c769166":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7fc361edA50DBB5Bb03aCf37DC62A7A43cad2EeD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF5EDFCDE8B5e43EcfE382Fd5855612b3bf611224":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x861051050074D31B0fc8682D0C383e6Ab01DF0eB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9ad2bca0d3316bdcb8ca5135671bc0290e24e6c9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA6A2AD1320Cec227f24f404fcCC120B71b41757d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68820E5cDbDBB1cB131151dBB203d4fef563Fa4D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf4d63bae0ac9c6fc57ecfb25a1e0077dba6aa091":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdE33e58F056FF0f23be3EF83Ab6E1e0bEC95506f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x658205D6D9d3bb93B4463dF7088dE4BEd1D3e88C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA38e40797fAA6EcbCFa4A64F14c7622d090e8a31":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDD2184C8954427474e04a0894b7d126c9da6e755":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0F8f7Afa8314dA4dEb6be2086601FcB084A30791":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAD6C9574a601fdAD18ecb0Ca7EA2Aa08222F4AE2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x09c0CB705477D94F0c25D9e535D58d75eE8895A8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc22c41E02952a88cAC1Ff34cd707360557e26713":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x304fD132F9CD88A53E432F79A04FA2573Ec4995e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA641475dA364ec7F6e964Ff6E2400cd14e13303f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1D005c2514f6507A4829e0bDb9F2957f0cdaDFD6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xba3a4398A4646dBaBabE2dd342138165914f4F33":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5709569405723E366656c7346A2Ad100D0cF03d9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb9C9BE1Ee54b1842bA20387aAfE867796FbFc365":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE9F120BbF6a096b3776FBBDa792F27565A2c4A3f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x01f96D72AAE9AF89C055B7588c590870836f65f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x86D0f719Da3e41dC34c41b395c0AC48ed781f1C3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4D640D6d2CaE44C3192a70Dc1179aA890484cC7e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f8c7def38b418dfc255f08f390476285d578b05":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x74726c43FafD8f9C3d50A9F63820bfB8860F3481":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x078Ccaf9d0B60A5f4ff6FB3BFdF54f0eAB9c7AD2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x07E8617796E30Ef3Fb0E45B59446E28fc7E4FBEC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x19E45bDfe8f01cD24f62381Dbe41e8f9fff58C1F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd9adD884288d623d14dDFec402E4493BAc9f4F15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x394333707d70Af2Ae14F6B422256b4D74a948b4a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x69eb356c440C88a37931afFcdD2cf316fE30a79E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf010031498dF4886a99ef659f830693C839E7198":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x965fb931ce14D8210053fF90f39d00F443FCa7E8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x798e9dBf975BcFe74Be0fA3f9f3Ed24D208F74f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEDb78aB669Da097dE99D82df95d187Eca20F7E47":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf1f3050671ad54Bc0201BbDA76A2a7880A64a1E0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC73a01E10848881F3c4FbBcbd3252151204cf3FB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC15e7Bf5b20e19e50Ca097862211dAfACae196b3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6a2829E0E388a438a0994c02ebca077bf1aB6303":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDf8BeaAbFed67Fb3FbD3d9Fff14E2e176AE10e17":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57e98f563309996b3648ed398c761aBd6093fBaD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x258214591AC4572399FBbae9f807E159e69B1Ec5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9740D5Cf593Aabfca5598f746C072D73F5408A30":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x34fBC236b6a76B19eBBE138cB84C6C63C3A85a23":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9968eFe1424D802e1f79FD8aF8dA67b0f08C814d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33Bd7e2d0fBA88940FAC57091d09ba8E9982960E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xde2c345fd3a921222af6c3837728c0e628ce43ef":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x473E2F6E83924E955926D287384d5879EaA3eC12":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDb89f642E287175B6139372899178624719871Ea":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAE6e4C7A07F2a2b7690e101a9B6BbF86f856D970":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x10AEe62e812103d361380dD94246E0Ef3a6D8FfE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8312D523e565B418810dEeE43b28C5BF89Be0e1A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x35856dbE75CfEDc4A14AA88efe1f90d87706E760":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81aFcF6Dd79897cBa488471eCEc2f41BF3f7CA9B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x479322AE62348eB17BA1F2aD0BB52852768d883A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7650376aD17592801bb2CC73BC08F4e777DEa7F5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x56A3887c5326321A39FE5c66b72215d8f5B04c9A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x79F6c043669ad90a79Bb2CcA3B890EF3A54E5128":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFe57DC4B1291384a56e5d90fDc1340b7036f3767":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x23Ed05AaD698cD4bE7c9c5F2C6F8c04ed1827793":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4288E54710A478D269E51cf72689fA3d42f4cA0D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD0B0b919Cc9FcDCD0B2DcDA7ED844584FdC00355":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0adD13cDe4C61734f46E245b1B5Fe3AfE9b6bC29":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68e1176f872417A9b8081C516F1b1421e9bB36aF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf14F92FEe5452c297B84a2971bfBf995440e4061":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6e536E5Dd61DB8627388c0721e8d5F823fAb2D1A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x93C1FDF5b0d5bE85099A80beabADE1328783F2C0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6ee569Bdee53AD43DfBc9417FDbE932DbDf524Ca":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xec5021815178d72609e6Da42b6B8Fd457AB4699c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA8213ad427CC7C16cf6248e0653553bC3008A191":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfffaf54a65eb198d704ea8C0B48eeE29679120F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbf832B66AE1056105A48A310143dc49dEf034061":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x938c708De2bbC63A4e72Df7b4d2Ce1da645f73bA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6522E32b435c79a9eacFFe738bc711E094a52725":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf4cF8a63b89A456e576a45e6c1419307A520f8FC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8c0AA6B70CbBC5550D0a9948eC50c8d973F8E802":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5576e77b664FC8f064a23402050AdF088ade56b4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9d1f1BB15b4440968B51ecd7Ff99582c59Ae56B6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x113d21e5E2B35Ba08D0A5c826ea6850eaAdC28ad":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x96d94f4549A03411DcD60BBEDCa7A170EAC644D8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD0AF4dA42b7D4F0b92c386fb44b4Da451A2C22F4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd2A3E6323DC5A05F07420FfA0282b1461B660a55":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAc0eD2862eff16F3FBbd083f2b44e2CD4ff1D381":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x699fec4921001c4Aab3b6810019BDbe87C481F7d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3e448909Fc3f9d1044DBEF478482A5d1d064EFE0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc00A397e5328527734D5F44638C401658f939819":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xac2251f7c1c18B91Da2Ed7F186d2A5C9E1Fc3d22":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCa9ba74eE20917211ef646AC51ACcc287F27538b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6Dd8AFD0338510eEf17DB0Fb4F76B0CFAb9002D3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc6c91E8fA5225227491255415bcb61d6f2D18C2d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xACCb019890BF879d19f5aAB1db068057e4CEA0F4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF24b42D4d75E7afAd9167BDBed1B6342CCD54494":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x12845Ac3Ee7c93b355f4fa95fc77d8A0FFbB3602":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbd313d514ECd15a0224da4dE050C79E2CD8382aB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc8f64d227c715aE078D642C0e3a15D44FE7a48B1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42Fe01565e60D0687Ab793dE8caFc1e8a39816A8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa0d6e23c10C2C4331264c59e01A5483a22b1d543":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x13C4A327De6F7E5aa01bF49141Cc982Ab1f87316":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc6B0F7e747C23f65E1f99617B379fe69b56Cee32":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x99093FDAbdfD53Ba64B710801433795cF1216dc6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe175c44341736349fcB4c1498eB27d77b96d7Bb3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEEf114D114f1947BA4a2979159818E4171E91D14":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81477d5014adb4B4a57029c848B3df4a797Ab849":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x58502052C920EE837c3Ca71Ccd7cf8cB0457CA9F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x07a1f6fc89223c5ebD4e4ddaE89Ac97629856A0f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeE432D08d766a8DFe198c29a9b68b7Df422c3a0A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x47C5700674C7d11E4213D5d8caBeaFA849469995":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9f2678Bb8EcD50B65714816b4Dcd5fA24D67F978":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAbe6D5D0F96E2d407318bd2563566Ff4F17cfC76":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3c2078d07196837e3E15Ad61f1Bd12B84ddEa47B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD3E1127272C69A8A743a98F4175abA549c2721bD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x05388b4a5f5D176f01157Cf93DB3991ce3EBD077":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x32cC3793f3103f72fDC40f04F0C03C019eD46638":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x554eE99540949C14cb9Fa64Cf00A09A8047fa747":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5b113cEEd63a4D92820FD7eCf6fCe119cEC75AaD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4Ef5Ca1A8724B0b01D1D729D8AcC99EDeD068c37":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4c0264Af1c7502581ecB8aa261E1a9c0C7CCA397":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x320Eb9c685d069F100Acd17B64d90b963C2b7EE8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65a7C3Cb6d1C3cEf361063C57936d9d4c9D7bCAB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcc690047a38334d72B7fac68AfA3D6aA62252D29":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xade53346A42BfFfd0b4546dE3F83b15f24E6ff7d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x85312D6a50928F3ffC7a192444601E6E04A428a2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe36DA3923724ccaBBe9487E4133ba43d8509f1fE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65ceD347A006B95C8FA74Dea8DE4F688A264f9B0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0fef584af9fb31411671f721a77b9d2a1d1c3e23":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x325eBc81dEc49b15b22459D98834C051C5b3E09D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x54881c1b56e0E7a62a3f0752180036976435b891":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF602c90E89d5fE4c7D2AEF3eC84e2dF880Bf2075":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDDa40f30197C903A43525154Be3f1a0aFf5A1D44":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfefB81Fb50FbDf623B1523BE3bC4E52C7d6d5353":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7ACEe696E2165e33c578d8956cbCf575e5d631d1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x18854d2816c141294AA20A5317CA58EB69AF5FC7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x04Ddb8ed83C1cbd593619F55579B11CE8B29e3A1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6F74f38cD701d3f6E8f6baCFE29DC65Ce7D42d34":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x27F8602E403B6EA18f8711A7858fa4a94ef3269b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2DadD6dF80Ff7008CEDde37aFFeC883655480Ff9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x00c512d8efc7bcb786f97a0f83b2087eeded25a8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa6d0e6ea70a666f8fc525b0dcf2e09c83d27a09d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x87C3953E534f24D30e5A1361ce404063Af43983E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0000000901C92bb92C98DF004bE56D37D1604C93":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x12E307075F20Baf6B67F73C9017251818F7e5d81":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0A5418B84b6Fb083c6a57C2a304C9fddc592090C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8AF74a55936ED855a676cb93e839Bc4A1d307639":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4eD7A3Cdb17c9a3363b5c6F5AAF981EE2DfF43f9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3A45468c2B85A969Ab3999f9b286da9bab226709":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xba04F91807dCB266d0976F70c6685B63A2E862d7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x41cA142B14757529A5c8988252f1B4Ea6b47F7Cb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x765CAF0DeaB530c043eFbc494bE66Ed1c238d324":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3151d8b3b34aA22287d76532096eb71CD9E50A4a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0168459886Bd2Aa322c18ED0b209887095aFcACb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB87ef7588e58728885E4Be915c0749E33f1D6A67":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57356852964f83aF7b59cA1cE9fA0EE8ec0eDcf3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2ECA89d84843266d271c98A1e11D95b1CF002765":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43374601caF79d672af8eF27e22C378Cb37048bf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa28e586e24e6d78d05e822188DDC118Ac2fB034b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0CE3841FFf2c2489d3231fb74269cB90FDD86883":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd5817F09469D9F9d9FfC54592959238576Ca9bb4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x58fa1983f7E45dda5b681f5e860B008e796f224b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcd4749e62Dea7EbaC7e8877b6B4869A4a6748143":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0d2217979Df6C832d756830869B33D5014e596A6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe3629035803867E65f2503506c948D3ee31F3Caa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x200CCf3eb57f40D5F99FC53135187999F780c20E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdfc638BAf130f8Cde8944d36F36115c995D5618c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5aa184B1D8bc72022B36bd724bB723E62148ff8C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf55893F0ae16F8867F7a9c7Ae47c12422FD59943":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb4683AeB715092fc0442532b4De476EC56ea1592":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0206Bc8FC7C1e8635D14F73c0fdb035493F2FD84":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5fAf276f6E3e0b10213f8A04BD6C872f8752949B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x79EbBEd5297daD97020BDEeed99b317C840f9d22":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x69ce31018C82CA3D2d9E4C5a6D83161B4320f9e9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4D85B56C459fe2AAe459B1BB0C36b33592998d0b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9AEba50C5d0727D5bEE2D71B10ac98E898d416DF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x15A3F14bbd9a1D2f6472f0C6081C730F8AfAb3a7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f7B1afeb239552Dc1B0DD13a9eBC8d9ec6E079E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x166056AE7450135b9AAd3b45CC6b6625F78BE1a8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaD6ED7545a32ae8B005687Bf7db1E882b53bf8a2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0988D84619708DCe4a9298939e5449d528Dc800B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1F1163c6c0a85E91fE60f8DD5d1a7007DdBf95c9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDD6f58573929d44b95248ebe038cB8cbf48a48d2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x608b10b5CB5154132564e1d415B116dEF66A3960":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdF4f0Ad809b9476FB90475F728aF100dEF5E9678":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f46E479555d93049aB0FaFcbDD8C47bbF67901B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCbd20e9A39441166A1e3f45971df14c3c2d87479":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x206A428716a6D27890210306AA2af9cb805C7B78":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x386eEA5d7e85f19Ee162D7C15B385e896038756a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x942A79202a94222819466594D6a0854cfEa082Cb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3B2A91617Bf4f4f6468ad3f225d57f4A967Ba38b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x16f86449f135CBD16eD5119bdb66138E42B50B2b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5Aec24AcA614bf525D26087AE41ee3f9c7B0eBEe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x70aD81d18F2838b8650D88740d8E337032c9BaAC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB68Dabf88e221fb4469928bA1ea6Dd312a342Aaa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4A669f017c74b1F6890846FCCCA2F380356BE107":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6E9ad4e3145d2be858152d9608FE008f8D1EBc5D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0ab9e31f358fca6a43f8392ff65af2592885b749":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x34224315D978b48686242cEE16E4fcCD3aDdf952":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb987b8c5Dad75e631030295fA23e697Cf4486315":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2BAA98f2bD4F5CFCaE3f3a2e2eCfa3B1Ae9d04F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4D04f4DF74438b21B3e7298A13aA9c316b47C632":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC561C9b7035732B4EbDbAe6aC43D6a293aB53896":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7267db34b6072080923F92E626C2Fc5DA91fF25b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFe3C6993920Ac33bA28378A9f92e18De52795117":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdd1c90a381b759fcfc4e25c7eb28dae80a01a8f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x795a76D8180d05B7465351a83Ee5AC3bcEa7f836":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9DdDC6321304caFFD40a2F848123763532401DeB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x97DfaF239e902071285a72Aae5F1812Fd49a491f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3f5d5c850ce1fE1Da479B4DE9de336CF3C68D2eE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8Bcf10D5bD8a0FF835221dD2a9C794B435c52813":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x93a4a366dE322dCFC68b629D6086C6b19Be4aECe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1F507bE0F25fdED2b4ACf27C5b3467E61477C39b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD3a58489C18b759BE1c282Ef8885F70cebc2f1F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC04509cdc603589e79612576eDeAe16c1f00D2c6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68b53Aa18D1b8437B7CD9524040C776E2261e06d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5a8207adF52729c8BBbd42BB0E40155AdEBdD101":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfb09d6570a9c1de1b22367e46932685e14077dca":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x195dC9FF8AfBD22E176B6705e270586B6D641Fb2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf49B0c716c788d4F91e367136c814A7BA6A8b7B6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfdd7C88dB10A4e099337A09B1651A7fE5124D88f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6D62F1d6b0D829F5bCF177Ef5C36EE4b53629CC0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x01e45E43a093453Ca6Dc018543063a71Ee1f7Ba0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x56a7a158A7C0fD45A2f8071BCEec69F3b1c912AC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8f9fca3144B194Aad5572bC483d33726282c8a31":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcac63fdd00e0ffc5046ecb80197cf6c51e356737":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb70524bE392B9f4681eFfe0cde9FdA3153DbC886":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7a781f490927ca1c92affdf15f580a9de317ee99":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb52ce4240900D3a1A4a6E1286E90272d292dE4F8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5Dfe145B69BA905Bd774f2e51cc0618F1d56EBe6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3C50849d873CF92F04F0EE7E624B384Ca4Ad586F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2973787DBDF4f3E851Ab420785FB6bf68a84fC4e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaD99F536266E2aeAC263ffD9556d02fBb37558ED":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x000000000000000000000000000000000000dEaD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA3C1831D7A56a736a0300B614a78206A4E2C4BAf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x00001ef108843aB7c937974c54c42360da8F9000":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81aDFA0309A1629f68dB6A6cfF37a1fE68FFdd2a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd636cC1dE0163a9de320FA2Be4465Bb4E25A9694":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42598d735a4Bf52878f18F8a299F31128272Bc3F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0571467fe10285430AAc57627F0Bd1223a909865":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCd0ba640AF5bc02bDCFEda5dB547263A2AD07232":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD7985653E99D5A7218FDfF738eB420523a205F21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe26E2466e070BD45C6E159010dBE4445FBba46d0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x99ef210F7d6e92150b2Fd2a114d2f013001E9022":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9D3F2735904881EA4f1E1097A7Ce07e503FaB0d5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x526c17b64d59fbDFC50FA0fA306683Cb5Aa8cE07":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x042b863B999827ca68311243210FbBf22210dD9A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdFB6623Fe1eF1974EAD1D775bcaFD45A5CcCfaA8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8aBc16e919C61D5863b34F920dfb4Dc4a97bF036":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0c4061DAC92AE19563dEf9F8728Eb26af471FD22":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x09Bb1B41BD79EfD19050Dd62AaEFCBd4a96d895b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5423D3177A9F07BfC1de140190D080801c68199a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6127cb39Ac8e6066C469aCE0edcC3506feaAbF94":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7DA220633dFaA2dD4eF3e3B222e836a2E23A496b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD6dbFCE2d957103Fc8E0f66c7d24AC2B481E913A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF38DF4E0C9029Abd0644B9F01C0A5797656D3e7e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9fcdc049601f9dff3bc74b783af0f26e15f5c6f4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF28dCe94A86f64606bb80B38182C2962157BB2Ca":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbE782eC98CE7135A056E31300a9831fA35D52865":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4Fa6B043DC07ac6081F0fFD1D62E937f5E4D63cF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb4FEa52fb488Ab8Ef349e6f8f7d3159075B14235":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6E4D8279F71F417A80F7A951DFa2bBDd2A7A3f2a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5BBB655ce71A0655Ccf1762A6482fc54A8465b5a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x22f53AB05e84AF7D0Fb3faF5e2d58eC764B18110":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE2D7C679AeDc71DCFD65Eb381107f8beb0F65666":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1D2026Dc4ce6a25a596542829fED4b1489aa3D2D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6946A82C4A2Eee8C3F3C9f9ca5e4fD5c6e415f6b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x61d2Bb94d0151457102Fc32Bc08D0F1B146D54Ea":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdA4B92fC2A73Cf8f65fe043D3A3Cf80BF06acaEF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x07a30C79D8E9E75417ee78411c34eD5F083FC5c0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2A15764B19edA4F2ef2d7F31f6A3fE59A04E29C0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x06D3da385a3802DE81cbF61d852b05c23FDf245B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf84F39554247723C757066b8fd7789462aC25894":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x74Fb1010db5F44021904803A7793A204ca11775d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd30AB27542DA631fD4bEdC9FaeF5B223A131cEda":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x285bE47bEE9f9e4d9A16d9707c868EED10667020":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3792c198ED0c3C0Fb662f8d4d9Ca27544268781a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4b14727117215d7E347728fA426D384A5971addf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x42c6Be1400578B238aCd8946FE9682E650DfdE8D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd7f818aea7A6E26F9c1ca96ebE980D39159DA069":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf8D5230E47AF11De499a4F8cF4528dE5f3f692CC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF2D54033190bbc5a322cb93c7B36c65670D63264":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x05A55847945b8eBa38419d8fAa56431566C79f71":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3944a52E0F316df45B920CBD3D40aa8eb5E3D76":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75eb35c20180b5d2f661dCD03Ec7ca70F30867D3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x45358BFC9a1F52b6623fD299a214CDd88244cAb8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf6C24783A22bb9A39F6317c24F9208Af9f539937":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x73105075FbADe3896270A594fB5d963F5683C935":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF264951C9992BD57f6c0d9b06308AB92a21fAf4e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1254D21A56CDaB81E1a123f582bb7A47d1be5EDF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7B6010da8365BDFd89Cdb0983FB0E0f07eA28442":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1Db5a7Ab4ef7bAD6b0153d334f69ACA563Cd0bD6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1a0191c323D4c6630a180690F22793E914209097":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x48002B13dc82762372e124605c2E1Af7b43c3c08":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfbbD6e7d90C19b602B602731c9029119d89490FC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6BAbCcf93b1B8D511d9029D7aCA71102f35F30ec":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2A8640383B34da0d2c8C9e5F49376B6d844c95f6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x41aF90cD357748928c5e85e6a9bab4d4872DFF54":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2805847D172e21fCD8519c7ba7927EB2111C920C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x061Be9A1e21C24D5e217310E479DbDBdD811E824":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcc6E17ed3E8dE4752329FC8228eD22Bb4a092533":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x45376F3927b74d4625d5c1CE3fFf609dcbf8245a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb2a86E3051bB321910CF4eE10251C22562d58B5d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x51a418f72115B30d092F2A2FA271B74cF21c528B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9FbfA9EBC8930158df2778948403ECCfA3E43206":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8D979a82ED53b603d5BEde17844Bc86f3813B2c7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x94181fCf980FbEC537f2133e596b3Cab1360f847":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x78ce74e941273907164D449C7511ba7783022144":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x829A31859894aD2791F58ef165a698a59F1845Ef":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE9E3b7570b65d4e4b9946D0CEa4653aF0D0708BC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd9adb2916a9c726d169c3740506f87069f4fcc7e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1B47235150bCCcD6B51F60F175174dD2d579Bc13":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5d981215Ea25503Ecd34f6EDa4b1Aa4Bb6946E3B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFfDe865353Cb473544b8f98965A9D1f284ddA3b5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4c2c95ec9e13316a23237B0c21aA92A32a9ebFf4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD18B8d61c160e779ceFEb61d47600061007a6130":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD8C2275eb9Ca4E6FCc2b52582faEE40C8743048B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x57400664F4543214711d9fcB5a9f4639DD954EE5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3f2bb48E3365a558c8C3F45760504d6ff3B4B63":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x16EC5EE1cC431cA95de00b6C88d21D0B4d3Fc2a6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6934c6dD16a5F629fd807f3B22374E4cd5D41387":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9A90b8F8Ab571Ba5815Cac0B65a3D34127135D2D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd905effc7204CC9e7992FAa1b68041bB548ECf0d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x58aA18A6294b3Ad4592d8A3336aB78D8D5424227":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x788dc97cd03d04f8D1634FC4A82e6E3F140CB4e7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA75834A3c8cEAc5863923091bfD07167b246FA2D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd034055741d9627FcEB231f4E30cf03773949c2F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2D617029e2413887DB9bB4702fdd1c39De570aFb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x477bE27B2085D890DF293AA23BCf010363cFB2F2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x79Fe7B208422b97a83ABF30149070bFD7B096160":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xDc232401fF59C1457123A1b59E2DA06C3B0C6102":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x827E301419d2eE967fC62C3223AbB7eE90651D79":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xabc42b6a90C2A5962C1Be78be7344A7D05848eE4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF5B4C93a02B7264F5bCF6443cDC70728cEd257c8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x280dEd1b7e430BeD0Cbb0Aace452Fd2ADEf2b581":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc1E5b72B1a017F7b837b016F64BbE4374162333D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x041635715c70ea53C35552Ee6d1fAF34b4c9E8fA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd99E28EF233B2B61020927E85Bf89d4bba7e07dF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5665785813011A5c37c10972f8d3D463441637C3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x689A416F33c4984403Cb52E4D200De4FC1810Bd6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x55eA3d952cF89DA45272d9EB9BB45B46790c55aE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7417E3bCdE8726908895152A8F3925a756b1894D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcA4f70E0f3C22f70EFd9De62F96DF357CCCc4Ef6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2a231e4308C07cc69D5C4467fbE6a18b2Fa6Ef93":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd64780b6D3685d10eb0f32A4eC62170633b27AB7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEcB1E78A73DD83C3520af55d1B6BDE50626eFd67":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3F4117a7d074A20ed06a145a872F5B870f3C9847":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x72Fd4cdcA6d93897cCabeE904bc776b6660bb83b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9ffFEbf54cccd2DFE9531Edba4Cb413b2A6C1Be2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6f1a417e2dB2EC1183b9d91def83346ae8d842F4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7f9d2b26b90bF421a35A5B7150365598FCe153aA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x22C8D09305D827F1CDF696D1b9Ee309227938F95":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3e412B95f268f7f12c8EEB27EA1dA31C813075d2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x22347EE5359db71F2b8B5DAE1D15518EBe50Ff07":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2FB85b488CbFD871f3c84C42Ca3c8DC11c8Ab9fe":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4D04dd786C88D31e3d2d146A3c6320c23A3132D5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8fABCf470152e44E01750d50f3631F538b8C5d8a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0FacA1A5Cb35F7259B8F2380466be0A05DD4d3eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8750543C3c4D4cA1342e20DDfee80B2ef7Aa1a90":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x298016db488516E9FdB860E12424366f47E3Df2a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x62501959d7D549b5625E569342CB93299f572B69":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2DB6D8C600b3c55C770b0B821A975e22F88D0349":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2E380DBdc3bF0112A3d23b32ec56aBcA2Bbd47Ab":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAdebe12Fd6E08B5e7235ec07912f838db7AA3265":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0866f8D156DDdeC441a333117156A4fd23aFEE62":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5D62a226eEDdb698706bF0C54169c5FEE3F4713E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x818854b363b90791a9ebc29e2f9c7f1055ee5a4d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9cDdb9d39eb98DF24F381fA551a6D43410A34ED2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x91adb02D63c18F6575F59c68161B8a68c5E41C62":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29458f736833e336b4209B4514685f3Dd98FB4a6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD8aBcfeC16caE6E4beE297dAab7643B37e593AAb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFD1779090710934F2c381ECcA22B68075aaf3DfB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf0A067EAAE33F91F4ebb25e123334a1Ca8970f3F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7C888b5da98453668579a8A2E7B323f91E445f4c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1beB509874D823e6Bea7404B2F2793EC8659f63A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCcD3CA7841EAeb081d8CA9289B7E8A6D6ccCC3C4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9D6E610a671A3FBB6e302909617b3Ae2604692dD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x56EC2cebD7b7A163218A789cA0f2826012721eD6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63C964dc8fa9DEd3510af5fBe5Fe18baC844E69D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFE0a42CdcF65DF69e6f89998764FC509ff3b1dF9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAaD02d9Cc52aB8Ac6CC9d48F9a59dfe514aAA539":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd70b5947d42B3b3FD09c922633DcF299f47E0d2E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0d21acEB6A14f076dFBb3ceB997306C8d1bd77cA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0E91Fe225Dc45567e224E5cF413f618A1074b2B6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfdB58a3A3aBE546ED8f89d894A27f9B5DcF2f8AB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x060f648c33d7227d16c4f2b41bc95c5ffcc8e0cd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x167f2028e2410E0A5C51c62F63B8c1d4D26f4cE4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe21Ffc0C426FB963cc5c2af8e2166F31Ea35eD91":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeD5632E56c526F3bd1B47d5e88d0Fe5d53315AF8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3c4dd566C5F9B441e59cBE4dA0822B81B9500afD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdB3641140585AaabC22e26C72F6cBFaC4dF7eFe7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3EC360c21218887974984dAFfC30480D327f870d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x82767B4b962A2C8d0F60df6e4797D77aFb108904":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7711A9a7Da504edF800Fe80f7E52A3aA33DAD07a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x25eA6deA6CeB1Beb08453DEa701caed3bCe46484":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6708687b9F61f6515114440d59233dDb0fc2AF4B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbfC7235331682C98DFCd12a9319dfe02dB6CCD00":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x16F88BBccF3a483B19391278bdc9444F46f8828A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0bd6Cb52b48f084282174304A434EB44C995667A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa8E6aCea99357E010F3F88E3841ae1aa43D54e5a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x06AD2f93B61eB355e6e27D9eb8C67EF8eCcfA50E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbf35b80b9e771E8082Cb9740DD49FC5f26800d63":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE21D5E860E964fF9BFf3dA800ADFc2e6268ba410":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbb45051a5EDab022b6e39FfC7d3291c9aa267A4a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3592f06364FB1FFC68D320795dc57E742297ef7c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x40aa6b4479891C4bF2e5122ac90bfF31f4E8d324":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8281e0Aa17BdCA83611D038CE2CF0e4856Ba22f7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x92b39b14AA07C309317Ea0c1D5A76B2808Ef0ae4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd6347718074C3AE835a49ce31e293860b415813f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0a1d45542A6AaC01CceF66d2365b8fdD3532E4cB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5761774922b95084454c8720D647250bAD207EA2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xac552Ff53a21C170DD57DfA088d9899a07daD0e2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd2F1A5bBFCc1B4490ff5C3548bFbaFF1F74aF6A6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc42946F225dbc07797111B60738583D11DC54f2b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC90bDAFfa6bd488da7649744b6343e38b1f8a446":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB219f71958BeabaAfa343D78dc9b1F7AFbAddaC9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD7E17834F4AEF24F732DBB6F0D364AD5FDE9D516":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x30C80dd3e2De2e59316AD23eA960d3b013e93499":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe41748B199378b03978Bcca18Bd0401578201CD8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd880507D359af862A5f8F318c8e934Ab478CA818":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x212694d63a75124bbb898092d1F022f46FD0B6d3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd6109Dac18db4911B3642D9627E207cC8C6Ee6c1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5a4E4FbE8a951047bE0a7990DF46DD8Ee7a30B60":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEbECc0a1eB0A05f3cE7100f20Ec6b97cb93F0965":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x774D7A81C0D8331404eAe666b5822528b390B276":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc75dbdF1edF8301d5Ca89fE32F321eCec034C6a0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4aD330E8B16BCb8546f99239e1E4D95280C93226":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2e403B969a64BdD1CA18fE10BABA4546957bc31e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6b5b15d47ea518ca8daddf31f54662bb187de601":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5fA3A3872dd95f4Ca792059F9DeDe4a0C519f2F6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5C0042653AD001e74CbA934Dc38C7B9DdAb364AF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3bCCD29e913321fF41adBc8d128a12500b688241":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x003FF27Bc2a5dFaEe60D6e6450C516531aD8A153":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3dA56ae97f5606bE726f100891646d36c01fCb18":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe601Ce9b41a978eE16F437c9184FaCec9153Cb72":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfDC3492ab736B575d446d288E087aA69Be6c5b8b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x21a0B6Fd81ec697E326228DF279F9Add0D1B021A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x43b8b19B0064936EFe96ed635089743B5167DEB9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD38aAa4f17A3948edE996d3D8eA28b55B7C6eE7B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBaED8D4f349815568A9a36f45f6CC04eeC99D72E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1373867Db85bf48af9F3133Ab65097a1f561C069":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7Caf7DAC35eAc81d73272ebB30408D7fA6ee4dC2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB6D216c42324AD8e0119c5fEb495D2f174a03f04":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x26faC14186e4b247eAbD44c7bee15e4106303479":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x426aCF71Eb49ca11C3273379ee5c44885eD5Cc6D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x08f2E303CbAeED51376B8e948eD10ebFB8bdC1F2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf5ab4fD967A8D2513d5f5749905045d433aF6a90":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x03d835696c36443F32d98F059168D086E00e6270":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf8B41B4EB4D746696109b151F65CA1EA31d3A7B4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x71eC583a7442B97CFd30B398976b019f10683DBD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdb5720551425dEF9f5D766ACfFF33bEf88784d85":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2C0D8f4FdF2F5F98C3194B4EA5F5c1D67bcC4185":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x61CF430eEB4f75762C6f653291aC4463976b9aF7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeC8B371C2e20096af6e7B9d62e1EABC4a0852D98":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8E4d6f64ae10e74077F5DDa85371713C3aF3eC0d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1606c25f314165Dd5CC67919fBC149f3bd7BF9aC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x83443bc737af694cd26fd961bc13d5982292edac":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4a1332bE364B686AB1a1ADdC47287cFA58f51CE3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1100e400eaf3a587dd06880acd74cdb2bf52dcd0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCC991b0dA1C0eC2e7634B1e92Fe581614b86c7EA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x72DEeb5Ab757A53997b73086806d75299Cc7aDa7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x32882c68Ab8832044bbE9b0e9BeB738f60Ae4e2f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5aa084353AE452e07E890cA42Fb73Bf9B2D86D5F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9aD500F5595C9DDA818c3C061428E37b5c9af063":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x54fA8b5918B00f0e5024a2e5255AF61bd8bA7B95":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9787b0652B26A2916C561fa5256A90B04D088898":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7F0A650d08c5e7077C9075691ce66dF62e269F2B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77365aE372B9AF3B41b6BDa51cC87090aB19d1f7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4Bf15AB74F6A4CFA4CF02E1a84521523d897e4D9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x27019E69C37BD994A478fC858d9eddb5b6c72b5D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD575a54A345A43EfF67F90Cd5a54CFb4C79fa4F4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7f586889ccd5fb7bFbA7D40F2Cc64a96f444dd15":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6F4518B1512F7162BB798d4f5f9D879f101B6307":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8667603B91ffa9ff958893ac095A688FD80Dcf8a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0892eB3ABE97620056a6e13e3026711ECf5f33D6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaA73063743864e854135Ab81eAFcF29B9FC1e6ee":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x232E7d97d1A332cD9AebCea341cb2Fd6fD07f842":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB290Fd44A628A21FCCBf6347668D80dE4177dA42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD542363F17498c81aa07ae24140D7791640Eab0D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4Ae7421f4E2264CE3F38A998421a08AcFE766A3c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4148c36308021303CfbBbB46a47D7b34B2aCaEa3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb3EebC393516D23413E9d529694EbF68822a912C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3ae5381de8f6ca9e672ed55a3cd802286b45c9b4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x944DD180Cf568B55757CBBf3f14415E7f2be0d09":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x095768e52dC0E7702dd2784cfcDd919a04B6E4D0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x610C02e213496259DAeF68d8413CF13ce6306511":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x445FE772Fb15e70f7A400F32B6f5CC2E4bD30b84":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaDf094b2B6D2C6f4d8e60f714Be005A378b26D36":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2Df044d78017B06dFb41123bB4249174FB8728D4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x35eF5fFfdd91D6e3510Ff617B3B862c42bfA4371":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEC2DBbdAbcBe84E83108415A00c700756266fCF0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3BB649Ef4FBa1715e1B3FcF99D18A16b9Eea2E06":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaE86583bd7963433bcf2e59971fe2F6fB0cAFb6D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6dA31701A98fac38d0536E4889DD3149e4b961b8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2FE2D4362A95686093Cc24c58CAA7b239BD9fd2e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9be8e4E9D4A68bBdAa8DEcaE9f728Ed50599Be7c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6cd68e8f04490cd1a5a21cc97cc8bc15b47dc9eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xC08D2EF573ECEAE26E82A84B97A764CB1C39866B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3eC63E862D3421eBc8baFD5f467b29d9D8f3fcc0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5651aDBdcb766dCf855eCdcc47DCD89e4A281000":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAf750F69978B59a32b731BC88087A0E5A09dF8a6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x48b211039586619B04CfB3b040CDD12165e3a9cf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1f849e31d11cF3b9cA6125CD4Fd93E566f2A9E3f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8aEC5fcCa09c5c6310C13B6271fa1Fc405365F62":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3D18fC023a030d97D67Bfe5957d115083c8C4a49":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6767A7296ea3bDe8c01A1678E0ba3BeB2917cc80":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4b2161e13d3a8E3F4A13f9Fcbe31DA0C7a19998B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD141b54984321D36EE4B44bFC621191fCE95F8AB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFDE0c45cE2811Afe8A1eB05Ea8f2601AE3d67448":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x607f2b38E6d94bcEe160Fbba83EBB0Eb6D94d044":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3557E1f1062E233109fEa543931A59Aa922e8b5e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x30e02545ef15870C088e2cFCc8245056cf7fe4aC":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc75265Cc1928eC230D53914F3e9bC36845BaD820":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x736011B7d04d8a014EFdAe6a653E3405f3CDC720":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4a403ECc4e55DA801da79A6C5CB0B9fdAB87B296":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x805eb25d7c5e4d9446ac444f1f4eb85bcac2bc57":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb4361a60C18c992DC8eDdD27Addf8A8C29b18733":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc9961ACDF50a1cAb6D80241E0D7505B62054d788":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf947173d1D8D208252650eE8b66DA0e600266501":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x21cbff56FCcf44E5af5e1fCBa465b440800F87EF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3Be0cDbF9b1Cad6E6697fC153FbA56deA1bE4Ab7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4B0f861cA9455422fAfE7e7a6080F193B54AAa4c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7796a7f85F5C9E27B7ae6DC17711D49906D42a1b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x874F3C782cfDbD80f440abA5C63Ad69DEC41A605":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE5CeEE154AE2CCe4d37f0Ec24D3bc8cE5B0A78Be":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd3d4f998B66F0dbAfE5645D14f001e6852271Daa":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x13aef869b0187BA0d720C8E4de5A7D51D7B3423f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6D06a53578EffAC9c148a7D1669790bF83a6944B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x91A3054ba5A5DF8f1F6E67deEc46f99c9D693E4F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb94Be5cDf97401560507792E92c3A29102E5457F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB1BF8C88C258789a10144d1C476d47dcb2f41361":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x36a7CEd30611fEE2507F2678971867f4494980Ee":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb3215D514dE1a2380B7fA2d5E605D24193323eA5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x515873ec96A03F27EB801f4C3BAF4088f91B9bE5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcC1731bE4A6d2d6739CeA6C589aFdC54bf5495fE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa9fd776a50b60A1Cf2B872696A9866EceCbE1D3A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeb129015e51ee819E2A765B8dae3B76D13fAE3EE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x09c40F32890805a99392819c02Eb5860b71825C0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x29c813eCf79631f8C54e669dD74bccBaf577fA0A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa7B80231614C3985538535F0381a2A7ce2Bb9027":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA710c069237DDA9ffB25b5F7FAaE221274368c42":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf38B9784d7b2a6297b7aD7C7ff29A0Afc77F4EEd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8Cc6360E0Ebf3835616b56B970a7440F19066ce8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4e268ef3BB2B0eB025B42b7f1e93B9d42ea2Ebcd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xef252a2c56d61D5417BD59E2586aC0aDF3ce538e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1Cc6cA38F7791D9C725a3a30C5F24afA70813169":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x04440Be8b67D169F94678c2BC4834DCF3398F112":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x156fbdbA3a032751c6f7A23fCF68ee3B7ff3Ee71":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEB057C509CF30cc45b0f52c8e507Ac3Cf8E78777":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9eA0C4BB61096ade0638E52bf0241deA5c2424aD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEd03D5D86a113de246bB8C063401554F41108183":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5999498C4EEDBa03a6D9DD8b52DA5470d807d921":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x69374083e0A19e5Ef86F9DAFb2c007A65841Db1e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0c904bf30F05732c16e1886e2E2613E8cA778585":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1E6202c6799E41E444F912227b3E15A1eCd4b91e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5fb8B8d72A3986d9CEA5736675280C137b5e1F9A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2FF162e2C62fDc6112d9F304B416fB48Bd120B32":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa3bC1b0c0205847b5fAd18758571bDDAd56e5797":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xb781e00935CEe03C817c376b9DeBCdD19822b418":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7d608992A8c260DA65e1834C4f33Ddadc960F9c9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE2008Ef79a7d0D75EdAE70263384D4aC5D1A9f9A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7284BfCaD25b9d16c5bACf72783C8a16BDE5763B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFA13a1Fec81f66a31daFcCACE04Ecef65eddD06B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcB759D5a7D230E6eC0b02347dEEcD61a662777DE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2D5AA448e1Ec8B393f926a78dA64e60cD5d14703":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc16373B5Fdb767C5c10b1EF1668649F94F925E03":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8A5125928Ec63184EBdf2ecb5300D054085466b1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc2c0194cA72D647AC492D1A962658485D8Bd807A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbd0049aD63411d25819C200D5B5c2601eDC63A37":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCFFC9c89C666456819B9cdd4549cc04168986AcE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa2165c20395F602B1bd91a6f311858386531ea93":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xF5519780a8Fa2416b88C6E1d4d45cA29db101660":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x915D26FA87D887e165d6573A77461F79A3De37Ed":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x702428abEC56404D3045057462e1b43595ae67d8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x68EDd56e13524C78fC15b7F1FE24C3F5b60C928B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4706a731c981Baf43982624D648DD5c4F1E6151a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd4eBC013f5e30A6FCe6DA0391fD5b84e2e72c93A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0E8EA0e0c73827E436f2D6fcBdd5082bB60460B0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7D7753887915339438207763880674c1C7fBb482":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x13B6F48B7D831F875771EeCAc073A28eDA4b137c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9bFf070eA85902dE09e1FDa1798E9B805dF2975d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8ea1726128fe7a3de7f68b152d35276ce14207ad":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2e185636571c331d63993c7a1d0e8098321418f1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6B0b03631897C5e843d2572dA36eDA5F79E7a2C1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8DCd8703aD26a51d62F83a2A94d44aF87DB72367":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x11741D1cb1657DB35EdC8805eAE8C4911CEe2F71":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1563547DD0c62A802779bf55af1184E65BB1a6E5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xbdF4B597DC14ac8c64E5F34e4eB81110DDa5BfBb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1816308Ca8CF95B0EDEeFBd6d6cd48b59930c194":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfa2ffadf727d11b77756e3e9031615f5127507bd":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xBF4Bf9f705809bb341908342b0856c3c6fd5D64e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6FC44766204Bd263b0A8aB1B54dECc2C22dE3d50":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x52918e7457CB0e526fd592e2E573b67Bd17DeD2D":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0883cFB2aD3256Ef822AaAC610aee39127a08dCf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x46dc1c5f801822a00A268a7555533D440273C8ab":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1087281C196985BBf5B68677B2EeDf2f99cCB018":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0A389DAedcB0583838def855cd0495028a683E4c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9Cd75894548a8969E924F0B3aF6bF8dC27612b71":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf2d2a2831f411F5cE863E8f836481dB0b40c03A5":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x203750D4B97979e1ED4Ad083dB831a5AD232C169":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6232d7a6085D0Ab8F885292078eEb723064a376B":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6297D8F6832B3152EBbB679B6902f2D0C010940e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x78E86BAb5453213841b10cD427c9b77Ef82C329a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7b46f38AB6549c63479aeE82530b67e08b16dD59":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0b4Ae5B1db33c238844F7ad71CEBD258583d7100":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2DDa27632C48252Ff32678cb568491d85501dE28":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x81E2C758CA9c717E4b00B5dBa9DF7459B68290FD":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcd43AaD533e663b726DAe4a08185E9db8eBC9f6F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xaB6Fc9d3bc84954375DA9485b17A6F350f1D7dEB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9B7D7c4ce98036c4d6F3D638a00e220e083116c7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x478207b856E109FA77b423A2580F3f890b6933Cf":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8c2f0B4bcDAB83b1C05CB769262f692aF74EA2fB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x714C0F366ebBbA21FAc7B6A2De517A9EBeb7231A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xCa94516Ce155fFF1880F297fFCe99173b88822D1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x608Cb60905EfC0b59ebaD8A9C650A410fead95A0":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8Fb2A5d8736776291388827E9787F221a1d3633a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x0CF29C333A84064723B3c8d4630A5AF539F18E3c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x627FaAa13Ca3D25BF959325D44543e04C99cceC8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77b5B0266D16D55351680B8961784E1c85E12c14":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE139962e5d7B07A9378F159A4A1b7CABe9Df1d6E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x303fC875D1fC3126B1bA0B011eaB69a506C50a67":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x556D8baCD8cE1E0f59a1A3e9329C53530A9Edc01":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9c53635374a831dbb7049660bcb071a688e49930":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEd740E1463b085F34a245129564dcef539374C2A":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x25968e4c4Db0851422A065be460E6880A1E76141":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9819Ee2373457e5B92A3847a635490B242B25639":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xba69593F1F51D4b2ff0a73298c8bE0C8586be931":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8215503B7E5A27469C1861837c638198D1dCe238":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x735eD02655Bca15EC46491C0dE4946591135459b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdE8205E8Aadfe4Cc6e7A1Ea369dBcff4179D55b2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE807e147Df8F55Ee8E5AB4A7c48AD01e63FC67b6":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65C337B3d2b4C2E208801d95eA55Afb7409eaE2b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAcaF6D4B71f850b2Cd1875d6eA7f7DE2967Cc21c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf6DCa69BcdC99Cada8B5e069a4A3cc659D482559":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x17A525ae5C6004f5598CcA843Aab9F2CeBc886A2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd4154916d1330A7eAb4bF3e21295295805A1AB4f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x019d78D1b7f8D6DBb3A4472f8882344f7fdebD4e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3b7318457f091965c488dac7e58559993e4971DE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2F061aA574882C84649230b475a44D35795cC018":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE0bC753e49aCEcE82f436A00EFdAe9D70EDdc68C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd7BaF6EA8580Ba201e4C9B75f596f8e4859f0C75":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe1c15F1f8d2a99123F7a554865cef7b25e06d698":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xce08958266f58b638527b224d8b7141a3ff9c77e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5c2e883b16D73180F60FEbF687B74EC615D1D544":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xa0F6f7392283163E133BdafE35F8CD7d52520ED1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75662A623b3B1215be070FbDA87CeEb54C368907":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x94ADA56Bc45369dD0c1df315B3543d1397E7574e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2da6014cF9D8056645E2e9B1ab47b799EDE840aE":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7b2Af7a96Ae32d71EEc4d58708C046C588136683":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x891E8ebd0430Ab4360b7B74996C2AEe650A960d9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7ad517B61005cBc5fe33c06b7F485961CB6E61a9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6Fd4DeE3C0351AD3184ed041E719D260B8D4dc92":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7C7252B38450f92d27337dCcB0d013Fd0AF1ac74":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x435a05646bA2994751B3d93F5ab1450C109f768C":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x79776E826C78f0452a463ee27b9D66eBe8cEc865":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5bb872d51ba73847dcfc5031fee0af568d2d83e3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf06c79c4fa207df457295d81914ba74a7cac6bbb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd890B6F0551345B8146f66F8c329f70877c71119":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xd2B41B2209de76ed2B6224e9204248d055ee20c8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2AFBC4356Bf863a029ef58875Ad00CF6B8975A52":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE0e097247F0134DaAAbb03b9d9F7791a0BACE99c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2481fef92f6358a410f4b42a7672f23cac514c2a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xFC3733587E4066D664963c90CA3bAF76ff05fE46":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD69f170D82DE974cff7E81E6aB4Bb09A90dA71eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9d156bc7c8768294510A4A41883d5A4EB15b15E3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xEbd6dB5a58c9812df3297E2Bc2fF0BDFEac2453c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x28265b4188FF587E5Cfe1155606026cD2CCd243d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x393451651A91EF458e954dB8804D42Ae15bBC813":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x6E1368C42c9cB0a51A55228BF2de2c4738e83A60":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2eE6c0C72952F280876da353973caCBE238AB334":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9fD841A70b2Cf43964d46A742636d72Effa47DA2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x83720DB3C5675ec1Cf50471B7a6D3715e4a93693":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x958559eF569BE81A2EaFB55B86dB0fad8326b96a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc6cd72c56D94792fEC8aEFC492b185aB68DD9a21":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xcB9cADd85C510ff5a4Fb2D2bB6fB4b74ff3aEe34":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x814A19b98A84EC9F72b7609A24Cc6cD35a2d0B9e":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9F50183812BF7DAD0967e6CB42aa041919c13026":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xA75d28EF5aFe56DC916a4b18070a0Daa2d3429cc":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xB9F278Fe221CCCE7B3fBB8A8C1Dc5Bff49918054":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x761dE38d73B4E1b0240f731a1ed37bD879281229":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x2492A8400813764952c89a88232F1221858D9C10":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x77D74a7611DB43241E25c65888e6a26fa69019a1":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x5d90576d027480BF06f78AA3E9A9c346F61eEF29":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xeb74c6e3c046e16190dfefb7d3cba84db5790cc4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x63eE555F1fea9798f09069b4830CbaA7E6E251c2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD5730BBf7897607b2302540FBA00fBe6bcB42880":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x7B65803C229A2044534c95762018FFBe01207c27":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x4D00E2DDe0Da6386E888f2465e80162F273B7552":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE23CD65ac0253f67Aa75666765E3350D14117866":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf7bfad89da0a98AF22140fF10A700F56fED3ce22":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xca8d13631bAD77f49B7fB3dcb82A13A81faFff54":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8484fBedae4E9b2e26Df44b92cD5f81B71C8150E":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xfBf704AB4c8255a68d127A34D4e956594f7f0C2f":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xAAe99871b32A731dDeAEeE18517E365eBE44F395":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xe68f971B545570A469A6bCc99895119A4483AcB8":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x1Ca0196A35CA44540616945c27c79eEcC30D2c6F":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD4c6325Bc524bE5F9cD4A934A4e163F41f061aEA":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD433c1B56055b7aDf8e5e2982E7e2C00C378706a":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x69b8A24edc9053b3D007710E7B986dF40a0BC7eb":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x697560Ec40177d9f3B450abEA56700eD84df7cEF":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x8f179ce31fCd8E335410E1A2281B4AfBA815DE2b":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x885818188ff2FA182BAC9a8f0f427dd6dA804c81":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdb88e9CeDe3a24e7070450fb166Fcda4B787015d":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x461e76A4fE9f27605d4097A646837c32F1ccc31c":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xdd82139f133F25ACF2B711664acA8Bb676b85699":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x3D8555F7aA7647d24dFdAC7E4E6054534627b800":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x33c5756ed0a5eea92c4de11cf181910ee0e677e7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x65a441c7A0607f76B3B153fDe0fD2f3a920CC8FB":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9C1dCb699e6aF3AE59b7219e5EA7fEf6D9FcF9C3":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xc61CC53572f07062731b21685F07fb1d71495fC9":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xD9D4e0F4C81d13EDF3eE8ceC6Ff026a06D418301":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x05A13aeAD76EF4d601ee3675f7C31679970EE0C2":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xef8104c1F471C1995cb6F7276716E8B38dc1B9A7":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xE55c69cfD20Cfa25651c72b84383dE6104104Eb4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x75F2e07B7d6EE6CD0A5889DBc0083c428D9Ee3De":{ - "1":500, - "2":1000, - "3":2000 - }, - "0xf174Bf93251c264d0322171402D70CD1f3493A60":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9927D618FaDB02aFff86A8Ea7a2427A53182B711":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x9F5141e8715c6691E75188BDA726Df54c14721e4":{ - "1":500, - "2":1000, - "3":2000 - }, - "0x260eEb1441280Bd0987F717F0B045dE455208e71":{ - "1":500, - "2":1000, - "3":2000 - } - }, - - "PUBLIC_PHASE": { - "4": 500, - "5": 1000 - }, - - "ABI_roundBalances": [ - { - "inputs": [ - { "internalType": "address", "name": "", "type": "address" }, - { "internalType": "uint8", "name": "", "type": "uint8" } - ], - "name": "roundBalances", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } - ], - - "ABI_totalBalance": [ - { - "inputs": [], - "name": "totalBalance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - } - ], - - "IDO_PARTICIPANT_TOKENS": 37500000, - "MUON_PRICE": 0.02, - - "chainMap": { - "ETH": 4, - "BSC": 97, - "MATIC": 80001 - }, - - "LockType": { - "ALLOCATION": "ALLOCATION", - "COOL_DOWN": "COOL_DOWN" - }, - "DEPOSIT_LOCK": "mrc20-deposit-lock" -} + "allocation": { + "0xeDb82EAa5D2eeb0156528D19aF8F942b65b377c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb57490CDAABEDb450df33EfCdd93079A24ac5Ce5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4CC129Ca88ff495C1E1Fb33688FEf77461dD2b10": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4CE6Fc21d309F7A27Bdc42D50168e2AEEfe80966": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8849857Ee94b3558A91F6C4B32e776c6f6A8A6f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5E18Fe3cdD39C924f7d2F03fe9511Abd3d31A6D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x720d07C87123c203300e3D06454Cc52642e3DB21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D4b88E19157ba9522B279211403Ad99fe8B7278": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14108773Ca6b9572af48CE19f0625e7154bDf2E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0324ad8B269a7CDC9Ff3d7962D3257F9C94c4b3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x449020a39C9Dc3966Db7f12a3E1C8Ee9EdD23B9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x918DeF53676ad8D5955C637c43983d1D7Db46DEA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61BEa29643aC187088e916609cA2c1BcB5c3875D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1aCe01A1fB96aD6325f99877b08a40fed5f89A04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bC7893646C7F842C02F37eFdaB2805aC5142ed7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d97cd6C9DEc4255ae4F0ED88593fdfbB2015ccB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1fd8563c594cB7480919a5470EBc21EfbAcDEC9b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEb30Deac6db83eD3e1ef97FDED89a92bBcaC263d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e61fD005E8fC4E120fD288a8dE47AF343028d3a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x478de03AC3671051F0Ca1b406892322785B36816": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x02F3C467118850Db8cc8e49f8B0159F63B44909D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x556e8feA3b3E44588edA68CaEB633CC14d998c20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe12D11df5e9D626Ed3c46fa6160bdD94B5Bb193b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Ce8BfA40942C180B4c40c72632351681325F2D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x054D816635A5966121f47107A8CC3e4F1609d934": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd80672Deca426e918F7F3D2c5D98bc2ae745B947": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4CdaE28Cca629Fb033cf170032a2A3079F1a7Ba": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x243791675B5C0db7165159E0D4689B2D4f558d5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC19d8a0872666741A15F370eaf30115D1Ee6B135": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4E5e3e9f936a59568C3A7c6159c5cFCE328D496": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x465F302C87D19FAD8D0f3C5156eCfBEe2B97D342": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb891072aE0B15B2BC60d53E5b91f9Cfb7C47289": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9709Da4B1cA1B7296d6c64633cD2f3F505186AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f6f76F0Aeece29556bA1cB8CAa59e8904B5d19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Df2b2Fe0da71EAF9F3aDb0C3e6Fb584932Fc93A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f52A6888e9D0ED7DaF51DfE1CBF5C3d25987014": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D63d1ac6ab0Ab7d003b12946b0ba590c14f708c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b0649B83354a57c4C851092F20E7833Ee848305": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ec6bE1c8630A54DF55D98530b89cDfEa1C11022": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33870B891b4462a2cB3820ffA27BBF2568251b6F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc959c8c2Ccd5f8CDa447fC593c8b335484901790": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa650DEd93F54D02920E0Ec5217DddeE2c9e6198C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84Ee322C64569aFA8C0f126723452202D9d906Dd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcD180Eca01740098321951e9698a43520C3B6fAB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63Dc9faDD8d4291D094bEEE268468f2946C71F37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64bdeA412a5175faE2d084D0FA5f553AE107d466": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1eb8DDdf92Db67D55D57cb0Abed31acd538cd34e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9fC8D24063e4fC60863E59CF7d355A9f446Df9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x054513707f310a7D12Ad6367eC875FD8a4E396aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6183445b14A09f3BAEf63Bc4839Ef54FF1fb059E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56F6Fad9310d0D45C7272F4e4D2294CC10D1321E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x286199ceAF739294Be9f2fe985eED0b001Fd3F0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0224F15eEAa741Bd0E861ab13398F6d975456e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf9b2F57e9d828f84b07ccdABB77FfB404a8506B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2615b5D4f7793063E037D51D54DBaA69254C9ec1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa28ac1264Ea4Dc2fcAe85C379A25E24B44A1aAe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f384331714D0ED9f549e133e402E42f38376F36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC39B0d8c598ee1Bf6D98B9F918f253Af99A2744d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x50b818d4bF0E3Ee535e6356b560AE0cdf4c5afDB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC06d8FA518Ab6441438BEc506fFf785b66ae9912": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9efCC59a68a27f07Dd946eC8a63dF5CFf760eD4C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42664Bf05C3c126b00D26EA3093A5c3B3D898a15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94A49666Bd0453C925c8612a0822E48Db86C8235": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x206067193a7fea2e88b33FB8B2B0542731FED46B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb44FC6b75576BeD059BACb188c0B466A408Ac7AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29F6710aFac24D28A4D3F329eb4Ed874d0Cb6921": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD64C20e9627a2832D4e57b33314dF88D2FFfb52a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x884FF2A87d0E4349445bC91dEF1ebdF2B6cbefd4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4AAE8E210F814916778259840d635AA3e73A4783": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5DfFb97792fF5f1F728DC560feC28e420B6fD9e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDDE733b93C63a777b9ff1De617BBF54dB16410D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E8efEe74aeff5c49342B4A498a2ADa84854c67c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f278CC17fC894208314deFA44ab64dC3B34F47A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7BadFf2D5e606AC60ABF6719049466b2E624E291": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5B1461b986D6Cb70aBFA3D924C5767B18D49E14B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC7C53721dD281D8C590C548f3c35A3412403e60B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD91C6F109BA732b8a16EDF920d8491fDB05935dB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xab4363Ad5C48B8B28Cb3C15cF653Cc0988bFBBFf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14C330459B21967323E74f8517e5F54915792a7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa76bA11Ae56fd4966B019dfEa634eCBd426ca55e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3B4e4466f385562bB7dC65f3E4FCdfC7414dAFe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x928b60D66343F159C85B3dab8a614016B774856E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x029290c564Ef921c56a784AA16C97E930dAF7372": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x538F418DF790c7009CE59eD69F2494E3b79b2c55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fFe16385983264b51814FD7A5e3Bf34B43847c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc89fCf092918cECcB460b41D27AfB860Fb96345": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16b59935FCf119C914302a3cF2D06A5e202ed22a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23B71AdDF8eEa49506aD7FaFBC394adf348E97Ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F8497037A48D3fD51838284F49Ad59985862865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf698e7cEb84D072eBc02B355A393a67516003CEa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBBAbc2B3BEF7af5913987C4ebbD9E0c2876eB717": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4C43928621C0A39a9753184C2aB3B073f85eab40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC75ae9180E8508488bf52f56fbf3e5d9b72fd28f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D068D615486d5E7DDE0538dAB236E85329A0021": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10b0D4C689DDfc02cE07C28F46B9Ae4C9ADC3C44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2007D6f803F33dd0e7a307faC889958632712d8B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFcAadc14Ee1A6f5B030Fca5454Ebb060C8bf563d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d378E5c8Eecb1f0214447d6231448F56a3ee35D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC90F53218b8021D8369f57084FcD78f5C37398DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55e75e6710A3629478fF44Ca50d224FEe89E0F9d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1131722410Cb8FDc299Ea0669256bcC00b208B1D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE4e6852c8e89056F96031283cDCA8CBdE435fA3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8590FE40fdc8cd6bF9e67Bf2073716230FF16f42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbC61053AaC2acC27bB8AC15F88Fd44b326F3e72c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0C1098c79876ff421B29a2097dF182E7dae1116c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd534f1799298cbE201a55E52FeCb2C80a2A73adE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1fA50dfCC60DfB656D5b3eA80a162da896cc7f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA80709ae5E6Ad89Aa11d09B90d6A6531499C03A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf00C65c7113E9b98225fe5444121C4bF967d0650": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19cfbC0C0Edd85803049E8cc45e3b1F88BBa94a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bd20EFB6cCd3585675EF91874a9818AbE2b45B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe13dd5586392b8C16CbDc3Be3E45Bb79006205cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23Fe0e8C664c47ad3392388e9C438a2768973f79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c4201806Bd97F3acB301CE20D62ed51fa29E461": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A166f2Fe92551d6058777367634aC0D471c9C80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA130f341f1100Ed2b4600336a6Fb855043C46731": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9B741A1Bfb5DE7bF6dCAfC4b0648Dc2430e6e0AA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x124c5B4e6544D73A47f0A14433F5A75C92b9Fe73": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3500ad34614b89544BD5671AF549C6F7Bb948cDf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9af5b257B8209D6008A2436594DF12a0F13FB747": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA43Fbf78d74D7B5818B34b0805d459A438345641": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x402824c43D9b95c3337892b4d39f4b222A46cB7F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1eff5c785c43E37A3D2BADb3631743cd6c5E40Fa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3a426D3E1ddB5bb1dbDfA9D409132c036bCCdDD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ba65990cf61a963059af3d6f193D967e9343BE0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33528E95db263686935F11c1a35931C1dd421CAb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbEa177fAABad8d84b3691BE73645A4B455Dd20d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30452F6B44EA87a1A9Dd518fEb4f5E292bd91e1f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0491ca1BE2dc5FfB86cE7972FbD5459DdcF5184": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1ade4CFfEBE30590A9552fbe6C27BA2def37D19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x502366d60c5ECF92ac96E202837951A86D0e6102": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdb3c9373FE06E4DBb31A0F90c872e3Fd848cbf2A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x413f35c8b02260f0a199aBE8da78557918ebC46c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8A72F456f4e3F153634d7713a8Dc32cC4AD9dd83": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x527ED2DF55E8e32C95C2f4f510F22B5a9BCC3Ed9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfe99A10424FcB3D3030192d87302C94238d56e8A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6F6a387019961592C97670FC4C243F5fC6D2153": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x255ba29130ba7930c22c1D5Ab33E99A17C45E317": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x580e5Ef735e0E83285e5Ee0e8C03677a3Ce30C7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD63Eb32F5CEA9c05876712d8C41f228Dd9Ea49Db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6ccf5211fdbcB0707ee1AC2735D9DDf8909d1C19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbcdd07326A797a06A392Ac79a1d7Dc329F589067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB2C3B1299554e37DBBB39b9F7b151734545b05E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB7E9b1010e203C397b009f831e45D520Fbe5723a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3f9abE9D41368596201c605d439A5C7fdeeD094": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b542E727C96AC25df977960C1c85B89aD41437D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6AA33d1F92f2b64db7Be6d8190390091dC69c8Ff": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65e2fddb87C8eC5D0B51244a9eCD029E8df32d16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaE86A6E79aE2642b6413D43c4b192cD4B4ECf59C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBD430cfb43f0787a2E73e4b8720544f4bd09DF50": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e3De63eCf7421944412509fd4A0b79466455349": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0B299D802a3De40C8b74e3845ee48B75cb8Af9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeACcB1042405415723A91d216771d535857aB410": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66d24924D124EE838C580063bFD1658dDfc13A05": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAfEc889E1e57F4970425323d71C7abb085265729": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0422b3E153a305aBE093f2B2dC90aa1094CE653d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12E0694e7BaC62747f2Ef62F4504a25199B5ca27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfA7eb6278d3bFCb6b5607A01e6603422150d4419": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3a00c3CA08A1BD29341519A4f1eaEdBBa82ca39": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5acc27d89bd9752f7C07093BF958eC7C647c6F2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb902B6A41000a3807F7fe19744BF111224AbBd9F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1FaDB61D41Bfe71b990145390CEa8f99e0284E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfc477F3b1A2195948580253829877aC07662e237": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9246a01542D2779635CE29AC3A33500779442452": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9368A8296E48FD7527e5b258e593e53FF7F32Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2c9748A2762103363E08273922C686dd6FEbF17B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77884B7aEaCcbf1B8A0C5a33E254391b9B49eA8e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61Ac114D3BaEA159cBdFb8C0613B8C84277D8B72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1355E2808b19d460F57d9650f5b3725956B7D060": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1dc21e09c310cE0273F8D5554AEDD848dac97f74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C797e2350Aa0FFb6c52b01DCFb6EF89D6D255d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF47fCCeBD8650838001588271C9BFfcba4CbF1AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf927F8B12dFc263b05e5355cdEd0a0008294b026": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e58132B48A5E72c6EE5204fCc9011638116d3C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F6f49aB08bb5b6df9bD7D357E01e88839EbC9Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5bB10BcBdc20a928eB07DDCF481dEA7c667698bb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0dc23062D8886b45a210325Fe95Fb4986B634561": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e841Bf726d8B72c84CE4cfa9Aa7cE8059e4B3d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c6410396Eb84105Ad728b52244178BE34545fE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9973d1f9Ac6D372a2B26c253e17078Bc90277D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdc9B3886d7bf6B8eC6886bfbB38aa381bA47e09": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95AD56dFF3AbA310504328CfD939F479cAA699F5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFe8eC7DC678af28675893890Af13bb0c7B242C51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01b23f8cc7FBF107b0F39AA0Ba7C17eBAFb5D618": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40903584F46E4e59a16F726DeB2F3088FF7d6306": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc27636e29fA870DC22FD7240da3104Bf1e5fF195": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81FD1f668BF14736231166dda22b10D3bc9388D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87a819287d0e55155e7578c499E5B0571Fb00BBb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42AA6878019689A61720DB7512d20655f9d2E4b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc27FCCaB56B16156804F735e2140012bb84aB1f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3DD3FbB690cee983681dA5c083569f2E7e3b47fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbef62042A3828011Ec5E65BD3Bb1D04196ac8720": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A598e7Ce9C79e7555739440A62C6eF3430F6bBe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B4A1FEd369aF43cb0901219fDB523C91709347B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81839EaE0E46885faBa7082203ee9308D785871C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x86A0253f3E40342E5bBbfD19F6b189939a5879AC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68e1a75F7d44463F30225e1a57F6aFd81E736f3c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53563Efbf3CCb1014dcB37978a6e9663712a4c7f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF087aCcB193b5a22407878ED324B5B547A2EB4CE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7939aa0E09b806763fd4533014C9158dC74ad0cB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5954174A6f56F24130066b21a9D866E3D348f363": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56A226049f88C078A4F25F13ADdF254DD5986446": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37ED81Ad6f49E5aE1A3E9AD54Ed3b9eD30b47cec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD653443d008181D2733Cf7428aC63d96784e801c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AF2B1A2C5714d2291049Bf65A4Daa4Df79eb93E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x043CF0414AD2991e910e464E4F3e80F14D7Cf0b9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5045Bcd57256462bA2639231d9639b9B290A0a7C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD871915A0bd59103AbA2172E1dF959e55146977e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8caC061efbc42F8e9bB48772B42AB07ACA89c86A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34B6680552E959Ce353C9C794495FFA9d7d7fff4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x287037283Dd2A60458C74C675746e18Ce319F205": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51892CF8845384E612E419284b4dC636315e810c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaC1865e71552c8FfE239F8E95461d7E6D74d2D42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD58bB5E99621EEe8768E651bB36007FC622e9CCE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAecDc6B2bAA5D611796C10ce6ec7CE1Bf37f30bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F13D70A9C7D4661B57195AF9F443908aEc9daC2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcF24f9DB11D7cf69b1f6f438c1A5b576456F6df2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49ac6A3d7830292D2BE2f1416D4A53ac367a7463": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01524Bf6926c04898feA53bE4aB34E8AdBC931F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBae396d264452921FCA831B534902e806b166c4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD95AD0E63f724632ED496786361ba9b6DfaEF9CC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11faf40FFc2F2a60d22d5431ace9D9d61612D22d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEBba2585c2628B00b3f224Ee727e7bb3dAf6d07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x343C80183e14183024D3a2C822612B78C94ed2D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfF7fD844B7AecFD4cFf577d2deBf7C524ea5D6c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5844DA3A1472FE6A811E28331daA66B32a4e624D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3a32affF419bC3a41c68Ddf793917CEdc6FF9Ad4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a6481496c2da4a7FD40fC43842178cB2F599d90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D9C651bbc2d41FBb83a0DD1fA59188fDB897098": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91cf6f1601aC171f277CaAe84b79293280fFb1E4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9663B3d553e63172608D29b2c5530b53a1ABC263": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEb60bA7321e9fd8F811C50B2d9a036797982f523": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AB4eB43Af17f29ED36E33e9f9eb60dD5A5e866C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73b1572C0D1BdCd3aa9E4A98e6A03B5d8e6917aB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1c9782a047C2918f7C7e34B20Cc9aB821b4914dB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2384194Eab2AA0B4DC25F8fcD958F7efCfF3Cc1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbf0A6D5580203623255385D00163B83a4a68707": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38E14a38Cfa5d2C97253c7815BF1D888FF7d9f0c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd8F87aCb4b9f86Dc65B0ea9A69522127e0f53Dc4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fB39dB5F14FcE1900dcf98162747C90f1b3c37c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7BDB641547759e184ec5439FddE496937d197355": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0cAF40437269caC99B47F6Eaf19BD04B17024d76": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDd5dB43e5B360F07aE0DD0cbD562a6d1617FA716": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4a586D0B9eDB0605D8C63f16b13CFb63Ef9f88Ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA2C434F6A06D59f8d4584F82Ae39219Dc74CdB5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x849C2DFA3b19Fd683bcF82a345F9f630d79D6215": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD11B8C663714A3AEA6F968009677987329c43aE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65382c6DCaD251Ecea9000497C683f7Aa3850aF1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCBefA20f73335A8B7B434E040C610aF247794dc9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2de5f2A28c6fC68bac4A7e64c51A025217f5E09e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC4D3F6feCdAe82fCEE242c794a08093D3024b576": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa62FbdF01F661BCBeE4766bcb126EE44f1E8FBFf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdcc8EBe0fE65B8f0321509437EE5a0d11cBebb94": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA8995b4126e15FbFc629744bC506ca05c3Ee3fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x290FCd4556BDcd4D05DA39600881cE55556c8dE3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55ea799597fd1331bc8F55c115a9C3e20c133e5A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3155066B5C0C80E9efEF37FD9D44BB7D201dd71A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDcA5971689e7f561aE4B84954C821b87764B3d9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC7CA66152d91141B5637fFBCFB2157d9Ebb4A63f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB01BcC2c7b6f8B852866cE59fcdEd3981a9FB95d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D4AC8f94A03544Ad6CC37eBe815c27e1C6e11aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28aFDAa65B529fb53fdf8B73C78e8b66AB1824f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x746a8780C65b53e7881aD6e5EC0772e2c645C10C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2c66f5f1F83c05E811917Ba44cC2745A66e9cB2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3d4113B1cEcdEe2E91e7054c7600Ef25f7915Be6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05098506dcb81680d181e6C311019b4F2E700200": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA830A850589Ea45F909D12F13Ef892c59F3C2FD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCDaE337877ADA30CfEf47995788c4496839E333F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0213ac7D6417C10c1aB433612a522b1a4975fE67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDBC60536ed5D774F00b6FE4F4270F42b713c3896": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8224A48B79e69041A075643946c85C2316E43428": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15fb86328E91299B707242c71aFE13353c96B6Da": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5189E17D3dedb230567a40de17bA919712a5f21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb69B6e08288AADa7CC8D99327EB42213Fb6bbeDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2443942ecFb90ae63e3c46eB2314d1F0E3c3a4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcFf7BE8332c5c001ecD32566e6C5c1507E7E7435": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd8A60C70C9194641A4379ed5150E6BaB11341Ab6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75dd5b5B3D5FA3261b41e62b90772fc1FbF1510b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFFa76AA8387450e54ae290c821A56d3152A8dB92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7925A5cD172C203353ACA3dD71b8cA05148ad3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b6c7641f13Eb16c9dBFFf2F43032af426E3FcA4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f5dbb63cfc56a7a22a0a39898C6CC8C5A7aFBCC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0927A8554E7Aa892F4B6381Cd04E33fAf5b8cbfd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6146745aCe59Bd6B15Fbe7B52CDB97794291f4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC742A2F67D245970cB0588Ffe0807dCF194eBF1b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x537AE9D9021bDfeE352E6eAdb9bb41F3E45FDBF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29423f7d062c8CFad0f1DFaD2D325E28bff2777B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7De6b064b1c72BB804ab8f1be30112fcE84b6693": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcebeD608B507B9dc2A5Bd2bdF3FF6121315Cc2dE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6Eb5264D6B427Eb8840C690972516F931A28c37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37267E9Fa3eDaF91e0f3582B53d5DD00025D3a74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80b744588fd2feA8ef14386bd953493A097eadb0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C795Be0a4887816Ce761D41e482fcF4fBCa9963": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b4E19f8D24b33937dDF3210A81D6AeA54402e2d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb79BD4C2FeEc4189025FA553715EE297E110D36c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2fd42110f478433812EB741AaCB4d6005301edf9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Fa33056D9067Ba93BC89a3366AAD64952743028": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f3E36Ef3c24Ef8fD5e8e3194AbB386b20aF9b65": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF370c2a150dCe78F6625658A498443Ab68ca3A73": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x715Cc50A7aEA3ebA30b5574E7b469577e4C547F7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF7DFcd5cB081791BEb3CDC7271c29C8EE860FaDe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3496eed23CC2B0219F31916044595c6787d8279": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x385757F0364eeD6148042961dDb92cA9FA600307": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcC72D781BF4F263EB1afAC43632905aaCD960736": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a2bFf68d2591480d06a98840805F14e65cC3aaC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c18FFEd1d4C2eE1169DD938C96D3BFd84A8EC00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71848CD5FDADA3a5055623b30B09ebD6a2124Ce7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f9946AecC395eD458abeE7983e04A7B082081F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe53D26e4E941D06AE5E00C70B613bc8e8ed87512": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91e3d5bD52E1E3d6765Ac3d8BdE3dEf74CCdcD97": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66679b38688a4bFEBd90A83838c39BDe36d0A161": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1BaF16c71Acdc044bD7B6E5805D93A8b2bE90E78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12797b71154fCB311D6C92914729E86253dd7D0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97528D8E28741240ED6219Dd6E1A848Dd57529A3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A9b3e3D95CA45e39cDdA9345de9c1e667a645f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeA72507A3b094F03492DfCebAD1202BC83596DDf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa585De16bC74E2fce7d7b17C2D1e3D5D783a5C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7e7843B27b89d692269F3CEB1577b649b77F05b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x416C1018Fef46d19F7d6D32E00836Bd0C8aE2CC7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa972836F256533A8f39661d6c061C3211C80cbB0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42E4F53b09250BbbFF141B4c7EFdff2AD9873eD0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA878f074Db0d79B9613812d3316e40352ec5aA64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc191a29203a83eec8e846c26340f828C68835715": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf4d1B6fdE396C478741c30E045009e3EdD92669F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF9dc1Ea1B25a752CC4882F7B5fDf3aA53cc32eBE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD188fbB8bbf515D5b06c3c1e77130C056f8F88bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A5EE74414213611378DbbCC40f64b58c3d2A46B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x129fF5246b9bB4825Fa352792Fb04550Aa8a587E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaE529B3ee1e0F66FdCb1eaEcc3678896dA19CEbF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x407410d84E15f79642272eDAeb437aC65D7298E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x916b42Daad94D97A0b9a41d0c26eBf7F5939b8C6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCf4e75c9CCFfBc6dB98d43256a4D3721C7d09B2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73F9639F79555f64DcC2de5A57ec98d1a2AB3180": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33f6EE932cEa603Fafd6854827259bE172C91Da4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf298D142486bd66C76C3D9adFc4de57ccB2A9Cae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x423aFf57B3b3f60fff3560E9FA6EE93c5a8C2b7e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33CD689Cf11F1B045a71819524c7D48F3B647d35": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f3Ac9539b3aA46E69F81b691B9FE5FBdC37ea27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd0DfA9Cc867b775e096277BfBaed57918CBD40cB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x685876A4e1506Cd6079e1076249170Ed82116341": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48fd419BA149B17937a0678a783A96F7E2AF9ec3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08065aFB0C0fE66E084a8e544E12986B969950c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43D21D4Ad607c5Da1c2CA50C76fA5136586dD75A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF08A969B766a2442182E69fD562a2c760C308405": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x555664f29cdF66345E13fc2983821dd74e3a32df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Eb90b15c757a9c3d2bfBD8Cee3a51Dc5B114225": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9151Ec4e84931baBCC821e0bfb3b035D38aacd24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51BFff5F990bCa32de6a61EDDbD5b51747e932FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9BD8760Aaa6fcce928Aa0ef2c80590Fd6e80a52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4B2D6458a187ffe306cc284f329602100f5444Fc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x267CcA18263d82e1D2B6E094149Da5462cF5C961": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe418fb36dD92Bc996D5cB8C1bDcd7c2628626ca7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04C98a96DcB4a078dE1E31487CaCf436c5D9Eb0E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73179b92ff5538e873B1B4B52801a2933729e0f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2Bb962EF85B8389c83C89fa78C241C5Ce0C51a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB4344312Bf0988A9a9D75a45FAf4F1FE8Eb6B79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x324f0477Ed3dbA6bf5Fa4f34d2AA3B912D452500": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE8503f0484c2B8bBDCad489A25e699542cc14139": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x62d7Eb2560d757C6Df8A14F9077137E4B0af4dd5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x645C946BB911458326D6e83393126Ca3479C7ff3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C163AEed3aC423019e4164c8485530325759c85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF08CC2AaDf3Cb934475daA8D427eE2600636A198": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3aD9C62F816E7D35159D69ce8fF5F57E29c0F239": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdCCf8F98877666e0De8B03a8df16352ADAd2B87E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0C2d640DfCdd73c02e85526dBc9EBbBE83117F58": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdf8FcD3FE63Ebcd8aDD490d3f4dBaaa7C23128CA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8206C4ab88425dC33828d4bC5F16d7E45D6ffe85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70e7676a7b33F8d2c07049cD0cb880fb2C4ce91d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59baCA5484D0048eA2E46F8F365769E3343478A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03b2e329a42c31AEb614F06f17e634D4CCE08a49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4DF12C097D10502E45da975C3E40e58BDe1c97a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a4c7629Ed8d3E7869Eb52A7dE794378C655f2F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd91B8eb0f224B0908877770946EAFaEa96395178": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC2FF78d2EB719a5814ba006806b710FEa5652EDf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3213CeE23DB014511a3df039F82c71e8cab3bC89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xec30e1978F1a07b6ff256eCC22c273B225d7DB33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F856571d64A78fB015e89AD3A4EAAb4f21e355D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E230EAC1e30106feB33cE8081d6836c489d0144": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x592111050fcb5f530Ea499447f2cbC0D1C57621D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE12a08BDE0C8DCBd8bbB84783aC9eF8fcb8Cbf5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe98aF36E6250d5599F76FA3D2b012b378c1C783B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf22144a4c87610C829272B76D0Ca36De2D3E16CB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c70305772E2b5A4A5d12c817AD4Cf71A37D36F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f9DF833FD89786e0295549561daf819191eEB56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bdCE7FdADb022369188d7158f338a4e117981B1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2499A83CbcBE1aC68bD786eB6F4AA19D8Bd55925": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C9f725f9E47e84f05a1d38e450250Def76315A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8afBb227f3E5f4156a2D798de247810dfc5CE79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2Ee543f185fefDBbce85A87EE0938cD2026C9Ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAA297E64fD3A3DDA2950dDCb3A82e75B704e88C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2c3E8a5a0B846cfFA080C628a25287B38FB6A58F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCCa264fA1E621E64A78E36a123392A0974884911": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53f3B0c934781b39Dc9b4e74c5E0FC047470F190": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39FCC5C249305E5666684f25A9E4e8FC8834f38b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F1d33eAB6a24c8fAE6f1867c885FDC42D4352f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17Bd178D155669D34Aec86bb404E12b7d4905385": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4607c767dB6b3a1D85200Fc09eE24370331aF53": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x667daB2FFBb94a4f85cBD62268799D0904045C47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7aDceaC5EB67f5973424DDD6841172548dbFa2dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2de8c7BA53572f8CeEB5bC2F9789a415ECF1AEB9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd063407b7854e413db278782A8F934Bdba8D1D55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd715ddCed1deF460Fe042b1Ce142C76549B6a713": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF0b8168e24Bead4A23ab9c3116B15734e4457662": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c97e931aB720760a5dB28721CC5DA30b486E692": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E30731a598A85c707AF85EE435D387b04400cC4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1bEA90CF6EDC9ad6F7449E22A74E3F19229E14f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfd2d2b856813b6f58ef4d5A442B43d1B37088220": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c23da391D47338FeF38306D509c01911EB53cfe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C46F44814b9aAe2AD796bf9b563E13917edFf82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd409BF118809e11A5443d7BA6343DD3A1B36c2C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6d1766144D215AD46A83c7aE7D1500880Ab08bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1964044B21C8A468B0B0e99733a458FA8F3fD0De": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4ed641e82F276fC3533FC884F06d3744631ee560": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0822fA326F199E62BBC7800864aBd91dB044Ba5B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x711d64273eb08013bD50Bb2dD05d902004a47aef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19409ED3dd77c455306181d63e49f4d6C077271D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5594a207548d65602b82b6fc8c1FF38c406c2547": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8E8e46b34C790b9eCbdC6d3dd8139e7c39B6f0E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Fd184Ce671a131cd0cc32F012d0390C6d6069B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76c3C27d51693bAe283a44148105B0B823EE8641": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x854c3CDF79757043dB6905e8922c1b0a2d9cf1ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f67387d30A19C58580Fa2E169D412718b099F27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45268aEf5B86974946bD073e9D26D34F951D4B4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb8bDA4c3A269C7B4B64732a1812334Dd043Dd450": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF3ef55B4e1F5963C8efCe7E081f11dA8618dFB9F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12db173E3c3C33f26b046735258fdf76620E276d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE80acd2F19577dc778881086EE71772e65c24148": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5441fFCCBBd3CBa5FA802744D08CDa82b6C39ff3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaaFf4A882ae2cA575279Dd98c2DE4214f5A8c010": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3318aea4c90716F3742c619af1351CF51BC845b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96930ce4B4078f5FF0ab80fc30De00bb62E58aDe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1c2128ee78D1c33747c1561f0f2510544f3d9afC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5dc533fFae3A4AC8785BE4BAd1e652ebBD4280c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F384068b2DFB70Ef97b361f10b33636a4EE44F9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bc9F83Bc42AF59e43562b4c6662aC2A4B579b35": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3D94e771FbdCB55Ef11380cd154Fffb94760b3e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23f59429Bb6F8f2271441C5a0fa7CA303312Af03": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52b66cB6a5Eba9524F4eDE6784FcA99fF8EA7aD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5e0a06217682641Fea5e3E2a953Ac842fCB49A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x521436B5bE5E2B771131BB2CdbC46Fc2D88f88f3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA1514130AB14826F37e0Fb368E5889E201F6D8D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ff2dd38C029870623CFCd8BA4d396AEDCdd8bD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x040BA68D5496e5f3da094BD1D498A6e83DfC7bbc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF7b40906CE5bdFC68CA80B95C400c735087B4b0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x049e660Eef111d2D3be2436c70C540480F863a41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2569A2F03812E6EA2cA08108bE180F520227Cb3A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e791938e080aC514e380958441b3Ee38A9e4327": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C2e50F45cdF6B85d5ea14AF9EdeB9A8d4145Fd7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28257d5aB4aC21a88D42095cE669819b8B6aF5a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC376fF31C02CBf4DC5134f11BcF76D6C150Eb370": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77eb6203033a1deA9353dd257309E54A257692A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x402Ce3283e75Ee1E0BeB9e1DcEF64e60a955D33B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76A2648ecfEB54960D14d38C749bC56a6ed0f81E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75EB9d84A45D841912a48619E69376497dB62232": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8dAbc71Fdf0b088A0f91749b126E55064c21dDb9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1f2e73De40cB9d426F19D4937994142981906E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbD059E3FAcD81e32B1e284DF1845409E584d5Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x559cAEB18C27f2580457308df8864e3Ca035dC2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4121Ef83bE1496Ec9FFb76171B0Be9Ae21200542": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEfD20aDE1F3292d382C8Afe53D6498ecD07c6aE0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6477c71C2C406c4E55D2aEa28b69a06B8Ab4D330": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xffD6Ac4BFbAbaB1D53b408c08d52C796667c5326": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6088f3B87A1ab72AF831A5577216ef8099b60c7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x456682cd2ff91c31Bad97fBD4BB6DA43d3538212": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C958fa18F69044E0C67A0639c952d952006cE21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x648eb8AE01801F9f6eC4aa1C33cC68068882dFbb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c19a2CC0366D2443d36EFe9813Efa2152f29312": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x705fd20C1DE8bad42446E324354eEb7e25763f85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2760db1A05AFbD1876B933cc18B041EC8692645A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAF5aA8a8a990Ef0064749481e21389753166773B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Da1E366489c8A281eD40e3330A29a0aA3Cfa57c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD35f8d7dc52b38e14bD2FC76458fe54c3A287A8b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD21b64cC090A7E09b3187A5D12Dd0a125938CdFA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38DB681146711524cc0d0a8CeF51d3E1Bf1fCA02": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAFFa6F661c506720878aCDB8c50D7cF8CC459d74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x358cCe899e541a860FaD2BE5C980C721D4E07321": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3E3190fcB09315a21faFa6f8b200E31d1E2abA33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa63226Ba25769Ad47F741d82f7aBA95d843b6473": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe31813faAEBf8ac9518d085c74a5b2737636235c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x753B8c442F536Efe5Ae559D889AfB4dbC498d9ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf99774b739a1f8007a2afcBAEaA9069b83667199": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a6ffEfB26AAd3EeACfA2b217984F1D17D330fA1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeA8EF43fE5D4b6E5Eb4313F32A5820c1F2Bd6a8f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd59dA3BE0E413337d7d931369522a5CFcEF8A0E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49F3Ff21E64780d6b4cc44712024c0Df3ee33805": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73B06899838D34F9febAB5c69BeCbe8f0CFfAecF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x907AF363423C3386A3Ec77223390CEE0395Ce9ED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x761FC9A2ff111D8C21182FdbE0E550cD654CE3B7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCC4e37F04Ca5AC6C7c23411DF3e63e44aD5fe349": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6935a786e5849DA3bc8B9F56d6634F7031Ef809b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC0ed78BD7c72dDd77ae556F10a98c958b9Cd6Ac2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76de1e8B1F6a0Ea213e26cc6fCeAc3FC9e1b31a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x378d5B33e79E25B55748c5e8EdFC7D9d7E3f2E97": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E993084d3dFd21c7D12F22423C28bc302065748": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb6edd9Fe8B931319C9C76036146e3aDCD5cFC15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF09137b540F678Bb955a9316eeC65E8e3A2b1A9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5CD546b78fa7038Abbc931819e97F6A1f2B8FaFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68edA9592E0973F829A2B76Bc689aDb4b42453BD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99d0d726B9c308540Fe2B0cD0ca1898741f37Af8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aDd097754F6eaa353A01eC8F3F478F0f5b87d21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52a8D238A5c1a3f99d5f37FEc62B3e3BE726302A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45C21bC0b2E9b4d20EEf6b267Ace1720a5499ABf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1707BD3a35c3C2925241F9A9cBbE1262364b353C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB84aFC36379f6E36161CE0125F4E198aF36C00c5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8407bd34d1f042fDA57848442B23b8f496DC31A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbE2C524E015Ea016E7fC70A83BF85419F7375595": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC66aef4C7c2e74d831c0A44b3Ad87D80111A12a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C2426B8D862A8ff941faba634365c8ccd715025": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34512eB82B7Ddb4B2602129de7a21150a08162fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC961018af27A176Fcc36050394bF898c0A80289d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x093bf182e4D2C58616Df7578B9a9953A134596Bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Df2F1c7dbB4D0B05B03E38ac0d40b6782f18445": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCbd094e2901E3E27cC8471e40f85D2408fba0992": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0284250461473BB84D3Ca090680032dDcA372336": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20E3c3aA41e1A6b12932C38cb1A3fd9Eb7ACb5Ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1e008B42205FcA18f7FeE70fd7E097014A1F84dc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF6f64b470Cd078d92e023E4B2eB8E66AD7a7F6ED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x655CfF08986761264357a667b73b871117a5104a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A2a204648740B44F40f9662BD930320CE5de182": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC3483C41f0f4e16E943587E183908580b641f52D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe89e7ef0efa47c4E43A17EC1eCf0Cb488e54f717": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a5BF321eAE8238978eB3aE80220c1376aC31965": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64B4b3F4F3f6992d839e9074Dde54A019a02F3AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8b7cf462AA2C8eed2cF5Fb57589d395C013eee89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57277634682D991FE831fdE822EbF703aBC657b2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe4d9F174e9B9F987836030Ca0b244A5b4F615869": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7862Ca0fCb33845FdC64db0aE4F9F97d03b46af0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x62BD4CDb6a9CfE6B3Ca3ad57Ea7db61b9eA2eC42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6455ADC2219aDA25587e74d475ed605762505802": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3CBB7A07D4b8640DA21AE5Cea72c551814a7Bbf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x851925CDd9Dc031df1257Aee4FA15Ff7c269ecac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE4db86a306A55c9C18c17d0869D552B796a83759": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x008eb737B5029a92475e49aA502B87cd21B67f15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xed6E4576849826081fE2ffD0d94753838ed0E1b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb937697858A59DD906cfB5D2B50A73b86dC0B670": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x806dBC5c7c588b23Bcb3d71f4861FDaf37a99e79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5dB239D5b52b0b738a4975B1791Fd37519fCC881": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA819A27C5D2e7c07f7739FCf2b620ED6b597023f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x683fB8955D01553491508F0815fc519406958dde": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ad8a20CE02aC9c24890014C6212760b562C26ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33d6683f62e7fF6bF89Aaa581C73fAd73090FD43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAAA0fFf476aFE3d015247eFD63151364263DEcF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd5C1cA79B5e5A3A383034eB37c8C0C8fE9F9871f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe108974cE7Ec5F01161305Fd808C61d1A2322192": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC0812866e59D7F8055d25fc32b74b0A6762a5880": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97387Cd12239da78d3FF9046C225AC8Dd44b6892": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1FE57f502363B796b1F6Bc7db82d00fED91a137D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61A06C3D45a9e5A087B83a0211c01ed2D6f0F43F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2B6a048bF4a4B2F2Ae71850648cCAcd32FF81025": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEA3d1b241925c61aC490EF767Aa57afba29c406c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc252FaD4840A21101e9425B585208feBAE5fd588": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67ae28021CA9E6aC751858A81b2B3c7EEBdD4864": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84706593AC692b9ac8f721579C1FF12AABCF74a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52F761A82fE381f539881786C34686Fa12620c9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2aF129557c88732f5Bf9C619666051EC009d8B87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7c0529897b146B6f7A27db73763742028dA2880": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x753D5b68510Ee838A85Da4F0B10E9B9c1BD7554c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63Cb360E704f2f4779d5608A8A5E3528FFFc5771": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE61DB1ddc44A3c740f5468Ee27e5459AF5C48303": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20b0617cc839b321827C68BFc87b632f6835E57e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd647200E22395213609BDFFc0dA202542EBe2584": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x344269Cbf90a777304360B06c3482A4B3F9F7511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3815Be5fd65d6CD56748C4381Ef2E711dB5956B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdde01Dd8d0640a6a812061d06b6B72203147f42a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc4fAECabe1D33eCE2E83c7852d5fb743Af6720F9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70B0eF7BD6cd353cf89791a72986b3CB2dbD72E0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66dEe2b23f95af7cA3AEeABA670053DAC6913067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94d61261AEdEdd27141C0Ce4c90164e16C5e6fC7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63EcE9430F424661c0fC7351AD6e71d4281b64DF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac4d52d7AADfCc7Dac17FD91B12D95F425463c82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F56CFCfD8DF725D548175FE8B68626ffA60b684": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0c0CA89ac0cDe709bCde39066cbD63E1c6cf766": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0909c919007Db07CdA603e4BE121c3e1C9766479": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa00A24ae4C3d3799b206A0347F29285aF8513199": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22873033143D426E98903C8bE423969329DbdB42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9BDb46655344A13aE88C0F76A408580e2740FA95": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x489E52AB06D2E5cD68Ab12918813470E5ad776eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05eD9F2e22187b90c3DfEFb9B02A88e9A2f4be8d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE57C2d78Df84C41b3A4a9F335550F69e10e10B19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6D8a3d21Ed1e371A1E74B4dB085D1A267cDCBDD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9dB9901C9f2e94340429b3aC9B53234f0B6df51c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf5047b7b86612cde3c556121460B73142cBa343": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x50B18ff7D78B1Ac8bC2BbC373a6Fb30E0f107C19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69440F6762160Eb39bb41FA438838B535379c180": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fFB580DAB3EA10Da58B0B9C4C079b339b0d9470": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x688c0a468ad7BE8Dc2e1cB92cc1b9b6fdca84d5A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39b0b46956638d395fFB44Ea49A436c8ca438CF7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb697ceA2DD7A0b9C90Be7DA172831D91C32B70F8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8fd9304026dd59eb74717e5c73ac0002c46ea00f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1A8918F18e31a2Da51e316cD5d33D50F54822115": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc77942427e282cC38CD2F836F2e0006287c3fb7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDC2834718DCB0629A3B0ef7D83136e3e9d84dfFF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd43BA4193920dA3A288AAf3400dcb5be62fB1dee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1fd374ca9DE2437004799136D748dB235c5ECED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf845A40a01763ba1b83462BEeCee331bc4653ED1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27149c5b6137037b1FBb7CF04091eb4576D01F0E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf4a99104e15515Ba8EB0F3D7b745f75007Ab6cf2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcF0e7B312E7F59F62FC1228d66b182B4345B2F16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfA5eaA5d72cF76E92764E1E9128A7aE792C8486C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4d2D638454E465229aB104116B74596BD993a636": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4F36394A5D937f8e13689D9F965c6ACC05000456": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD38476D3c1EaeEb5cA68aa7f4EF75dd0b18473EB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcFcFfE706f54910DD3C98f9A7297B76BF663295D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDDb5aE2D3348AbDf185c74865FeEa8f90505D43c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x705d493C82305BAC4eDc527A6487eE5Cd1D1AAF1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8B139211fD5f39C9f4943D0C2039957E8609e960": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D137303c07A35664FeC8B68805937902b56E1da": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4286419E11938Ab8EcdeC7D74438e1FC201153F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC187B535241357D7299C6f403D382d02eB88BF0d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD80A167ab58795bD2737d9D8697fE754CA1f0C7D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7467cA8BE38beA9073a94B2F48724e90e9c239C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C7F4B0319D549C8Ca8bA06a7694AD7DcB88837b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96e70215d17611491F32B1D3c9035E0Dba90E11F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63C1d4CE3f0eA0a37Eda12376205e25D2298Af3a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA1e71C2D12D70506E040cc91b28399F777D078E7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e9923548988759EEF8B902Ff67CBC0f1BB4a876": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1F3bfeE5365046ddcbeA48dEa8679e127DDc312": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1A48B674b52D9912De8c2d72C542d863215fa714": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCF5AE86A10D4730035C166c30e0c0E91DcBD5BF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x171f5Ce1e0752da51A9dF92b9f48601b91fF7FFE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0fBF737Ab724180216D4A3b0cA277Cf47D0cC74d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF165E3d91fBAf01B18cB23bc770C7AeDFCAEb497": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b7f08cDaCDAA6E0b9F8e7B334D42551eE96f0b0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBB7cD10547f34a986d5663C8e4632521ddd58947": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8579752e97A3ABe2a56C3FBf166924C2fE5c610D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa50b0E76Af8320aeBca39Bb925472F23b59e0FA8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4cfF121c7cCb12B54B46757D8bd1250dB0d7B2Ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEcb3d784d93125BaC7610C79148f1Fc4d105D071": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC7eAEE43B7f235d3380C77d55D639aa97c0643bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f39C1FBd5C43071Bbb5eA52a576f8D126633Fe1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8a730967F2Cf1A2cebEe1781892AFecF4506ADe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f7B7f1C0805fFe647e2d533767d2Ecd1ef4875": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x068D1a6030BB3e8cf185b0433Dd3c48C6D3157b8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5eFd4aC2F2f80bAcFd5bc5ad94b20A5de023409": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10A2C645aE42Dcef8C45b8de397B8a4D9C47fba3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32AccAEfa35620b51c061901AFf1B74991E7322b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdEffE0596B5759E87FE88256415F9Ff7BF78C2b3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E4996cB18E2619dec2C32841981CCA3001eAf54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa721d41a817723707f6Ec5169C36539989d02cFc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x549F2eB041Bb5b89d954d4ae18fFe1f0d4377056": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0ecd084eD57d964a74eb4620dd7942F5384e30aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6FB3af602BBdc75C03d1C5A442E2637615CC9b4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x90B390AA2ab89C7DEA543951B54A1cAf7B6Fa771": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8af7810012012Ff02f0734D46d09Ec1dd058cAe8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c4601E5AebeFe2c0854D6Da4BEbd376570B9fBA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb2017a931F206F40CF06268E8FcFDd3d4E4f5E80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2667Acb34671815eA4b242Dc397101B06c170430": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14E9999E96b7394600CF39E243f0212434810f52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x159F7ed0D057494F0de525b758682F5904B75Ff1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82393D1fA94c15729628eadD9E1811705369F8bE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2e4358ad08202eB0071221d0E5C68E14a0e266B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCA4fA1eF929D7Dbb9Ad02719C499FE9412cA176d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A2db2C9F0C7a048f7b9836525886EF331AE05E9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x361D7E3Be644f68f663E5D3E49c808818eFc9814": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf0b1d2562AE198c6557b53DF5923514d01aC9Ca9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84e40CBf192E4c68Ed1E59af454E258eD3403754": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf8BeeE9Da85484a60b90939018E34124C78e24E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x255be04Ce7C721679440de2735D231C3c893f262": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7333E0A08BeaCF70f04e43EDf3eb86A8a053f64B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x600D2B986355D25EC23155c90041a3571D12aD45": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95735465cDf5896F5678FDF83a5C9CE4F518Ff81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaeCe85B275B7EF34838DD28C0608E48C8Bd3171D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6136507E755492035593E4df10De733996Be2ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F638b6CB4F208710F9a768F1567a45015c3c3F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc4A6E3D1454ce9F2F7b2cdc59fe5825B35619C15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC2cEB2B35Fd94D06F13e3E194173F0bde152098C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7AAFd5eF980C17EcA27a2107e76Cd047C90659e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb04B688b2Fa620effdCfEE808ee64D08482caEA4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0CFa219FE4b24e25e4cbf26e448d2De37CEda4e3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3eeCc796B8aa53d139404c13a3610C16A17e5aF6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x325409632bccFfAc706d378A2Eca57Cafa21ab11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf90EEB769Fb55eaBE7a8dE6Fc162863cf724a58b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F02c4E2Da54A0df1F40DFeC773dED5125dC28bF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8506c53488eC8235ce858049fD68F23599879328": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04937c1c74B0b850E58f663B550736e16FE37Fe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1CD53b78A2c1a67132eac4b3D584Db8806238f15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x291c26B3A8FAaD1bf4B3606883E8a85A7763F8D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEc82EC222E99DcCBa7d4ba69112706e82715a8C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59F41Fc34604DFBF310B1Abd35230F8abF349053": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43D57590472FCbA03402b80A3CCA22c52dFB7219": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75D446065f56FcB187EEa55B50CcDD7D495E0481": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3ac97095995Da83Fb3784E63E67e98E228F4FBdc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4fB7571B239CA85A049f9f42214D1E238823440": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0f1ff4e59a52A17F0c0b2E39576C19CADa46F1E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1530F2940Bd7E9d9E8a8c5EaA37409Bd22dbFB3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe797F884588095Ee7Da45981E0eD469aA9cEb009": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEcFfF554D4bc60203F9A3aB79Fa31E623f695A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBe6e477b30aa4919FDb2192B74C0D64d36004D9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6186496D413C09c7758cBFC245dC6Db34Acd5825": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x286d9E38217097eC8dFbEcA01dce517994fe8C4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F2d1Ebed1b0E301fAf5Ed551eEc06621593aF23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0491FbF3b495Fbf4Aa6D73F44Bd5b39eC43195cC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBe2cA6F56C541eEa195f258D7db77d51dD6B106A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56f76fC1848863afDFF65dB8c953b67997881723": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac3269A2a0704bDe92E2a019c5b0E4F5fE323191": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5543F90d0E039374b80FD1Da0F3e0c242F67Dc2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE3dFB1beE32d13bD09841e52387D05eEA58Ed61f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1db35F617c96d1B87175Ac08d3bdab9B38559d22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29B79c547f1E81AF85eEFEA168D7478ABDd082C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB10a1BD46E15e36a25baE13C49283518a000cDF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x358Aec0953239C84EaBB6C61f61d7a1D1B7dfd93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6cc77695e67BBbb4E07515189a1323965cAd6a1C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEA735BBD150d3397b79dEd73F278aD635eFF561": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2354CBAeED67B41522E8bF2445B904c8F1631DC6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA18D33a6F72B5E5bc1BE1fE494D83B8C7B2b224e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa9E993B57a1878b59a33DE3A753E1291FeBC6A59": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE308Ef1a6E6606476996c5A821c1F1Da991cC12B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xae8F0E1Be19DEAa4eadb7F61607C9570304ca46f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdEABAA81a54725E7Aae80951E93e7AA45d92Bc7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6667EebC2e8A033f60f0db49ba30Ffe7A06FD1FE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xacAD95570031453BE812b88Da058A074C26E3535": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEb0A73934c99ed7E150F343bf2F56c662FeAF2C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7f54A1a866Fb841ebf1290a02C2a2B179B38a72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDa8e18501Db98C9898321064f5BBF0D06031A4a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3E0ECb366a64b94345F61f679869a5313903ab5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0402E6aC3476DDF96fbE75a5E6Ea1824cE00a7b9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB5a998Cd81ff0d7613981A64eA2B1d49783b8e5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dd62BdCE70D3fdD2D7D72451281Bb12503F662a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x732806C441e29078F70c9d51f4A72021fDfa7354": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x694b7075fe32a0a424Cc4203410aD0315F5D7Ee0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5663F391cF21C2CB65e4696bB6f9280d0a58Db8d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x030A9230CBeB809C51FC71eDeb50E15A802A9535": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5041848f86a219eDaf331091f81eE271FBd56004": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc988f7844c820cf3e979c3F48Be627b389120B4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81F556097Cc0898aafA2c10141196C5a73a05472": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e0B792F6808D2Cd4AE37FC7C9370157801EBe4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAFE9787A96F5811b1513c6408FB5e85979Eb23De": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA025cDf80b2474762987CBD727c70539b252918B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3384875dd5905F9004E40aC0f2761433F5082a8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33C2d1Ea6e63e29D56C6CE07C73660c115b2F717": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x336a4Eff61de62337B0E2b5D584079940Dd5F4CB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6FC23962D71eFCB8742E109b62C7977cD392082c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0852a883B0b3900395667814638C0151B547088": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fed65Fde5151635e240D37c69ACb414f3751Add": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf600BF216Cc468dfA31d90AD99e3BE2607Ac620d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2C9eE9409c052Ec8f540552216c29A2f4289D2Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA9dC4ECa1BCAc5a7CADA4FCB71F6995355bE2026": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35Cb3Ec240eE2127ADA7Ada6ea98e6e1cf8B8810": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6d470ab7871b8Cfa8F2ff6A44C9C6E9EA2544df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcDF33a991B66811cD25a42b7887FceAc776CF0c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fe1d92b85478E99DD6880a647cc150445b5aedb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6160B705CfFF47a163bB5c41907BA8286656D6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E5B9E4b1F29d0629Ad130Ebc5904ad9AB2a61A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEF9F50716CDC3a6b32213D04ce0977909Bdc9F62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc08bD156Ad0A2E529Ac3798B6F3F74DE4116Be49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD470F08E94259bBA8E3c0b83CB637E15d896E27E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe30Db1C12b250AcD85C78ac5E40510C410abC902": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Dd3F3a57A98e3c673744Ad9D1B9Da7AFd96f4fe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0C14B646CEa888b58f6265614cea02219DCB291f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC17C30ff3c6A9fB8cA42fCCB974C8BabA066224b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6673DfEF0ce1b0Ba9BCCC4373D5Ede4CE12039Fc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ced7d36F4B2C5a32B2927817BD009e7e1A4974F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5F068AaCFEFc3A8a047A390d654f4093f1bdf65C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x810f8Aa09e9e3f1f77eEe61ca3Eb7AE85808b59d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3935740aac0C7EAB611EcEe993Bd0d11FE43845": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E826Cc1c9f60333C6d6CAB9A294C766ce01b2A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x375b52A960642Cc9bdF5404412450b934d0618e0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4765609A84A1F13aBad4e3d70dF4A6d5856c70AB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x820d131A0532797C1BAEa4bd378eAaD9A5618024": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC8B0b4Bd1A759d76314EeeCD212FcB89D862553D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9925D8054db7c1f5F5A9dC2D70E416010904bE92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75e04Cc0a0E9bf1739735F040eBB52fd85Cf78bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b615eBF9045e7A015672d183FcD1A4A9A84C17c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b16B40f113349587cE744e3C196085A60F473d6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x596Ba74A37684bD9516a50342165A61446585D8e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5EE9b5C0470F18baEEfE36D8c4DA8DC4e580eADB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0Ec52403Ca74EBecbBb64a02bAA7550b3eEaF7bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x676bb38C6C70E8D6B68b54007D8E2791f6256b24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65a012AfFD8AC32C9a5c8fC97D383de16e7dF1E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x083897a7bCd62b82CEB054Fc939Cdb13136f0f13": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDB46bcE3408cA4cD3cfaA7CEb121f679c13f88eE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0EEa261426e0610C69921568C254D457C882EDF9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE26f1Ec65D9526Da7C8D76f4a67E5f296E26F47c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98000f240f63364E5849e32F9d14f1f5733cCB26": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f77A0c5015DE4BdcD6126EEc78278e3d97864de": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1C37a2DaFd8824C618c1571F14bC0bF381f8ae7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a70b9F030Fc2Da0a2FBeDcB5040f5992f675c40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5E67A1aA062834a621568df6e6Ee9e4AafcC920f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9597C3F0EDe6B7f7D69a340de865E60E829d969C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc6EDf61f104CcD0d5B05970aC4Ed4C2A8790bb6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48dE181811e57A46e8418Cd8A13fE88F502d4aB4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e05455a4aC6710fA775E7DEfd028bC557f247DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24DF2a29aDEa0255A978C048262F6F0D5256c78f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x754fd4B6d458aA5d4c470a3cEfD20e7E5948042E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7615BD06BC3195aD4299f2cF6f630535e4BF4eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1948DbDF972e7f8cF536000c6396e2EE46DA3B04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfB299adA3b1BD0D983F74ee7867ca42E68e1c779": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4d1ffe982e2ef4dc5fb2aC85fC8b34523A6D531B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x980fffdC7C1F91834C2752464e40E111fF11BB79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87DAbCfE72125A79049d46354dF731595a4DBC78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x209cf51d8952DCa86d36924B68525994A5E4674a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdC97DEE77A522315f288db3197a0802Fb673A279": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ad608A2d923451cD4F19bC39E986C45aFAacE6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14D9BdC2C87a526649462be31A310772086889A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19fa643dd736427E78b91a8982525aC162b890C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71bfb8031F56646c20CFB862842E9dC5F1162ee8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE40207F3A8234D58CA30d572b5f28C85Ec0f0EF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7110eda00d37a20D41FE9fc4a5580338ca57bA44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc8703E26550862E0DFCb9ADB27ED7a62cd7162D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6CcaB3C06bbcd73A8B956889c33E5236D850C43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x559E2eD7bB9FC9aCa24d47F61c9d32269e98A160": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF42CaF01afD2Bc1FaEd6610B82a22117497476f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dA927B17F45a4eaC7bBe0A95A483F740439A915": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x245407c29a29D99ACAf25557D9DE5871fa217001": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58ce7D2b62570e7fecAFA9548AfB12B312C0cE70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82466a963cE2441DE00623d83136895D32CFcd1d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAE417614DDA7fB748C7c34bB1c241692b91ae852": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2187F349561dF26540934953b70E47489c4F9783": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73bc37f92396a8bf4FBeFc7D8fe7913344D36366": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33757219ac4775B3e3E81B6d0E053D5f770ECbeD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBE1ae2C71F384CCa7d0B506F5c2166DfC33d3dcb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52b4E2C41222882c1CbC6519ce4e3B4a5A0b6841": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf2d13C49ebCe7BA851d7e9d059d6Bef996D10bc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe02d99d813b952A9548680D3C3e132842f73136a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E8EdA3d91D50d0af6b4dC987a39DaBc0A5D6506": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c4Da550d6a9875d78C36Ec4E4DB655032ABc36D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54C08cC64314902b6c80C8f28f0b96Fbfc25e21e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40e5b28211c2E55F8589f200e664eD95584f8eb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0EFa887eE2804B2D9F3827E327C01F3198992c4C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4F4AA432cbBA04c6Ab90Ec7ECc50ca5f28Bb77F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17E33448B40D5b19169840D2B8bafe988e0745a9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7711d293dd96508bC476f629501ee2c22660Db3E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBcA8f0d158cA3600C457DfFCd0012B5AB9e2b21B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b73e69fBeb4b4110579229DbBEb48586aaD0F1B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa5727b878DDF21B4Ccb8331E0D38423E6AF37dbA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20C48fBaE18602cdf29F3112fEaCDF549351E6C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB8100A5d3de4e5dA3506B4b8D71D0Ca20Ab790F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5681b5A25Dc7ea8f89fF933652dA855053f39302": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Ff6AFBC176965159a97970aAb9048C184F6edf7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a754f76162e9f28B75583F07Db3Db78A291a915": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76c8F3806258FB6306A06c8531d67664F2684D8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d7A95C4f6a28B9339F4eA0adFd40b7c6bC8E499": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x149fFA1e656420f04d273CA1D9759036fE64dC65": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x686F14Ec33b1bCfD40672baEc71AF993b9522293": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE3aC990cad7E76F704DA58fCA67b9bA7415CFdB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1400B82FDDD3c27428A5fbAFb784CBA816861DEe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f5B7ad7feD96C51F39D360c05d862593A9EcFC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x843dEeD8F4A017aB863d6d5a044F5C040f3a4692": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5aDe16Dd99F980B8526687A678733D32b9d6f059": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66D50A87689fbA41b9c942aa7FBF3Ba1395b91d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeCa94432A404A1f232B9e8A1B5e53096a9D0D4cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa7d55Cdd48C5376bA1080937c0a2Ae01F202E02F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7bedf27a1499132E083c26dCfAF96D1D5A78F3ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x724186d0C9AcF65bA3335573b2C81D8C9ddab282": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAd1f70fb535dF67f18E1fb47fF12b4b4461B3419": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x420429c0ef8d86b5351C72d4EC92eB03c1Ef265C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1654B10f586803e41C0D4cE9E1A0F75a7Ca9B98D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf543ca33060972EDc3668fb52b5FdE2ad8090386": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60747e058c40f9D60A9340B0a651d4Ea36740D6E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8eaC39817AA7A1072c6e81859afF383f534A4105": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1801088BE935b0Cffb00551D465518C77C97250": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb61ED12f4C3704E1a836E885AF1407b11e3e431d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b8C1bE0FfEb264081586f5Bc49eaC8786282940": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5844c616eAa7C35dfC395eF57eaA2fBBC91dfe81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5E403F8Babd4aEf845ffE441602E072d1fC91136": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x107c2941Ef7767DaaBA6b28CfE2C85e88207E15A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bC6c50B8D38c850778300A84513Ddeee9179088": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD461d3eA392609f17F187145D8BBaC8172C8Aa28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38140E35FDA3F160ddb06E0637488a3E174ACbBc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1Eb9169D7D386cf404590e74Faa4De8cB58258a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc304B2DB3a3d21a4CDfF05e94f499a431023D94A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeaA0d37b9E7616799491F0c756b255F25d16B646": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Cb3a0876Bc051596dd7c575dd34a323b9b61106": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29DdE95e4ED3457a5A97E4Fbc5CfAA3d4b461A18": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2eAe56BE1533A1f78D05059364187CA680A0c506": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfCd6Fa6ce7F0d572990a9Fe2Fe63F16E390de012": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC6B5C4Dc30F4F0697b2Dc85591ED34D4803A46CE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAF174C62393f18F6EEA9AF11A9752F82771EeAe5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7da8aAaBb8080419bA604fcF102f75A9922cadcA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfa8300A4846Ab6eDf272A5BF61374A53Cc872ed1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc8734Db9E2CFCF62acBb131970aE94Db0C772a8A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x236C684e8424015f8c8c1E308E7eE14a299e0DD9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF19F2fD99a86327A3A8bFd583a2645D936C6A3e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0131f2091e555E994F7e2c0E78E3AE8749b1CBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93B8B552A6b7de7A32b40a6154Fc96b3c71E07B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x913aDC9c72b6996B18fe057e22fbAEe33897c3a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x88f573eD553F6F182b524D99c9B4f3703c351CE3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43bfaa06F33F277109571c5445c7b3E7eeC452F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39Ce625C059b2E737512850FDEbe372B0d61eB9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51c626aE5758C07eD2b628937dedA1a0D09B6261": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb990f570f1B3d3d7b5bbf188119D16089bB25c72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCF2bb6cb68C7A31aFF0516Ac7dbCc41B8BC310c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43E3c50bACfD8C1A99ca8A4F6Fcbd55cEa4AE19A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4E1eeE3a53f0007Adb18931B52db9E3103ac757E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa9c986de4Aa6414bE13063c5A0627A459E195D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2debC2328a540c855484a3a6C8DE89F295C37A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8e8a0C22083fFC02357A5d0647A591b221F110Db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x059EEEdFe126FF4C918Da928a33826deF7402744": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42D455B219214FDA88aF47786CC6e3B5f9a19c37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x779677c15162419B30Ec8220236AD7151b872411": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x041683A2642344ce5a784AaEEeDe75e5Fa08df47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfDEC5417282F5c04A5835060C69519B7E9D50Fe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDa03120A3a7c67612e6D2c31b2b7498a876d2987": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xde35Dc8826D86421F4C9fE8394746E40a2BF67b7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4d937D71A0B679a7937668c5D488190de8c209F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3EA35425B7E3563A281dC6be65cA8c90D08F1877": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FdB24bb9626ea8032b5D2B02c05e2fFb059113F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x201f9bE259124a728827d276a690e06A5C75870a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23Ff4fBB437708BFae0A2F94F11Cd5bC27e93df8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05a703f545672C17218e3D7ebcF3f330433b71fF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x539E7F735954c051791C8d39cb79d187f9F6Eb81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fdF5006e050F79D2802D0442106bF828744d2Bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29A8D4D96e9138E5bD5670F6b7947896e9267B13": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7E3A0f710C0504fE07EDe2e042348831a2d405a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7b252516F2abce705315C3f767A9B0075F97aC32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4E3e667628bCB97377E76d473C7FFB2c9394b594": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9279c71c2e0c9C38aCdB253A8e36A566686df5a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4059F9ED26B982aAc1FCc565f9A3350Ce60d63B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E76E800745D5e6CC76E11eA9fFdE2D65b4f60db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc3bF8B600092650a76B020430b06B8e5f705604A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFCAcbac2CA1bC385de62f404a47B9D88b3E6f101": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6613Ee41BE851a3B1f18040f3A8759Efe4c390d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAe00Ad7463D7B42745b95B33137eA0416ddBA3C7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72538eeFeDf9D1a381bc7ecb74d2444CE7475CB1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdBA37fc71c53842c0E0e7DBd8f7fAd52Fe05F4A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C1679Eb432Be2d59548a8ca188e104159D1db8E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8167c61351073A874A9F8f1Da34fE214d2100C6a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7592533Ab4201D2ded90216b3037cE5d050D2c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x755CE5F31617deD6e41D15Cc51D8FF642CE10e9d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3D648c59109566f0bc10F0eBbf9100718E95B88": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4d1b9D045c743D2FAf90c36935B0D5505931Cd3b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe03DEd53a4CD6Bab75C92Dc8e9bC7bbD90b7F71B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6dA80bC3D3807148fC19f9893b690CF6f22a58A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8902CC62A40C264cd0dC5E7dA60AafaB1606dcC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00fE7c919D67a36A78c89F2AdFc11C4A9d88B76C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9b75D0b68b475f36c15f49b9BbaBeFc3c458281": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd053bA216119A067A4C5aDC956a34a821d338704": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x002b1e9E42505816de211119339359a03c916924": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9d28C5a609F53ee48f8374038d47811b18983e8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15f94245a4Ca9534Afbb018699c85F320c270721": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb8426Ff2981f450452C063e4942f0e09218C622c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9d37ba15235fFab9F6FD6e2001c93784A76486D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfCBC81E0bd5b43361b17173697Babb1f131683dc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e8c101BD3beaAA049E42b0Db1877C9c5f90b724": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78656cB8299081C4374fB8D081f30cB28Fe2f608": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x791dF79d5ad94271e78C6fE695C5AC42983F47fB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93559526954A35A690357b303518cBB331f1fFAD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74e4fD1Fde7ee919055F01125ce70721efCaB2e1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfF589102d5B5dA5977147413239a3481a4E7334e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf270Ff01b896a5c7BE06a17ADa9a6BA1E130974A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf7dd33F4AB790059B9CE53F00f8F14F39E10657b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE3cfb032a487144cbD03461a2a2b296A9f9E96b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdAD4169C8B59B6d564d157497847356Fdf5ac092": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4b70fD16f2Ebc217A242c60b20c8a59e16755bB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87Eb26E17392ba673E3bD775B13Af3B684a8FC79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5F1D42eC75074741Dc7B8956562EF9faFA1aC6bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfD4a6E8D21230fe448d411DB726DB3e0AB5cd6b3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9580e99605c46A4a2C45910E624533F611Fa254F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdFc92422d29ba035D2bA7612Fb045382B5AFbfCe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEfd90A54886f9D3632585f135b1cac0B71e4B2cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3ac0B8294ad1B6F4a6D656545663f60209cacC8F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7AcDdd5D8d13BfCcF6555728aFE5F54BF5Ae8E5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6309EBe619ab9eb221fC5D8DacADB2Fe4F889C6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9192a21b4e12a3DE2221BF97c4BDFCb5a95Bb25E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbe8B73AFE0d791dcA27ea1afCb26f8028F52Dea1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0e0e756672B912Ca645298Aa1726312A63D6Afca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb590827BCd1Ce352Ae4A7089114AAd6Ff29F8667": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x001DFEed100BC14859A337de5032ec3DbE36eB1C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66F91039549108E595A3936aC634f57f7558dDd9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc4B8FF9d89Aa1ffC67e636d14A52770DcEC62f45": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA67387d6688760CEA19DD2e320a6E1F24684aE7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7601F24564F3132fD612F5f19b6B8f37Fb096F68": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5001895e6349f0e37F08e8487067ecEd7d8DD23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb80E0371732504f76Bbf365f119769137f6a86BA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbB366173eD0b64E83bdb2fc31fA48F0F6A7cf412": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe15D8DC0519ba0e69296FE49bF7588CEb805bab5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c24570a39248819024B1800AE2f9e629DE1376d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x125D8585a465D19C0fa0156c0a860986b0d74d42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE6fFc6389065570ae97984cDe29E5ce1F150FA51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeb369022C2E2632a6CFBcB308b68177409c0e5Df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f5d217E5419ac51B3a270FBB4E8059c4299A79a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95cebd1650394b66f49fC7302f9a3874283b00a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAb8245FB683121B20876965FfdB41164c6FD8756": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8e2eb28b91E2A4134Bc896356dBc925849Ab5278": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDc25ea1C0EB8E2F3dC3Dd7c8a07E1d83b41fDD40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcEEfe31E9FC859a6C6bC55e7Dc566c65366E048a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe894A24C5823d8339Ea43Be889d975DB57D4EEc2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3FD8311383c90CAe13eb17441FFDC9f71a5ef72c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73C6c2aD6e276f40d15194CD92721d7c2d6A443E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeDdC4062002714CA4aA4B16634d151875aF0b3e9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68539F69667c76b6d35DEa93FB332042DC74635D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a2f1f54d54c5321dA9C27A05cb3baEe8d94197b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59481139bCFa6C57c11a892D77d0cc16F20D4151": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64DB70e8cBB6F1cBB04154A378389F51b5C3682D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7aC159f266bE93E67c24f91cAf18a42bE711ED12": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64f582318BBE4Ace0145007Ff636649ed12cDBff": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13d2Ba431846fce4737944B1D4008B0B256969a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8dB21c3F4EFb3D70CDe3A9764Bbd39D8c6bdf9fC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc250Da366Ee67A98eF094274d73B7B71e1131bB0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B4d9fffcAf0626A958157b288e48A282fa66444": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa74974367597159D97442ac54496f3F2Afd0f984": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x061663C4b80DFeDf8a1970173766A7F0110E32C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x503A623911095e2c506CE900B90Ae3E1097a24E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF0c8953df924FcC59E718A8D51B3baa29C0807b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x709f0Bf568a63ED28d72D342ebFDcb3b1c81E804": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x096c08408a86A5C060AD730B509aa61EE2BCbC6d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f259c90639421Fa664BE8A2C9d1f6d25cCba3D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC2EAc8EC7Fad3328F51466B0c7AA789E28D17416": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70015e62e7aA017d7A7594A51219fe4C276D6AFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1c41f4b0Cc9B1aDa7DADE18d0c2DECa6a593B33A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8fc43381d89EBdaFa7b2E0A8479F37e97b0b277D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6A4C852Fa867544b0462EbA736Bc03421127f48": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF12127aa0e1e165793c7511F904c011Cc24A8C32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D87BA26aA6E6f7378d6437AdD3A16cdDF4f5A7E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbAD19E37e23Ebb8E91Ad0B7BfdBC193F4010ba2e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d499824BacB2E045b49D5bF6FFb8cc30a569259": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e52fef95Eff67d04fF2F1DEF9819A295bEea770": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x853Fc277EC612BBde4f69deaBa852EBb6d7f5BBd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x873D2ddC99175E7B82ceD021f0b29050eE14eeDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43d41e511F0B98B959bA1f423b630f31E11f11cA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x728f3EB85c904E75d1b658f7264Ce845aD965B52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07A27705eD393003Dc066160d2706394A5B96d61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe877D2ecD4a646995c3fcb52afbcebaB647A732d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x014208c7C3C4fC25ca755567ee8864742329efB5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc1DF8Da79636716E957B1894dBB5cb5A8AeB62a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93822a1D799FDd43C206034be0C9cF84724049c3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeE2da0eF62f230134b4bA8cF4221975AF885B797": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC04be3860e35D34D12995F36D41306feFdF63455": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2aA822D1B91D0D82C6Ea9c3a0740f84b619EF858": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04b21287ea720C0C9f491B21A8a7B687cEe77892": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6289e145C78D4c28459496c25cd69bdb3E715bc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10e3EEE744F2ED92b38413145868419AFc82BE41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0801964739CeffC59b3390DDbc851553C7585EAE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E5D174FCAc4e06949b7d3f82c18EDC4199DA0fC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDfDE0F3B4e533cBF46d30E4a97946402dAd04F28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bE56342FB71Ac706E87134e039C7E61B5278079": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0Ee4E6D826e94d92A24CC4ca2e481773Aa724B25": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07d084110eC4Effbe165292CC249fAef89F4720c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3DE62a6374742cE05953767FB24A9F1764D2771": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8F20AaE44F6242fD32Fab01E78eE96506f91e57b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54356DDA1D00A913494918859E8936dBf3d7B659": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22a06D61630F110A552147d9Cb93d407E30Ed8B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6058aB417C18cFb1Ae17Ffc80beAb7172A83049a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Bb729e2C82Bb9024a54c5d38fa571d1ecF8289E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfa74C11a96c937D2Bd9D6821C2E75C98A70cB690": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x225964311B7dc020ef0F981fEed4285D1B685ca7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcACABFafF911d7fE25247E9aB6b8C8D19E37F21a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF50120D2c245A530Af7b0D53b361cddF8e3B409E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40A25b3C5eD876111962dfEFdaaEe426c8fbd789": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x082C44223bA863db824Eaa86D707e1e21c19c878": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x504f2284A7fE2dB636435fe654d23DD2803Bf067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x116Fa052D6Be17352365f78cBBCc4610c32f8182": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEAc902Da57A1E4EC5941d0c8d2A363d274B5AE15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27Cf11a70621690371fabEF536408E9687aFc38f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBb60cB422Fba4dFcF785eDb06432fe5eB0FdC51A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE74b69aEDd6B159FDef0370BA911DA7409a590Af": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96822331D79AC7e4f45E83dA92F0335555FE8466": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x956290cae406BF01a4047035f1a8975Eed11D1E4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4F1B83Bc5CDbcE3Dc933022501Cb277dC1894593": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39Cf2bA670396BEFcb894989dea401d215aDA942": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA2860b55082333445fc2F0C6F3f3c1E80d5751F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3fE0E17D58C09404C55a9f792E62227e8f06983": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6145882f8Fc4388B7Baef6f9EcdE8dF83065F5FE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD64cE7ddAA9E42C715ED6bf0c976416e14Dea7BF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3578495d34A0f32Eb144c800BFC6fefD7828982f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x392ADd568C8c910d480D549E69CD86630942C0E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77b51054262FAbFA05C7eB573CEA28038CE535A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60ba87b357Ff0E8380Fb907809afedcB765Cb54B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f5928C0c6DB6C8e09c53cCcE23F589d1b457333": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF4C390caACCb0B92572328cFcc25442eEB682fD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6249cE46c4593cA7912E8b5E80dD25EC3Bed56Fa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a6EA184bC940CDd75D500901bae67b3FBCDAD9E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF26e9E6DcC5B14b93C7B9b0f98B24108fAb5818": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x415F9cB3b8682BF1748452812e9FE60440Cf27D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f8A8ba81d32dA0Fd84ee40e9019Ab2BD82465F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdF3b03c0BF5355538BF7eC9535dFE593Bc6c4B43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55CD6f77ce2E803FD49623dC5c09a42aDEEF1840": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9e13Cd95ac011a6587EC54245A16c5333EFcEeF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40d6D9adf9aE71A427903a26618247cDd0Cbab60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC54f4a560609DBFEE9c6F96597b861521802774A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87e9509c818482E0eEb9251869303D5ebd237396": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49C153Ac64F5B620D2c864DE9081d1E1a4a7df44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAB2F4075FFc0AeE5ec1b32f61Fd660a348388544": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7ce2Bf0d26148f8CA5501d22EA98C62bc165fC5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x525F6FfE9718524dfCa10c00AeEcbAc37B0c6FfB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4821462CC328EF4cbF926fbEd9697eBf8a565b89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf39CA9e29dbe35702B21D1d2B7a42B95Ad8EE8e4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA483A73315d5e130B46f6C8EF3de3C2dcd35714": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6444c8B19638aba814bC794C0eA58cD2e179d50d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87605C060b0cE7d18C67fAeee765E2d92050f459": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA9C65614Fa718CfD201721066A31EbaF1C7Ae609": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1472d1EC24cA685f3704584315670fbdd2cb4e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4FE38170E5B1Ae39a59c1E5314BB5CB64B9FFed1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb530d5A828a0D8664Ee8f5944Bc761ac0Ba6CC3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37227Fd3351F34ccC647B95e43b6334Bb56b2BDE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa9abE4810a2e47C1852D0570008A6BE9D2F719e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b9aed5Cb3934Fd831Cc84E40a1987F006F000B8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3F83F54AA5ad97CBfb880cb7E086AC5e5c303b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C30B69722403CC740D30A1FB551E59f81a2954C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x558a9d7Cf72DBd49052D615A178b11C38fD22650": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaaD98aB328c928d94Ed068ad937bbc09a3F79753": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41Bb607B8Dc98242EEC3c95584418706FdE4bfe9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E39bCabA973984023897978EAF19Bfd1c95412D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7aa853276Ba0173C5F9fd41BA33C0A67068cF43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B8989A7fA866c83Fe40423597C7fc972575628C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDe11B75525a09C4D444eA8ee57921a4d5fBf702E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4730eb54a065a31b407607e2dDd14fCA66A0fE6e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f197e77bA45C7852D2A7E3879e787476a936d4d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d9720eBcC4B521147C45d81D4a49D6e58644025": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8ED4B5d84a2bC0574094499074D2D00Ca951f538": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x588Ad37bf23763d75eb2B33D18694fA8F292c486": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdFa52349350144d306af9b7bD69B3e9594b6A4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA9209e0B6650065dAB92D5ecE6C60945544A7997": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeB08058a37e2AdEEecab2148df12895F311c3e61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57bC3Ca2Ab93A08062aF9017D35C96245fA0F26f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33118c1F28867d185d41b5634ED33aD176EefF30": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d9812347f55194d0C071e384D059ff78fDcDB2F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa702a1465d060263D6070c83f1AC81ac80f65DD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20ABe68290b1e0dEEEf4B5E09aA5D862D511D9aa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03B7d4F397F3EA07a3A0959B63077E2eB24f954a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2889f8b764cc5519C6Fc2780006965c35fd44EFd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6d8441F832c151349f0C1De3901Beee5839563Ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB27cc46A9430aF5047d853aa3de8fad1F2C80486": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBed03ad2B5e1ba98A9b67b4f12b4C5FEe486d40F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7aCF59b3Fd0D4B70ac0A96a8ca773FA0a793Ade": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F914fdc79f2aAe5B33A5D0B27240134bDe749F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x043969ff3b18b57aa273264fB09E7c1BeE5Fab39": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5bAA688DdFFA6B0cFf959A8FA06671cEBa330A20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06c7aA5625571F50ae39ff4f72D7808b1EEa13d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdc75Fbc4dbd72bd3F82e43E48E453381d6F6F6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC8c2C0329FA96Cb88D3fe903Afc473A820d3581C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfe9E6efEF101b8E17d7367b081E1D64Be3CFA862": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1491119314d67455f50ab9799D7bec54EA681DA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15D4BC2D5bd1ef7Fc46a112f4da12f7F1626F433": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa4B4242f2915bA771146C1C427B2d44C513a445": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x44F7D684401A3C6fe7E650f2589579c6F47FE3dE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58D00D09A5df8697114ce8347647B1CFC93253E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb7521e177b4C0324CBb022e27b339607e903D593": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67b1FF96DF1d0923467A5d8F972d0533C300cf43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0B24a36ca239Fe261BA74caBED3B62A36C215D2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7c97163dcDC44BF7890EB3239B938E02f1b12F9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1448a70529a705768a6890E9D1D81f9779561cdf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCe1B114d6Aea522b4bbA9C8677b46fB402E223ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69b2176Eba6cD2654298043f1CcD808A1cB82DF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38F44E9a396C45D8D13687D0ee2B3cC6F39826C7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x350e62847Efd61Fbf6D4569a93BeDD2D5C530170": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B45BcB98a28e48707DbF1b689Bccb5094a97A5C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75484d72e0DDcB858c1771A26704C13BBE37CCb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf829f2Ab41FCCB9168867eAA6Ee0ff19C56367B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBf8C3989D348b9B9e584144BEE2eada26693a01a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF009428BE1A9a550f2d5DB7e49FF439617928097": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBA60283Db86f9fB7F16c03fD7a79355708739530": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Cfa0A0b4BC50378769372962d7fC2c94D5eB929": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x773647C7D04501fF4cd2A4E359C03AdD48db770F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D7d75FeA832c709829C9390924F7Bdbf35991E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59370435391aFbC36997Ff5774100045c02105dA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x052658C0e56C1ba8D45401d6b2eA032427E2Aab0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95c6f877097112048642a07ea2c98884294Cd69d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE06cc086c3babf8FeA8b08E0BAcb4030F9AD5740": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe8bB7407A2A675F2A5A40e39B09C872360F3e571": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe6468327D24d1F19Cc1093a75ccb0aB69DFEb62E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCE67F1933b69ed0CA1E3b4DF1c2C2286Fb643Bad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe29786A93F37E7A631DC3f0B315928A9083364ed": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCBC7416FB4a252DA1f07a3F1Ab8175a35E897bf4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbAe81DcFF994a196FDa5022425C92ee7D40Eed7a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE161663eDFd3cbC26E237729eAb4fE88c193fCAe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4A1B479eE0a90E3720E22eb51d74aAFDbBcDaeC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x519A54747d42ffB8Ad1cA8A36Db0438679D34aa2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C6553f0c8f75c2746c6B6d4Dc5492c2E9b5Ad4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x224BA14C02238fFf93e5902FFa550Adc55ad33ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42BF007D2837A93825B4e43Bd294cf854967A9A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x061eA8E5c045a2A10a96d089081710B046DA1e6a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x837fA98272ed6f7E4bB493dfc664Fc7589c95934": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB40F96443A59C3bA6c47A9700c299382dB5e7979": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA4EcB643c6A5b6bfF5eA8CDcd2C2802e8642b052": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38E3cA0988eDD369B8725214e094A463348797c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x743E3deD7CD4F294544be62996364c27Db24BC6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc0c168A8B4D516533008A8a1D17be20f3dEeCA68": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11414661E194b8b0D7248E789c1d41332904f2bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaD1DeA5b919E13Da54482ef0eb29ba9bd8DBc4FA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16f7A5fedFE957C950bA41039133CE0BFEcbaa79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd355511aF9445882d3398D8dC22fe9D78273aF54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e40c26E1C788777c7BD76418a95649266d65DD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45DA549856896a4F2CEb02d7512C8Dc41a6f0A86": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa1Cf5879522f566FdA87C7a3850B7d83F0AdC55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdB5DEc686a9dBC0bE659b553a7097523232C777": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E817382A12D2b1D15246c4d383bEB8171BCdfA9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3453f0a63f72BEE573449d446895C805920A4b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF22163A24BB35916531C22da0EA44ce56AEea2C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4C2b8dd251547C05188a40992843442D37eD28f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe22c86d319875A65c659a65667988441Dec87FaA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe5FCFCA8519154aD9D73893E381Db99fCAFBF5af": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54b04cFD7B35543bcA96CccfaC0a768CBB880bAb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x89D6eA05CE4dcF165cC801287348Ae81dcE5E511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x574795F73AFae9fD16DC42bD89686B86203921e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4530C72C1C2E8143fA0DdEc579eF4020D5543cF2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd1D65C4C6A1318140F99521c4A4129e4be58aCC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D2Be688Cb203Ee577B6bABbf84B933961497128": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72261E972A5A958d043f1Fb8B2a4Fb162D715898": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC02F61E6b2dE98c72DC67FCC1974f97341f777d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34241Ff275b21fAAFCC405d20E9C264A775ea5C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA1fB97AE62F778f61EFf54E3210A3fF83fDF6f98": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA004A6edd7f640F1b4DE345bd6e0c63cb1B2b092": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Fb0058280611B57E7fd96dc4bA3616bD0d29806": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x986c989A5265E9eC3b8d9a37BD41b2412998006F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49E59dE5DBF06ED83116AfAA0570Bfe13a8D5bA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x528935B9889780e8FFe3B3AbFb614d31718D9965": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0766053F1Db632a0b29C5cBed33F12eE2875823C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb69e4B694a62812b1C6543bD9723cB4CC001D91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6D9a105163fC67a61F0A4D1d5c4032A1E51501B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8E5DE30509a7C6e2Cf39CE1C96B17c1028Ce6Aea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b9100896b556Cf3EB01be2c7c368F263771fE61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x381DCd13738D9347b84BC5fd67aCAb6eDFdE341F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x375f554a38A66D12f57c2E2a5FDA5b062020b0f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAbd0C2cf37661841dF0C842764590f133A1F6233": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36Ba357C27c999fc0a686a6B5B553f134C770A9d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4B8598bC8AB2Be2c69e65594b1E518F823939e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAD5d12d71DC6DB8ED6111f50115754078982415C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9D7A48644e1dA98d5241e0b26dCbF7995013972": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5165a4E25bdDc813e595Ae963f6CB9FCc4F77207": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4f0C739fa3C9fCb577b7002D8C292f2078Fb14F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE93086375044D0ac07ACb498BF6d8B25bD53FCB1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92f20eA9a71f5DBdaA161171A16Ea905b3528D69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85d130a96691D74067cBbaa7AA32bb247FC16784": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1992C0DAc6Ecaa27D07633dF09196C6c45210130": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35e683D062490Dc9244486d271A9B8de2E3e1C9E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf8627F3849d60421D0F5978Fc7685e561f7F8c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A5515952a36E60128e763D222ec41a087E4423e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F9692FfF5Ce2C81737f62bccA101a7a7bC31c46": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0681Ea1B25dbeA82719b7309F80C7635874685b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCad92Bb29DFF2B0Cd101C8D677E47f9aDc3f979B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA31a1e8c5d6E325f0e5c1882B5200B955B3e30DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32e73D646C0F9EC5BCFc18DE6F70d4304e72bfE7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE828556a57d75cf439A5003180CdC8161a838137": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE469cFC3Deed061D38d401508A0638ff149CAB9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBa4624b03043B21F5D7e1506bfC5C9340c38be64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF427f1700b07d22146837D851213aD2aeC3807DF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a3f00A013670BEcaF3E51B5DB8c0A530B5Bf08f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x649Fc67B3f798789734bCC750C6e370056b94EAf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6a0c9A482fc762D5496185261998Fb3c706928e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01cCD75b739eA68983C53dbb2f30F47f7370a352": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ed4B701620564869Ad2b1fbEc2b52D87240A990": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46706ecCb18E5220Ad1B85b362169a744Aa9dc00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f0d15602014f5C551F398821A0Bda50696b9189": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9a4cB63E919AdB3132C5576048ad40Ad341171A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f49F87A75e31080FbF7FBF538f52751b5Afe829": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A52ceFecc09C9D60B300117Fab3795275d01D4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4183b2B7651521Fd453Be8e75269FE702Bb7721d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D5B8EE06d2f8176A2b866ae0a9773208a5F4B58": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5B775fE6cD248458e85abd122b50C6102bd06868": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77f167cDC43b967658EB8aE473f94402c1672986": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x259F5697eA17b6Aac36677aDeb77290f6162d6cA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F620D7e30e7C76175b1459158097F6531b3988f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a0dC12A4bC0e04Abca323153171e5AB12F11117": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D9E74aeB88F07A99F7828e89520029f91b36162": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C97DdaaE28448a51e1856424efD7E16D2CBa3cF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x88902117D492794c19e16785369ccABB65475c1d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf35FFDa03B930A5AEaBa8D9b8c5B559fe085d676": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9e3633234ecc2e2e2816b6a94132f6b2e49E4fb9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A092e4943FD3b045f8A05AEc3e56C82e05a173f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98757ef6865414Cb0121b3242f97D78fe12f9a2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73C27b2542a3E7481B796a47C95759B4216a4bd2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81f89a3878638f497598d79c42F7f4935D0c6A61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAC35b5e59fCb88FeC8821D3E464E4366A82CBA44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6899440EE02F541fCbf4684A762F3837e7ECae7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E06ead7629a725Fd77F8BB2D21C93588DA6B65d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1257D26064800Efe43aD71e4284c07D14d78E4A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39AaDFB93DefC465b6Fa3FDb409E9B868f6639eA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x471D696cC52152CFAF0f3071528D6d3bC570ff4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD09d42e00C55A7E4d24FF55CCD812a2CF0aE4EF3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbd1931F023dDDaCD57B7175d342F881c6467bE11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x066EA6c41058512a16e28685D628b2D666aBc88D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1079778B3F805b8030f5b9fEDc52E92D65f70cE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x804c3083d6565426a35482611a514948AbFb00Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1D1F0E5370331048Ec481E3518fA92206af325C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04c4a90801d1ef5aE8576A0A5bDd8EEAb362a644": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D00ced4D79852748147Eb74598ce56836dD5563": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xab2035D3b57b986B395398714743289e974cA568": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2283F49C88f818041B6402084ca22778df4BdA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x611adb9C24482D446bfB562C87c6135d952Bf171": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E3D240FfE816566bb4B9d981f409Fdd92343bA6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8a461D8c7B7f83249Ce904B6AC5Bd543FcBcfbC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfC8C19E6f71af8282A307b9278dAEc7AB5917964": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB76B88baadf6a33544a50CE755dba88C8e40DE64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdD65C5E9d1D4124A4730A9BaD9BA5784F9B1d1EC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd507D4Af71088BAfbf2eA0CdB6962694F850DE01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa47d3FDD0EaB701a5C5fEfB794E538273f0d25d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17D3a75B5eBFc4AbA3F2fa0833bE73905788D847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8272786E9bbc769135344f21b98586615Ea2a379": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbA00D84Ddbc8cAe67C5800a52496E47A8CaFcd27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeCF37Cf863a1979C939b458b6ac149820e3182c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF3c9821FE05b656D32148ADD93671DC1b53b3928": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb458FcE9B00E79586259E27498Ee26cBD0e1e6Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCA2Ba6FcCea3aCD02f1173653E2AF738d9eCaC41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91A22a39c32204e3f75F2f5e90FC7536BbC2f42f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF846638AaB987d031c79bf12703500d8bD5963A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39Fa9C5d71A0eCd684B6Ce62c5EE897a6D2874d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b82602271dF9e355edc5d54476A18b3B1A544fb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D4888499D765d387f9CbC48061b28CDe6bC2601": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c36e66695c38598A08B15e1C6bea9aE0bcf860e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA39642F947518F417595849BB614158998D054B2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3185EF019BA1C04B8d65eDB64c1c34C3eaE52271": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D76E1A176F4893b30247D5cFd451807C2a7d54F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C4Cc4eAD08221A5b3FbD8F5E20b4Abce1b22be9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d74E7aeAfb9dB4379B72f310D2120b485B07065": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5915ebc0bD2729b428554fC783B9B9B0876286F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF88D367DcFEDA5C91A1B8C012dd92603b8D58467": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe63F5eF0297dE25EBd997360C112bba05C5178F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Fc6eB776fA1795DE8d05c7E2dCeda4F7c63cEfC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16174273B883ec5b2AD3bD9AEea08E67A2711D0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3721c97E0282a1FBa7daB91fD570813FB4E9Df2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x566C6599f9Df969819B3d213B362ad5fe6e39975": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E7aA15C7f04376223a03A111e21401228824DD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x977bc167F889dcd7A6eCe301C92A059DE7B1772c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D03216b776639c7dbfA2089F4D8Bd00b4E79D54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x560D03F2b20e9047714Fea87Cc113D95a3fc7179": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38E5d5239327F1735905057647bA8137d194bc48": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa046932c87E3972807dF273bd9A936eFFa86D163": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75Ec476B1D809CF1450Dd7530DDAeEB2c21B32C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB57CC94Fc53b28fB42bf7E869e460d0ec5FBb32F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x703adE3D59A79a2261A818F5787cB2cC437D375b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A0b54D5dc17e0AadC383d2db43B0a0D3E029c4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbBbc0Bc739A46DBe6f0ac768d2d6fd4949ab733": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33eB60Af276F573343BdbeA5A514e22a0bFe9514": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdaEf56Ce18eeA40C40BfCc12Cc80fe110960bd7C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d8b05E372e7E040394A558D6A5210ee697DAB57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x088b5E59Eb1109c3b0dCa1dd905298409ECDe83E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xccEE88812Bea9Ba2820afA1737E25771988D57d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x465A8228594a8437014B092f65E925bC0473e6FD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C6319eD03BCD939921A4b5c46044C2F56e507b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x572bB56D7F23B41A507d07E02f2C454d378828c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2eE347a9055cA63ba207CE5701bB513f769A988": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66fDc765040E6E2fb46816169Da209Ee72C14D3f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76F34d1a4535241eC054b49d969bdB37F444eb38": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0da04083f712bd8431037D05469D6314a0af7A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1DE869688cF52ac2eBC0E789c54d492615714438": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x123aEDA9e353a64ee46fBA894f6c631db9aBe76c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3Eee02F8A71992546889C7F22D759B2f6E8C2A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57C191389cb4cf776830564e35d2cE3C5b744531": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6fD2Ea15bf02b1669DAff86Cd157e181b478CD7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1189995B5AB3745C806d48355088183C33C813B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD5908c1C3b34cB41f89EB5b1478D13c55eE22060": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdeB0dA5D7c8BdEB7792c8Da952dF187d67b2c9cd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f93DbbC5acE2E0Fac0647EE55497F9E994D2450": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x791F3bbB14a6cd83d36835cE90A1b4B69e7fbbeF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe869E83bC68b9b5Cd72a1c62dAac6acBb4965466": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3267c7cA67667ceB4A1fD1Ea89275DB5aC8b607c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2010Da1E3801d98110a04bFefA1c7720d6a572D5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60aA466Be00Acc37DC5e3b89ff299331907Df045": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x101d015Cb6320a74b0ca35911C80c41e44cd29F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe49CdB7f9821A47304b9BF98cD10Cd92cD282e3E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc3A6e9F874E048f0B88BB8e43c0F38bEd6905B71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71535AAe1B6C0c51Db317B54d5eEe72d1ab843c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e3aC6C1927418AB5B5B1FEEA75Fbef94b1cdE69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD492aFF2A83d9B73EFBcC29C707a6756F6905e87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60Da45F8530042D06580F45a092D014B52aCdBBa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d9A3B477a5d85f945973aeeBB438BB20620e074": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC8D86F5C950f4eC0B7db7A7238369784D87D68A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x638aF69053892CDD7Ad295fC2482d1a11Fe5a9B7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x744d6b531570951a8A51622746C796a3Ad86B4a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBaa9B493bCCBe1A900b39870980f41356f85822a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd61FB49B764194FB30d3D360774692dFbd6263f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e53187f378E1C04Ac3f349b44c74D71De310021": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51C2A5Fbb0F4362466B0b2c1FC0A7ee2686D9176": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa25b152FfCbf927AD1eA80269889370326f9186F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c5E42D8915E20472079ec483555FEcB3EFFFE84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB75500721D659c44f07dF306D168f9De01968DC3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03feF62a00c67520e1f77F07e34a8e64787Ea2a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27EF5f1Fa276E8394681A260F77208ccD0305013": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc063ff5c81c5B932E6dfb7ee9841456266C5b585": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc821cd39EA427d701e5A76C75B8626392086EC18": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7eCC768313dc3BAAD238600A466d7bf08b028fe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa01f4973d8193ca2534ec8467c4eE308b0C5cF80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F310c961b2C695A418DE85Ee5B18DA2D96493Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB5a3E180CB7436EfE43eA2e248Be8acC489d0eD5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34A640A430a5DC2bD5187dB98bE819985248006d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x209f9c887d04A06F61710e4A2B1f4dc3ab1546F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9AFfe964574192aAb6DA32aceC63D79b3671bE4b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfB93E3927dE373ec9915FeB89b176D428808DFD7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x026bc5E126E133Ab2d662BAe650f6ABFA2aD5d6e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc906edB65fc858F80FAA6Bb38d3f6Cf0E54D866": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f36b1Ac2b16FE18C784dc113DEb789c0188166B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38ED9BC1a1E17662CafBeBd359F6E9122faB7314": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA893d78D5d4014B6Eb2eCDef97c225890264A5f9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2EE3300306c156948947a9c63959e89d9d60824F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aa4243Ef5fE3D6ebe375fA6D47A710266Cb0CaF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFA4937670686c09F180C71a9b93e2FfCC3A79F47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x508C27BC844990f219579470EA6B7C9c44E226Cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D8eCA22730D06b125eDcEe0EBcd251693659faE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC850CBEA5bFCe6CF15136d9920261F054A53d1E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA770d4A353293385C0eDB30ad9519a1997b471a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1fAe7DAb3A21DBE307d4EF3bD047325B5B63b17E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38ca8396E04e23299635Ea06fbb657e2a4e693c4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01BB2320fAea7f514B790A04812461112687bB19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFc193599Fa211539D85B3925D62FF351885F112b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1449507bAB28b616149b79078C0380875ab28E16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2090F48E26a758d52ad48A449daA5c20C8CdB30d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d345c1DCF02495A1E7089a7Bc61C77fe2326027": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71D7138C14C34Cd9d6e600D3Eb2d615B805C7761": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x837D1b20e21119Fe641DBF369F775825B51b2db4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4EC7CdF61405758f5cED5E454c0B4b0F4F043DF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Fc809baC271a2f6a7C61AF3F3ADD424fbc0935c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB9cADd85C510ff5a4Fb2D2bB6fB4b74ff3aEe34": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91aA505769BceA5DCa318e2a2F3A1095A804e865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35fF7C02E7B58DA5F4323CFCbcBe8969E4C638A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD749a274d85040ea4eCBdb670505a7679070Cf4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1ba529Bad0303e368cb58673E4D1aE8738D6449e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA0efD27acC781549D5b78e89E561AA0903932d56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC289403317518a547e3920f6407CaD72B600f340": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6741c05958bb9F8436927309E92F286E636Ee37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7059dF82d93aEa2a02B9b137a028749526be369f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D915AE1e48A237e97d34C1853320F1869C532D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe345b57A27145685D4945872dB357CB453a238E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa21FeD132341f41c7f96Cd9A5CDb3965bc0b74B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E2AdFb70b077318ACbc94A5a2C0421D9f0775cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45E2FEB81BD6630c3b136E489674C8B61170eb22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x645147d317B5058F8442C77b0F1b42A3B03d0679": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63e508F44A87051CF7A0848330Ba2760CCF375B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78A7B3846f6B0407C051aef02E365a76cEF586E0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1546B970afC85bb7448B2c50504be0C4640408dd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08b7Ab9bbC3a07cF7f75b4aCEC5b536b7e040Cfc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x243314f50bF9A5172Fe44F580B72cd0895280691": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC69e8275592F10a7ebeF418F8743A12e645953F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1332f3755F48A9C7f618681ae3BDBE618Ddf65D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA69C61c28932BfD6181A37F4203A0919614F2761": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8226dc65d9EB3000895E47fDB40A42b06dAD43B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf89fBeb1D803A2e2Cf38e32a0E7187890Cb67A56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6eAa0dc601a4C273856fDFCC51E4e4A6E6c44559": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x492261c62C8F0e1783b6F3e60D5C03e2e532F167": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x126ED947de7b84ab29526D35CEF99C9b72B285A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7F6bad6Fc716b889F84a94fEE046188f08988ce": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x766Ba6581319429143098c40290fC1595776b8D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa2edc47F1659dad8db3027eAEc3D23273E473D3C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf66128575d8EfFF079205BDA33A1CDDc7E82C72A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f108Bbd7E05cb6a360EFf8ff77B4e9D098a51Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x26A89D6a6A9470ac84734658A795e66662DD4EBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA3Bce8C3c75b290E420130369df037C477d34a45": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb8dC5739b7024ed22E00447706ec5F3DfFc5aa0F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x969a3454ec5DC48D11802bEb77218A7A8744a9dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15c8857A10c732b5F8bbe8AE351Be8704a81CCd6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ca148bf94F6DFe9a36534ffd9D78dFE58B9de57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57A901Ca3688d505234241d2D6F5a02Ab41c0762": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c7EA81Bb46ec44720AF326a25dF1DDE93BC4B87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B1d11143c69d7c361582569b46fABCD78D8AD08": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCf7FB3AdC0A9A4E6F7Caff2ca8C365325Fd19277": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE02bBf8E1507427e07D9F8063a8FFc7d37309C89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDcd4FE2842612743d45a3A66169E9DBA8038e60D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE457134dB87f4246865882a7E3835AA84C4b8D6e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39ceE75B11596E64f8516EEaf3E17c170442b6f5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9dC9597A419Bb3D7c727f57a53a45c39937ee61F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7732dC4f380fdfE7041d799A605473578A5De58b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd1b1a4BEe37b861fafabD05E5F306A862b94D037": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b2d94177E937E090307DCe76C4e294aE889779c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbCC44956d70536bed17C146a4D9E66261BB701DD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c3467E55ea5367f383aeBeda2A68D886A5cb944": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f677CeF6550Aa3972dfC47524d913b4e78D6a29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFD7bD29E1050932829c1FC080eA42D7394C42847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5848a1eB8a10AE88525E97559Ca007618195ad89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x133D93566f9699B3Af46fE150daA8a67a9563ED6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFd6422196C78E4f05106423B6dB46c7DF6c63cA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D3B7C3c9245aE2840c96F0E49705E7C155E36a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28bB020fD8d73d39B3e2C1c49990102A2EeF3eDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dbe4E37Fc0147A29E399d25c55f9cE817dFbff8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14a967d549B6cA6722d5591Ae118f69Fe2E8920C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c1FB03612E943d2b7cB0bbde0FB3470a0e633f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52f300747aFE206Ad2fC35863849c4A0594635B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3a8Efb3a57EA4fFb5b3B2a1Fb1D16C804Ad235fF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6BC3e7B5010f588cfe347473c610b9a5d363e140": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa09e4F96e5ABC839ea82946f47e79AF93759D3Fb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A5252ECeA88672002fEE4D6141e8d0e2C2952e5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa294A99A55F03b2b0A42B4388eaF30FE4C2893f8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03B721075A42103bD560aEB745Bec088c540124e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB31b6746478B80402eB055f3F55Fea6df204610": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0900404261A24027C849de1a268BDEfA8407A9a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D8fFd05c3B56604ef791AfdEbE4fC45f7AD69a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23cd04A4C2deA3CF49BAF61c04AFCB4a23acC573": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f31bC9357f34e51115E232Cfb1Be525AC60B82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14652DB5C36325b8FCA22cf1325a8eAf121CAB9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB0A9d798f7c8028B0e467b913a02b547D0528C4A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x022d5912C50F0b2bb08C52Bf403BAA51bDb63fce": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bCc303a9170a830F28a57Af7C2757c1FD1714aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x276777C67D20b25172f683D0Cd56Fd46E040E885": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf42FD5F1f398c8EB827d65BcF67007E89b992008": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0eC8A702B3012e19B1655A77724eF8981178B259": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3AB1c7848B48a2B900e16D03a7B91D0e675Fe38a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1906Bd0244b749381e2974192fc581Fe0DA4D363": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7128fA11515ac9985F449f02F4358C9018cD8cAC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98838021D6dFd264b0FE6b6c7b3cE23385A8cFD5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcD47ba0aDDCb12081a7Cf0cD6962e99e8ABC3FCC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8C7864111e1e29ea89140900aB0b997be47f1bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa9237190Dea4a58b5E39f88cDEe901b89ad6662": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD80775766186eF44c73422fDF97D92701C27f70E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dEFcCdc77213AD10222866D9F2eeBd9a5B8Be70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51F1e782FB7eDeA34389EA47516ca7c31E9C073C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x913F2E804035200E7dDF33C2AEA922d6D5B65021": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x481797F295D086DD536e22D36F34E8116F8F0985": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38913De54C1dbe16E4079bb8A2a3E0973BC63D0a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5e46A8ecd4f4f0737ad7b7D243E767861885ed06": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD85782De3a7bFF8d30B8f7B7ae4fEB6Fbf0600BD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x075873d2F1342828d86E47c71B261e6a33044ebE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE11C94a5F28222001bE49D01f5Bdaedf9B9B0620": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6bD616DD6c8145e2151c378dd443AE15222CE833": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa07ae4f9e2D41715416ae074c7A6fe857693de4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x704332b1c8051D112E5Bbc178D2bd2414842c240": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x183034EdA5dA3CC088C7326114B09A2A5e57e044": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3cdc6F91d41F1738e8E1cbD2A06F64dc6Da5b0c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f312DBf7d8b5A86CCF37024eF69D79661e4fA89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80cB01Fe8D4E5aCF333C2D3dbe0A42357a391A91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12c6DE027b16D59dD449cD9078E5f09E9a77A73C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe7661Cd7988C3a3f7B417ae10cBB7afF525ad921": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75Fe3943a6C8866e1C41e1F35c74A9fB7a77b835": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2124ed5982e1d3384C4800ff57B9f883b2e2F47C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFCba0693FC16DCb2a4E8FA7eD3DA31f5296993E4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x90077550db8D23f3825634C3497AD3a594013137": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1E223A5eD88e272E7B652AE898701cea20993d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2Fe95bA46D36e6Bbc8d3bbC6BF3F18c85C91f3aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9c2F269ac049c6D2C3f893EB5465F8B33E561FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDc5b17F7e80Ba5f2C06E9d04bd202d394165E093": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A5fcA2bC2F971889Cd51FEe0bBC1014D03DCcD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD892F1cac31704C0f4FE586D142238E933945bE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFEeDfe9c2aCb949Ef80b0fa714E282D66Bd2f955": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00DA72BA500D6e7c5DBF6EF79fF90b741d6d053c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEFFDb9141B8fAFBe36235aBbC903c6D1b924BBCe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79e96fA806B9b688d366be81Fa618dA49c6c5685": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf48F679B60A4F690613D9695a67933e6014f9b43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3CEFb79aF1F4126DC679D52f5f7458A25CE74B42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1436267A9814316C6ca9212D38dB060bc365AcCD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBd48dd506E9179a757AE229d04745476ce6C2aad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x632F93865823557466340E49BC120e3B668A2C2e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4E003EB4382d35e1fd245E7793AdAe3fE9AEb1aC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1681CCE61B0338232B80AEa861413A3D26880DA6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFae01460fD7Ad6b9d6a8ae73c14aFb2409B48B92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF9cDE0Edd06f05A7f0b412dB3B4c48c87160b5F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D0036a91f8447F7d28B6d3AF8a8258688a93896": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf78177359b40AD2733432e593f6e0F730c6E5165": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEeC0D28Ec4eb457033DBb3B1Dc0F27b45F1e20a4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C59816c3Ba468759381B0bAE2FcbE3A27027488": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5305095cF75CDD312C202e27F6aAf3CA7da79A5e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94625BE060D1E09698C616a5808EfB083C769166": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7fc361edA50DBB5Bb03aCf37DC62A7A43cad2EeD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5EDFCDE8B5e43EcfE382Fd5855612b3bf611224": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x861051050074D31B0fc8682D0C383e6Ab01DF0eB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Ad2bca0D3316bdCB8cA5135671Bc0290E24E6C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6A2AD1320Cec227f24f404fcCC120B71b41757d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68820E5cDbDBB1cB131151dBB203d4fef563Fa4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF4d63BAE0aC9C6fC57ECfB25A1E0077dBa6aa091": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE33e58F056FF0f23be3EF83Ab6E1e0bEC95506f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x658205D6D9d3bb93B4463dF7088dE4BEd1D3e88C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA38e40797fAA6EcbCFa4A64F14c7622d090e8a31": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD2184C8954427474e04a0894b7d126c9da6e755": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F8f7Afa8314dA4dEb6be2086601FcB084A30791": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAD6C9574a601fdAD18ecb0Ca7EA2Aa08222F4AE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09c0CB705477D94F0c25D9e535D58d75eE8895A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc22c41E02952a88cAC1Ff34cd707360557e26713": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x304fD132F9CD88A53E432F79A04FA2573Ec4995e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA641475dA364ec7F6e964Ff6E2400cd14e13303f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D005c2514f6507A4829e0bDb9F2957f0cdaDFD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xba3a4398A4646dBaBabE2dd342138165914f4F33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5709569405723E366656c7346A2Ad100D0cF03d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9C9BE1Ee54b1842bA20387aAfE867796FbFc365": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9F120BbF6a096b3776FBBDa792F27565A2c4A3f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01f96D72AAE9AF89C055B7588c590870836f65f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x86D0f719Da3e41dC34c41b395c0AC48ed781f1C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D640D6d2CaE44C3192a70Dc1179aA890484cC7e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f8C7dEF38b418DfC255f08f390476285d578B05": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74726c43FafD8f9C3d50A9F63820bfB8860F3481": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x078Ccaf9d0B60A5f4ff6FB3BFdF54f0eAB9c7AD2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07E8617796E30Ef3Fb0E45B59446E28fc7E4FBEC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19E45bDfe8f01cD24f62381Dbe41e8f9fff58C1F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd9adD884288d623d14dDFec402E4493BAc9f4F15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x394333707d70Af2Ae14F6B422256b4D74a948b4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69eb356c440C88a37931afFcdD2cf316fE30a79E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf010031498dF4886a99ef659f830693C839E7198": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x965fb931ce14D8210053fF90f39d00F443FCa7E8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x798e9dBf975BcFe74Be0fA3f9f3Ed24D208F74f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEDb78aB669Da097dE99D82df95d187Eca20F7E47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1f3050671ad54Bc0201BbDA76A2a7880A64a1E0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC73a01E10848881F3c4FbBcbd3252151204cf3FB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC15e7Bf5b20e19e50Ca097862211dAfACae196b3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a2829E0E388a438a0994c02ebca077bf1aB6303": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDf8BeaAbFed67Fb3FbD3d9Fff14E2e176AE10e17": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57e98f563309996b3648ed398c761aBd6093fBaD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x258214591AC4572399FBbae9f807E159e69B1Ec5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9740D5Cf593Aabfca5598f746C072D73F5408A30": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34fBC236b6a76B19eBBE138cB84C6C63C3A85a23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9968eFe1424D802e1f79FD8aF8dA67b0f08C814d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33Bd7e2d0fBA88940FAC57091d09ba8E9982960E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDe2C345fD3a921222Af6C3837728C0E628CE43Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x473E2F6E83924E955926D287384d5879EaA3eC12": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDb89f642E287175B6139372899178624719871Ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAE6e4C7A07F2a2b7690e101a9B6BbF86f856D970": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10AEe62e812103d361380dD94246E0Ef3a6D8FfE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8312D523e565B418810dEeE43b28C5BF89Be0e1A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35856dbE75CfEDc4A14AA88efe1f90d87706E760": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81aFcF6Dd79897cBa488471eCEc2f41BF3f7CA9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x479322AE62348eB17BA1F2aD0BB52852768d883A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7650376aD17592801bb2CC73BC08F4e777DEa7F5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56A3887c5326321A39FE5c66b72215d8f5B04c9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79F6c043669ad90a79Bb2CcA3B890EF3A54E5128": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFe57DC4B1291384a56e5d90fDc1340b7036f3767": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23Ed05AaD698cD4bE7c9c5F2C6F8c04ed1827793": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4288E54710A478D269E51cf72689fA3d42f4cA0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0B0b919Cc9FcDCD0B2DcDA7ED844584FdC00355": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0adD13cDe4C61734f46E245b1B5Fe3AfE9b6bC29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68e1176f872417A9b8081C516F1b1421e9bB36aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf14F92FEe5452c297B84a2971bfBf995440e4061": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e536E5Dd61DB8627388c0721e8d5F823fAb2D1A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93C1FDF5b0d5bE85099A80beabADE1328783F2C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6ee569Bdee53AD43DfBc9417FDbE932DbDf524Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xec5021815178d72609e6Da42b6B8Fd457AB4699c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA8213ad427CC7C16cf6248e0653553bC3008A191": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfffaf54a65eb198d704ea8C0B48eeE29679120F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf832B66AE1056105A48A310143dc49dEf034061": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x938c708De2bbC63A4e72Df7b4d2Ce1da645f73bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6522E32b435c79a9eacFFe738bc711E094a52725": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf4cF8a63b89A456e576a45e6c1419307A520f8FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c0AA6B70CbBC5550D0a9948eC50c8d973F8E802": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5576e77b664FC8f064a23402050AdF088ade56b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d1f1BB15b4440968B51ecd7Ff99582c59Ae56B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x113d21e5E2B35Ba08D0A5c826ea6850eaAdC28ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96d94f4549A03411DcD60BBEDCa7A170EAC644D8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0AF4dA42b7D4F0b92c386fb44b4Da451A2C22F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2A3E6323DC5A05F07420FfA0282b1461B660a55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAc0eD2862eff16F3FBbd083f2b44e2CD4ff1D381": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x699fec4921001c4Aab3b6810019BDbe87C481F7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e448909Fc3f9d1044DBEF478482A5d1d064EFE0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc00A397e5328527734D5F44638C401658f939819": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac2251f7c1c18B91Da2Ed7F186d2A5C9E1Fc3d22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa9ba74eE20917211ef646AC51ACcc287F27538b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Dd8AFD0338510eEf17DB0Fb4F76B0CFAb9002D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6c91E8fA5225227491255415bcb61d6f2D18C2d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xACCb019890BF879d19f5aAB1db068057e4CEA0F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF24b42D4d75E7afAd9167BDBed1B6342CCD54494": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12845Ac3Ee7c93b355f4fa95fc77d8A0FFbB3602": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbd313d514ECd15a0224da4dE050C79E2CD8382aB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc8f64d227c715aE078D642C0e3a15D44FE7a48B1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42Fe01565e60D0687Ab793dE8caFc1e8a39816A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0d6e23c10C2C4331264c59e01A5483a22b1d543": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13C4A327De6F7E5aa01bF49141Cc982Ab1f87316": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6B0F7e747C23f65E1f99617B379fe69b56Cee32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99093FDAbdfD53Ba64B710801433795cF1216dc6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe175c44341736349fcB4c1498eB27d77b96d7Bb3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEEf114D114f1947BA4a2979159818E4171E91D14": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81477d5014adb4B4a57029c848B3df4a797Ab849": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58502052C920EE837c3Ca71Ccd7cf8cB0457CA9F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07a1f6fc89223c5ebD4e4ddaE89Ac97629856A0f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeE432D08d766a8DFe198c29a9b68b7Df422c3a0A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x47C5700674C7d11E4213D5d8caBeaFA849469995": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f2678Bb8EcD50B65714816b4Dcd5fA24D67F978": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAbe6D5D0F96E2d407318bd2563566Ff4F17cfC76": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3c2078d07196837e3E15Ad61f1Bd12B84ddEa47B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3E1127272C69A8A743a98F4175abA549c2721bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05388b4a5f5D176f01157Cf93DB3991ce3EBD077": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32cC3793f3103f72fDC40f04F0C03C019eD46638": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x554eE99540949C14cb9Fa64Cf00A09A8047fa747": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5b113cEEd63a4D92820FD7eCf6fCe119cEC75AaD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ef5Ca1A8724B0b01D1D729D8AcC99EDeD068c37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c0264Af1c7502581ecB8aa261E1a9c0C7CCA397": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x320Eb9c685d069F100Acd17B64d90b963C2b7EE8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65a7C3Cb6d1C3cEf361063C57936d9d4c9D7bCAB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc690047a38334d72B7fac68AfA3D6aA62252D29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xade53346A42BfFfd0b4546dE3F83b15f24E6ff7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85312D6a50928F3ffC7a192444601E6E04A428a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe36DA3923724ccaBBe9487E4133ba43d8509f1fE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65ceD347A006B95C8FA74Dea8DE4F688A264f9B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FEF584AF9FB31411671F721A77b9d2a1D1C3e23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x325eBc81dEc49b15b22459D98834C051C5b3E09D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54881c1b56e0E7a62a3f0752180036976435b891": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF602c90E89d5fE4c7D2AEF3eC84e2dF880Bf2075": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDDa40f30197C903A43525154Be3f1a0aFf5A1D44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfefB81Fb50FbDf623B1523BE3bC4E52C7d6d5353": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ACEe696E2165e33c578d8956cbCf575e5d631d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x18854d2816c141294AA20A5317CA58EB69AF5FC7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04Ddb8ed83C1cbd593619F55579B11CE8B29e3A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F74f38cD701d3f6E8f6baCFE29DC65Ce7D42d34": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27F8602E403B6EA18f8711A7858fa4a94ef3269b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2DadD6dF80Ff7008CEDde37aFFeC883655480Ff9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00C512d8Efc7Bcb786F97A0F83B2087eeded25A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6D0E6ea70a666f8fc525b0dcF2e09C83D27a09D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87C3953E534f24D30e5A1361ce404063Af43983E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0000000901C92bb92C98DF004bE56D37D1604C93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12E307075F20Baf6B67F73C9017251818F7e5d81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0A5418B84b6Fb083c6a57C2a304C9fddc592090C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8AF74a55936ED855a676cb93e839Bc4A1d307639": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4eD7A3Cdb17c9a3363b5c6F5AAF981EE2DfF43f9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A45468c2B85A969Ab3999f9b286da9bab226709": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xba04F91807dCB266d0976F70c6685B63A2E862d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41cA142B14757529A5c8988252f1B4Ea6b47F7Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x765CAF0DeaB530c043eFbc494bE66Ed1c238d324": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3151d8b3b34aA22287d76532096eb71CD9E50A4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0168459886Bd2Aa322c18ED0b209887095aFcACb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB87ef7588e58728885E4Be915c0749E33f1D6A67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57356852964f83aF7b59cA1cE9fA0EE8ec0eDcf3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2ECA89d84843266d271c98A1e11D95b1CF002765": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43374601caF79d672af8eF27e22C378Cb37048bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa28e586e24e6d78d05e822188DDC118Ac2fB034b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0CE3841FFf2c2489d3231fb74269cB90FDD86883": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd5817F09469D9F9d9FfC54592959238576Ca9bb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58fa1983f7E45dda5b681f5e860B008e796f224b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcd4749e62Dea7EbaC7e8877b6B4869A4a6748143": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d2217979Df6C832d756830869B33D5014e596A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3629035803867E65f2503506c948D3ee31F3Caa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x200CCf3eb57f40D5F99FC53135187999F780c20E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdfc638BAf130f8Cde8944d36F36115c995D5618c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5aa184B1D8bc72022B36bd724bB723E62148ff8C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf55893F0ae16F8867F7a9c7Ae47c12422FD59943": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4683AeB715092fc0442532b4De476EC56ea1592": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0206Bc8FC7C1e8635D14F73c0fdb035493F2FD84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fAf276f6E3e0b10213f8A04BD6C872f8752949B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79EbBEd5297daD97020BDEeed99b317C840f9d22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69ce31018C82CA3D2d9E4C5a6D83161B4320f9e9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D85B56C459fe2AAe459B1BB0C36b33592998d0b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9AEba50C5d0727D5bEE2D71B10ac98E898d416DF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15A3F14bbd9a1D2f6472f0C6081C730F8AfAb3a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f7B1afeb239552Dc1B0DD13a9eBC8d9ec6E079E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x166056AE7450135b9AAd3b45CC6b6625F78BE1a8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaD6ED7545a32ae8B005687Bf7db1E882b53bf8a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0988D84619708DCe4a9298939e5449d528Dc800B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1F1163c6c0a85E91fE60f8DD5d1a7007DdBf95c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD6f58573929d44b95248ebe038cB8cbf48a48d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x608b10b5CB5154132564e1d415B116dEF66A3960": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdF4f0Ad809b9476FB90475F728aF100dEF5E9678": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f46E479555d93049aB0FaFcbDD8C47bbF67901B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCbd20e9A39441166A1e3f45971df14c3c2d87479": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x206A428716a6D27890210306AA2af9cb805C7B78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x386eEA5d7e85f19Ee162D7C15B385e896038756a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x942A79202a94222819466594D6a0854cfEa082Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3B2A91617Bf4f4f6468ad3f225d57f4A967Ba38b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16f86449f135CBD16eD5119bdb66138E42B50B2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Aec24AcA614bf525D26087AE41ee3f9c7B0eBEe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70aD81d18F2838b8650D88740d8E337032c9BaAC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB68Dabf88e221fb4469928bA1ea6Dd312a342Aaa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4A669f017c74b1F6890846FCCCA2F380356BE107": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E9ad4e3145d2be858152d9608FE008f8D1EBc5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AB9e31F358fCA6A43F8392Ff65aF2592885b749": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34224315D978b48686242cEE16E4fcCD3aDdf952": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb987b8c5Dad75e631030295fA23e697Cf4486315": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2BAA98f2bD4F5CFCaE3f3a2e2eCfa3B1Ae9d04F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D04f4DF74438b21B3e7298A13aA9c316b47C632": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC561C9b7035732B4EbDbAe6aC43D6a293aB53896": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7267db34b6072080923F92E626C2Fc5DA91fF25b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFe3C6993920Ac33bA28378A9f92e18De52795117": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdd1C90A381B759FCFc4E25c7eB28DaE80A01a8F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x795a76D8180d05B7465351a83Ee5AC3bcEa7f836": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9DdDC6321304caFFD40a2F848123763532401DeB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97DfaF239e902071285a72Aae5F1812Fd49a491f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f5d5c850ce1fE1Da479B4DE9de336CF3C68D2eE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Bcf10D5bD8a0FF835221dD2a9C794B435c52813": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93a4a366dE322dCFC68b629D6086C6b19Be4aECe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1F507bE0F25fdED2b4ACf27C5b3467E61477C39b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3a58489C18b759BE1c282Ef8885F70cebc2f1F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC04509cdc603589e79612576eDeAe16c1f00D2c6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68b53Aa18D1b8437B7CD9524040C776E2261e06d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a8207adF52729c8BBbd42BB0E40155AdEBdD101": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB09D6570A9C1dE1b22367e46932685E14077dCA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x195dC9FF8AfBD22E176B6705e270586B6D641Fb2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf49B0c716c788d4F91e367136c814A7BA6A8b7B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfdd7C88dB10A4e099337A09B1651A7fE5124D88f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D62F1d6b0D829F5bCF177Ef5C36EE4b53629CC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01e45E43a093453Ca6Dc018543063a71Ee1f7Ba0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56a7a158A7C0fD45A2f8071BCEec69F3b1c912AC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f9fca3144B194Aad5572bC483d33726282c8a31": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcac63Fdd00e0fFC5046eCb80197cF6C51e356737": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb70524bE392B9f4681eFfe0cde9FdA3153DbC886": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7a781F490927cA1C92AFFdf15f580A9De317EE99": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb52ce4240900D3a1A4a6E1286E90272d292dE4F8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Dfe145B69BA905Bd774f2e51cc0618F1d56EBe6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C50849d873CF92F04F0EE7E624B384Ca4Ad586F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2973787DBDF4f3E851Ab420785FB6bf68a84fC4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaD99F536266E2aeAC263ffD9556d02fBb37558ED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x000000000000000000000000000000000000dEaD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA3C1831D7A56a736a0300B614a78206A4E2C4BAf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00001ef108843aB7c937974c54c42360da8F9000": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81aDFA0309A1629f68dB6A6cfF37a1fE68FFdd2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd636cC1dE0163a9de320FA2Be4465Bb4E25A9694": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42598d735a4Bf52878f18F8a299F31128272Bc3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0571467fe10285430AAc57627F0Bd1223a909865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCd0ba640AF5bc02bDCFEda5dB547263A2AD07232": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7985653E99D5A7218FDfF738eB420523a205F21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe26E2466e070BD45C6E159010dBE4445FBba46d0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99ef210F7d6e92150b2Fd2a114d2f013001E9022": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D3F2735904881EA4f1E1097A7Ce07e503FaB0d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x526c17b64d59fbDFC50FA0fA306683Cb5Aa8cE07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x042b863B999827ca68311243210FbBf22210dD9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdFB6623Fe1eF1974EAD1D775bcaFD45A5CcCfaA8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aBc16e919C61D5863b34F920dfb4Dc4a97bF036": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c4061DAC92AE19563dEf9F8728Eb26af471FD22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09Bb1B41BD79EfD19050Dd62AaEFCBd4a96d895b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5423D3177A9F07BfC1de140190D080801c68199a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6127cb39Ac8e6066C469aCE0edcC3506feaAbF94": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7DA220633dFaA2dD4eF3e3B222e836a2E23A496b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD6dbFCE2d957103Fc8E0f66c7d24AC2B481E913A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF38DF4E0C9029Abd0644B9F01C0A5797656D3e7e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9FcDC049601f9dff3bc74b783aF0F26E15F5C6F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF28dCe94A86f64606bb80B38182C2962157BB2Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbE782eC98CE7135A056E31300a9831fA35D52865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Fa6B043DC07ac6081F0fFD1D62E937f5E4D63cF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4FEa52fb488Ab8Ef349e6f8f7d3159075B14235": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E4D8279F71F417A80F7A951DFa2bBDd2A7A3f2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5BBB655ce71A0655Ccf1762A6482fc54A8465b5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22f53AB05e84AF7D0Fb3faF5e2d58eC764B18110": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2D7C679AeDc71DCFD65Eb381107f8beb0F65666": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D2026Dc4ce6a25a596542829fED4b1489aa3D2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6946A82C4A2Eee8C3F3C9f9ca5e4fD5c6e415f6b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61d2Bb94d0151457102Fc32Bc08D0F1B146D54Ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdA4B92fC2A73Cf8f65fe043D3A3Cf80BF06acaEF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07a30C79D8E9E75417ee78411c34eD5F083FC5c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A15764B19edA4F2ef2d7F31f6A3fE59A04E29C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06D3da385a3802DE81cbF61d852b05c23FDf245B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf84F39554247723C757066b8fd7789462aC25894": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74Fb1010db5F44021904803A7793A204ca11775d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd30AB27542DA631fD4bEdC9FaeF5B223A131cEda": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x285bE47bEE9f9e4d9A16d9707c868EED10667020": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3792c198ED0c3C0Fb662f8d4d9Ca27544268781a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b14727117215d7E347728fA426D384A5971addf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42c6Be1400578B238aCd8946FE9682E650DfdE8D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7f818aea7A6E26F9c1ca96ebE980D39159DA069": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf8D5230E47AF11De499a4F8cF4528dE5f3f692CC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2D54033190bbc5a322cb93c7B36c65670D63264": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05A55847945b8eBa38419d8fAa56431566C79f71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3944a52E0F316df45B920CBD3D40aa8eb5E3D76": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75eb35c20180b5d2f661dCD03Ec7ca70F30867D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45358BFC9a1F52b6623fD299a214CDd88244cAb8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6C24783A22bb9A39F6317c24F9208Af9f539937": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73105075FbADe3896270A594fB5d963F5683C935": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF264951C9992BD57f6c0d9b06308AB92a21fAf4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1254D21A56CDaB81E1a123f582bb7A47d1be5EDF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B6010da8365BDFd89Cdb0983FB0E0f07eA28442": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Db5a7Ab4ef7bAD6b0153d334f69ACA563Cd0bD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a0191c323D4c6630a180690F22793E914209097": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48002B13dc82762372e124605c2E1Af7b43c3c08": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbbD6e7d90C19b602B602731c9029119d89490FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6BAbCcf93b1B8D511d9029D7aCA71102f35F30ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A8640383B34da0d2c8C9e5F49376B6d844c95f6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41aF90cD357748928c5e85e6a9bab4d4872DFF54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2805847D172e21fCD8519c7ba7927EB2111C920C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x061Be9A1e21C24D5e217310E479DbDBdD811E824": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc6E17ed3E8dE4752329FC8228eD22Bb4a092533": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45376F3927b74d4625d5c1CE3fFf609dcbf8245a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb2a86E3051bB321910CF4eE10251C22562d58B5d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51a418f72115B30d092F2A2FA271B74cF21c528B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9FbfA9EBC8930158df2778948403ECCfA3E43206": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D979a82ED53b603d5BEde17844Bc86f3813B2c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94181fCf980FbEC537f2133e596b3Cab1360f847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78ce74e941273907164D449C7511ba7783022144": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x829A31859894aD2791F58ef165a698a59F1845Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9E3b7570b65d4e4b9946D0CEa4653aF0D0708BC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9ADb2916a9c726d169C3740506f87069f4FCc7E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B47235150bCCcD6B51F60F175174dD2d579Bc13": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5d981215Ea25503Ecd34f6EDa4b1Aa4Bb6946E3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFfDe865353Cb473544b8f98965A9D1f284ddA3b5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c2c95ec9e13316a23237B0c21aA92A32a9ebFf4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD18B8d61c160e779ceFEb61d47600061007a6130": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8C2275eb9Ca4E6FCc2b52582faEE40C8743048B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57400664F4543214711d9fcB5a9f4639DD954EE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3f2bb48E3365a558c8C3F45760504d6ff3B4B63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16EC5EE1cC431cA95de00b6C88d21D0B4d3Fc2a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6934c6dD16a5F629fd807f3B22374E4cd5D41387": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A90b8F8Ab571Ba5815Cac0B65a3D34127135D2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd905effc7204CC9e7992FAa1b68041bB548ECf0d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58aA18A6294b3Ad4592d8A3336aB78D8D5424227": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x788dc97cd03d04f8D1634FC4A82e6E3F140CB4e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA75834A3c8cEAc5863923091bfD07167b246FA2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd034055741d9627FcEB231f4E30cf03773949c2F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D617029e2413887DB9bB4702fdd1c39De570aFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x477bE27B2085D890DF293AA23BCf010363cFB2F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79Fe7B208422b97a83ABF30149070bFD7B096160": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDc232401fF59C1457123A1b59E2DA06C3B0C6102": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x827E301419d2eE967fC62C3223AbB7eE90651D79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xabc42b6a90C2A5962C1Be78be7344A7D05848eE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5B4C93a02B7264F5bCF6443cDC70728cEd257c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x280dEd1b7e430BeD0Cbb0Aace452Fd2ADEf2b581": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc1E5b72B1a017F7b837b016F64BbE4374162333D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x041635715c70ea53C35552Ee6d1fAF34b4c9E8fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd99E28EF233B2B61020927E85Bf89d4bba7e07dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5665785813011A5c37c10972f8d3D463441637C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x689A416F33c4984403Cb52E4D200De4FC1810Bd6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55eA3d952cF89DA45272d9EB9BB45B46790c55aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7417E3bCdE8726908895152A8F3925a756b1894D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA4f70E0f3C22f70EFd9De62F96DF357CCCc4Ef6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2a231e4308C07cc69D5C4467fbE6a18b2Fa6Ef93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd64780b6D3685d10eb0f32A4eC62170633b27AB7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEcB1E78A73DD83C3520af55d1B6BDE50626eFd67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F4117a7d074A20ed06a145a872F5B870f3C9847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72Fd4cdcA6d93897cCabeE904bc776b6660bb83b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9ffFEbf54cccd2DFE9531Edba4Cb413b2A6C1Be2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f1a417e2dB2EC1183b9d91def83346ae8d842F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f9d2b26b90bF421a35A5B7150365598FCe153aA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22C8D09305D827F1CDF696D1b9Ee309227938F95": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e412B95f268f7f12c8EEB27EA1dA31C813075d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22347EE5359db71F2b8B5DAE1D15518EBe50Ff07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2FB85b488CbFD871f3c84C42Ca3c8DC11c8Ab9fe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D04dd786C88D31e3d2d146A3c6320c23A3132D5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8fABCf470152e44E01750d50f3631F538b8C5d8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FacA1A5Cb35F7259B8F2380466be0A05DD4d3eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8750543C3c4D4cA1342e20DDfee80B2ef7Aa1a90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x298016db488516E9FdB860E12424366f47E3Df2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x62501959d7D549b5625E569342CB93299f572B69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2DB6D8C600b3c55C770b0B821A975e22F88D0349": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2E380DBdc3bF0112A3d23b32ec56aBcA2Bbd47Ab": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAdebe12Fd6E08B5e7235ec07912f838db7AA3265": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0866f8D156DDdeC441a333117156A4fd23aFEE62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D62a226eEDdb698706bF0C54169c5FEE3F4713E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x818854b363b90791a9eBc29e2f9c7f1055ee5A4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9cDdb9d39eb98DF24F381fA551a6D43410A34ED2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91adb02D63c18F6575F59c68161B8a68c5E41C62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29458f736833e336b4209B4514685f3Dd98FB4a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8aBcfeC16caE6E4beE297dAab7643B37e593AAb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFD1779090710934F2c381ECcA22B68075aaf3DfB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf0A067EAAE33F91F4ebb25e123334a1Ca8970f3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C888b5da98453668579a8A2E7B323f91E445f4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1beB509874D823e6Bea7404B2F2793EC8659f63A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCcD3CA7841EAeb081d8CA9289B7E8A6D6ccCC3C4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D6E610a671A3FBB6e302909617b3Ae2604692dD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56EC2cebD7b7A163218A789cA0f2826012721eD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63C964dc8fa9DEd3510af5fBe5Fe18baC844E69D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFE0a42CdcF65DF69e6f89998764FC509ff3b1dF9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAaD02d9Cc52aB8Ac6CC9d48F9a59dfe514aAA539": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd70b5947d42B3b3FD09c922633DcF299f47E0d2E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d21acEB6A14f076dFBb3ceB997306C8d1bd77cA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E91Fe225Dc45567e224E5cF413f618A1074b2B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfdB58a3A3aBE546ED8f89d894A27f9B5DcF2f8AB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x060F648C33D7227D16c4f2B41bC95C5Ffcc8E0CD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x167f2028e2410E0A5C51c62F63B8c1d4D26f4cE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe21Ffc0C426FB963cc5c2af8e2166F31Ea35eD91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeD5632E56c526F3bd1B47d5e88d0Fe5d53315AF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3c4dd566C5F9B441e59cBE4dA0822B81B9500afD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdB3641140585AaabC22e26C72F6cBFaC4dF7eFe7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3EC360c21218887974984dAFfC30480D327f870d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82767B4b962A2C8d0F60df6e4797D77aFb108904": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7711A9a7Da504edF800Fe80f7E52A3aA33DAD07a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x25eA6deA6CeB1Beb08453DEa701caed3bCe46484": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6708687b9F61f6515114440d59233dDb0fc2AF4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbfC7235331682C98DFCd12a9319dfe02dB6CCD00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16F88BBccF3a483B19391278bdc9444F46f8828A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bd6Cb52b48f084282174304A434EB44C995667A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8E6aCea99357E010F3F88E3841ae1aa43D54e5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06AD2f93B61eB355e6e27D9eb8C67EF8eCcfA50E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf35b80b9e771E8082Cb9740DD49FC5f26800d63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE21D5E860E964fF9BFf3dA800ADFc2e6268ba410": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb45051a5EDab022b6e39FfC7d3291c9aa267A4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3592f06364FB1FFC68D320795dc57E742297ef7c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40aa6b4479891C4bF2e5122ac90bfF31f4E8d324": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8281e0Aa17BdCA83611D038CE2CF0e4856Ba22f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92b39b14AA07C309317Ea0c1D5A76B2808Ef0ae4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6347718074C3AE835a49ce31e293860b415813f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a1d45542A6AaC01CceF66d2365b8fdD3532E4cB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5761774922b95084454c8720D647250bAD207EA2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac552Ff53a21C170DD57DfA088d9899a07daD0e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2F1A5bBFCc1B4490ff5C3548bFbaFF1F74aF6A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc42946F225dbc07797111B60738583D11DC54f2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC90bDAFfa6bd488da7649744b6343e38b1f8a446": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB219f71958BeabaAfa343D78dc9b1F7AFbAddaC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7E17834f4aEf24F732DBb6f0D364ad5FDE9d516": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30C80dd3e2De2e59316AD23eA960d3b013e93499": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe41748B199378b03978Bcca18Bd0401578201CD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd880507D359af862A5f8F318c8e934Ab478CA818": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x212694d63a75124bbb898092d1F022f46FD0B6d3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6109Dac18db4911B3642D9627E207cC8C6Ee6c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a4E4FbE8a951047bE0a7990DF46DD8Ee7a30B60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEbECc0a1eB0A05f3cE7100f20Ec6b97cb93F0965": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x774D7A81C0D8331404eAe666b5822528b390B276": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc75dbdF1edF8301d5Ca89fE32F321eCec034C6a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4aD330E8B16BCb8546f99239e1E4D95280C93226": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e403B969a64BdD1CA18fE10BABA4546957bc31e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B5B15d47EA518CA8daddf31F54662bB187DE601": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fA3A3872dd95f4Ca792059F9DeDe4a0C519f2F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C0042653AD001e74CbA934Dc38C7B9DdAb364AF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bCCD29e913321fF41adBc8d128a12500b688241": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x003FF27Bc2a5dFaEe60D6e6450C516531aD8A153": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3dA56ae97f5606bE726f100891646d36c01fCb18": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe601Ce9b41a978eE16F437c9184FaCec9153Cb72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfDC3492ab736B575d446d288E087aA69Be6c5b8b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x21a0B6Fd81ec697E326228DF279F9Add0D1B021A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43b8b19B0064936EFe96ed635089743B5167DEB9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD38aAa4f17A3948edE996d3D8eA28b55B7C6eE7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBaED8D4f349815568A9a36f45f6CC04eeC99D72E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1373867Db85bf48af9F3133Ab65097a1f561C069": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Caf7DAC35eAc81d73272ebB30408D7fA6ee4dC2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6D216c42324AD8e0119c5fEb495D2f174a03f04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x26faC14186e4b247eAbD44c7bee15e4106303479": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x426aCF71Eb49ca11C3273379ee5c44885eD5Cc6D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08f2E303CbAeED51376B8e948eD10ebFB8bdC1F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf5ab4fD967A8D2513d5f5749905045d433aF6a90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03d835696c36443F32d98F059168D086E00e6270": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf8B41B4EB4D746696109b151F65CA1EA31d3A7B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71eC583a7442B97CFd30B398976b019f10683DBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdb5720551425dEF9f5D766ACfFF33bEf88784d85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2C0D8f4FdF2F5F98C3194B4EA5F5c1D67bcC4185": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61CF430eEB4f75762C6f653291aC4463976b9aF7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeC8B371C2e20096af6e7B9d62e1EABC4a0852D98": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8E4d6f64ae10e74077F5DDa85371713C3aF3eC0d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1606c25f314165Dd5CC67919fBC149f3bd7BF9aC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83443bC737Af694Cd26fd961Bc13d5982292EDac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4a1332bE364B686AB1a1ADdC47287cFA58f51CE3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1100E400EaF3a587Dd06880acD74CDb2Bf52Dcd0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCC991b0dA1C0eC2e7634B1e92Fe581614b86c7EA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72DEeb5Ab757A53997b73086806d75299Cc7aDa7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32882c68Ab8832044bbE9b0e9BeB738f60Ae4e2f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5aa084353AE452e07E890cA42Fb73Bf9B2D86D5F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9aD500F5595C9DDA818c3C061428E37b5c9af063": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54fA8b5918B00f0e5024a2e5255AF61bd8bA7B95": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9787b0652B26A2916C561fa5256A90B04D088898": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F0A650d08c5e7077C9075691ce66dF62e269F2B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77365aE372B9AF3B41b6BDa51cC87090aB19d1f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Bf15AB74F6A4CFA4CF02E1a84521523d897e4D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27019E69C37BD994A478fC858d9eddb5b6c72b5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD575a54A345A43EfF67F90Cd5a54CFb4C79fa4F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f586889ccd5fb7bFbA7D40F2Cc64a96f444dd15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F4518B1512F7162BB798d4f5f9D879f101B6307": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8667603B91ffa9ff958893ac095A688FD80Dcf8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0892eB3ABE97620056a6e13e3026711ECf5f33D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA73063743864e854135Ab81eAFcF29B9FC1e6ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x232E7d97d1A332cD9AebCea341cb2Fd6fD07f842": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB290Fd44A628A21FCCBf6347668D80dE4177dA42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD542363F17498c81aa07ae24140D7791640Eab0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ae7421f4E2264CE3F38A998421a08AcFE766A3c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4148c36308021303CfbBbB46a47D7b34B2aCaEa3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3EebC393516D23413E9d529694EbF68822a912C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3AE5381de8f6CA9e672ed55a3cD802286B45C9B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x944DD180Cf568B55757CBBf3f14415E7f2be0d09": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x095768e52dC0E7702dd2784cfcDd919a04B6E4D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x610C02e213496259DAeF68d8413CF13ce6306511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x445FE772Fb15e70f7A400F32B6f5CC2E4bD30b84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaDf094b2B6D2C6f4d8e60f714Be005A378b26D36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2Df044d78017B06dFb41123bB4249174FB8728D4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35eF5fFfdd91D6e3510Ff617B3B862c42bfA4371": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEC2DBbdAbcBe84E83108415A00c700756266fCF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3BB649Ef4FBa1715e1B3FcF99D18A16b9Eea2E06": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaE86583bd7963433bcf2e59971fe2F6fB0cAFb6D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6dA31701A98fac38d0536E4889DD3149e4b961b8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2FE2D4362A95686093Cc24c58CAA7b239BD9fd2e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9be8e4E9D4A68bBdAa8DEcaE9f728Ed50599Be7c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Cd68E8f04490Cd1A5A21cc97CC8BC15b47Dc9eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc08d2eF573Eceae26e82A84b97A764CB1c39866B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3eC63E862D3421eBc8baFD5f467b29d9D8f3fcc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5651aDBdcb766dCf855eCdcc47DCD89e4A281000": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAf750F69978B59a32b731BC88087A0E5A09dF8a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48b211039586619B04CfB3b040CDD12165e3a9cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f849e31d11cF3b9cA6125CD4Fd93E566f2A9E3f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aEC5fcCa09c5c6310C13B6271fa1Fc405365F62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D18fC023a030d97D67Bfe5957d115083c8C4a49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6767A7296ea3bDe8c01A1678E0ba3BeB2917cc80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b2161e13d3a8E3F4A13f9Fcbe31DA0C7a19998B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD141b54984321D36EE4B44bFC621191fCE95F8AB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFDE0c45cE2811Afe8A1eB05Ea8f2601AE3d67448": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x607f2b38E6d94bcEe160Fbba83EBB0Eb6D94d044": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3557E1f1062E233109fEa543931A59Aa922e8b5e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30e02545ef15870C088e2cFCc8245056cf7fe4aC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc75265Cc1928eC230D53914F3e9bC36845BaD820": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x736011B7d04d8a014EFdAe6a653E3405f3CDC720": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4a403ECc4e55DA801da79A6C5CB0B9fdAB87B296": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x805eb25D7C5e4d9446aC444F1F4eb85bcAC2bC57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4361a60C18c992DC8eDdD27Addf8A8C29b18733": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc9961ACDF50a1cAb6D80241E0D7505B62054d788": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf947173d1D8D208252650eE8b66DA0e600266501": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x21cbff56FCcf44E5af5e1fCBa465b440800F87EF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Be0cDbF9b1Cad6E6697fC153FbA56deA1bE4Ab7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4B0f861cA9455422fAfE7e7a6080F193B54AAa4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7796a7f85F5C9E27B7ae6DC17711D49906D42a1b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x874F3C782cfDbD80f440abA5C63Ad69DEC41A605": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE5CeEE154AE2CCe4d37f0Ec24D3bc8cE5B0A78Be": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3d4f998B66F0dbAfE5645D14f001e6852271Daa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13aef869b0187BA0d720C8E4de5A7D51D7B3423f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D06a53578EffAC9c148a7D1669790bF83a6944B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91A3054ba5A5DF8f1F6E67deEc46f99c9D693E4F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb94Be5cDf97401560507792E92c3A29102E5457F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1BF8C88C258789a10144d1C476d47dcb2f41361": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36a7CEd30611fEE2507F2678971867f4494980Ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3215D514dE1a2380B7fA2d5E605D24193323eA5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x515873ec96A03F27EB801f4C3BAF4088f91B9bE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcC1731bE4A6d2d6739CeA6C589aFdC54bf5495fE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa9fd776a50b60A1Cf2B872696A9866EceCbE1D3A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeb129015e51ee819E2A765B8dae3B76D13fAE3EE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09c40F32890805a99392819c02Eb5860b71825C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29c813eCf79631f8C54e669dD74bccBaf577fA0A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa7B80231614C3985538535F0381a2A7ce2Bb9027": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA710c069237DDA9ffB25b5F7FAaE221274368c42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf38B9784d7b2a6297b7aD7C7ff29A0Afc77F4EEd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Cc6360E0Ebf3835616b56B970a7440F19066ce8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e268ef3BB2B0eB025B42b7f1e93B9d42ea2Ebcd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xef252a2c56d61D5417BD59E2586aC0aDF3ce538e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Cc6cA38F7791D9C725a3a30C5F24afA70813169": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04440Be8b67D169F94678c2BC4834DCF3398F112": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x156fbdbA3a032751c6f7A23fCF68ee3B7ff3Ee71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB057C509CF30cc45b0f52c8e507Ac3Cf8E78777": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9eA0C4BB61096ade0638E52bf0241deA5c2424aD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd03D5D86a113de246bB8C063401554F41108183": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5999498C4EEDBa03a6D9DD8b52DA5470d807d921": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69374083e0A19e5Ef86F9DAFb2c007A65841Db1e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c904bf30F05732c16e1886e2E2613E8cA778585": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E6202c6799E41E444F912227b3E15A1eCd4b91e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fb8B8d72A3986d9CEA5736675280C137b5e1F9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2FF162e2C62fDc6112d9F304B416fB48Bd120B32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3bC1b0c0205847b5fAd18758571bDDAd56e5797": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb781e00935CEe03C817c376b9DeBCdD19822b418": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d608992A8c260DA65e1834C4f33Ddadc960F9c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2008Ef79a7d0D75EdAE70263384D4aC5D1A9f9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7284BfCaD25b9d16c5bACf72783C8a16BDE5763B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFA13a1Fec81f66a31daFcCACE04Ecef65eddD06B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB759D5a7D230E6eC0b02347dEEcD61a662777DE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D5AA448e1Ec8B393f926a78dA64e60cD5d14703": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc16373B5Fdb767C5c10b1EF1668649F94F925E03": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8A5125928Ec63184EBdf2ecb5300D054085466b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2c0194cA72D647AC492D1A962658485D8Bd807A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbd0049aD63411d25819C200D5B5c2601eDC63A37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCFFC9c89C666456819B9cdd4549cc04168986AcE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa2165c20395F602B1bd91a6f311858386531ea93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5519780a8Fa2416b88C6E1d4d45cA29db101660": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x915D26FA87D887e165d6573A77461F79A3De37Ed": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x702428abEC56404D3045057462e1b43595ae67d8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68EDd56e13524C78fC15b7F1FE24C3F5b60C928B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4706a731c981Baf43982624D648DD5c4F1E6151a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd4eBC013f5e30A6FCe6DA0391fD5b84e2e72c93A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E8EA0e0c73827E436f2D6fcBdd5082bB60460B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D7753887915339438207763880674c1C7fBb482": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13B6F48B7D831F875771EeCAc073A28eDA4b137c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9bFf070eA85902dE09e1FDa1798E9B805dF2975d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Ea1726128fe7a3De7f68b152d35276ce14207aD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e185636571c331D63993c7A1d0e8098321418F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B0b03631897C5e843d2572dA36eDA5F79E7a2C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8DCd8703aD26a51d62F83a2A94d44aF87DB72367": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11741D1cb1657DB35EdC8805eAE8C4911CEe2F71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1563547DD0c62A802779bf55af1184E65BB1a6E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbdF4B597DC14ac8c64E5F34e4eB81110DDa5BfBb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1816308Ca8CF95B0EDEeFBd6d6cd48b59930c194": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa2fFAdF727D11b77756E3e9031615F5127507bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBF4Bf9f705809bb341908342b0856c3c6fd5D64e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6FC44766204Bd263b0A8aB1B54dECc2C22dE3d50": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52918e7457CB0e526fd592e2E573b67Bd17DeD2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0883cFB2aD3256Ef822AaAC610aee39127a08dCf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46dc1c5f801822a00A268a7555533D440273C8ab": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1087281C196985BBf5B68677B2EeDf2f99cCB018": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0A389DAedcB0583838def855cd0495028a683E4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Cd75894548a8969E924F0B3aF6bF8dC27612b71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf2d2a2831f411F5cE863E8f836481dB0b40c03A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x203750D4B97979e1ED4Ad083dB831a5AD232C169": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6232d7a6085D0Ab8F885292078eEb723064a376B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6297D8F6832B3152EBbB679B6902f2D0C010940e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78E86BAb5453213841b10cD427c9b77Ef82C329a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7b46f38AB6549c63479aeE82530b67e08b16dD59": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b4Ae5B1db33c238844F7ad71CEBD258583d7100": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2DDa27632C48252Ff32678cb568491d85501dE28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81E2C758CA9c717E4b00B5dBa9DF7459B68290FD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcd43AaD533e663b726DAe4a08185E9db8eBC9f6F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaB6Fc9d3bc84954375DA9485b17A6F350f1D7dEB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9B7D7c4ce98036c4d6F3D638a00e220e083116c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x478207b856E109FA77b423A2580F3f890b6933Cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c2f0B4bcDAB83b1C05CB769262f692aF74EA2fB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x714C0F366ebBbA21FAc7B6A2De517A9EBeb7231A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa94516Ce155fFF1880F297fFCe99173b88822D1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x608Cb60905EfC0b59ebaD8A9C650A410fead95A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Fb2A5d8736776291388827E9787F221a1d3633a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0CF29C333A84064723B3c8d4630A5AF539F18E3c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x627FaAa13Ca3D25BF959325D44543e04C99cceC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77b5B0266D16D55351680B8961784E1c85E12c14": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE139962e5d7B07A9378F159A4A1b7CABe9Df1d6E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x303fC875D1fC3126B1bA0B011eaB69a506C50a67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x556D8baCD8cE1E0f59a1A3e9329C53530A9Edc01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C53635374a831dBb7049660bCB071a688e49930": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd740E1463b085F34a245129564dcef539374C2A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x25968e4c4Db0851422A065be460E6880A1E76141": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9819Ee2373457e5B92A3847a635490B242B25639": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xba69593F1F51D4b2ff0a73298c8bE0C8586be931": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8215503B7E5A27469C1861837c638198D1dCe238": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x735eD02655Bca15EC46491C0dE4946591135459b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE8205E8Aadfe4Cc6e7A1Ea369dBcff4179D55b2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE807e147Df8F55Ee8E5AB4A7c48AD01e63FC67b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65C337B3d2b4C2E208801d95eA55Afb7409eaE2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAcaF6D4B71f850b2Cd1875d6eA7f7DE2967Cc21c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6DCa69BcdC99Cada8B5e069a4A3cc659D482559": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17A525ae5C6004f5598CcA843Aab9F2CeBc886A2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd4154916d1330A7eAb4bF3e21295295805A1AB4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x019d78D1b7f8D6DBb3A4472f8882344f7fdebD4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3b7318457f091965c488dac7e58559993e4971DE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F061aA574882C84649230b475a44D35795cC018": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0bC753e49aCEcE82f436A00EFdAe9D70EDdc68C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7BaF6EA8580Ba201e4C9B75f596f8e4859f0C75": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1c15F1f8d2a99123F7a554865cef7b25e06d698": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCe08958266f58b638527B224D8b7141a3ff9C77E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5c2e883b16D73180F60FEbF687B74EC615D1D544": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0F6f7392283163E133BdafE35F8CD7d52520ED1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75662A623b3B1215be070FbDA87CeEb54C368907": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94ADA56Bc45369dD0c1df315B3543d1397E7574e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2da6014cF9D8056645E2e9B1ab47b799EDE840aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7b2Af7a96Ae32d71EEc4d58708C046C588136683": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x891E8ebd0430Ab4360b7B74996C2AEe650A960d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ad517B61005cBc5fe33c06b7F485961CB6E61a9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Fd4DeE3C0351AD3184ed041E719D260B8D4dc92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C7252B38450f92d27337dCcB0d013Fd0AF1ac74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x435a05646bA2994751B3d93F5ab1450C109f768C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79776E826C78f0452a463ee27b9D66eBe8cEc865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5bB872d51BA73847DCFc5031fEe0af568d2d83E3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF06c79C4fa207dF457295d81914BA74A7caC6bbb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd890B6F0551345B8146f66F8c329f70877c71119": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2B41B2209de76ed2B6224e9204248d055ee20c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2AFBC4356Bf863a029ef58875Ad00CF6B8975A52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0e097247F0134DaAAbb03b9d9F7791a0BACE99c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2481Fef92F6358A410f4B42a7672f23CaC514c2A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFC3733587E4066D664963c90CA3bAF76ff05fE46": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD69f170D82DE974cff7E81E6aB4Bb09A90dA71eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d156bc7c8768294510A4A41883d5A4EB15b15E3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEbd6dB5a58c9812df3297E2Bc2fF0BDFEac2453c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28265b4188FF587E5Cfe1155606026cD2CCd243d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x393451651A91EF458e954dB8804D42Ae15bBC813": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E1368C42c9cB0a51A55228BF2de2c4738e83A60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2eE6c0C72952F280876da353973caCBE238AB334": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9fD841A70b2Cf43964d46A742636d72Effa47DA2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83720DB3C5675ec1Cf50471B7a6D3715e4a93693": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x958559eF569BE81A2EaFB55B86dB0fad8326b96a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6cd72c56D94792fEC8aEFC492b185aB68DD9a21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x814A19b98A84EC9F72b7609A24Cc6cD35a2d0B9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F50183812BF7DAD0967e6CB42aa041919c13026": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA75d28EF5aFe56DC916a4b18070a0Daa2d3429cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB9F278Fe221CCCE7B3fBB8A8C1Dc5Bff49918054": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x761dE38d73B4E1b0240f731a1ed37bD879281229": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2492A8400813764952c89a88232F1221858D9C10": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77D74a7611DB43241E25c65888e6a26fa69019a1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5d90576d027480BF06f78AA3E9A9c346F61eEF29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB74C6E3c046E16190DfeFB7d3CBA84Db5790CC4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63eE555F1fea9798f09069b4830CbaA7E6E251c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD5730BBf7897607b2302540FBA00fBe6bcB42880": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B65803C229A2044534c95762018FFBe01207c27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D00E2DDe0Da6386E888f2465e80162F273B7552": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE23CD65ac0253f67Aa75666765E3350D14117866": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf7bfad89da0a98AF22140fF10A700F56fED3ce22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xca8d13631bAD77f49B7fB3dcb82A13A81faFff54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8484fBedae4E9b2e26Df44b92cD5f81B71C8150E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfBf704AB4c8255a68d127A34D4e956594f7f0C2f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAAe99871b32A731dDeAEeE18517E365eBE44F395": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe68f971B545570A469A6bCc99895119A4483AcB8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Ca0196A35CA44540616945c27c79eEcC30D2c6F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4c6325Bc524bE5F9cD4A934A4e163F41f061aEA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD433c1B56055b7aDf8e5e2982E7e2C00C378706a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69b8A24edc9053b3D007710E7B986dF40a0BC7eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x697560Ec40177d9f3B450abEA56700eD84df7cEF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f179ce31fCd8E335410E1A2281B4AfBA815DE2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x885818188ff2FA182BAC9a8f0f427dd6dA804c81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdb88e9CeDe3a24e7070450fb166Fcda4B787015d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x461e76A4fE9f27605d4097A646837c32F1ccc31c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdd82139f133F25ACF2B711664acA8Bb676b85699": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D8555F7aA7647d24dFdAC7E4E6054534627b800": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33c5756eD0a5eeA92c4de11Cf181910Ee0E677e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65a441c7A0607f76B3B153fDe0fD2f3a920CC8FB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C1dCb699e6aF3AE59b7219e5EA7fEf6D9FcF9C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc61CC53572f07062731b21685F07fb1d71495fC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9D4e0F4C81d13EDF3eE8ceC6Ff026a06D418301": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05A13aeAD76EF4d601ee3675f7C31679970EE0C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xef8104c1F471C1995cb6F7276716E8B38dc1B9A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE55c69cfD20Cfa25651c72b84383dE6104104Eb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75F2e07B7d6EE6CD0A5889DBc0083c428D9Ee3De": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf174Bf93251c264d0322171402D70CD1f3493A60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9927D618FaDB02aFff86A8Ea7a2427A53182B711": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F5141e8715c6691E75188BDA726Df54c14721e4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x260eEb1441280Bd0987F717F0B045dE455208e71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29eCeeAFDFFf73E125C2Fb93CdE3E6bb6F1B602c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7196CD6DB846314014Fe2E4E4133B5b11eAF4eCF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80106c6E3001BBd2620E329Fe9411D4de371bb2c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x915782DB070B286375C4B757f63fC9a81c3E93F7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xECE673f4A50f557245Ff44cB89a9367851c31019": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf04946c11127A096Bcd6a572c01C89C164f2fa12": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0722692DeB9c7b0B910C75e7d07C25A0CE920Fe2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe37B696DEffbC7e2639e587C0Db1Ab57f686dfb8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3f201d68B473c89b3D82eA9c9b0E951DB7345A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xebB884f8f382231003FBDDF80D2884187f1e99A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBfd2c7B0e0E18558439448c2Dfd652d8Cea6F97E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AE8A421E5cF4775310D6339a4Be20552bfF7080": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1164fe7a76D22EAA66f6A0aDcE3E3a30d9957A5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F3f647e19ddf45D1a963527Db2Af07c8175Db20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb955a01Dc7dD9c1dB5a83F554000799Aaa38Cb5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x737E2a0Bb15F6642e4e97B9661511b2DfFdDe8B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ecA53F6Aa3910628d7E8B30C0e35aDfF6cC0B9C": { + "1": 500, + "2": 1000, + "3": 2000 + } + }, + "PUBLIC_PHASE": { + "4": 500, + "5": 1000 + }, + "ABI_roundBalances": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "name": "roundBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "ABI_totalBalance": [ + { + "inputs": [], + "name": "totalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "IDO_PARTICIPANT_TOKENS": 37500000, + "MUON_PRICE": 0.02, + "chainMap": { + "ETH": 4, + "BSC": 97, + "MATIC": 80001 + }, + "LockType": { + "ALLOCATION": "ALLOCATION", + "COOL_DOWN": "COOL_DOWN" + }, + "DEPOSIT_LOCK": "mrc20-deposit-lock" +} \ No newline at end of file From 92618a2b2a967b4279848b68169c1c422a59162a Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 2 Aug 2022 18:49:42 +0430 Subject: [PATCH 016/406] Update start time --- general/mrc20_presale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index b19a94a..a035cdf 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -15,7 +15,7 @@ const { const getTimestamp = () => Date.now() // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659331182 +const START_TIME = 1659886200 const PUBLIC_TIME = START_TIME * 1000 + 6 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 From ef719e717a56b99a9e86f7aa45e41a10cc819808 Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 2 Aug 2022 20:53:15 +0430 Subject: [PATCH 017/406] Add to mrc20 allocation list --- general/mrc20_presale.constant.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 78a99ad..d64c970 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -11314,6 +11314,11 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From eda626dc0afdbe3e772aa5bc5c689937e5fb8da8 Mon Sep 17 00:00:00 2001 From: Zahra Date: Wed, 3 Aug 2022 14:54:44 +0430 Subject: [PATCH 018/406] change logic allocation --- general/mrc20_presale.constant.json | 22784 +++++++++++++------------- general/mrc20_presale.js | 97 +- 2 files changed, 11466 insertions(+), 11415 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index d64c970..6f8bd08 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -1,11381 +1,11405 @@ { - "allocation": { - "0xeDb82EAa5D2eeb0156528D19aF8F942b65b377c0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb57490CDAABEDb450df33EfCdd93079A24ac5Ce5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4CC129Ca88ff495C1E1Fb33688FEf77461dD2b10": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4CE6Fc21d309F7A27Bdc42D50168e2AEEfe80966": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8849857Ee94b3558A91F6C4B32e776c6f6A8A6f7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5E18Fe3cdD39C924f7d2F03fe9511Abd3d31A6D9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x720d07C87123c203300e3D06454Cc52642e3DB21": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0D4b88E19157ba9522B279211403Ad99fe8B7278": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x14108773Ca6b9572af48CE19f0625e7154bDf2E1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0324ad8B269a7CDC9Ff3d7962D3257F9C94c4b3B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x449020a39C9Dc3966Db7f12a3E1C8Ee9EdD23B9e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x918DeF53676ad8D5955C637c43983d1D7Db46DEA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x61BEa29643aC187088e916609cA2c1BcB5c3875D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1aCe01A1fB96aD6325f99877b08a40fed5f89A04": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3bC7893646C7F842C02F37eFdaB2805aC5142ed7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0d97cd6C9DEc4255ae4F0ED88593fdfbB2015ccB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1fd8563c594cB7480919a5470EBc21EfbAcDEC9b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEb30Deac6db83eD3e1ef97FDED89a92bBcaC263d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6e61fD005E8fC4E120fD288a8dE47AF343028d3a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x478de03AC3671051F0Ca1b406892322785B36816": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x02F3C467118850Db8cc8e49f8B0159F63B44909D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x556e8feA3b3E44588edA68CaEB633CC14d998c20": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe12D11df5e9D626Ed3c46fa6160bdD94B5Bb193b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9Ce8BfA40942C180B4c40c72632351681325F2D0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x054D816635A5966121f47107A8CC3e4F1609d934": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd80672Deca426e918F7F3D2c5D98bc2ae745B947": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB4CdaE28Cca629Fb033cf170032a2A3079F1a7Ba": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x243791675B5C0db7165159E0D4689B2D4f558d5D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC19d8a0872666741A15F370eaf30115D1Ee6B135": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD4E5e3e9f936a59568C3A7c6159c5cFCE328D496": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x465F302C87D19FAD8D0f3C5156eCfBEe2B97D342": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFb891072aE0B15B2BC60d53E5b91f9Cfb7C47289": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE9709Da4B1cA1B7296d6c64633cD2f3F505186AE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x41f6f76F0Aeece29556bA1cB8CAa59e8904B5d19": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1Df2b2Fe0da71EAF9F3aDb0C3e6Fb584932Fc93A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9f52A6888e9D0ED7DaF51DfE1CBF5C3d25987014": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1D63d1ac6ab0Ab7d003b12946b0ba590c14f708c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1b0649B83354a57c4C851092F20E7833Ee848305": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7ec6bE1c8630A54DF55D98530b89cDfEa1C11022": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33870B891b4462a2cB3820ffA27BBF2568251b6F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc959c8c2Ccd5f8CDa447fC593c8b335484901790": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa650DEd93F54D02920E0Ec5217DddeE2c9e6198C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x84Ee322C64569aFA8C0f126723452202D9d906Dd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcD180Eca01740098321951e9698a43520C3B6fAB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63Dc9faDD8d4291D094bEEE268468f2946C71F37": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x64bdeA412a5175faE2d084D0FA5f553AE107d466": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1eb8DDdf92Db67D55D57cb0Abed31acd538cd34e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe9fC8D24063e4fC60863E59CF7d355A9f446Df9A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x054513707f310a7D12Ad6367eC875FD8a4E396aF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6183445b14A09f3BAEf63Bc4839Ef54FF1fb059E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x56F6Fad9310d0D45C7272F4e4D2294CC10D1321E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x286199ceAF739294Be9f2fe985eED0b001Fd3F0D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb0224F15eEAa741Bd0E861ab13398F6d975456e7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf9b2F57e9d828f84b07ccdABB77FfB404a8506B9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2615b5D4f7793063E037D51D54DBaA69254C9ec1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa28ac1264Ea4Dc2fcAe85C379A25E24B44A1aAe0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2f384331714D0ED9f549e133e402E42f38376F36": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC39B0d8c598ee1Bf6D98B9F918f253Af99A2744d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x50b818d4bF0E3Ee535e6356b560AE0cdf4c5afDB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC06d8FA518Ab6441438BEc506fFf785b66ae9912": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9efCC59a68a27f07Dd946eC8a63dF5CFf760eD4C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42664Bf05C3c126b00D26EA3093A5c3B3D898a15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x94A49666Bd0453C925c8612a0822E48Db86C8235": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x206067193a7fea2e88b33FB8B2B0542731FED46B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb44FC6b75576BeD059BACb188c0B466A408Ac7AE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29F6710aFac24D28A4D3F329eb4Ed874d0Cb6921": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD64C20e9627a2832D4e57b33314dF88D2FFfb52a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x884FF2A87d0E4349445bC91dEF1ebdF2B6cbefd4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4AAE8E210F814916778259840d635AA3e73A4783": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5DfFb97792fF5f1F728DC560feC28e420B6fD9e6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDDE733b93C63a777b9ff1De617BBF54dB16410D0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9E8efEe74aeff5c49342B4A498a2ADa84854c67c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7f278CC17fC894208314deFA44ab64dC3B34F47A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7BadFf2D5e606AC60ABF6719049466b2E624E291": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5B1461b986D6Cb70aBFA3D924C5767B18D49E14B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC7C53721dD281D8C590C548f3c35A3412403e60B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD91C6F109BA732b8a16EDF920d8491fDB05935dB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xab4363Ad5C48B8B28Cb3C15cF653Cc0988bFBBFf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x14C330459B21967323E74f8517e5F54915792a7b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa76bA11Ae56fd4966B019dfEa634eCBd426ca55e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd3B4e4466f385562bB7dC65f3E4FCdfC7414dAFe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x928b60D66343F159C85B3dab8a614016B774856E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x029290c564Ef921c56a784AA16C97E930dAF7372": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x538F418DF790c7009CE59eD69F2494E3b79b2c55": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3fFe16385983264b51814FD7A5e3Bf34B43847c7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcc89fCf092918cECcB460b41D27AfB860Fb96345": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x16b59935FCf119C914302a3cF2D06A5e202ed22a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x23B71AdDF8eEa49506aD7FaFBC394adf348E97Ae": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6F8497037A48D3fD51838284F49Ad59985862865": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf698e7cEb84D072eBc02B355A393a67516003CEa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBBAbc2B3BEF7af5913987C4ebbD9E0c2876eB717": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4C43928621C0A39a9753184C2aB3B073f85eab40": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC75ae9180E8508488bf52f56fbf3e5d9b72fd28f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3D068D615486d5E7DDE0538dAB236E85329A0021": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x10b0D4C689DDfc02cE07C28F46B9Ae4C9ADC3C44": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2007D6f803F33dd0e7a307faC889958632712d8B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFcAadc14Ee1A6f5B030Fca5454Ebb060C8bf563d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0d378E5c8Eecb1f0214447d6231448F56a3ee35D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC90F53218b8021D8369f57084FcD78f5C37398DB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x55e75e6710A3629478fF44Ca50d224FEe89E0F9d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1131722410Cb8FDc299Ea0669256bcC00b208B1D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE4e6852c8e89056F96031283cDCA8CBdE435fA3B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8590FE40fdc8cd6bF9e67Bf2073716230FF16f42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbC61053AaC2acC27bB8AC15F88Fd44b326F3e72c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0C1098c79876ff421B29a2097dF182E7dae1116c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd534f1799298cbE201a55E52FeCb2C80a2A73adE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC1fA50dfCC60DfB656D5b3eA80a162da896cc7f0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA80709ae5E6Ad89Aa11d09B90d6A6531499C03A6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf00C65c7113E9b98225fe5444121C4bF967d0650": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x19cfbC0C0Edd85803049E8cc45e3b1F88BBa94a2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0bd20EFB6cCd3585675EF91874a9818AbE2b45B9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe13dd5586392b8C16CbDc3Be3E45Bb79006205cb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x23Fe0e8C664c47ad3392388e9C438a2768973f79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4c4201806Bd97F3acB301CE20D62ed51fa29E461": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7A166f2Fe92551d6058777367634aC0D471c9C80": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA130f341f1100Ed2b4600336a6Fb855043C46731": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9B741A1Bfb5DE7bF6dCAfC4b0648Dc2430e6e0AA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x124c5B4e6544D73A47f0A14433F5A75C92b9Fe73": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3500ad34614b89544BD5671AF549C6F7Bb948cDf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9af5b257B8209D6008A2436594DF12a0F13FB747": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA43Fbf78d74D7B5818B34b0805d459A438345641": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x402824c43D9b95c3337892b4d39f4b222A46cB7F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1eff5c785c43E37A3D2BADb3631743cd6c5E40Fa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD3a426D3E1ddB5bb1dbDfA9D409132c036bCCdDD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5ba65990cf61a963059af3d6f193D967e9343BE0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33528E95db263686935F11c1a35931C1dd421CAb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbEa177fAABad8d84b3691BE73645A4B455Dd20d2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x30452F6B44EA87a1A9Dd518fEb4f5E292bd91e1f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb0491ca1BE2dc5FfB86cE7972FbD5459DdcF5184": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa1ade4CFfEBE30590A9552fbe6C27BA2def37D19": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x502366d60c5ECF92ac96E202837951A86D0e6102": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdb3c9373FE06E4DBb31A0F90c872e3Fd848cbf2A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x413f35c8b02260f0a199aBE8da78557918ebC46c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8A72F456f4e3F153634d7713a8Dc32cC4AD9dd83": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x527ED2DF55E8e32C95C2f4f510F22B5a9BCC3Ed9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfe99A10424FcB3D3030192d87302C94238d56e8A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd6F6a387019961592C97670FC4C243F5fC6D2153": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x255ba29130ba7930c22c1D5Ab33E99A17C45E317": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x580e5Ef735e0E83285e5Ee0e8C03677a3Ce30C7b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD63Eb32F5CEA9c05876712d8C41f228Dd9Ea49Db": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6ccf5211fdbcB0707ee1AC2735D9DDf8909d1C19": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbcdd07326A797a06A392Ac79a1d7Dc329F589067": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB2C3B1299554e37DBBB39b9F7b151734545b05E2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB7E9b1010e203C397b009f831e45D520Fbe5723a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB3f9abE9D41368596201c605d439A5C7fdeeD094": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0b542E727C96AC25df977960C1c85B89aD41437D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6AA33d1F92f2b64db7Be6d8190390091dC69c8Ff": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65e2fddb87C8eC5D0B51244a9eCD029E8df32d16": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaE86A6E79aE2642b6413D43c4b192cD4B4ECf59C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBD430cfb43f0787a2E73e4b8720544f4bd09DF50": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2e3De63eCf7421944412509fd4A0b79466455349": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe0B299D802a3De40C8b74e3845ee48B75cb8Af9C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeACcB1042405415723A91d216771d535857aB410": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x66d24924D124EE838C580063bFD1658dDfc13A05": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAfEc889E1e57F4970425323d71C7abb085265729": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0422b3E153a305aBE093f2B2dC90aa1094CE653d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x12E0694e7BaC62747f2Ef62F4504a25199B5ca27": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfA7eb6278d3bFCb6b5607A01e6603422150d4419": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB3a00c3CA08A1BD29341519A4f1eaEdBBa82ca39": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5acc27d89bd9752f7C07093BF958eC7C647c6F2a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb902B6A41000a3807F7fe19744BF111224AbBd9F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC1FaDB61D41Bfe71b990145390CEa8f99e0284E5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfc477F3b1A2195948580253829877aC07662e237": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9246a01542D2779635CE29AC3A33500779442452": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb9368A8296E48FD7527e5b258e593e53FF7F32Ac": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2c9748A2762103363E08273922C686dd6FEbF17B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77884B7aEaCcbf1B8A0C5a33E254391b9B49eA8e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x61Ac114D3BaEA159cBdFb8C0613B8C84277D8B72": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1355E2808b19d460F57d9650f5b3725956B7D060": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1dc21e09c310cE0273F8D5554AEDD848dac97f74": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C797e2350Aa0FFb6c52b01DCFb6EF89D6D255d2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF47fCCeBD8650838001588271C9BFfcba4CbF1AE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf927F8B12dFc263b05e5355cdEd0a0008294b026": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6e58132B48A5E72c6EE5204fCc9011638116d3C0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9F6f49aB08bb5b6df9bD7D357E01e88839EbC9Ca": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5bB10BcBdc20a928eB07DDCF481dEA7c667698bb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0dc23062D8886b45a210325Fe95Fb4986B634561": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7e841Bf726d8B72c84CE4cfa9Aa7cE8059e4B3d1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0c6410396Eb84105Ad728b52244178BE34545fE2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE9973d1f9Ac6D372a2B26c253e17078Bc90277D6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDdc9B3886d7bf6B8eC6886bfbB38aa381bA47e09": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x95AD56dFF3AbA310504328CfD939F479cAA699F5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFe8eC7DC678af28675893890Af13bb0c7B242C51": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x01b23f8cc7FBF107b0F39AA0Ba7C17eBAFb5D618": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x40903584F46E4e59a16F726DeB2F3088FF7d6306": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc27636e29fA870DC22FD7240da3104Bf1e5fF195": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81FD1f668BF14736231166dda22b10D3bc9388D7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x87a819287d0e55155e7578c499E5B0571Fb00BBb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42AA6878019689A61720DB7512d20655f9d2E4b6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc27FCCaB56B16156804F735e2140012bb84aB1f7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3DD3FbB690cee983681dA5c083569f2E7e3b47fA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbef62042A3828011Ec5E65BD3Bb1D04196ac8720": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9A598e7Ce9C79e7555739440A62C6eF3430F6bBe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6B4A1FEd369aF43cb0901219fDB523C91709347B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81839EaE0E46885faBa7082203ee9308D785871C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x86A0253f3E40342E5bBbfD19F6b189939a5879AC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68e1a75F7d44463F30225e1a57F6aFd81E736f3c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x53563Efbf3CCb1014dcB37978a6e9663712a4c7f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF087aCcB193b5a22407878ED324B5B547A2EB4CE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7939aa0E09b806763fd4533014C9158dC74ad0cB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5954174A6f56F24130066b21a9D866E3D348f363": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x56A226049f88C078A4F25F13ADdF254DD5986446": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x37ED81Ad6f49E5aE1A3E9AD54Ed3b9eD30b47cec": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD653443d008181D2733Cf7428aC63d96784e801c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0AF2B1A2C5714d2291049Bf65A4Daa4Df79eb93E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x043CF0414AD2991e910e464E4F3e80F14D7Cf0b9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5045Bcd57256462bA2639231d9639b9B290A0a7C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD871915A0bd59103AbA2172E1dF959e55146977e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8caC061efbc42F8e9bB48772B42AB07ACA89c86A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x34B6680552E959Ce353C9C794495FFA9d7d7fff4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x287037283Dd2A60458C74C675746e18Ce319F205": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x51892CF8845384E612E419284b4dC636315e810c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaC1865e71552c8FfE239F8E95461d7E6D74d2D42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD58bB5E99621EEe8768E651bB36007FC622e9CCE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAecDc6B2bAA5D611796C10ce6ec7CE1Bf37f30bD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0F13D70A9C7D4661B57195AF9F443908aEc9daC2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcF24f9DB11D7cf69b1f6f438c1A5b576456F6df2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x49ac6A3d7830292D2BE2f1416D4A53ac367a7463": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x01524Bf6926c04898feA53bE4aB34E8AdBC931F3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBae396d264452921FCA831B534902e806b166c4f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD95AD0E63f724632ED496786361ba9b6DfaEF9CC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x11faf40FFc2F2a60d22d5431ace9D9d61612D22d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAEBba2585c2628B00b3f224Ee727e7bb3dAf6d07": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x343C80183e14183024D3a2C822612B78C94ed2D9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfF7fD844B7AecFD4cFf577d2deBf7C524ea5D6c7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5844DA3A1472FE6A811E28331daA66B32a4e624D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3a32affF419bC3a41c68Ddf793917CEdc6FF9Ad4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5a6481496c2da4a7FD40fC43842178cB2F599d90": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5D9C651bbc2d41FBb83a0DD1fA59188fDB897098": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x91cf6f1601aC171f277CaAe84b79293280fFb1E4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9663B3d553e63172608D29b2c5530b53a1ABC263": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEb60bA7321e9fd8F811C50B2d9a036797982f523": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0AB4eB43Af17f29ED36E33e9f9eb60dD5A5e866C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73b1572C0D1BdCd3aa9E4A98e6A03B5d8e6917aB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1c9782a047C2918f7C7e34B20Cc9aB821b4914dB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF2384194Eab2AA0B4DC25F8fcD958F7efCfF3Cc1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfbf0A6D5580203623255385D00163B83a4a68707": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38E14a38Cfa5d2C97253c7815BF1D888FF7d9f0c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd8F87aCb4b9f86Dc65B0ea9A69522127e0f53Dc4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3fB39dB5F14FcE1900dcf98162747C90f1b3c37c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7BDB641547759e184ec5439FddE496937d197355": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0cAF40437269caC99B47F6Eaf19BD04B17024d76": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDd5dB43e5B360F07aE0DD0cbD562a6d1617FA716": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4a586D0B9eDB0605D8C63f16b13CFb63Ef9f88Ae": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA2C434F6A06D59f8d4584F82Ae39219Dc74CdB5f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x849C2DFA3b19Fd683bcF82a345F9f630d79D6215": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD11B8C663714A3AEA6F968009677987329c43aE4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65382c6DCaD251Ecea9000497C683f7Aa3850aF1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCBefA20f73335A8B7B434E040C610aF247794dc9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2de5f2A28c6fC68bac4A7e64c51A025217f5E09e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC4D3F6feCdAe82fCEE242c794a08093D3024b576": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa62FbdF01F661BCBeE4766bcb126EE44f1E8FBFf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdcc8EBe0fE65B8f0321509437EE5a0d11cBebb94": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaA8995b4126e15FbFc629744bC506ca05c3Ee3fA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x290FCd4556BDcd4D05DA39600881cE55556c8dE3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x55ea799597fd1331bc8F55c115a9C3e20c133e5A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3155066B5C0C80E9efEF37FD9D44BB7D201dd71A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDcA5971689e7f561aE4B84954C821b87764B3d9C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC7CA66152d91141B5637fFBCFB2157d9Ebb4A63f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB01BcC2c7b6f8B852866cE59fcdEd3981a9FB95d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3D4AC8f94A03544Ad6CC37eBe815c27e1C6e11aF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x28aFDAa65B529fb53fdf8B73C78e8b66AB1824f1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x746a8780C65b53e7881aD6e5EC0772e2c645C10C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd2c66f5f1F83c05E811917Ba44cC2745A66e9cB2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3d4113B1cEcdEe2E91e7054c7600Ef25f7915Be6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x05098506dcb81680d181e6C311019b4F2E700200": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA830A850589Ea45F909D12F13Ef892c59F3C2FD4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCDaE337877ADA30CfEf47995788c4496839E333F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0213ac7D6417C10c1aB433612a522b1a4975fE67": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDBC60536ed5D774F00b6FE4F4270F42b713c3896": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8224A48B79e69041A075643946c85C2316E43428": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x15fb86328E91299B707242c71aFE13353c96B6Da": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb5189E17D3dedb230567a40de17bA919712a5f21": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb69B6e08288AADa7CC8D99327EB42213Fb6bbeDc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc2443942ecFb90ae63e3c46eB2314d1F0E3c3a4a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcFf7BE8332c5c001ecD32566e6C5c1507E7E7435": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd8A60C70C9194641A4379ed5150E6BaB11341Ab6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75dd5b5B3D5FA3261b41e62b90772fc1FbF1510b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFFa76AA8387450e54ae290c821A56d3152A8dB92": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd7925A5cD172C203353ACA3dD71b8cA05148ad3B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2b6c7641f13Eb16c9dBFFf2F43032af426E3FcA4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2f5dbb63cfc56a7a22a0a39898C6CC8C5A7aFBCC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0927A8554E7Aa892F4B6381Cd04E33fAf5b8cbfd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB6146745aCe59Bd6B15Fbe7B52CDB97794291f4D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC742A2F67D245970cB0588Ffe0807dCF194eBF1b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x537AE9D9021bDfeE352E6eAdb9bb41F3E45FDBF0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29423f7d062c8CFad0f1DFaD2D325E28bff2777B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7De6b064b1c72BB804ab8f1be30112fcE84b6693": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcebeD608B507B9dc2A5Bd2bdF3FF6121315Cc2dE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa6Eb5264D6B427Eb8840C690972516F931A28c37": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x37267E9Fa3eDaF91e0f3582B53d5DD00025D3a74": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x80b744588fd2feA8ef14386bd953493A097eadb0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6C795Be0a4887816Ce761D41e482fcF4fBCa9963": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2b4E19f8D24b33937dDF3210A81D6AeA54402e2d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb79BD4C2FeEc4189025FA553715EE297E110D36c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2fd42110f478433812EB741AaCB4d6005301edf9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8Fa33056D9067Ba93BC89a3366AAD64952743028": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9f3E36Ef3c24Ef8fD5e8e3194AbB386b20aF9b65": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF370c2a150dCe78F6625658A498443Ab68ca3A73": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x715Cc50A7aEA3ebA30b5574E7b469577e4C547F7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF7DFcd5cB081791BEb3CDC7271c29C8EE860FaDe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3496eed23CC2B0219F31916044595c6787d8279": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x385757F0364eeD6148042961dDb92cA9FA600307": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcC72D781BF4F263EB1afAC43632905aaCD960736": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5a2bFf68d2591480d06a98840805F14e65cC3aaC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4c18FFEd1d4C2eE1169DD938C96D3BFd84A8EC00": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x71848CD5FDADA3a5055623b30B09ebD6a2124Ce7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8f9946AecC395eD458abeE7983e04A7B082081F1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe53D26e4E941D06AE5E00C70B613bc8e8ed87512": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x91e3d5bD52E1E3d6765Ac3d8BdE3dEf74CCdcD97": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x66679b38688a4bFEBd90A83838c39BDe36d0A161": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1BaF16c71Acdc044bD7B6E5805D93A8b2bE90E78": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x12797b71154fCB311D6C92914729E86253dd7D0D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x97528D8E28741240ED6219Dd6E1A848Dd57529A3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6A9b3e3D95CA45e39cDdA9345de9c1e667a645f1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeA72507A3b094F03492DfCebAD1202BC83596DDf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEa585De16bC74E2fce7d7b17C2D1e3D5D783a5C1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA7e7843B27b89d692269F3CEB1577b649b77F05b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x416C1018Fef46d19F7d6D32E00836Bd0C8aE2CC7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa972836F256533A8f39661d6c061C3211C80cbB0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42E4F53b09250BbbFF141B4c7EFdff2AD9873eD0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA878f074Db0d79B9613812d3316e40352ec5aA64": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc191a29203a83eec8e846c26340f828C68835715": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf4d1B6fdE396C478741c30E045009e3EdD92669F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF9dc1Ea1B25a752CC4882F7B5fDf3aA53cc32eBE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD188fbB8bbf515D5b06c3c1e77130C056f8F88bD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7A5EE74414213611378DbbCC40f64b58c3d2A46B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x129fF5246b9bB4825Fa352792Fb04550Aa8a587E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaE529B3ee1e0F66FdCb1eaEcc3678896dA19CEbF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x407410d84E15f79642272eDAeb437aC65D7298E6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x916b42Daad94D97A0b9a41d0c26eBf7F5939b8C6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCf4e75c9CCFfBc6dB98d43256a4D3721C7d09B2b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73F9639F79555f64DcC2de5A57ec98d1a2AB3180": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33f6EE932cEa603Fafd6854827259bE172C91Da4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf298D142486bd66C76C3D9adFc4de57ccB2A9Cae": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x423aFf57B3b3f60fff3560E9FA6EE93c5a8C2b7e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33CD689Cf11F1B045a71819524c7D48F3B647d35": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f3Ac9539b3aA46E69F81b691B9FE5FBdC37ea27": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd0DfA9Cc867b775e096277BfBaed57918CBD40cB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x685876A4e1506Cd6079e1076249170Ed82116341": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x48fd419BA149B17937a0678a783A96F7E2AF9ec3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x08065aFB0C0fE66E084a8e544E12986B969950c9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43D21D4Ad607c5Da1c2CA50C76fA5136586dD75A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF08A969B766a2442182E69fD562a2c760C308405": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x555664f29cdF66345E13fc2983821dd74e3a32df": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9Eb90b15c757a9c3d2bfBD8Cee3a51Dc5B114225": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9151Ec4e84931baBCC821e0bfb3b035D38aacd24": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x51BFff5F990bCa32de6a61EDDbD5b51747e932FC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD9BD8760Aaa6fcce928Aa0ef2c80590Fd6e80a52": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4B2D6458a187ffe306cc284f329602100f5444Fc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x267CcA18263d82e1D2B6E094149Da5462cF5C961": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe418fb36dD92Bc996D5cB8C1bDcd7c2628626ca7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x04C98a96DcB4a078dE1E31487CaCf436c5D9Eb0E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73179b92ff5538e873B1B4B52801a2933729e0f0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD2Bb962EF85B8389c83C89fa78C241C5Ce0C51a2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFB4344312Bf0988A9a9D75a45FAf4F1FE8Eb6B79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x324f0477Ed3dbA6bf5Fa4f34d2AA3B912D452500": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE8503f0484c2B8bBDCad489A25e699542cc14139": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x62d7Eb2560d757C6Df8A14F9077137E4B0af4dd5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x645C946BB911458326D6e83393126Ca3479C7ff3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6C163AEed3aC423019e4164c8485530325759c85": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF08CC2AaDf3Cb934475daA8D427eE2600636A198": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3aD9C62F816E7D35159D69ce8fF5F57E29c0F239": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdCCf8F98877666e0De8B03a8df16352ADAd2B87E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0C2d640DfCdd73c02e85526dBc9EBbBE83117F58": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdf8FcD3FE63Ebcd8aDD490d3f4dBaaa7C23128CA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8206C4ab88425dC33828d4bC5F16d7E45D6ffe85": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x70e7676a7b33F8d2c07049cD0cb880fb2C4ce91d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x59baCA5484D0048eA2E46F8F365769E3343478A0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x03b2e329a42c31AEb614F06f17e634D4CCE08a49": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa4DF12C097D10502E45da975C3E40e58BDe1c97a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5a4c7629Ed8d3E7869Eb52A7dE794378C655f2F1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd91B8eb0f224B0908877770946EAFaEa96395178": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC2FF78d2EB719a5814ba006806b710FEa5652EDf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3213CeE23DB014511a3df039F82c71e8cab3bC89": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xec30e1978F1a07b6ff256eCC22c273B225d7DB33": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7F856571d64A78fB015e89AD3A4EAAb4f21e355D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7E230EAC1e30106feB33cE8081d6836c489d0144": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x592111050fcb5f530Ea499447f2cbC0D1C57621D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE12a08BDE0C8DCBd8bbB84783aC9eF8fcb8Cbf5a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe98aF36E6250d5599F76FA3D2b012b378c1C783B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf22144a4c87610C829272B76D0Ca36De2D3E16CB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8c70305772E2b5A4A5d12c817AD4Cf71A37D36F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f9DF833FD89786e0295549561daf819191eEB56": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3bdCE7FdADb022369188d7158f338a4e117981B1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2499A83CbcBE1aC68bD786eB6F4AA19D8Bd55925": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C9f725f9E47e84f05a1d38e450250Def76315A5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD8afBb227f3E5f4156a2D798de247810dfc5CE79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF2Ee543f185fefDBbce85A87EE0938cD2026C9Ae": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAA297E64fD3A3DDA2950dDCb3A82e75B704e88C2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2c3E8a5a0B846cfFA080C628a25287B38FB6A58F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCCa264fA1E621E64A78E36a123392A0974884911": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x53f3B0c934781b39Dc9b4e74c5E0FC047470F190": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39FCC5C249305E5666684f25A9E4e8FC8834f38b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9F1d33eAB6a24c8fAE6f1867c885FDC42D4352f0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x17Bd178D155669D34Aec86bb404E12b7d4905385": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB4607c767dB6b3a1D85200Fc09eE24370331aF53": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x667daB2FFBb94a4f85cBD62268799D0904045C47": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7aDceaC5EB67f5973424DDD6841172548dbFa2dF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2de8c7BA53572f8CeEB5bC2F9789a415ECF1AEB9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd063407b7854e413db278782A8F934Bdba8D1D55": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd715ddCed1deF460Fe042b1Ce142C76549B6a713": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF0b8168e24Bead4A23ab9c3116B15734e4457662": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0c97e931aB720760a5dB28721CC5DA30b486E692": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0E30731a598A85c707AF85EE435D387b04400cC4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB1bEA90CF6EDC9ad6F7449E22A74E3F19229E14f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfd2d2b856813b6f58ef4d5A442B43d1B37088220": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4c23da391D47338FeF38306D509c01911EB53cfe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3C46F44814b9aAe2AD796bf9b563E13917edFf82": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd409BF118809e11A5443d7BA6343DD3A1B36c2C3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA6d1766144D215AD46A83c7aE7D1500880Ab08bD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1964044B21C8A468B0B0e99733a458FA8F3fD0De": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4ed641e82F276fC3533FC884F06d3744631ee560": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0822fA326F199E62BBC7800864aBd91dB044Ba5B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x711d64273eb08013bD50Bb2dD05d902004a47aef": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x19409ED3dd77c455306181d63e49f4d6C077271D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5594a207548d65602b82b6fc8c1FF38c406c2547": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa8E8e46b34C790b9eCbdC6d3dd8139e7c39B6f0E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Fd184Ce671a131cd0cc32F012d0390C6d6069B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x76c3C27d51693bAe283a44148105B0B823EE8641": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x854c3CDF79757043dB6905e8922c1b0a2d9cf1ec": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5f67387d30A19C58580Fa2E169D412718b099F27": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x45268aEf5B86974946bD073e9D26D34F951D4B4f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb8bDA4c3A269C7B4B64732a1812334Dd043Dd450": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF3ef55B4e1F5963C8efCe7E081f11dA8618dFB9F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x12db173E3c3C33f26b046735258fdf76620E276d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE80acd2F19577dc778881086EE71772e65c24148": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5441fFCCBBd3CBa5FA802744D08CDa82b6C39ff3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaaFf4A882ae2cA575279Dd98c2DE4214f5A8c010": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd3318aea4c90716F3742c619af1351CF51BC845b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x96930ce4B4078f5FF0ab80fc30De00bb62E58aDe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1c2128ee78D1c33747c1561f0f2510544f3d9afC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5dc533fFae3A4AC8785BE4BAd1e652ebBD4280c9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9F384068b2DFB70Ef97b361f10b33636a4EE44F9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0bc9F83Bc42AF59e43562b4c6662aC2A4B579b35": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD3D94e771FbdCB55Ef11380cd154Fffb94760b3e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x23f59429Bb6F8f2271441C5a0fa7CA303312Af03": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x52b66cB6a5Eba9524F4eDE6784FcA99fF8EA7aD6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb5e0a06217682641Fea5e3E2a953Ac842fCB49A9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x521436B5bE5E2B771131BB2CdbC46Fc2D88f88f3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA1514130AB14826F37e0Fb368E5889E201F6D8D3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Ff2dd38C029870623CFCd8BA4d396AEDCdd8bD8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x040BA68D5496e5f3da094BD1D498A6e83DfC7bbc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaF7b40906CE5bdFC68CA80B95C400c735087B4b0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x049e660Eef111d2D3be2436c70C540480F863a41": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2569A2F03812E6EA2cA08108bE180F520227Cb3A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3e791938e080aC514e380958441b3Ee38A9e4327": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C2e50F45cdF6B85d5ea14AF9EdeB9A8d4145Fd7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x28257d5aB4aC21a88D42095cE669819b8B6aF5a7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC376fF31C02CBf4DC5134f11BcF76D6C150Eb370": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77eb6203033a1deA9353dd257309E54A257692A4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x402Ce3283e75Ee1E0BeB9e1DcEF64e60a955D33B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x76A2648ecfEB54960D14d38C749bC56a6ed0f81E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75EB9d84A45D841912a48619E69376497dB62232": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8dAbc71Fdf0b088A0f91749b126E55064c21dDb9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB1f2e73De40cB9d426F19D4937994142981906E2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfbD059E3FAcD81e32B1e284DF1845409E584d5Eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x559cAEB18C27f2580457308df8864e3Ca035dC2b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4121Ef83bE1496Ec9FFb76171B0Be9Ae21200542": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEfD20aDE1F3292d382C8Afe53D6498ecD07c6aE0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6477c71C2C406c4E55D2aEa28b69a06B8Ab4D330": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xffD6Ac4BFbAbaB1D53b408c08d52C796667c5326": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6088f3B87A1ab72AF831A5577216ef8099b60c7d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x456682cd2ff91c31Bad97fBD4BB6DA43d3538212": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C958fa18F69044E0C67A0639c952d952006cE21": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x648eb8AE01801F9f6eC4aa1C33cC68068882dFbb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9c19a2CC0366D2443d36EFe9813Efa2152f29312": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x705fd20C1DE8bad42446E324354eEb7e25763f85": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2760db1A05AFbD1876B933cc18B041EC8692645A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAF5aA8a8a990Ef0064749481e21389753166773B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6Da1E366489c8A281eD40e3330A29a0aA3Cfa57c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD35f8d7dc52b38e14bD2FC76458fe54c3A287A8b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD21b64cC090A7E09b3187A5D12Dd0a125938CdFA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38DB681146711524cc0d0a8CeF51d3E1Bf1fCA02": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAFFa6F661c506720878aCDB8c50D7cF8CC459d74": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x358cCe899e541a860FaD2BE5C980C721D4E07321": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3E3190fcB09315a21faFa6f8b200E31d1E2abA33": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa63226Ba25769Ad47F741d82f7aBA95d843b6473": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe31813faAEBf8ac9518d085c74a5b2737636235c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x753B8c442F536Efe5Ae559D889AfB4dbC498d9ef": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf99774b739a1f8007a2afcBAEaA9069b83667199": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6a6ffEfB26AAd3EeACfA2b217984F1D17D330fA1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeA8EF43fE5D4b6E5Eb4313F32A5820c1F2Bd6a8f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd59dA3BE0E413337d7d931369522a5CFcEF8A0E1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x49F3Ff21E64780d6b4cc44712024c0Df3ee33805": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73B06899838D34F9febAB5c69BeCbe8f0CFfAecF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x907AF363423C3386A3Ec77223390CEE0395Ce9ED": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x761FC9A2ff111D8C21182FdbE0E550cD654CE3B7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCC4e37F04Ca5AC6C7c23411DF3e63e44aD5fe349": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6935a786e5849DA3bc8B9F56d6634F7031Ef809b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC0ed78BD7c72dDd77ae556F10a98c958b9Cd6Ac2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x76de1e8B1F6a0Ea213e26cc6fCeAc3FC9e1b31a3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x378d5B33e79E25B55748c5e8EdFC7D9d7E3f2E97": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0E993084d3dFd21c7D12F22423C28bc302065748": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbb6edd9Fe8B931319C9C76036146e3aDCD5cFC15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF09137b540F678Bb955a9316eeC65E8e3A2b1A9B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5CD546b78fa7038Abbc931819e97F6A1f2B8FaFb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68edA9592E0973F829A2B76Bc689aDb4b42453BD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x99d0d726B9c308540Fe2B0cD0ca1898741f37Af8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8aDd097754F6eaa353A01eC8F3F478F0f5b87d21": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x52a8D238A5c1a3f99d5f37FEc62B3e3BE726302A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x45C21bC0b2E9b4d20EEf6b267Ace1720a5499ABf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1707BD3a35c3C2925241F9A9cBbE1262364b353C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB84aFC36379f6E36161CE0125F4E198aF36C00c5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8407bd34d1f042fDA57848442B23b8f496DC31A5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbE2C524E015Ea016E7fC70A83BF85419F7375595": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC66aef4C7c2e74d831c0A44b3Ad87D80111A12a2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C2426B8D862A8ff941faba634365c8ccd715025": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x34512eB82B7Ddb4B2602129de7a21150a08162fA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC961018af27A176Fcc36050394bF898c0A80289d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x093bf182e4D2C58616Df7578B9a9953A134596Bd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5Df2F1c7dbB4D0B05B03E38ac0d40b6782f18445": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCbd094e2901E3E27cC8471e40f85D2408fba0992": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0284250461473BB84D3Ca090680032dDcA372336": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x20E3c3aA41e1A6b12932C38cb1A3fd9Eb7ACb5Ec": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1e008B42205FcA18f7FeE70fd7E097014A1F84dc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF6f64b470Cd078d92e023E4B2eB8E66AD7a7F6ED": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x655CfF08986761264357a667b73b871117a5104a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9A2a204648740B44F40f9662BD930320CE5de182": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC3483C41f0f4e16E943587E183908580b641f52D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe89e7ef0efa47c4E43A17EC1eCf0Cb488e54f717": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0a5BF321eAE8238978eB3aE80220c1376aC31965": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x64B4b3F4F3f6992d839e9074Dde54A019a02F3AE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8b7cf462AA2C8eed2cF5Fb57589d395C013eee89": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57277634682D991FE831fdE822EbF703aBC657b2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe4d9F174e9B9F987836030Ca0b244A5b4F615869": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7862Ca0fCb33845FdC64db0aE4F9F97d03b46af0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x62BD4CDb6a9CfE6B3Ca3ad57Ea7db61b9eA2eC42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6455ADC2219aDA25587e74d475ed605762505802": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb3CBB7A07D4b8640DA21AE5Cea72c551814a7Bbf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x851925CDd9Dc031df1257Aee4FA15Ff7c269ecac": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE4db86a306A55c9C18c17d0869D552B796a83759": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x008eb737B5029a92475e49aA502B87cd21B67f15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xed6E4576849826081fE2ffD0d94753838ed0E1b4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb937697858A59DD906cfB5D2B50A73b86dC0B670": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x806dBC5c7c588b23Bcb3d71f4861FDaf37a99e79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5dB239D5b52b0b738a4975B1791Fd37519fCC881": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA819A27C5D2e7c07f7739FCf2b620ED6b597023f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x683fB8955D01553491508F0815fc519406958dde": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4Ad8a20CE02aC9c24890014C6212760b562C26ee": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33d6683f62e7fF6bF89Aaa581C73fAd73090FD43": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAAA0fFf476aFE3d015247eFD63151364263DEcF8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd5C1cA79B5e5A3A383034eB37c8C0C8fE9F9871f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe108974cE7Ec5F01161305Fd808C61d1A2322192": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC0812866e59D7F8055d25fc32b74b0A6762a5880": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x97387Cd12239da78d3FF9046C225AC8Dd44b6892": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1FE57f502363B796b1F6Bc7db82d00fED91a137D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x61A06C3D45a9e5A087B83a0211c01ed2D6f0F43F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2B6a048bF4a4B2F2Ae71850648cCAcd32FF81025": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEA3d1b241925c61aC490EF767Aa57afba29c406c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc252FaD4840A21101e9425B585208feBAE5fd588": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x67ae28021CA9E6aC751858A81b2B3c7EEBdD4864": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x84706593AC692b9ac8f721579C1FF12AABCF74a7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x52F761A82fE381f539881786C34686Fa12620c9B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2aF129557c88732f5Bf9C619666051EC009d8B87": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc7c0529897b146B6f7A27db73763742028dA2880": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x753D5b68510Ee838A85Da4F0B10E9B9c1BD7554c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63Cb360E704f2f4779d5608A8A5E3528FFFc5771": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE61DB1ddc44A3c740f5468Ee27e5459AF5C48303": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x20b0617cc839b321827C68BFc87b632f6835E57e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd647200E22395213609BDFFc0dA202542EBe2584": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x344269Cbf90a777304360B06c3482A4B3F9F7511": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf3815Be5fd65d6CD56748C4381Ef2E711dB5956B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdde01Dd8d0640a6a812061d06b6B72203147f42a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc4fAECabe1D33eCE2E83c7852d5fb743Af6720F9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x70B0eF7BD6cd353cf89791a72986b3CB2dbD72E0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x66dEe2b23f95af7cA3AEeABA670053DAC6913067": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x94d61261AEdEdd27141C0Ce4c90164e16C5e6fC7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63EcE9430F424661c0fC7351AD6e71d4281b64DF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xac4d52d7AADfCc7Dac17FD91B12D95F425463c82": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3F56CFCfD8DF725D548175FE8B68626ffA60b684": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD0c0CA89ac0cDe709bCde39066cbD63E1c6cf766": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0909c919007Db07CdA603e4BE121c3e1C9766479": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa00A24ae4C3d3799b206A0347F29285aF8513199": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x22873033143D426E98903C8bE423969329DbdB42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9BDb46655344A13aE88C0F76A408580e2740FA95": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x489E52AB06D2E5cD68Ab12918813470E5ad776eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x05eD9F2e22187b90c3DfEFb9B02A88e9A2f4be8d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE57C2d78Df84C41b3A4a9F335550F69e10e10B19": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa6D8a3d21Ed1e371A1E74B4dB085D1A267cDCBDD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9dB9901C9f2e94340429b3aC9B53234f0B6df51c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbf5047b7b86612cde3c556121460B73142cBa343": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x50B18ff7D78B1Ac8bC2BbC373a6Fb30E0f107C19": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x69440F6762160Eb39bb41FA438838B535379c180": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3fFB580DAB3EA10Da58B0B9C4C079b339b0d9470": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x688c0a468ad7BE8Dc2e1cB92cc1b9b6fdca84d5A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39b0b46956638d395fFB44Ea49A436c8ca438CF7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb697ceA2DD7A0b9C90Be7DA172831D91C32B70F8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8fd9304026dd59eb74717e5c73ac0002c46ea00f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1A8918F18e31a2Da51e316cD5d33D50F54822115": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdc77942427e282cC38CD2F836F2e0006287c3fb7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDC2834718DCB0629A3B0ef7D83136e3e9d84dfFF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd43BA4193920dA3A288AAf3400dcb5be62fB1dee": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC1fd374ca9DE2437004799136D748dB235c5ECED": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf845A40a01763ba1b83462BEeCee331bc4653ED1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x27149c5b6137037b1FBb7CF04091eb4576D01F0E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf4a99104e15515Ba8EB0F3D7b745f75007Ab6cf2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcF0e7B312E7F59F62FC1228d66b182B4345B2F16": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfA5eaA5d72cF76E92764E1E9128A7aE792C8486C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4d2D638454E465229aB104116B74596BD993a636": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4F36394A5D937f8e13689D9F965c6ACC05000456": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD38476D3c1EaeEb5cA68aa7f4EF75dd0b18473EB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcFcFfE706f54910DD3C98f9A7297B76BF663295D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDDb5aE2D3348AbDf185c74865FeEa8f90505D43c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x705d493C82305BAC4eDc527A6487eE5Cd1D1AAF1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8B139211fD5f39C9f4943D0C2039957E8609e960": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5D137303c07A35664FeC8B68805937902b56E1da": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4286419E11938Ab8EcdeC7D74438e1FC201153F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC187B535241357D7299C6f403D382d02eB88BF0d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD80A167ab58795bD2737d9D8697fE754CA1f0C7D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE7467cA8BE38beA9073a94B2F48724e90e9c239C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C7F4B0319D549C8Ca8bA06a7694AD7DcB88837b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x96e70215d17611491F32B1D3c9035E0Dba90E11F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63C1d4CE3f0eA0a37Eda12376205e25D2298Af3a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA1e71C2D12D70506E040cc91b28399F777D078E7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2e9923548988759EEF8B902Ff67CBC0f1BB4a876": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe1F3bfeE5365046ddcbeA48dEa8679e127DDc312": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1A48B674b52D9912De8c2d72C542d863215fa714": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCF5AE86A10D4730035C166c30e0c0E91DcBD5BF4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x171f5Ce1e0752da51A9dF92b9f48601b91fF7FFE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0fBF737Ab724180216D4A3b0cA277Cf47D0cC74d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF165E3d91fBAf01B18cB23bc770C7AeDFCAEb497": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0b7f08cDaCDAA6E0b9F8e7B334D42551eE96f0b0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBB7cD10547f34a986d5663C8e4632521ddd58947": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8579752e97A3ABe2a56C3FBf166924C2fE5c610D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa50b0E76Af8320aeBca39Bb925472F23b59e0FA8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4cfF121c7cCb12B54B46757D8bd1250dB0d7B2Ec": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEcb3d784d93125BaC7610C79148f1Fc4d105D071": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC7eAEE43B7f235d3380C77d55D639aa97c0643bd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6f39C1FBd5C43071Bbb5eA52a576f8D126633Fe1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD8a730967F2Cf1A2cebEe1781892AFecF4506ADe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x41f7B7f1C0805fFe647e2d533767d2Ecd1ef4875": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x068D1a6030BB3e8cf185b0433Dd3c48C6D3157b8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb5eFd4aC2F2f80bAcFd5bc5ad94b20A5de023409": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x10A2C645aE42Dcef8C45b8de397B8a4D9C47fba3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x32AccAEfa35620b51c061901AFf1B74991E7322b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdEffE0596B5759E87FE88256415F9Ff7BF78C2b3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6E4996cB18E2619dec2C32841981CCA3001eAf54": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa721d41a817723707f6Ec5169C36539989d02cFc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x549F2eB041Bb5b89d954d4ae18fFe1f0d4377056": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0ecd084eD57d964a74eb4620dd7942F5384e30aE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6FB3af602BBdc75C03d1C5A442E2637615CC9b4f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x90B390AA2ab89C7DEA543951B54A1cAf7B6Fa771": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8af7810012012Ff02f0734D46d09Ec1dd058cAe8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0c4601E5AebeFe2c0854D6Da4BEbd376570B9fBA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb2017a931F206F40CF06268E8FcFDd3d4E4f5E80": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2667Acb34671815eA4b242Dc397101B06c170430": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x14E9999E96b7394600CF39E243f0212434810f52": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x159F7ed0D057494F0de525b758682F5904B75Ff1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x82393D1fA94c15729628eadD9E1811705369F8bE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc2e4358ad08202eB0071221d0E5C68E14a0e266B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCA4fA1eF929D7Dbb9Ad02719C499FE9412cA176d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5A2db2C9F0C7a048f7b9836525886EF331AE05E9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x361D7E3Be644f68f663E5D3E49c808818eFc9814": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf0b1d2562AE198c6557b53DF5923514d01aC9Ca9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x84e40CBf192E4c68Ed1E59af454E258eD3403754": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf8BeeE9Da85484a60b90939018E34124C78e24E6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x255be04Ce7C721679440de2735D231C3c893f262": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7333E0A08BeaCF70f04e43EDf3eb86A8a053f64B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x600D2B986355D25EC23155c90041a3571D12aD45": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x95735465cDf5896F5678FDF83a5C9CE4F518Ff81": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaeCe85B275B7EF34838DD28C0608E48C8Bd3171D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf6136507E755492035593E4df10De733996Be2ae": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3F638b6CB4F208710F9a768F1567a45015c3c3F0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc4A6E3D1454ce9F2F7b2cdc59fe5825B35619C15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC2cEB2B35Fd94D06F13e3E194173F0bde152098C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7AAFd5eF980C17EcA27a2107e76Cd047C90659e7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb04B688b2Fa620effdCfEE808ee64D08482caEA4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0CFa219FE4b24e25e4cbf26e448d2De37CEda4e3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3eeCc796B8aa53d139404c13a3610C16A17e5aF6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x325409632bccFfAc706d378A2Eca57Cafa21ab11": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf90EEB769Fb55eaBE7a8dE6Fc162863cf724a58b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2F02c4E2Da54A0df1F40DFeC773dED5125dC28bF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8506c53488eC8235ce858049fD68F23599879328": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x04937c1c74B0b850E58f663B550736e16FE37Fe0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1CD53b78A2c1a67132eac4b3D584Db8806238f15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x291c26B3A8FAaD1bf4B3606883E8a85A7763F8D7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEc82EC222E99DcCBa7d4ba69112706e82715a8C1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x59F41Fc34604DFBF310B1Abd35230F8abF349053": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43D57590472FCbA03402b80A3CCA22c52dFB7219": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75D446065f56FcB187EEa55B50CcDD7D495E0481": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3ac97095995Da83Fb3784E63E67e98E228F4FBdc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB4fB7571B239CA85A049f9f42214D1E238823440": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0f1ff4e59a52A17F0c0b2E39576C19CADa46F1E2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1530F2940Bd7E9d9E8a8c5EaA37409Bd22dbFB3F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe797F884588095Ee7Da45981E0eD469aA9cEb009": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAEcFfF554D4bc60203F9A3aB79Fa31E623f695A1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBe6e477b30aa4919FDb2192B74C0D64d36004D9B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6186496D413C09c7758cBFC245dC6Db34Acd5825": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x286d9E38217097eC8dFbEcA01dce517994fe8C4f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2F2d1Ebed1b0E301fAf5Ed551eEc06621593aF23": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0491FbF3b495Fbf4Aa6D73F44Bd5b39eC43195cC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBe2cA6F56C541eEa195f258D7db77d51dD6B106A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x56f76fC1848863afDFF65dB8c953b67997881723": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xac3269A2a0704bDe92E2a019c5b0E4F5fE323191": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb5543F90d0E039374b80FD1Da0F3e0c242F67Dc2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE3dFB1beE32d13bD09841e52387D05eEA58Ed61f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1db35F617c96d1B87175Ac08d3bdab9B38559d22": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29B79c547f1E81AF85eEFEA168D7478ABDd082C9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEB10a1BD46E15e36a25baE13C49283518a000cDF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x358Aec0953239C84EaBB6C61f61d7a1D1B7dfd93": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6cc77695e67BBbb4E07515189a1323965cAd6a1C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAEA735BBD150d3397b79dEd73F278aD635eFF561": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2354CBAeED67B41522E8bF2445B904c8F1631DC6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA18D33a6F72B5E5bc1BE1fE494D83B8C7B2b224e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa9E993B57a1878b59a33DE3A753E1291FeBC6A59": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE308Ef1a6E6606476996c5A821c1F1Da991cC12B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xae8F0E1Be19DEAa4eadb7F61607C9570304ca46f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdEABAA81a54725E7Aae80951E93e7AA45d92Bc7B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6667EebC2e8A033f60f0db49ba30Ffe7A06FD1FE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xacAD95570031453BE812b88Da058A074C26E3535": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEb0A73934c99ed7E150F343bf2F56c662FeAF2C1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE7f54A1a866Fb841ebf1290a02C2a2B179B38a72": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDa8e18501Db98C9898321064f5BBF0D06031A4a3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3E0ECb366a64b94345F61f679869a5313903ab5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0402E6aC3476DDF96fbE75a5E6Ea1824cE00a7b9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcB5a998Cd81ff0d7613981A64eA2B1d49783b8e5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7dd62BdCE70D3fdD2D7D72451281Bb12503F662a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x732806C441e29078F70c9d51f4A72021fDfa7354": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x694b7075fe32a0a424Cc4203410aD0315F5D7Ee0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5663F391cF21C2CB65e4696bB6f9280d0a58Db8d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x030A9230CBeB809C51FC71eDeb50E15A802A9535": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5041848f86a219eDaf331091f81eE271FBd56004": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc988f7844c820cf3e979c3F48Be627b389120B4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81F556097Cc0898aafA2c10141196C5a73a05472": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6e0B792F6808D2Cd4AE37FC7C9370157801EBe4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAFE9787A96F5811b1513c6408FB5e85979Eb23De": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA025cDf80b2474762987CBD727c70539b252918B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf3384875dd5905F9004E40aC0f2761433F5082a8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33C2d1Ea6e63e29D56C6CE07C73660c115b2F717": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x336a4Eff61de62337B0E2b5D584079940Dd5F4CB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6FC23962D71eFCB8742E109b62C7977cD392082c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa0852a883B0b3900395667814638C0151B547088": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3fed65Fde5151635e240D37c69ACb414f3751Add": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf600BF216Cc468dfA31d90AD99e3BE2607Ac620d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2C9eE9409c052Ec8f540552216c29A2f4289D2Eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA9dC4ECa1BCAc5a7CADA4FCB71F6995355bE2026": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x35Cb3Ec240eE2127ADA7Ada6ea98e6e1cf8B8810": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb6d470ab7871b8Cfa8F2ff6A44C9C6E9EA2544df": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcDF33a991B66811cD25a42b7887FceAc776CF0c8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5fe1d92b85478E99DD6880a647cc150445b5aedb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb6160B705CfFF47a163bB5c41907BA8286656D6f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1E5B9E4b1F29d0629Ad130Ebc5904ad9AB2a61A1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEF9F50716CDC3a6b32213D04ce0977909Bdc9F62": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc08bD156Ad0A2E529Ac3798B6F3F74DE4116Be49": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD470F08E94259bBA8E3c0b83CB637E15d896E27E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe30Db1C12b250AcD85C78ac5E40510C410abC902": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Dd3F3a57A98e3c673744Ad9D1B9Da7AFd96f4fe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0C14B646CEa888b58f6265614cea02219DCB291f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC17C30ff3c6A9fB8cA42fCCB974C8BabA066224b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6673DfEF0ce1b0Ba9BCCC4373D5Ede4CE12039Fc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Ced7d36F4B2C5a32B2927817BD009e7e1A4974F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5F068AaCFEFc3A8a047A390d654f4093f1bdf65C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x810f8Aa09e9e3f1f77eEe61ca3Eb7AE85808b59d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB3935740aac0C7EAB611EcEe993Bd0d11FE43845": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7E826Cc1c9f60333C6d6CAB9A294C766ce01b2A9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x375b52A960642Cc9bdF5404412450b934d0618e0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4765609A84A1F13aBad4e3d70dF4A6d5856c70AB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x820d131A0532797C1BAEa4bd378eAaD9A5618024": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC8B0b4Bd1A759d76314EeeCD212FcB89D862553D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9925D8054db7c1f5F5A9dC2D70E416010904bE92": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75e04Cc0a0E9bf1739735F040eBB52fd85Cf78bA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1b615eBF9045e7A015672d183FcD1A4A9A84C17c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6b16B40f113349587cE744e3C196085A60F473d6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x596Ba74A37684bD9516a50342165A61446585D8e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5EE9b5C0470F18baEEfE36D8c4DA8DC4e580eADB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0Ec52403Ca74EBecbBb64a02bAA7550b3eEaF7bA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x676bb38C6C70E8D6B68b54007D8E2791f6256b24": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65a012AfFD8AC32C9a5c8fC97D383de16e7dF1E2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x083897a7bCd62b82CEB054Fc939Cdb13136f0f13": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDB46bcE3408cA4cD3cfaA7CEb121f679c13f88eE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0EEa261426e0610C69921568C254D457C882EDF9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE26f1Ec65D9526Da7C8D76f4a67E5f296E26F47c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x98000f240f63364E5849e32F9d14f1f5733cCB26": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6f77A0c5015DE4BdcD6126EEc78278e3d97864de": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB1C37a2DaFd8824C618c1571F14bC0bF381f8ae7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0a70b9F030Fc2Da0a2FBeDcB5040f5992f675c40": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5E67A1aA062834a621568df6e6Ee9e4AafcC920f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9597C3F0EDe6B7f7D69a340de865E60E829d969C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdc6EDf61f104CcD0d5B05970aC4Ed4C2A8790bb6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x48dE181811e57A46e8418Cd8A13fE88F502d4aB4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4e05455a4aC6710fA775E7DEfd028bC557f247DB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x24DF2a29aDEa0255A978C048262F6F0D5256c78f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x754fd4B6d458aA5d4c470a3cEfD20e7E5948042E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD7615BD06BC3195aD4299f2cF6f630535e4BF4eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1948DbDF972e7f8cF536000c6396e2EE46DA3B04": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfB299adA3b1BD0D983F74ee7867ca42E68e1c779": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4d1ffe982e2ef4dc5fb2aC85fC8b34523A6D531B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x980fffdC7C1F91834C2752464e40E111fF11BB79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x87DAbCfE72125A79049d46354dF731595a4DBC78": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x209cf51d8952DCa86d36924B68525994A5E4674a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdC97DEE77A522315f288db3197a0802Fb673A279": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5ad608A2d923451cD4F19bC39E986C45aFAacE6f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x14D9BdC2C87a526649462be31A310772086889A1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x19fa643dd736427E78b91a8982525aC162b890C2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x71bfb8031F56646c20CFB862842E9dC5F1162ee8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE40207F3A8234D58CA30d572b5f28C85Ec0f0EF8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7110eda00d37a20D41FE9fc4a5580338ca57bA44": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcc8703E26550862E0DFCb9ADB27ED7a62cd7162D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa6CcaB3C06bbcd73A8B956889c33E5236D850C43": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x559E2eD7bB9FC9aCa24d47F61c9d32269e98A160": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaF42CaF01afD2Bc1FaEd6610B82a22117497476f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7dA927B17F45a4eaC7bBe0A95A483F740439A915": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x245407c29a29D99ACAf25557D9DE5871fa217001": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x58ce7D2b62570e7fecAFA9548AfB12B312C0cE70": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x82466a963cE2441DE00623d83136895D32CFcd1d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAE417614DDA7fB748C7c34bB1c241692b91ae852": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2187F349561dF26540934953b70E47489c4F9783": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73bc37f92396a8bf4FBeFc7D8fe7913344D36366": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33757219ac4775B3e3E81B6d0E053D5f770ECbeD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBE1ae2C71F384CCa7d0B506F5c2166DfC33d3dcb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x52b4E2C41222882c1CbC6519ce4e3B4a5A0b6841": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf2d13C49ebCe7BA851d7e9d059d6Bef996D10bc0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe02d99d813b952A9548680D3C3e132842f73136a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7E8EdA3d91D50d0af6b4dC987a39DaBc0A5D6506": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9c4Da550d6a9875d78C36Ec4E4DB655032ABc36D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x54C08cC64314902b6c80C8f28f0b96Fbfc25e21e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x40e5b28211c2E55F8589f200e664eD95584f8eb4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0EFa887eE2804B2D9F3827E327C01F3198992c4C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4F4AA432cbBA04c6Ab90Ec7ECc50ca5f28Bb77F1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x17E33448B40D5b19169840D2B8bafe988e0745a9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7711d293dd96508bC476f629501ee2c22660Db3E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBcA8f0d158cA3600C457DfFCd0012B5AB9e2b21B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6b73e69fBeb4b4110579229DbBEb48586aaD0F1B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa5727b878DDF21B4Ccb8331E0D38423E6AF37dbA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x20C48fBaE18602cdf29F3112fEaCDF549351E6C3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFB8100A5d3de4e5dA3506B4b8D71D0Ca20Ab790F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5681b5A25Dc7ea8f89fF933652dA855053f39302": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7Ff6AFBC176965159a97970aAb9048C184F6edf7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1a754f76162e9f28B75583F07Db3Db78A291a915": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x76c8F3806258FB6306A06c8531d67664F2684D8a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2d7A95C4f6a28B9339F4eA0adFd40b7c6bC8E499": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x149fFA1e656420f04d273CA1D9759036fE64dC65": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x686F14Ec33b1bCfD40672baEc71AF993b9522293": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdE3aC990cad7E76F704DA58fCA67b9bA7415CFdB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1400B82FDDD3c27428A5fbAFb784CBA816861DEe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6f5B7ad7feD96C51F39D360c05d862593A9EcFC8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x843dEeD8F4A017aB863d6d5a044F5C040f3a4692": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5aDe16Dd99F980B8526687A678733D32b9d6f059": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x66D50A87689fbA41b9c942aa7FBF3Ba1395b91d9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeCa94432A404A1f232B9e8A1B5e53096a9D0D4cf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa7d55Cdd48C5376bA1080937c0a2Ae01F202E02F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7bedf27a1499132E083c26dCfAF96D1D5A78F3ad": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x724186d0C9AcF65bA3335573b2C81D8C9ddab282": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAd1f70fb535dF67f18E1fb47fF12b4b4461B3419": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x420429c0ef8d86b5351C72d4EC92eB03c1Ef265C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1654B10f586803e41C0D4cE9E1A0F75a7Ca9B98D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf543ca33060972EDc3668fb52b5FdE2ad8090386": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x60747e058c40f9D60A9340B0a651d4Ea36740D6E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8eaC39817AA7A1072c6e81859afF383f534A4105": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa1801088BE935b0Cffb00551D465518C77C97250": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb61ED12f4C3704E1a836E885AF1407b11e3e431d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2b8C1bE0FfEb264081586f5Bc49eaC8786282940": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5844c616eAa7C35dfC395eF57eaA2fBBC91dfe81": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5E403F8Babd4aEf845ffE441602E072d1fC91136": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x107c2941Ef7767DaaBA6b28CfE2C85e88207E15A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3bC6c50B8D38c850778300A84513Ddeee9179088": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD461d3eA392609f17F187145D8BBaC8172C8Aa28": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38140E35FDA3F160ddb06E0637488a3E174ACbBc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe1Eb9169D7D386cf404590e74Faa4De8cB58258a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc304B2DB3a3d21a4CDfF05e94f499a431023D94A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeaA0d37b9E7616799491F0c756b255F25d16B646": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7Cb3a0876Bc051596dd7c575dd34a323b9b61106": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29DdE95e4ED3457a5A97E4Fbc5CfAA3d4b461A18": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2eAe56BE1533A1f78D05059364187CA680A0c506": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfCd6Fa6ce7F0d572990a9Fe2Fe63F16E390de012": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC6B5C4Dc30F4F0697b2Dc85591ED34D4803A46CE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAF174C62393f18F6EEA9AF11A9752F82771EeAe5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7da8aAaBb8080419bA604fcF102f75A9922cadcA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfa8300A4846Ab6eDf272A5BF61374A53Cc872ed1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc8734Db9E2CFCF62acBb131970aE94Db0C772a8A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x236C684e8424015f8c8c1E308E7eE14a299e0DD9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF19F2fD99a86327A3A8bFd583a2645D936C6A3e6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb0131f2091e555E994F7e2c0E78E3AE8749b1CBD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x93B8B552A6b7de7A32b40a6154Fc96b3c71E07B4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x913aDC9c72b6996B18fe057e22fbAEe33897c3a5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x88f573eD553F6F182b524D99c9B4f3703c351CE3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43bfaa06F33F277109571c5445c7b3E7eeC452F3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39Ce625C059b2E737512850FDEbe372B0d61eB9A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x51c626aE5758C07eD2b628937dedA1a0D09B6261": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb990f570f1B3d3d7b5bbf188119D16089bB25c72": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCF2bb6cb68C7A31aFF0516Ac7dbCc41B8BC310c1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43E3c50bACfD8C1A99ca8A4F6Fcbd55cEa4AE19A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4E1eeE3a53f0007Adb18931B52db9E3103ac757E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEa9c986de4Aa6414bE13063c5A0627A459E195D9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd2debC2328a540c855484a3a6C8DE89F295C37A4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8e8a0C22083fFC02357A5d0647A591b221F110Db": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x059EEEdFe126FF4C918Da928a33826deF7402744": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42D455B219214FDA88aF47786CC6e3B5f9a19c37": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x779677c15162419B30Ec8220236AD7151b872411": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x041683A2642344ce5a784AaEEeDe75e5Fa08df47": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfDEC5417282F5c04A5835060C69519B7E9D50Fe0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDa03120A3a7c67612e6D2c31b2b7498a876d2987": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xde35Dc8826D86421F4C9fE8394746E40a2BF67b7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa4d937D71A0B679a7937668c5D488190de8c209F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3EA35425B7E3563A281dC6be65cA8c90D08F1877": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0FdB24bb9626ea8032b5D2B02c05e2fFb059113F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x201f9bE259124a728827d276a690e06A5C75870a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x23Ff4fBB437708BFae0A2F94F11Cd5bC27e93df8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x05a703f545672C17218e3D7ebcF3f330433b71fF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x539E7F735954c051791C8d39cb79d187f9F6Eb81": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3fdF5006e050F79D2802D0442106bF828744d2Bf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29A8D4D96e9138E5bD5670F6b7947896e9267B13": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE7E3A0f710C0504fE07EDe2e042348831a2d405a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7b252516F2abce705315C3f767A9B0075F97aC32": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4E3e667628bCB97377E76d473C7FFB2c9394b594": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9279c71c2e0c9C38aCdB253A8e36A566686df5a0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4059F9ED26B982aAc1FCc565f9A3350Ce60d63B0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1E76E800745D5e6CC76E11eA9fFdE2D65b4f60db": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc3bF8B600092650a76B020430b06B8e5f705604A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFCAcbac2CA1bC385de62f404a47B9D88b3E6f101": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf6613Ee41BE851a3B1f18040f3A8759Efe4c390d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAe00Ad7463D7B42745b95B33137eA0416ddBA3C7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x72538eeFeDf9D1a381bc7ecb74d2444CE7475CB1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdBA37fc71c53842c0E0e7DBd8f7fAd52Fe05F4A4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C1679Eb432Be2d59548a8ca188e104159D1db8E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8167c61351073A874A9F8f1Da34fE214d2100C6a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE7592533Ab4201D2ded90216b3037cE5d050D2c1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x755CE5F31617deD6e41D15Cc51D8FF642CE10e9d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd3D648c59109566f0bc10F0eBbf9100718E95B88": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4d1b9D045c743D2FAf90c36935B0D5505931Cd3b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe03DEd53a4CD6Bab75C92Dc8e9bC7bbD90b7F71B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6dA80bC3D3807148fC19f9893b690CF6f22a58A6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8902CC62A40C264cd0dC5E7dA60AafaB1606dcC9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x00fE7c919D67a36A78c89F2AdFc11C4A9d88B76C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe9b75D0b68b475f36c15f49b9BbaBeFc3c458281": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd053bA216119A067A4C5aDC956a34a821d338704": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x002b1e9E42505816de211119339359a03c916924": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb9d28C5a609F53ee48f8374038d47811b18983e8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x15f94245a4Ca9534Afbb018699c85F320c270721": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb8426Ff2981f450452C063e4942f0e09218C622c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb9d37ba15235fFab9F6FD6e2001c93784A76486D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfCBC81E0bd5b43361b17173697Babb1f131683dc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4e8c101BD3beaAA049E42b0Db1877C9c5f90b724": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x78656cB8299081C4374fB8D081f30cB28Fe2f608": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x791dF79d5ad94271e78C6fE695C5AC42983F47fB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x93559526954A35A690357b303518cBB331f1fFAD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x74e4fD1Fde7ee919055F01125ce70721efCaB2e1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfF589102d5B5dA5977147413239a3481a4E7334e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf270Ff01b896a5c7BE06a17ADa9a6BA1E130974A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf7dd33F4AB790059B9CE53F00f8F14F39E10657b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE3cfb032a487144cbD03461a2a2b296A9f9E96b1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdAD4169C8B59B6d564d157497847356Fdf5ac092": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb4b70fD16f2Ebc217A242c60b20c8a59e16755bB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x87Eb26E17392ba673E3bD775B13Af3B684a8FC79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5F1D42eC75074741Dc7B8956562EF9faFA1aC6bf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfD4a6E8D21230fe448d411DB726DB3e0AB5cd6b3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9580e99605c46A4a2C45910E624533F611Fa254F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdFc92422d29ba035D2bA7612Fb045382B5AFbfCe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEfd90A54886f9D3632585f135b1cac0B71e4B2cf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3ac0B8294ad1B6F4a6D656545663f60209cacC8F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7AcDdd5D8d13BfCcF6555728aFE5F54BF5Ae8E5f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf6309EBe619ab9eb221fC5D8DacADB2Fe4F889C6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9192a21b4e12a3DE2221BF97c4BDFCb5a95Bb25E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbe8B73AFE0d791dcA27ea1afCb26f8028F52Dea1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0e0e756672B912Ca645298Aa1726312A63D6Afca": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb590827BCd1Ce352Ae4A7089114AAd6Ff29F8667": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x001DFEed100BC14859A337de5032ec3DbE36eB1C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x66F91039549108E595A3936aC634f57f7558dDd9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc4B8FF9d89Aa1ffC67e636d14A52770DcEC62f45": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcA67387d6688760CEA19DD2e320a6E1F24684aE7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7601F24564F3132fD612F5f19b6B8f37Fb096F68": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF5001895e6349f0e37F08e8487067ecEd7d8DD23": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb80E0371732504f76Bbf365f119769137f6a86BA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbB366173eD0b64E83bdb2fc31fA48F0F6A7cf412": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe15D8DC0519ba0e69296FE49bF7588CEb805bab5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6c24570a39248819024B1800AE2f9e629DE1376d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x125D8585a465D19C0fa0156c0a860986b0d74d42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE6fFc6389065570ae97984cDe29E5ce1F150FA51": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeb369022C2E2632a6CFBcB308b68177409c0e5Df": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5f5d217E5419ac51B3a270FBB4E8059c4299A79a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x95cebd1650394b66f49fC7302f9a3874283b00a5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAb8245FB683121B20876965FfdB41164c6FD8756": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8e2eb28b91E2A4134Bc896356dBc925849Ab5278": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDc25ea1C0EB8E2F3dC3Dd7c8a07E1d83b41fDD40": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcEEfe31E9FC859a6C6bC55e7Dc566c65366E048a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe894A24C5823d8339Ea43Be889d975DB57D4EEc2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3FD8311383c90CAe13eb17441FFDC9f71a5ef72c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73C6c2aD6e276f40d15194CD92721d7c2d6A443E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeDdC4062002714CA4aA4B16634d151875aF0b3e9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68539F69667c76b6d35DEa93FB332042DC74635D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0a2f1f54d54c5321dA9C27A05cb3baEe8d94197b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x59481139bCFa6C57c11a892D77d0cc16F20D4151": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x64DB70e8cBB6F1cBB04154A378389F51b5C3682D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7aC159f266bE93E67c24f91cAf18a42bE711ED12": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x64f582318BBE4Ace0145007Ff636649ed12cDBff": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x13d2Ba431846fce4737944B1D4008B0B256969a6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8dB21c3F4EFb3D70CDe3A9764Bbd39D8c6bdf9fC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc250Da366Ee67A98eF094274d73B7B71e1131bB0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6B4d9fffcAf0626A958157b288e48A282fa66444": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa74974367597159D97442ac54496f3F2Afd0f984": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x061663C4b80DFeDf8a1970173766A7F0110E32C8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x503A623911095e2c506CE900B90Ae3E1097a24E6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF0c8953df924FcC59E718A8D51B3baa29C0807b6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x709f0Bf568a63ED28d72D342ebFDcb3b1c81E804": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x096c08408a86A5C060AD730B509aa61EE2BCbC6d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3f259c90639421Fa664BE8A2C9d1f6d25cCba3D7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC2EAc8EC7Fad3328F51466B0c7AA789E28D17416": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x70015e62e7aA017d7A7594A51219fe4C276D6AFb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1c41f4b0Cc9B1aDa7DADE18d0c2DECa6a593B33A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8fc43381d89EBdaFa7b2E0A8479F37e97b0b277D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB6A4C852Fa867544b0462EbA736Bc03421127f48": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF12127aa0e1e165793c7511F904c011Cc24A8C32": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3D87BA26aA6E6f7378d6437AdD3A16cdDF4f5A7E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbAD19E37e23Ebb8E91Ad0B7BfdBC193F4010ba2e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2d499824BacB2E045b49D5bF6FFb8cc30a569259": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2e52fef95Eff67d04fF2F1DEF9819A295bEea770": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x853Fc277EC612BBde4f69deaBa852EBb6d7f5BBd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x873D2ddC99175E7B82ceD021f0b29050eE14eeDc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43d41e511F0B98B959bA1f423b630f31E11f11cA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x728f3EB85c904E75d1b658f7264Ce845aD965B52": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x07A27705eD393003Dc066160d2706394A5B96d61": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe877D2ecD4a646995c3fcb52afbcebaB647A732d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x014208c7C3C4fC25ca755567ee8864742329efB5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc1DF8Da79636716E957B1894dBB5cb5A8AeB62a5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x93822a1D799FDd43C206034be0C9cF84724049c3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeE2da0eF62f230134b4bA8cF4221975AF885B797": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC04be3860e35D34D12995F36D41306feFdF63455": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2aA822D1B91D0D82C6Ea9c3a0740f84b619EF858": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x04b21287ea720C0C9f491B21A8a7B687cEe77892": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa6289e145C78D4c28459496c25cd69bdb3E715bc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x10e3EEE744F2ED92b38413145868419AFc82BE41": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0801964739CeffC59b3390DDbc851553C7585EAE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7E5D174FCAc4e06949b7d3f82c18EDC4199DA0fC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDfDE0F3B4e533cBF46d30E4a97946402dAd04F28": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0bE56342FB71Ac706E87134e039C7E61B5278079": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0Ee4E6D826e94d92A24CC4ca2e481773Aa724B25": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x07d084110eC4Effbe165292CC249fAef89F4720c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB3DE62a6374742cE05953767FB24A9F1764D2771": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8F20AaE44F6242fD32Fab01E78eE96506f91e57b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x54356DDA1D00A913494918859E8936dBf3d7B659": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x22a06D61630F110A552147d9Cb93d407E30Ed8B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6058aB417C18cFb1Ae17Ffc80beAb7172A83049a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8Bb729e2C82Bb9024a54c5d38fa571d1ecF8289E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfa74C11a96c937D2Bd9D6821C2E75C98A70cB690": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x225964311B7dc020ef0F981fEed4285D1B685ca7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcACABFafF911d7fE25247E9aB6b8C8D19E37F21a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF50120D2c245A530Af7b0D53b361cddF8e3B409E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x40A25b3C5eD876111962dfEFdaaEe426c8fbd789": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x082C44223bA863db824Eaa86D707e1e21c19c878": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x504f2284A7fE2dB636435fe654d23DD2803Bf067": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x116Fa052D6Be17352365f78cBBCc4610c32f8182": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEAc902Da57A1E4EC5941d0c8d2A363d274B5AE15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x27Cf11a70621690371fabEF536408E9687aFc38f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBb60cB422Fba4dFcF785eDb06432fe5eB0FdC51A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE74b69aEDd6B159FDef0370BA911DA7409a590Af": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x96822331D79AC7e4f45E83dA92F0335555FE8466": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x956290cae406BF01a4047035f1a8975Eed11D1E4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4F1B83Bc5CDbcE3Dc933022501Cb277dC1894593": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39Cf2bA670396BEFcb894989dea401d215aDA942": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA2860b55082333445fc2F0C6F3f3c1E80d5751F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe3fE0E17D58C09404C55a9f792E62227e8f06983": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6145882f8Fc4388B7Baef6f9EcdE8dF83065F5FE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD64cE7ddAA9E42C715ED6bf0c976416e14Dea7BF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3578495d34A0f32Eb144c800BFC6fefD7828982f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x392ADd568C8c910d480D549E69CD86630942C0E1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77b51054262FAbFA05C7eB573CEA28038CE535A0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x60ba87b357Ff0E8380Fb907809afedcB765Cb54B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7f5928C0c6DB6C8e09c53cCcE23F589d1b457333": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaF4C390caACCb0B92572328cFcc25442eEB682fD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6249cE46c4593cA7912E8b5E80dD25EC3Bed56Fa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1a6EA184bC940CDd75D500901bae67b3FBCDAD9E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaF26e9E6DcC5B14b93C7B9b0f98B24108fAb5818": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x415F9cB3b8682BF1748452812e9FE60440Cf27D6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f8A8ba81d32dA0Fd84ee40e9019Ab2BD82465F3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdF3b03c0BF5355538BF7eC9535dFE593Bc6c4B43": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x55CD6f77ce2E803FD49623dC5c09a42aDEEF1840": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9e13Cd95ac011a6587EC54245A16c5333EFcEeF4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x40d6D9adf9aE71A427903a26618247cDd0Cbab60": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC54f4a560609DBFEE9c6F96597b861521802774A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x87e9509c818482E0eEb9251869303D5ebd237396": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x49C153Ac64F5B620D2c864DE9081d1E1a4a7df44": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAB2F4075FFc0AeE5ec1b32f61Fd660a348388544": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc7ce2Bf0d26148f8CA5501d22EA98C62bc165fC5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x525F6FfE9718524dfCa10c00AeEcbAc37B0c6FfB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4821462CC328EF4cbF926fbEd9697eBf8a565b89": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf39CA9e29dbe35702B21D1d2B7a42B95Ad8EE8e4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaA483A73315d5e130B46f6C8EF3de3C2dcd35714": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6444c8B19638aba814bC794C0eA58cD2e179d50d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x87605C060b0cE7d18C67fAeee765E2d92050f459": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA9C65614Fa718CfD201721066A31EbaF1C7Ae609": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf1472d1EC24cA685f3704584315670fbdd2cb4e7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4FE38170E5B1Ae39a59c1E5314BB5CB64B9FFed1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFb530d5A828a0D8664Ee8f5944Bc761ac0Ba6CC3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x37227Fd3351F34ccC647B95e43b6334Bb56b2BDE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEa9abE4810a2e47C1852D0570008A6BE9D2F719e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0b9aed5Cb3934Fd831Cc84E40a1987F006F000B8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3F83F54AA5ad97CBfb880cb7E086AC5e5c303b4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3C30B69722403CC740D30A1FB551E59f81a2954C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x558a9d7Cf72DBd49052D615A178b11C38fD22650": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaaD98aB328c928d94Ed068ad937bbc09a3F79753": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x41Bb607B8Dc98242EEC3c95584418706FdE4bfe9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9E39bCabA973984023897978EAF19Bfd1c95412D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE7aa853276Ba0173C5F9fd41BA33C0A67068cF43": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1B8989A7fA866c83Fe40423597C7fc972575628C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDe11B75525a09C4D444eA8ee57921a4d5fBf702E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4730eb54a065a31b407607e2dDd14fCA66A0fE6e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6f197e77bA45C7852D2A7E3879e787476a936d4d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9d9720eBcC4B521147C45d81D4a49D6e58644025": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8ED4B5d84a2bC0574094499074D2D00Ca951f538": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x588Ad37bf23763d75eb2B33D18694fA8F292c486": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDdFa52349350144d306af9b7bD69B3e9594b6A4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA9209e0B6650065dAB92D5ecE6C60945544A7997": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeB08058a37e2AdEEecab2148df12895F311c3e61": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57bC3Ca2Ab93A08062aF9017D35C96245fA0F26f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33118c1F28867d185d41b5634ED33aD176EefF30": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8d9812347f55194d0C071e384D059ff78fDcDB2F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa702a1465d060263D6070c83f1AC81ac80f65DD8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x20ABe68290b1e0dEEEf4B5E09aA5D862D511D9aa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x03B7d4F397F3EA07a3A0959B63077E2eB24f954a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2889f8b764cc5519C6Fc2780006965c35fd44EFd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6d8441F832c151349f0C1De3901Beee5839563Ee": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB27cc46A9430aF5047d853aa3de8fad1F2C80486": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBed03ad2B5e1ba98A9b67b4f12b4C5FEe486d40F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA7aCF59b3Fd0D4B70ac0A96a8ca773FA0a793Ade": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7F914fdc79f2aAe5B33A5D0B27240134bDe749F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x043969ff3b18b57aa273264fB09E7c1BeE5Fab39": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5bAA688DdFFA6B0cFf959A8FA06671cEBa330A20": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x06c7aA5625571F50ae39ff4f72D7808b1EEa13d5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDdc75Fbc4dbd72bd3F82e43E48E453381d6F6F6f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC8c2C0329FA96Cb88D3fe903Afc473A820d3581C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfe9E6efEF101b8E17d7367b081E1D64Be3CFA862": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC1491119314d67455f50ab9799D7bec54EA681DA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x15D4BC2D5bd1ef7Fc46a112f4da12f7F1626F433": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEa4B4242f2915bA771146C1C427B2d44C513a445": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x44F7D684401A3C6fe7E650f2589579c6F47FE3dE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x58D00D09A5df8697114ce8347647B1CFC93253E5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb7521e177b4C0324CBb022e27b339607e903D593": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x67b1FF96DF1d0923467A5d8F972d0533C300cf43": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0B24a36ca239Fe261BA74caBED3B62A36C215D2C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA7c97163dcDC44BF7890EB3239B938E02f1b12F9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1448a70529a705768a6890E9D1D81f9779561cdf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCe1B114d6Aea522b4bbA9C8677b46fB402E223ea": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x69b2176Eba6cD2654298043f1CcD808A1cB82DF8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38F44E9a396C45D8D13687D0ee2B3cC6F39826C7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x350e62847Efd61Fbf6D4569a93BeDD2D5C530170": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1B45BcB98a28e48707DbF1b689Bccb5094a97A5C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75484d72e0DDcB858c1771A26704C13BBE37CCb4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf829f2Ab41FCCB9168867eAA6Ee0ff19C56367B0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBf8C3989D348b9B9e584144BEE2eada26693a01a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF009428BE1A9a550f2d5DB7e49FF439617928097": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBA60283Db86f9fB7F16c03fD7a79355708739530": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7Cfa0A0b4BC50378769372962d7fC2c94D5eB929": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x773647C7D04501fF4cd2A4E359C03AdD48db770F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9D7d75FeA832c709829C9390924F7Bdbf35991E6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x59370435391aFbC36997Ff5774100045c02105dA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x052658C0e56C1ba8D45401d6b2eA032427E2Aab0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x95c6f877097112048642a07ea2c98884294Cd69d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE06cc086c3babf8FeA8b08E0BAcb4030F9AD5740": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe8bB7407A2A675F2A5A40e39B09C872360F3e571": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe6468327D24d1F19Cc1093a75ccb0aB69DFEb62E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCE67F1933b69ed0CA1E3b4DF1c2C2286Fb643Bad": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe29786A93F37E7A631DC3f0B315928A9083364ed": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCBC7416FB4a252DA1f07a3F1Ab8175a35E897bf4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbAe81DcFF994a196FDa5022425C92ee7D40Eed7a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE161663eDFd3cbC26E237729eAb4fE88c193fCAe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD4A1B479eE0a90E3720E22eb51d74aAFDbBcDaeC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x519A54747d42ffB8Ad1cA8A36Db0438679D34aa2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C6553f0c8f75c2746c6B6d4Dc5492c2E9b5Ad4f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x224BA14C02238fFf93e5902FFa550Adc55ad33ee": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42BF007D2837A93825B4e43Bd294cf854967A9A1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x061eA8E5c045a2A10a96d089081710B046DA1e6a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x837fA98272ed6f7E4bB493dfc664Fc7589c95934": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB40F96443A59C3bA6c47A9700c299382dB5e7979": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA4EcB643c6A5b6bfF5eA8CDcd2C2802e8642b052": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38E3cA0988eDD369B8725214e094A463348797c2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x743E3deD7CD4F294544be62996364c27Db24BC6f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc0c168A8B4D516533008A8a1D17be20f3dEeCA68": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x11414661E194b8b0D7248E789c1d41332904f2bA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaD1DeA5b919E13Da54482ef0eb29ba9bd8DBc4FA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x16f7A5fedFE957C950bA41039133CE0BFEcbaa79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd355511aF9445882d3398D8dC22fe9D78273aF54": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4e40c26E1C788777c7BD76418a95649266d65DD4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x45DA549856896a4F2CEb02d7512C8Dc41a6f0A86": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCa1Cf5879522f566FdA87C7a3850B7d83F0AdC55": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDdB5DEc686a9dBC0bE659b553a7097523232C777": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9E817382A12D2b1D15246c4d383bEB8171BCdfA9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf3453f0a63f72BEE573449d446895C805920A4b1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF22163A24BB35916531C22da0EA44ce56AEea2C9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4C2b8dd251547C05188a40992843442D37eD28f2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe22c86d319875A65c659a65667988441Dec87FaA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe5FCFCA8519154aD9D73893E381Db99fCAFBF5af": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x54b04cFD7B35543bcA96CccfaC0a768CBB880bAb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x89D6eA05CE4dcF165cC801287348Ae81dcE5E511": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x574795F73AFae9fD16DC42bD89686B86203921e6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4530C72C1C2E8143fA0DdEc579eF4020D5543cF2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd1D65C4C6A1318140F99521c4A4129e4be58aCC0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0D2Be688Cb203Ee577B6bABbf84B933961497128": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x72261E972A5A958d043f1Fb8B2a4Fb162D715898": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC02F61E6b2dE98c72DC67FCC1974f97341f777d5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x34241Ff275b21fAAFCC405d20E9C264A775ea5C8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA1fB97AE62F778f61EFf54E3210A3fF83fDF6f98": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA004A6edd7f640F1b4DE345bd6e0c63cb1B2b092": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5Fb0058280611B57E7fd96dc4bA3616bD0d29806": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x986c989A5265E9eC3b8d9a37BD41b2412998006F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x49E59dE5DBF06ED83116AfAA0570Bfe13a8D5bA7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x528935B9889780e8FFe3B3AbFb614d31718D9965": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0766053F1Db632a0b29C5cBed33F12eE2875823C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFb69e4B694a62812b1C6543bD9723cB4CC001D91": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA6D9a105163fC67a61F0A4D1d5c4032A1E51501B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8E5DE30509a7C6e2Cf39CE1C96B17c1028Ce6Aea": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6b9100896b556Cf3EB01be2c7c368F263771fE61": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x381DCd13738D9347b84BC5fd67aCAb6eDFdE341F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x375f554a38A66D12f57c2E2a5FDA5b062020b0f7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAbd0C2cf37661841dF0C842764590f133A1F6233": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x36Ba357C27c999fc0a686a6B5B553f134C770A9d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa4B8598bC8AB2Be2c69e65594b1E518F823939e2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAD5d12d71DC6DB8ED6111f50115754078982415C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD9D7A48644e1dA98d5241e0b26dCbF7995013972": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5165a4E25bdDc813e595Ae963f6CB9FCc4F77207": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb4f0C739fa3C9fCb577b7002D8C292f2078Fb14F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE93086375044D0ac07ACb498BF6d8B25bD53FCB1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x92f20eA9a71f5DBdaA161171A16Ea905b3528D69": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x85d130a96691D74067cBbaa7AA32bb247FC16784": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1992C0DAc6Ecaa27D07633dF09196C6c45210130": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x35e683D062490Dc9244486d271A9B8de2E3e1C9E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbf8627F3849d60421D0F5978Fc7685e561f7F8c0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5A5515952a36E60128e763D222ec41a087E4423e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9F9692FfF5Ce2C81737f62bccA101a7a7bC31c46": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE0681Ea1B25dbeA82719b7309F80C7635874685b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCad92Bb29DFF2B0Cd101C8D677E47f9aDc3f979B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA31a1e8c5d6E325f0e5c1882B5200B955B3e30DB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x32e73D646C0F9EC5BCFc18DE6F70d4304e72bfE7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE828556a57d75cf439A5003180CdC8161a838137": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE469cFC3Deed061D38d401508A0638ff149CAB9C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBa4624b03043B21F5D7e1506bfC5C9340c38be64": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF427f1700b07d22146837D851213aD2aeC3807DF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1a3f00A013670BEcaF3E51B5DB8c0A530B5Bf08f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x649Fc67B3f798789734bCC750C6e370056b94EAf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA6a0c9A482fc762D5496185261998Fb3c706928e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x01cCD75b739eA68983C53dbb2f30F47f7370a352": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Ed4B701620564869Ad2b1fbEc2b52D87240A990": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x46706ecCb18E5220Ad1B85b362169a744Aa9dc00": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f0d15602014f5C551F398821A0Bda50696b9189": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9a4cB63E919AdB3132C5576048ad40Ad341171A9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8f49F87A75e31080FbF7FBF538f52751b5Afe829": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3A52ceFecc09C9D60B300117Fab3795275d01D4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4183b2B7651521Fd453Be8e75269FE702Bb7721d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0D5B8EE06d2f8176A2b866ae0a9773208a5F4B58": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5B775fE6cD248458e85abd122b50C6102bd06868": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77f167cDC43b967658EB8aE473f94402c1672986": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x259F5697eA17b6Aac36677aDeb77290f6162d6cA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7F620D7e30e7C76175b1459158097F6531b3988f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6a0dC12A4bC0e04Abca323153171e5AB12F11117": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6D9E74aeB88F07A99F7828e89520029f91b36162": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C97DdaaE28448a51e1856424efD7E16D2CBa3cF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x88902117D492794c19e16785369ccABB65475c1d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf35FFDa03B930A5AEaBa8D9b8c5B559fe085d676": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9e3633234ecc2e2e2816b6a94132f6b2e49E4fb9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7A092e4943FD3b045f8A05AEc3e56C82e05a173f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x98757ef6865414Cb0121b3242f97D78fe12f9a2C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73C27b2542a3E7481B796a47C95759B4216a4bd2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81f89a3878638f497598d79c42F7f4935D0c6A61": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAC35b5e59fCb88FeC8821D3E464E4366A82CBA44": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6899440EE02F541fCbf4684A762F3837e7ECae7b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7E06ead7629a725Fd77F8BB2D21C93588DA6B65d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1257D26064800Efe43aD71e4284c07D14d78E4A4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39AaDFB93DefC465b6Fa3FDb409E9B868f6639eA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x471D696cC52152CFAF0f3071528D6d3bC570ff4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD09d42e00C55A7E4d24FF55CCD812a2CF0aE4EF3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbd1931F023dDDaCD57B7175d342F881c6467bE11": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x066EA6c41058512a16e28685D628b2D666aBc88D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1079778B3F805b8030f5b9fEDc52E92D65f70cE2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x804c3083d6565426a35482611a514948AbFb00Ac": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa1D1F0E5370331048Ec481E3518fA92206af325C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x04c4a90801d1ef5aE8576A0A5bDd8EEAb362a644": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1D00ced4D79852748147Eb74598ce56836dD5563": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xab2035D3b57b986B395398714743289e974cA568": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD2283F49C88f818041B6402084ca22778df4BdA7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x611adb9C24482D446bfB562C87c6135d952Bf171": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9E3D240FfE816566bb4B9d981f409Fdd92343bA6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8a461D8c7B7f83249Ce904B6AC5Bd543FcBcfbC0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfC8C19E6f71af8282A307b9278dAEc7AB5917964": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB76B88baadf6a33544a50CE755dba88C8e40DE64": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdD65C5E9d1D4124A4730A9BaD9BA5784F9B1d1EC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd507D4Af71088BAfbf2eA0CdB6962694F850DE01": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa47d3FDD0EaB701a5C5fEfB794E538273f0d25d1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x17D3a75B5eBFc4AbA3F2fa0833bE73905788D847": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8272786E9bbc769135344f21b98586615Ea2a379": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbA00D84Ddbc8cAe67C5800a52496E47A8CaFcd27": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeCF37Cf863a1979C939b458b6ac149820e3182c2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF3c9821FE05b656D32148ADD93671DC1b53b3928": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb458FcE9B00E79586259E27498Ee26cBD0e1e6Ac": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCA2Ba6FcCea3aCD02f1173653E2AF738d9eCaC41": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x91A22a39c32204e3f75F2f5e90FC7536BbC2f42f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF846638AaB987d031c79bf12703500d8bD5963A4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39Fa9C5d71A0eCd684B6Ce62c5EE897a6D2874d2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1b82602271dF9e355edc5d54476A18b3B1A544fb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2D4888499D765d387f9CbC48061b28CDe6bC2601": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6c36e66695c38598A08B15e1C6bea9aE0bcf860e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA39642F947518F417595849BB614158998D054B2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3185EF019BA1C04B8d65eDB64c1c34C3eaE52271": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7D76E1A176F4893b30247D5cFd451807C2a7d54F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C4Cc4eAD08221A5b3FbD8F5E20b4Abce1b22be9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2d74E7aeAfb9dB4379B72f310D2120b485B07065": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5915ebc0bD2729b428554fC783B9B9B0876286F3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF88D367DcFEDA5C91A1B8C012dd92603b8D58467": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe63F5eF0297dE25EBd997360C112bba05C5178F3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9Fc6eB776fA1795DE8d05c7E2dCeda4F7c63cEfC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x16174273B883ec5b2AD3bD9AEea08E67A2711D0D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3721c97E0282a1FBa7daB91fD570813FB4E9Df2a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x566C6599f9Df969819B3d213B362ad5fe6e39975": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7E7aA15C7f04376223a03A111e21401228824DD8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x977bc167F889dcd7A6eCe301C92A059DE7B1772c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7D03216b776639c7dbfA2089F4D8Bd00b4E79D54": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x560D03F2b20e9047714Fea87Cc113D95a3fc7179": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38E5d5239327F1735905057647bA8137d194bc48": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa046932c87E3972807dF273bd9A936eFFa86D163": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75Ec476B1D809CF1450Dd7530DDAeEB2c21B32C1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB57CC94Fc53b28fB42bf7E869e460d0ec5FBb32F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x703adE3D59A79a2261A818F5787cB2cC437D375b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5A0b54D5dc17e0AadC383d2db43B0a0D3E029c4c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfbBbc0Bc739A46DBe6f0ac768d2d6fd4949ab733": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33eB60Af276F573343BdbeA5A514e22a0bFe9514": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdaEf56Ce18eeA40C40BfCc12Cc80fe110960bd7C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7d8b05E372e7E040394A558D6A5210ee697DAB57": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x088b5E59Eb1109c3b0dCa1dd905298409ECDe83E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xccEE88812Bea9Ba2820afA1737E25771988D57d1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x465A8228594a8437014B092f65E925bC0473e6FD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C6319eD03BCD939921A4b5c46044C2F56e507b1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x572bB56D7F23B41A507d07E02f2C454d378828c7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD2eE347a9055cA63ba207CE5701bB513f769A988": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x66fDc765040E6E2fb46816169Da209Ee72C14D3f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x76F34d1a4535241eC054b49d969bdB37F444eb38": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE0da04083f712bd8431037D05469D6314a0af7A4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1DE869688cF52ac2eBC0E789c54d492615714438": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x123aEDA9e353a64ee46fBA894f6c631db9aBe76c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3Eee02F8A71992546889C7F22D759B2f6E8C2A1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57C191389cb4cf776830564e35d2cE3C5b744531": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB6fD2Ea15bf02b1669DAff86Cd157e181b478CD7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf1189995B5AB3745C806d48355088183C33C813B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD5908c1C3b34cB41f89EB5b1478D13c55eE22060": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdeB0dA5D7c8BdEB7792c8Da952dF187d67b2c9cd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9f93DbbC5acE2E0Fac0647EE55497F9E994D2450": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x791F3bbB14a6cd83d36835cE90A1b4B69e7fbbeF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe869E83bC68b9b5Cd72a1c62dAac6acBb4965466": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3267c7cA67667ceB4A1fD1Ea89275DB5aC8b607c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2010Da1E3801d98110a04bFefA1c7720d6a572D5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x60aA466Be00Acc37DC5e3b89ff299331907Df045": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x101d015Cb6320a74b0ca35911C80c41e44cd29F2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe49CdB7f9821A47304b9BF98cD10Cd92cD282e3E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc3A6e9F874E048f0B88BB8e43c0F38bEd6905B71": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x71535AAe1B6C0c51Db317B54d5eEe72d1ab843c1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7e3aC6C1927418AB5B5B1FEEA75Fbef94b1cdE69": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD492aFF2A83d9B73EFBcC29C707a6756F6905e87": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x60Da45F8530042D06580F45a092D014B52aCdBBa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8d9A3B477a5d85f945973aeeBB438BB20620e074": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC8D86F5C950f4eC0B7db7A7238369784D87D68A7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x638aF69053892CDD7Ad295fC2482d1a11Fe5a9B7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x744d6b531570951a8A51622746C796a3Ad86B4a5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBaa9B493bCCBe1A900b39870980f41356f85822a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd61FB49B764194FB30d3D360774692dFbd6263f2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7e53187f378E1C04Ac3f349b44c74D71De310021": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x51C2A5Fbb0F4362466B0b2c1FC0A7ee2686D9176": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa25b152FfCbf927AD1eA80269889370326f9186F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9c5E42D8915E20472079ec483555FEcB3EFFFE84": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB75500721D659c44f07dF306D168f9De01968DC3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x03feF62a00c67520e1f77F07e34a8e64787Ea2a2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x27EF5f1Fa276E8394681A260F77208ccD0305013": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc063ff5c81c5B932E6dfb7ee9841456266C5b585": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc821cd39EA427d701e5A76C75B8626392086EC18": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD7eCC768313dc3BAAD238600A466d7bf08b028fe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa01f4973d8193ca2534ec8467c4eE308b0C5cF80": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7F310c961b2C695A418DE85Ee5B18DA2D96493Eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB5a3E180CB7436EfE43eA2e248Be8acC489d0eD5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x34A640A430a5DC2bD5187dB98bE819985248006d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x209f9c887d04A06F61710e4A2B1f4dc3ab1546F3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9AFfe964574192aAb6DA32aceC63D79b3671bE4b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfB93E3927dE373ec9915FeB89b176D428808DFD7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x026bc5E126E133Ab2d662BAe650f6ABFA2aD5d6e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdc906edB65fc858F80FAA6Bb38d3f6Cf0E54D866": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5f36b1Ac2b16FE18C784dc113DEb789c0188166B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38ED9BC1a1E17662CafBeBd359F6E9122faB7314": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA893d78D5d4014B6Eb2eCDef97c225890264A5f9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2EE3300306c156948947a9c63959e89d9d60824F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8aa4243Ef5fE3D6ebe375fA6D47A710266Cb0CaF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFA4937670686c09F180C71a9b93e2FfCC3A79F47": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x508C27BC844990f219579470EA6B7C9c44E226Cc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8D8eCA22730D06b125eDcEe0EBcd251693659faE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC850CBEA5bFCe6CF15136d9920261F054A53d1E2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA770d4A353293385C0eDB30ad9519a1997b471a3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1fAe7DAb3A21DBE307d4EF3bD047325B5B63b17E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38ca8396E04e23299635Ea06fbb657e2a4e693c4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x01BB2320fAea7f514B790A04812461112687bB19": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFc193599Fa211539D85B3925D62FF351885F112b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1449507bAB28b616149b79078C0380875ab28E16": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2090F48E26a758d52ad48A449daA5c20C8CdB30d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8d345c1DCF02495A1E7089a7Bc61C77fe2326027": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x71D7138C14C34Cd9d6e600D3Eb2d615B805C7761": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x837D1b20e21119Fe641DBF369F775825B51b2db4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4EC7CdF61405758f5cED5E454c0B4b0F4F043DF0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Fc809baC271a2f6a7C61AF3F3ADD424fbc0935c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcB9cADd85C510ff5a4Fb2D2bB6fB4b74ff3aEe34": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x91aA505769BceA5DCa318e2a2F3A1095A804e865": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x35fF7C02E7B58DA5F4323CFCbcBe8969E4C638A5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD749a274d85040ea4eCBdb670505a7679070Cf4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1ba529Bad0303e368cb58673E4D1aE8738D6449e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA0efD27acC781549D5b78e89E561AA0903932d56": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC289403317518a547e3920f6407CaD72B600f340": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb6741c05958bb9F8436927309E92F286E636Ee37": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7059dF82d93aEa2a02B9b137a028749526be369f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8D915AE1e48A237e97d34C1853320F1869C532D7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe345b57A27145685D4945872dB357CB453a238E6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa21FeD132341f41c7f96Cd9A5CDb3965bc0b74B0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1E2AdFb70b077318ACbc94A5a2C0421D9f0775cb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x45E2FEB81BD6630c3b136E489674C8B61170eb22": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x645147d317B5058F8442C77b0F1b42A3B03d0679": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63e508F44A87051CF7A0848330Ba2760CCF375B0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x78A7B3846f6B0407C051aef02E365a76cEF586E0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1546B970afC85bb7448B2c50504be0C4640408dd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x08b7Ab9bbC3a07cF7f75b4aCEC5b536b7e040Cfc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x243314f50bF9A5172Fe44F580B72cd0895280691": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC69e8275592F10a7ebeF418F8743A12e645953F0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1332f3755F48A9C7f618681ae3BDBE618Ddf65D9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA69C61c28932BfD6181A37F4203A0919614F2761": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa8226dc65d9EB3000895E47fDB40A42b06dAD43B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf89fBeb1D803A2e2Cf38e32a0E7187890Cb67A56": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6eAa0dc601a4C273856fDFCC51E4e4A6E6c44559": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x492261c62C8F0e1783b6F3e60D5C03e2e532F167": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x126ED947de7b84ab29526D35CEF99C9b72B285A5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd7F6bad6Fc716b889F84a94fEE046188f08988ce": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x766Ba6581319429143098c40290fC1595776b8D3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa2edc47F1659dad8db3027eAEc3D23273E473D3C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf66128575d8EfFF079205BDA33A1CDDc7E82C72A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2f108Bbd7E05cb6a360EFf8ff77B4e9D098a51Ef": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x26A89D6a6A9470ac84734658A795e66662DD4EBD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA3Bce8C3c75b290E420130369df037C477d34a45": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb8dC5739b7024ed22E00447706ec5F3DfFc5aa0F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x969a3454ec5DC48D11802bEb77218A7A8744a9dF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x15c8857A10c732b5F8bbe8AE351Be8704a81CCd6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4Ca148bf94F6DFe9a36534ffd9D78dFE58B9de57": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57A901Ca3688d505234241d2D6F5a02Ab41c0762": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6c7EA81Bb46ec44720AF326a25dF1DDE93BC4B87": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1B1d11143c69d7c361582569b46fABCD78D8AD08": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCf7FB3AdC0A9A4E6F7Caff2ca8C365325Fd19277": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE02bBf8E1507427e07D9F8063a8FFc7d37309C89": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDcd4FE2842612743d45a3A66169E9DBA8038e60D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE457134dB87f4246865882a7E3835AA84C4b8D6e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x39ceE75B11596E64f8516EEaf3E17c170442b6f5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9dC9597A419Bb3D7c727f57a53a45c39937ee61F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7732dC4f380fdfE7041d799A605473578A5De58b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd1b1a4BEe37b861fafabD05E5F306A862b94D037": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6b2d94177E937E090307DCe76C4e294aE889779c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbCC44956d70536bed17C146a4D9E66261BB701DD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0c3467E55ea5367f383aeBeda2A68D886A5cb944": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f677CeF6550Aa3972dfC47524d913b4e78D6a29": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFD7bD29E1050932829c1FC080eA42D7394C42847": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5848a1eB8a10AE88525E97559Ca007618195ad89": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x133D93566f9699B3Af46fE150daA8a67a9563ED6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFd6422196C78E4f05106423B6dB46c7DF6c63cA7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1D3B7C3c9245aE2840c96F0E49705E7C155E36a7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x28bB020fD8d73d39B3e2C1c49990102A2EeF3eDc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7dbe4E37Fc0147A29E399d25c55f9cE817dFbff8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x14a967d549B6cA6722d5591Ae118f69Fe2E8920C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6c1FB03612E943d2b7cB0bbde0FB3470a0e633f2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x52f300747aFE206Ad2fC35863849c4A0594635B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3a8Efb3a57EA4fFb5b3B2a1Fb1D16C804Ad235fF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6BC3e7B5010f588cfe347473c610b9a5d363e140": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa09e4F96e5ABC839ea82946f47e79AF93759D3Fb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6A5252ECeA88672002fEE4D6141e8d0e2C2952e5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa294A99A55F03b2b0A42B4388eaF30FE4C2893f8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x03B721075A42103bD560aEB745Bec088c540124e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFB31b6746478B80402eB055f3F55Fea6df204610": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0900404261A24027C849de1a268BDEfA8407A9a3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0D8fFd05c3B56604ef791AfdEbE4fC45f7AD69a0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x23cd04A4C2deA3CF49BAF61c04AFCB4a23acC573": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x41f31bC9357f34e51115E232Cfb1Be525AC60B82": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x14652DB5C36325b8FCA22cf1325a8eAf121CAB9C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB0A9d798f7c8028B0e467b913a02b547D0528C4A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x022d5912C50F0b2bb08C52Bf403BAA51bDb63fce": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0bCc303a9170a830F28a57Af7C2757c1FD1714aE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x276777C67D20b25172f683D0Cd56Fd46E040E885": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf42FD5F1f398c8EB827d65BcF67007E89b992008": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0eC8A702B3012e19B1655A77724eF8981178B259": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3AB1c7848B48a2B900e16D03a7B91D0e675Fe38a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1906Bd0244b749381e2974192fc581Fe0DA4D363": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7128fA11515ac9985F449f02F4358C9018cD8cAC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x98838021D6dFd264b0FE6b6c7b3cE23385A8cFD5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcD47ba0aDDCb12081a7Cf0cD6962e99e8ABC3FCC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa8C7864111e1e29ea89140900aB0b997be47f1bf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFa9237190Dea4a58b5E39f88cDEe901b89ad6662": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD80775766186eF44c73422fDF97D92701C27f70E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7dEFcCdc77213AD10222866D9F2eeBd9a5B8Be70": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x51F1e782FB7eDeA34389EA47516ca7c31E9C073C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x913F2E804035200E7dDF33C2AEA922d6D5B65021": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x481797F295D086DD536e22D36F34E8116F8F0985": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x38913De54C1dbe16E4079bb8A2a3E0973BC63D0a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5e46A8ecd4f4f0737ad7b7D243E767861885ed06": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD85782De3a7bFF8d30B8f7B7ae4fEB6Fbf0600BD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x075873d2F1342828d86E47c71B261e6a33044ebE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE11C94a5F28222001bE49D01f5Bdaedf9B9B0620": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6bD616DD6c8145e2151c378dd443AE15222CE833": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa07ae4f9e2D41715416ae074c7A6fe857693de4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x704332b1c8051D112E5Bbc178D2bd2414842c240": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x183034EdA5dA3CC088C7326114B09A2A5e57e044": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3cdc6F91d41F1738e8E1cbD2A06F64dc6Da5b0c0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3f312DBf7d8b5A86CCF37024eF69D79661e4fA89": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x80cB01Fe8D4E5aCF333C2D3dbe0A42357a391A91": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x12c6DE027b16D59dD449cD9078E5f09E9a77A73C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe7661Cd7988C3a3f7B417ae10cBB7afF525ad921": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75Fe3943a6C8866e1C41e1F35c74A9fB7a77b835": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2124ed5982e1d3384C4800ff57B9f883b2e2F47C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFCba0693FC16DCb2a4E8FA7eD3DA31f5296993E4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x90077550db8D23f3825634C3497AD3a594013137": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa1E223A5eD88e272E7B652AE898701cea20993d7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2Fe95bA46D36e6Bbc8d3bbC6BF3F18c85C91f3aF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe9c2F269ac049c6D2C3f893EB5465F8B33E561FC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDc5b17F7e80Ba5f2C06E9d04bd202d394165E093": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6A5fcA2bC2F971889Cd51FEe0bBC1014D03DCcD4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD892F1cac31704C0f4FE586D142238E933945bE5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFEeDfe9c2aCb949Ef80b0fa714E282D66Bd2f955": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x00DA72BA500D6e7c5DBF6EF79fF90b741d6d053c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEFFDb9141B8fAFBe36235aBbC903c6D1b924BBCe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x79e96fA806B9b688d366be81Fa618dA49c6c5685": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf48F679B60A4F690613D9695a67933e6014f9b43": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3CEFb79aF1F4126DC679D52f5f7458A25CE74B42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1436267A9814316C6ca9212D38dB060bc365AcCD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBd48dd506E9179a757AE229d04745476ce6C2aad": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x632F93865823557466340E49BC120e3B668A2C2e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4E003EB4382d35e1fd245E7793AdAe3fE9AEb1aC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1681CCE61B0338232B80AEa861413A3D26880DA6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFae01460fD7Ad6b9d6a8ae73c14aFb2409B48B92": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF9cDE0Edd06f05A7f0b412dB3B4c48c87160b5F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6D0036a91f8447F7d28B6d3AF8a8258688a93896": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf78177359b40AD2733432e593f6e0F730c6E5165": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEeC0D28Ec4eb457033DBb3B1Dc0F27b45F1e20a4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6C59816c3Ba468759381B0bAE2FcbE3A27027488": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5305095cF75CDD312C202e27F6aAf3CA7da79A5e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x94625BE060D1E09698C616a5808EfB083C769166": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7fc361edA50DBB5Bb03aCf37DC62A7A43cad2EeD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF5EDFCDE8B5e43EcfE382Fd5855612b3bf611224": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x861051050074D31B0fc8682D0C383e6Ab01DF0eB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9Ad2bca0D3316bdCB8cA5135671Bc0290E24E6C9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA6A2AD1320Cec227f24f404fcCC120B71b41757d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68820E5cDbDBB1cB131151dBB203d4fef563Fa4D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF4d63BAE0aC9C6fC57ECfB25A1E0077dBa6aa091": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdE33e58F056FF0f23be3EF83Ab6E1e0bEC95506f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x658205D6D9d3bb93B4463dF7088dE4BEd1D3e88C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA38e40797fAA6EcbCFa4A64F14c7622d090e8a31": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDD2184C8954427474e04a0894b7d126c9da6e755": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0F8f7Afa8314dA4dEb6be2086601FcB084A30791": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAD6C9574a601fdAD18ecb0Ca7EA2Aa08222F4AE2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x09c0CB705477D94F0c25D9e535D58d75eE8895A8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc22c41E02952a88cAC1Ff34cd707360557e26713": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x304fD132F9CD88A53E432F79A04FA2573Ec4995e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA641475dA364ec7F6e964Ff6E2400cd14e13303f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1D005c2514f6507A4829e0bDb9F2957f0cdaDFD6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xba3a4398A4646dBaBabE2dd342138165914f4F33": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5709569405723E366656c7346A2Ad100D0cF03d9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb9C9BE1Ee54b1842bA20387aAfE867796FbFc365": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE9F120BbF6a096b3776FBBDa792F27565A2c4A3f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x01f96D72AAE9AF89C055B7588c590870836f65f1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x86D0f719Da3e41dC34c41b395c0AC48ed781f1C3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4D640D6d2CaE44C3192a70Dc1179aA890484cC7e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f8C7dEF38b418DfC255f08f390476285d578B05": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x74726c43FafD8f9C3d50A9F63820bfB8860F3481": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x078Ccaf9d0B60A5f4ff6FB3BFdF54f0eAB9c7AD2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x07E8617796E30Ef3Fb0E45B59446E28fc7E4FBEC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x19E45bDfe8f01cD24f62381Dbe41e8f9fff58C1F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd9adD884288d623d14dDFec402E4493BAc9f4F15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x394333707d70Af2Ae14F6B422256b4D74a948b4a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x69eb356c440C88a37931afFcdD2cf316fE30a79E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf010031498dF4886a99ef659f830693C839E7198": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x965fb931ce14D8210053fF90f39d00F443FCa7E8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x798e9dBf975BcFe74Be0fA3f9f3Ed24D208F74f1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEDb78aB669Da097dE99D82df95d187Eca20F7E47": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf1f3050671ad54Bc0201BbDA76A2a7880A64a1E0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC73a01E10848881F3c4FbBcbd3252151204cf3FB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC15e7Bf5b20e19e50Ca097862211dAfACae196b3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6a2829E0E388a438a0994c02ebca077bf1aB6303": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDf8BeaAbFed67Fb3FbD3d9Fff14E2e176AE10e17": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57e98f563309996b3648ed398c761aBd6093fBaD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x258214591AC4572399FBbae9f807E159e69B1Ec5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9740D5Cf593Aabfca5598f746C072D73F5408A30": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x34fBC236b6a76B19eBBE138cB84C6C63C3A85a23": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9968eFe1424D802e1f79FD8aF8dA67b0f08C814d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33Bd7e2d0fBA88940FAC57091d09ba8E9982960E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDe2C345fD3a921222Af6C3837728C0E628CE43Ef": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x473E2F6E83924E955926D287384d5879EaA3eC12": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDb89f642E287175B6139372899178624719871Ea": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAE6e4C7A07F2a2b7690e101a9B6BbF86f856D970": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x10AEe62e812103d361380dD94246E0Ef3a6D8FfE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8312D523e565B418810dEeE43b28C5BF89Be0e1A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x35856dbE75CfEDc4A14AA88efe1f90d87706E760": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81aFcF6Dd79897cBa488471eCEc2f41BF3f7CA9B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x479322AE62348eB17BA1F2aD0BB52852768d883A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7650376aD17592801bb2CC73BC08F4e777DEa7F5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x56A3887c5326321A39FE5c66b72215d8f5B04c9A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x79F6c043669ad90a79Bb2CcA3B890EF3A54E5128": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFe57DC4B1291384a56e5d90fDc1340b7036f3767": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x23Ed05AaD698cD4bE7c9c5F2C6F8c04ed1827793": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4288E54710A478D269E51cf72689fA3d42f4cA0D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD0B0b919Cc9FcDCD0B2DcDA7ED844584FdC00355": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0adD13cDe4C61734f46E245b1B5Fe3AfE9b6bC29": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68e1176f872417A9b8081C516F1b1421e9bB36aF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf14F92FEe5452c297B84a2971bfBf995440e4061": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6e536E5Dd61DB8627388c0721e8d5F823fAb2D1A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x93C1FDF5b0d5bE85099A80beabADE1328783F2C0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6ee569Bdee53AD43DfBc9417FDbE932DbDf524Ca": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xec5021815178d72609e6Da42b6B8Fd457AB4699c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA8213ad427CC7C16cf6248e0653553bC3008A191": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfffaf54a65eb198d704ea8C0B48eeE29679120F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbf832B66AE1056105A48A310143dc49dEf034061": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x938c708De2bbC63A4e72Df7b4d2Ce1da645f73bA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6522E32b435c79a9eacFFe738bc711E094a52725": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf4cF8a63b89A456e576a45e6c1419307A520f8FC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8c0AA6B70CbBC5550D0a9948eC50c8d973F8E802": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5576e77b664FC8f064a23402050AdF088ade56b4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9d1f1BB15b4440968B51ecd7Ff99582c59Ae56B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x113d21e5E2B35Ba08D0A5c826ea6850eaAdC28ad": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x96d94f4549A03411DcD60BBEDCa7A170EAC644D8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD0AF4dA42b7D4F0b92c386fb44b4Da451A2C22F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd2A3E6323DC5A05F07420FfA0282b1461B660a55": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAc0eD2862eff16F3FBbd083f2b44e2CD4ff1D381": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x699fec4921001c4Aab3b6810019BDbe87C481F7d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3e448909Fc3f9d1044DBEF478482A5d1d064EFE0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc00A397e5328527734D5F44638C401658f939819": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xac2251f7c1c18B91Da2Ed7F186d2A5C9E1Fc3d22": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCa9ba74eE20917211ef646AC51ACcc287F27538b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6Dd8AFD0338510eEf17DB0Fb4F76B0CFAb9002D3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc6c91E8fA5225227491255415bcb61d6f2D18C2d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xACCb019890BF879d19f5aAB1db068057e4CEA0F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF24b42D4d75E7afAd9167BDBed1B6342CCD54494": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x12845Ac3Ee7c93b355f4fa95fc77d8A0FFbB3602": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbd313d514ECd15a0224da4dE050C79E2CD8382aB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc8f64d227c715aE078D642C0e3a15D44FE7a48B1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42Fe01565e60D0687Ab793dE8caFc1e8a39816A8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa0d6e23c10C2C4331264c59e01A5483a22b1d543": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x13C4A327De6F7E5aa01bF49141Cc982Ab1f87316": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc6B0F7e747C23f65E1f99617B379fe69b56Cee32": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x99093FDAbdfD53Ba64B710801433795cF1216dc6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe175c44341736349fcB4c1498eB27d77b96d7Bb3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEEf114D114f1947BA4a2979159818E4171E91D14": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81477d5014adb4B4a57029c848B3df4a797Ab849": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x58502052C920EE837c3Ca71Ccd7cf8cB0457CA9F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x07a1f6fc89223c5ebD4e4ddaE89Ac97629856A0f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeE432D08d766a8DFe198c29a9b68b7Df422c3a0A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x47C5700674C7d11E4213D5d8caBeaFA849469995": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9f2678Bb8EcD50B65714816b4Dcd5fA24D67F978": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAbe6D5D0F96E2d407318bd2563566Ff4F17cfC76": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3c2078d07196837e3E15Ad61f1Bd12B84ddEa47B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD3E1127272C69A8A743a98F4175abA549c2721bD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x05388b4a5f5D176f01157Cf93DB3991ce3EBD077": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x32cC3793f3103f72fDC40f04F0C03C019eD46638": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x554eE99540949C14cb9Fa64Cf00A09A8047fa747": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5b113cEEd63a4D92820FD7eCf6fCe119cEC75AaD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4Ef5Ca1A8724B0b01D1D729D8AcC99EDeD068c37": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4c0264Af1c7502581ecB8aa261E1a9c0C7CCA397": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x320Eb9c685d069F100Acd17B64d90b963C2b7EE8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65a7C3Cb6d1C3cEf361063C57936d9d4c9D7bCAB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcc690047a38334d72B7fac68AfA3D6aA62252D29": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xade53346A42BfFfd0b4546dE3F83b15f24E6ff7d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x85312D6a50928F3ffC7a192444601E6E04A428a2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe36DA3923724ccaBBe9487E4133ba43d8509f1fE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65ceD347A006B95C8FA74Dea8DE4F688A264f9B0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0FEF584AF9FB31411671F721A77b9d2a1D1C3e23": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x325eBc81dEc49b15b22459D98834C051C5b3E09D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x54881c1b56e0E7a62a3f0752180036976435b891": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF602c90E89d5fE4c7D2AEF3eC84e2dF880Bf2075": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDDa40f30197C903A43525154Be3f1a0aFf5A1D44": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfefB81Fb50FbDf623B1523BE3bC4E52C7d6d5353": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7ACEe696E2165e33c578d8956cbCf575e5d631d1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x18854d2816c141294AA20A5317CA58EB69AF5FC7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x04Ddb8ed83C1cbd593619F55579B11CE8B29e3A1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6F74f38cD701d3f6E8f6baCFE29DC65Ce7D42d34": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x27F8602E403B6EA18f8711A7858fa4a94ef3269b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2DadD6dF80Ff7008CEDde37aFFeC883655480Ff9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x00C512d8Efc7Bcb786F97A0F83B2087eeded25A8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa6D0E6ea70a666f8fc525b0dcF2e09C83D27a09D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x87C3953E534f24D30e5A1361ce404063Af43983E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0000000901C92bb92C98DF004bE56D37D1604C93": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x12E307075F20Baf6B67F73C9017251818F7e5d81": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0A5418B84b6Fb083c6a57C2a304C9fddc592090C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8AF74a55936ED855a676cb93e839Bc4A1d307639": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4eD7A3Cdb17c9a3363b5c6F5AAF981EE2DfF43f9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3A45468c2B85A969Ab3999f9b286da9bab226709": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xba04F91807dCB266d0976F70c6685B63A2E862d7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x41cA142B14757529A5c8988252f1B4Ea6b47F7Cb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x765CAF0DeaB530c043eFbc494bE66Ed1c238d324": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3151d8b3b34aA22287d76532096eb71CD9E50A4a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0168459886Bd2Aa322c18ED0b209887095aFcACb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB87ef7588e58728885E4Be915c0749E33f1D6A67": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57356852964f83aF7b59cA1cE9fA0EE8ec0eDcf3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2ECA89d84843266d271c98A1e11D95b1CF002765": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43374601caF79d672af8eF27e22C378Cb37048bf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa28e586e24e6d78d05e822188DDC118Ac2fB034b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0CE3841FFf2c2489d3231fb74269cB90FDD86883": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd5817F09469D9F9d9FfC54592959238576Ca9bb4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x58fa1983f7E45dda5b681f5e860B008e796f224b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcd4749e62Dea7EbaC7e8877b6B4869A4a6748143": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0d2217979Df6C832d756830869B33D5014e596A6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe3629035803867E65f2503506c948D3ee31F3Caa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x200CCf3eb57f40D5F99FC53135187999F780c20E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdfc638BAf130f8Cde8944d36F36115c995D5618c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5aa184B1D8bc72022B36bd724bB723E62148ff8C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf55893F0ae16F8867F7a9c7Ae47c12422FD59943": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb4683AeB715092fc0442532b4De476EC56ea1592": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0206Bc8FC7C1e8635D14F73c0fdb035493F2FD84": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5fAf276f6E3e0b10213f8A04BD6C872f8752949B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x79EbBEd5297daD97020BDEeed99b317C840f9d22": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x69ce31018C82CA3D2d9E4C5a6D83161B4320f9e9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4D85B56C459fe2AAe459B1BB0C36b33592998d0b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9AEba50C5d0727D5bEE2D71B10ac98E898d416DF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x15A3F14bbd9a1D2f6472f0C6081C730F8AfAb3a7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f7B1afeb239552Dc1B0DD13a9eBC8d9ec6E079E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x166056AE7450135b9AAd3b45CC6b6625F78BE1a8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaD6ED7545a32ae8B005687Bf7db1E882b53bf8a2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0988D84619708DCe4a9298939e5449d528Dc800B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1F1163c6c0a85E91fE60f8DD5d1a7007DdBf95c9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDD6f58573929d44b95248ebe038cB8cbf48a48d2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x608b10b5CB5154132564e1d415B116dEF66A3960": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdF4f0Ad809b9476FB90475F728aF100dEF5E9678": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f46E479555d93049aB0FaFcbDD8C47bbF67901B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCbd20e9A39441166A1e3f45971df14c3c2d87479": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x206A428716a6D27890210306AA2af9cb805C7B78": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x386eEA5d7e85f19Ee162D7C15B385e896038756a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x942A79202a94222819466594D6a0854cfEa082Cb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3B2A91617Bf4f4f6468ad3f225d57f4A967Ba38b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x16f86449f135CBD16eD5119bdb66138E42B50B2b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5Aec24AcA614bf525D26087AE41ee3f9c7B0eBEe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x70aD81d18F2838b8650D88740d8E337032c9BaAC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB68Dabf88e221fb4469928bA1ea6Dd312a342Aaa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4A669f017c74b1F6890846FCCCA2F380356BE107": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6E9ad4e3145d2be858152d9608FE008f8D1EBc5D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0AB9e31F358fCA6A43F8392Ff65aF2592885b749": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x34224315D978b48686242cEE16E4fcCD3aDdf952": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb987b8c5Dad75e631030295fA23e697Cf4486315": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2BAA98f2bD4F5CFCaE3f3a2e2eCfa3B1Ae9d04F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4D04f4DF74438b21B3e7298A13aA9c316b47C632": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC561C9b7035732B4EbDbAe6aC43D6a293aB53896": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7267db34b6072080923F92E626C2Fc5DA91fF25b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFe3C6993920Ac33bA28378A9f92e18De52795117": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdd1C90A381B759FCFc4E25c7eB28DaE80A01a8F1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x795a76D8180d05B7465351a83Ee5AC3bcEa7f836": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9DdDC6321304caFFD40a2F848123763532401DeB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x97DfaF239e902071285a72Aae5F1812Fd49a491f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3f5d5c850ce1fE1Da479B4DE9de336CF3C68D2eE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8Bcf10D5bD8a0FF835221dD2a9C794B435c52813": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x93a4a366dE322dCFC68b629D6086C6b19Be4aECe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1F507bE0F25fdED2b4ACf27C5b3467E61477C39b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD3a58489C18b759BE1c282Ef8885F70cebc2f1F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC04509cdc603589e79612576eDeAe16c1f00D2c6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68b53Aa18D1b8437B7CD9524040C776E2261e06d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5a8207adF52729c8BBbd42BB0E40155AdEBdD101": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFB09D6570A9C1dE1b22367e46932685E14077dCA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x195dC9FF8AfBD22E176B6705e270586B6D641Fb2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf49B0c716c788d4F91e367136c814A7BA6A8b7B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfdd7C88dB10A4e099337A09B1651A7fE5124D88f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6D62F1d6b0D829F5bCF177Ef5C36EE4b53629CC0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x01e45E43a093453Ca6Dc018543063a71Ee1f7Ba0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x56a7a158A7C0fD45A2f8071BCEec69F3b1c912AC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8f9fca3144B194Aad5572bC483d33726282c8a31": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcac63Fdd00e0fFC5046eCb80197cF6C51e356737": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb70524bE392B9f4681eFfe0cde9FdA3153DbC886": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7a781F490927cA1C92AFFdf15f580A9De317EE99": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb52ce4240900D3a1A4a6E1286E90272d292dE4F8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5Dfe145B69BA905Bd774f2e51cc0618F1d56EBe6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3C50849d873CF92F04F0EE7E624B384Ca4Ad586F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2973787DBDF4f3E851Ab420785FB6bf68a84fC4e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaD99F536266E2aeAC263ffD9556d02fBb37558ED": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x000000000000000000000000000000000000dEaD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA3C1831D7A56a736a0300B614a78206A4E2C4BAf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x00001ef108843aB7c937974c54c42360da8F9000": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81aDFA0309A1629f68dB6A6cfF37a1fE68FFdd2a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd636cC1dE0163a9de320FA2Be4465Bb4E25A9694": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42598d735a4Bf52878f18F8a299F31128272Bc3F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0571467fe10285430AAc57627F0Bd1223a909865": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCd0ba640AF5bc02bDCFEda5dB547263A2AD07232": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD7985653E99D5A7218FDfF738eB420523a205F21": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe26E2466e070BD45C6E159010dBE4445FBba46d0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x99ef210F7d6e92150b2Fd2a114d2f013001E9022": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9D3F2735904881EA4f1E1097A7Ce07e503FaB0d5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x526c17b64d59fbDFC50FA0fA306683Cb5Aa8cE07": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x042b863B999827ca68311243210FbBf22210dD9A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdFB6623Fe1eF1974EAD1D775bcaFD45A5CcCfaA8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8aBc16e919C61D5863b34F920dfb4Dc4a97bF036": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0c4061DAC92AE19563dEf9F8728Eb26af471FD22": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x09Bb1B41BD79EfD19050Dd62AaEFCBd4a96d895b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5423D3177A9F07BfC1de140190D080801c68199a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6127cb39Ac8e6066C469aCE0edcC3506feaAbF94": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7DA220633dFaA2dD4eF3e3B222e836a2E23A496b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD6dbFCE2d957103Fc8E0f66c7d24AC2B481E913A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF38DF4E0C9029Abd0644B9F01C0A5797656D3e7e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9FcDC049601f9dff3bc74b783aF0F26E15F5C6F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF28dCe94A86f64606bb80B38182C2962157BB2Ca": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbE782eC98CE7135A056E31300a9831fA35D52865": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4Fa6B043DC07ac6081F0fFD1D62E937f5E4D63cF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb4FEa52fb488Ab8Ef349e6f8f7d3159075B14235": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6E4D8279F71F417A80F7A951DFa2bBDd2A7A3f2a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5BBB655ce71A0655Ccf1762A6482fc54A8465b5a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x22f53AB05e84AF7D0Fb3faF5e2d58eC764B18110": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE2D7C679AeDc71DCFD65Eb381107f8beb0F65666": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1D2026Dc4ce6a25a596542829fED4b1489aa3D2D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6946A82C4A2Eee8C3F3C9f9ca5e4fD5c6e415f6b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x61d2Bb94d0151457102Fc32Bc08D0F1B146D54Ea": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdA4B92fC2A73Cf8f65fe043D3A3Cf80BF06acaEF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x07a30C79D8E9E75417ee78411c34eD5F083FC5c0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2A15764B19edA4F2ef2d7F31f6A3fE59A04E29C0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x06D3da385a3802DE81cbF61d852b05c23FDf245B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf84F39554247723C757066b8fd7789462aC25894": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x74Fb1010db5F44021904803A7793A204ca11775d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd30AB27542DA631fD4bEdC9FaeF5B223A131cEda": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x285bE47bEE9f9e4d9A16d9707c868EED10667020": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3792c198ED0c3C0Fb662f8d4d9Ca27544268781a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4b14727117215d7E347728fA426D384A5971addf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x42c6Be1400578B238aCd8946FE9682E650DfdE8D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd7f818aea7A6E26F9c1ca96ebE980D39159DA069": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf8D5230E47AF11De499a4F8cF4528dE5f3f692CC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF2D54033190bbc5a322cb93c7B36c65670D63264": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x05A55847945b8eBa38419d8fAa56431566C79f71": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3944a52E0F316df45B920CBD3D40aa8eb5E3D76": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75eb35c20180b5d2f661dCD03Ec7ca70F30867D3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x45358BFC9a1F52b6623fD299a214CDd88244cAb8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf6C24783A22bb9A39F6317c24F9208Af9f539937": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x73105075FbADe3896270A594fB5d963F5683C935": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF264951C9992BD57f6c0d9b06308AB92a21fAf4e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1254D21A56CDaB81E1a123f582bb7A47d1be5EDF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7B6010da8365BDFd89Cdb0983FB0E0f07eA28442": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1Db5a7Ab4ef7bAD6b0153d334f69ACA563Cd0bD6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1a0191c323D4c6630a180690F22793E914209097": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x48002B13dc82762372e124605c2E1Af7b43c3c08": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfbbD6e7d90C19b602B602731c9029119d89490FC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6BAbCcf93b1B8D511d9029D7aCA71102f35F30ec": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2A8640383B34da0d2c8C9e5F49376B6d844c95f6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x41aF90cD357748928c5e85e6a9bab4d4872DFF54": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2805847D172e21fCD8519c7ba7927EB2111C920C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x061Be9A1e21C24D5e217310E479DbDBdD811E824": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcc6E17ed3E8dE4752329FC8228eD22Bb4a092533": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x45376F3927b74d4625d5c1CE3fFf609dcbf8245a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb2a86E3051bB321910CF4eE10251C22562d58B5d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x51a418f72115B30d092F2A2FA271B74cF21c528B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9FbfA9EBC8930158df2778948403ECCfA3E43206": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8D979a82ED53b603d5BEde17844Bc86f3813B2c7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x94181fCf980FbEC537f2133e596b3Cab1360f847": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x78ce74e941273907164D449C7511ba7783022144": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x829A31859894aD2791F58ef165a698a59F1845Ef": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE9E3b7570b65d4e4b9946D0CEa4653aF0D0708BC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD9ADb2916a9c726d169C3740506f87069f4FCc7E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1B47235150bCCcD6B51F60F175174dD2d579Bc13": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5d981215Ea25503Ecd34f6EDa4b1Aa4Bb6946E3B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFfDe865353Cb473544b8f98965A9D1f284ddA3b5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4c2c95ec9e13316a23237B0c21aA92A32a9ebFf4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD18B8d61c160e779ceFEb61d47600061007a6130": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD8C2275eb9Ca4E6FCc2b52582faEE40C8743048B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x57400664F4543214711d9fcB5a9f4639DD954EE5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3f2bb48E3365a558c8C3F45760504d6ff3B4B63": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x16EC5EE1cC431cA95de00b6C88d21D0B4d3Fc2a6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6934c6dD16a5F629fd807f3B22374E4cd5D41387": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9A90b8F8Ab571Ba5815Cac0B65a3D34127135D2D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd905effc7204CC9e7992FAa1b68041bB548ECf0d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x58aA18A6294b3Ad4592d8A3336aB78D8D5424227": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x788dc97cd03d04f8D1634FC4A82e6E3F140CB4e7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA75834A3c8cEAc5863923091bfD07167b246FA2D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd034055741d9627FcEB231f4E30cf03773949c2F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2D617029e2413887DB9bB4702fdd1c39De570aFb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x477bE27B2085D890DF293AA23BCf010363cFB2F2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x79Fe7B208422b97a83ABF30149070bFD7B096160": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xDc232401fF59C1457123A1b59E2DA06C3B0C6102": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x827E301419d2eE967fC62C3223AbB7eE90651D79": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xabc42b6a90C2A5962C1Be78be7344A7D05848eE4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF5B4C93a02B7264F5bCF6443cDC70728cEd257c8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x280dEd1b7e430BeD0Cbb0Aace452Fd2ADEf2b581": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc1E5b72B1a017F7b837b016F64BbE4374162333D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x041635715c70ea53C35552Ee6d1fAF34b4c9E8fA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd99E28EF233B2B61020927E85Bf89d4bba7e07dF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5665785813011A5c37c10972f8d3D463441637C3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x689A416F33c4984403Cb52E4D200De4FC1810Bd6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x55eA3d952cF89DA45272d9EB9BB45B46790c55aE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7417E3bCdE8726908895152A8F3925a756b1894D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcA4f70E0f3C22f70EFd9De62F96DF357CCCc4Ef6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2a231e4308C07cc69D5C4467fbE6a18b2Fa6Ef93": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd64780b6D3685d10eb0f32A4eC62170633b27AB7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEcB1E78A73DD83C3520af55d1B6BDE50626eFd67": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3F4117a7d074A20ed06a145a872F5B870f3C9847": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x72Fd4cdcA6d93897cCabeE904bc776b6660bb83b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9ffFEbf54cccd2DFE9531Edba4Cb413b2A6C1Be2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6f1a417e2dB2EC1183b9d91def83346ae8d842F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7f9d2b26b90bF421a35A5B7150365598FCe153aA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x22C8D09305D827F1CDF696D1b9Ee309227938F95": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3e412B95f268f7f12c8EEB27EA1dA31C813075d2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x22347EE5359db71F2b8B5DAE1D15518EBe50Ff07": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2FB85b488CbFD871f3c84C42Ca3c8DC11c8Ab9fe": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4D04dd786C88D31e3d2d146A3c6320c23A3132D5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8fABCf470152e44E01750d50f3631F538b8C5d8a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0FacA1A5Cb35F7259B8F2380466be0A05DD4d3eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8750543C3c4D4cA1342e20DDfee80B2ef7Aa1a90": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x298016db488516E9FdB860E12424366f47E3Df2a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x62501959d7D549b5625E569342CB93299f572B69": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2DB6D8C600b3c55C770b0B821A975e22F88D0349": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2E380DBdc3bF0112A3d23b32ec56aBcA2Bbd47Ab": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAdebe12Fd6E08B5e7235ec07912f838db7AA3265": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0866f8D156DDdeC441a333117156A4fd23aFEE62": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5D62a226eEDdb698706bF0C54169c5FEE3F4713E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x818854b363b90791a9eBc29e2f9c7f1055ee5A4D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9cDdb9d39eb98DF24F381fA551a6D43410A34ED2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x91adb02D63c18F6575F59c68161B8a68c5E41C62": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29458f736833e336b4209B4514685f3Dd98FB4a6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD8aBcfeC16caE6E4beE297dAab7643B37e593AAb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFD1779090710934F2c381ECcA22B68075aaf3DfB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf0A067EAAE33F91F4ebb25e123334a1Ca8970f3F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7C888b5da98453668579a8A2E7B323f91E445f4c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1beB509874D823e6Bea7404B2F2793EC8659f63A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCcD3CA7841EAeb081d8CA9289B7E8A6D6ccCC3C4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9D6E610a671A3FBB6e302909617b3Ae2604692dD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x56EC2cebD7b7A163218A789cA0f2826012721eD6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63C964dc8fa9DEd3510af5fBe5Fe18baC844E69D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFE0a42CdcF65DF69e6f89998764FC509ff3b1dF9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAaD02d9Cc52aB8Ac6CC9d48F9a59dfe514aAA539": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd70b5947d42B3b3FD09c922633DcF299f47E0d2E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0d21acEB6A14f076dFBb3ceB997306C8d1bd77cA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0E91Fe225Dc45567e224E5cF413f618A1074b2B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfdB58a3A3aBE546ED8f89d894A27f9B5DcF2f8AB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x060F648C33D7227D16c4f2B41bC95C5Ffcc8E0CD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x167f2028e2410E0A5C51c62F63B8c1d4D26f4cE4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe21Ffc0C426FB963cc5c2af8e2166F31Ea35eD91": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeD5632E56c526F3bd1B47d5e88d0Fe5d53315AF8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3c4dd566C5F9B441e59cBE4dA0822B81B9500afD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdB3641140585AaabC22e26C72F6cBFaC4dF7eFe7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3EC360c21218887974984dAFfC30480D327f870d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x82767B4b962A2C8d0F60df6e4797D77aFb108904": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7711A9a7Da504edF800Fe80f7E52A3aA33DAD07a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x25eA6deA6CeB1Beb08453DEa701caed3bCe46484": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6708687b9F61f6515114440d59233dDb0fc2AF4B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbfC7235331682C98DFCd12a9319dfe02dB6CCD00": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x16F88BBccF3a483B19391278bdc9444F46f8828A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0bd6Cb52b48f084282174304A434EB44C995667A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa8E6aCea99357E010F3F88E3841ae1aa43D54e5a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x06AD2f93B61eB355e6e27D9eb8C67EF8eCcfA50E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbf35b80b9e771E8082Cb9740DD49FC5f26800d63": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE21D5E860E964fF9BFf3dA800ADFc2e6268ba410": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbb45051a5EDab022b6e39FfC7d3291c9aa267A4a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3592f06364FB1FFC68D320795dc57E742297ef7c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x40aa6b4479891C4bF2e5122ac90bfF31f4E8d324": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8281e0Aa17BdCA83611D038CE2CF0e4856Ba22f7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x92b39b14AA07C309317Ea0c1D5A76B2808Ef0ae4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd6347718074C3AE835a49ce31e293860b415813f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0a1d45542A6AaC01CceF66d2365b8fdD3532E4cB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5761774922b95084454c8720D647250bAD207EA2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xac552Ff53a21C170DD57DfA088d9899a07daD0e2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd2F1A5bBFCc1B4490ff5C3548bFbaFF1F74aF6A6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc42946F225dbc07797111B60738583D11DC54f2b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xC90bDAFfa6bd488da7649744b6343e38b1f8a446": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB219f71958BeabaAfa343D78dc9b1F7AFbAddaC9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD7E17834f4aEf24F732DBb6f0D364ad5FDE9d516": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x30C80dd3e2De2e59316AD23eA960d3b013e93499": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe41748B199378b03978Bcca18Bd0401578201CD8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd880507D359af862A5f8F318c8e934Ab478CA818": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x212694d63a75124bbb898092d1F022f46FD0B6d3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd6109Dac18db4911B3642D9627E207cC8C6Ee6c1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5a4E4FbE8a951047bE0a7990DF46DD8Ee7a30B60": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEbECc0a1eB0A05f3cE7100f20Ec6b97cb93F0965": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x774D7A81C0D8331404eAe666b5822528b390B276": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc75dbdF1edF8301d5Ca89fE32F321eCec034C6a0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4aD330E8B16BCb8546f99239e1E4D95280C93226": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2e403B969a64BdD1CA18fE10BABA4546957bc31e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6B5B15d47EA518CA8daddf31F54662bB187DE601": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5fA3A3872dd95f4Ca792059F9DeDe4a0C519f2F6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5C0042653AD001e74CbA934Dc38C7B9DdAb364AF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3bCCD29e913321fF41adBc8d128a12500b688241": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x003FF27Bc2a5dFaEe60D6e6450C516531aD8A153": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3dA56ae97f5606bE726f100891646d36c01fCb18": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe601Ce9b41a978eE16F437c9184FaCec9153Cb72": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfDC3492ab736B575d446d288E087aA69Be6c5b8b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x21a0B6Fd81ec697E326228DF279F9Add0D1B021A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x43b8b19B0064936EFe96ed635089743B5167DEB9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD38aAa4f17A3948edE996d3D8eA28b55B7C6eE7B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBaED8D4f349815568A9a36f45f6CC04eeC99D72E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1373867Db85bf48af9F3133Ab65097a1f561C069": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7Caf7DAC35eAc81d73272ebB30408D7fA6ee4dC2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB6D216c42324AD8e0119c5fEb495D2f174a03f04": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x26faC14186e4b247eAbD44c7bee15e4106303479": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x426aCF71Eb49ca11C3273379ee5c44885eD5Cc6D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x08f2E303CbAeED51376B8e948eD10ebFB8bdC1F2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf5ab4fD967A8D2513d5f5749905045d433aF6a90": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x03d835696c36443F32d98F059168D086E00e6270": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf8B41B4EB4D746696109b151F65CA1EA31d3A7B4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x71eC583a7442B97CFd30B398976b019f10683DBD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdb5720551425dEF9f5D766ACfFF33bEf88784d85": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2C0D8f4FdF2F5F98C3194B4EA5F5c1D67bcC4185": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x61CF430eEB4f75762C6f653291aC4463976b9aF7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeC8B371C2e20096af6e7B9d62e1EABC4a0852D98": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8E4d6f64ae10e74077F5DDa85371713C3aF3eC0d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1606c25f314165Dd5CC67919fBC149f3bd7BF9aC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x83443bC737Af694Cd26fd961Bc13d5982292EDac": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4a1332bE364B686AB1a1ADdC47287cFA58f51CE3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1100E400EaF3a587Dd06880acD74CDb2Bf52Dcd0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCC991b0dA1C0eC2e7634B1e92Fe581614b86c7EA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x72DEeb5Ab757A53997b73086806d75299Cc7aDa7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x32882c68Ab8832044bbE9b0e9BeB738f60Ae4e2f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5aa084353AE452e07E890cA42Fb73Bf9B2D86D5F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9aD500F5595C9DDA818c3C061428E37b5c9af063": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x54fA8b5918B00f0e5024a2e5255AF61bd8bA7B95": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9787b0652B26A2916C561fa5256A90B04D088898": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7F0A650d08c5e7077C9075691ce66dF62e269F2B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77365aE372B9AF3B41b6BDa51cC87090aB19d1f7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4Bf15AB74F6A4CFA4CF02E1a84521523d897e4D9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x27019E69C37BD994A478fC858d9eddb5b6c72b5D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD575a54A345A43EfF67F90Cd5a54CFb4C79fa4F4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7f586889ccd5fb7bFbA7D40F2Cc64a96f444dd15": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6F4518B1512F7162BB798d4f5f9D879f101B6307": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8667603B91ffa9ff958893ac095A688FD80Dcf8a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0892eB3ABE97620056a6e13e3026711ECf5f33D6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaA73063743864e854135Ab81eAFcF29B9FC1e6ee": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x232E7d97d1A332cD9AebCea341cb2Fd6fD07f842": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB290Fd44A628A21FCCBf6347668D80dE4177dA42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD542363F17498c81aa07ae24140D7791640Eab0D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4Ae7421f4E2264CE3F38A998421a08AcFE766A3c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4148c36308021303CfbBbB46a47D7b34B2aCaEa3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb3EebC393516D23413E9d529694EbF68822a912C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3AE5381de8f6CA9e672ed55a3cD802286B45C9B4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x944DD180Cf568B55757CBBf3f14415E7f2be0d09": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x095768e52dC0E7702dd2784cfcDd919a04B6E4D0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x610C02e213496259DAeF68d8413CF13ce6306511": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x445FE772Fb15e70f7A400F32B6f5CC2E4bD30b84": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaDf094b2B6D2C6f4d8e60f714Be005A378b26D36": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2Df044d78017B06dFb41123bB4249174FB8728D4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x35eF5fFfdd91D6e3510Ff617B3B862c42bfA4371": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEC2DBbdAbcBe84E83108415A00c700756266fCF0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3BB649Ef4FBa1715e1B3FcF99D18A16b9Eea2E06": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaE86583bd7963433bcf2e59971fe2F6fB0cAFb6D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6dA31701A98fac38d0536E4889DD3149e4b961b8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2FE2D4362A95686093Cc24c58CAA7b239BD9fd2e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9be8e4E9D4A68bBdAa8DEcaE9f728Ed50599Be7c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6Cd68E8f04490Cd1A5A21cc97CC8BC15b47Dc9eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc08d2eF573Eceae26e82A84b97A764CB1c39866B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3eC63E862D3421eBc8baFD5f467b29d9D8f3fcc0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5651aDBdcb766dCf855eCdcc47DCD89e4A281000": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAf750F69978B59a32b731BC88087A0E5A09dF8a6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x48b211039586619B04CfB3b040CDD12165e3a9cf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1f849e31d11cF3b9cA6125CD4Fd93E566f2A9E3f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8aEC5fcCa09c5c6310C13B6271fa1Fc405365F62": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3D18fC023a030d97D67Bfe5957d115083c8C4a49": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6767A7296ea3bDe8c01A1678E0ba3BeB2917cc80": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4b2161e13d3a8E3F4A13f9Fcbe31DA0C7a19998B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD141b54984321D36EE4B44bFC621191fCE95F8AB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFDE0c45cE2811Afe8A1eB05Ea8f2601AE3d67448": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x607f2b38E6d94bcEe160Fbba83EBB0Eb6D94d044": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3557E1f1062E233109fEa543931A59Aa922e8b5e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x30e02545ef15870C088e2cFCc8245056cf7fe4aC": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc75265Cc1928eC230D53914F3e9bC36845BaD820": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x736011B7d04d8a014EFdAe6a653E3405f3CDC720": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4a403ECc4e55DA801da79A6C5CB0B9fdAB87B296": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x805eb25D7C5e4d9446aC444F1F4eb85bcAC2bC57": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb4361a60C18c992DC8eDdD27Addf8A8C29b18733": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc9961ACDF50a1cAb6D80241E0D7505B62054d788": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf947173d1D8D208252650eE8b66DA0e600266501": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x21cbff56FCcf44E5af5e1fCBa465b440800F87EF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3Be0cDbF9b1Cad6E6697fC153FbA56deA1bE4Ab7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4B0f861cA9455422fAfE7e7a6080F193B54AAa4c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7796a7f85F5C9E27B7ae6DC17711D49906D42a1b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x874F3C782cfDbD80f440abA5C63Ad69DEC41A605": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE5CeEE154AE2CCe4d37f0Ec24D3bc8cE5B0A78Be": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd3d4f998B66F0dbAfE5645D14f001e6852271Daa": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x13aef869b0187BA0d720C8E4de5A7D51D7B3423f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6D06a53578EffAC9c148a7D1669790bF83a6944B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x91A3054ba5A5DF8f1F6E67deEc46f99c9D693E4F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb94Be5cDf97401560507792E92c3A29102E5457F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB1BF8C88C258789a10144d1C476d47dcb2f41361": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x36a7CEd30611fEE2507F2678971867f4494980Ee": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb3215D514dE1a2380B7fA2d5E605D24193323eA5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x515873ec96A03F27EB801f4C3BAF4088f91B9bE5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcC1731bE4A6d2d6739CeA6C589aFdC54bf5495fE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa9fd776a50b60A1Cf2B872696A9866EceCbE1D3A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xeb129015e51ee819E2A765B8dae3B76D13fAE3EE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x09c40F32890805a99392819c02Eb5860b71825C0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29c813eCf79631f8C54e669dD74bccBaf577fA0A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa7B80231614C3985538535F0381a2A7ce2Bb9027": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA710c069237DDA9ffB25b5F7FAaE221274368c42": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf38B9784d7b2a6297b7aD7C7ff29A0Afc77F4EEd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8Cc6360E0Ebf3835616b56B970a7440F19066ce8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4e268ef3BB2B0eB025B42b7f1e93B9d42ea2Ebcd": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xef252a2c56d61D5417BD59E2586aC0aDF3ce538e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1Cc6cA38F7791D9C725a3a30C5F24afA70813169": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x04440Be8b67D169F94678c2BC4834DCF3398F112": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x156fbdbA3a032751c6f7A23fCF68ee3B7ff3Ee71": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEB057C509CF30cc45b0f52c8e507Ac3Cf8E78777": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9eA0C4BB61096ade0638E52bf0241deA5c2424aD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEd03D5D86a113de246bB8C063401554F41108183": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5999498C4EEDBa03a6D9DD8b52DA5470d807d921": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x69374083e0A19e5Ef86F9DAFb2c007A65841Db1e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0c904bf30F05732c16e1886e2E2613E8cA778585": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1E6202c6799E41E444F912227b3E15A1eCd4b91e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5fb8B8d72A3986d9CEA5736675280C137b5e1F9A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2FF162e2C62fDc6112d9F304B416fB48Bd120B32": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa3bC1b0c0205847b5fAd18758571bDDAd56e5797": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xb781e00935CEe03C817c376b9DeBCdD19822b418": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7d608992A8c260DA65e1834C4f33Ddadc960F9c9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE2008Ef79a7d0D75EdAE70263384D4aC5D1A9f9A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7284BfCaD25b9d16c5bACf72783C8a16BDE5763B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFA13a1Fec81f66a31daFcCACE04Ecef65eddD06B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcB759D5a7D230E6eC0b02347dEEcD61a662777DE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2D5AA448e1Ec8B393f926a78dA64e60cD5d14703": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc16373B5Fdb767C5c10b1EF1668649F94F925E03": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8A5125928Ec63184EBdf2ecb5300D054085466b1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc2c0194cA72D647AC492D1A962658485D8Bd807A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbd0049aD63411d25819C200D5B5c2601eDC63A37": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCFFC9c89C666456819B9cdd4549cc04168986AcE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa2165c20395F602B1bd91a6f311858386531ea93": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF5519780a8Fa2416b88C6E1d4d45cA29db101660": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x915D26FA87D887e165d6573A77461F79A3De37Ed": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x702428abEC56404D3045057462e1b43595ae67d8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x68EDd56e13524C78fC15b7F1FE24C3F5b60C928B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4706a731c981Baf43982624D648DD5c4F1E6151a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd4eBC013f5e30A6FCe6DA0391fD5b84e2e72c93A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0E8EA0e0c73827E436f2D6fcBdd5082bB60460B0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7D7753887915339438207763880674c1C7fBb482": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x13B6F48B7D831F875771EeCAc073A28eDA4b137c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9bFf070eA85902dE09e1FDa1798E9B805dF2975d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8Ea1726128fe7a3De7f68b152d35276ce14207aD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2e185636571c331D63993c7A1d0e8098321418F1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6B0b03631897C5e843d2572dA36eDA5F79E7a2C1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8DCd8703aD26a51d62F83a2A94d44aF87DB72367": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x11741D1cb1657DB35EdC8805eAE8C4911CEe2F71": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1563547DD0c62A802779bf55af1184E65BB1a6E5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbdF4B597DC14ac8c64E5F34e4eB81110DDa5BfBb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1816308Ca8CF95B0EDEeFBd6d6cd48b59930c194": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFa2fFAdF727D11b77756E3e9031615F5127507bD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBF4Bf9f705809bb341908342b0856c3c6fd5D64e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6FC44766204Bd263b0A8aB1B54dECc2C22dE3d50": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x52918e7457CB0e526fd592e2E573b67Bd17DeD2D": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0883cFB2aD3256Ef822AaAC610aee39127a08dCf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x46dc1c5f801822a00A268a7555533D440273C8ab": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1087281C196985BBf5B68677B2EeDf2f99cCB018": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0A389DAedcB0583838def855cd0495028a683E4c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9Cd75894548a8969E924F0B3aF6bF8dC27612b71": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf2d2a2831f411F5cE863E8f836481dB0b40c03A5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x203750D4B97979e1ED4Ad083dB831a5AD232C169": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6232d7a6085D0Ab8F885292078eEb723064a376B": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6297D8F6832B3152EBbB679B6902f2D0C010940e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x78E86BAb5453213841b10cD427c9b77Ef82C329a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7b46f38AB6549c63479aeE82530b67e08b16dD59": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0b4Ae5B1db33c238844F7ad71CEBD258583d7100": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2DDa27632C48252Ff32678cb568491d85501dE28": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x81E2C758CA9c717E4b00B5dBa9DF7459B68290FD": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xcd43AaD533e663b726DAe4a08185E9db8eBC9f6F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xaB6Fc9d3bc84954375DA9485b17A6F350f1D7dEB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9B7D7c4ce98036c4d6F3D638a00e220e083116c7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x478207b856E109FA77b423A2580F3f890b6933Cf": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8c2f0B4bcDAB83b1C05CB769262f692aF74EA2fB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x714C0F366ebBbA21FAc7B6A2De517A9EBeb7231A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCa94516Ce155fFF1880F297fFCe99173b88822D1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x608Cb60905EfC0b59ebaD8A9C650A410fead95A0": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8Fb2A5d8736776291388827E9787F221a1d3633a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0CF29C333A84064723B3c8d4630A5AF539F18E3c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x627FaAa13Ca3D25BF959325D44543e04C99cceC8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77b5B0266D16D55351680B8961784E1c85E12c14": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE139962e5d7B07A9378F159A4A1b7CABe9Df1d6E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x303fC875D1fC3126B1bA0B011eaB69a506C50a67": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x556D8baCD8cE1E0f59a1A3e9329C53530A9Edc01": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C53635374a831dBb7049660bCB071a688e49930": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEd740E1463b085F34a245129564dcef539374C2A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x25968e4c4Db0851422A065be460E6880A1E76141": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9819Ee2373457e5B92A3847a635490B242B25639": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xba69593F1F51D4b2ff0a73298c8bE0C8586be931": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8215503B7E5A27469C1861837c638198D1dCe238": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x735eD02655Bca15EC46491C0dE4946591135459b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdE8205E8Aadfe4Cc6e7A1Ea369dBcff4179D55b2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE807e147Df8F55Ee8E5AB4A7c48AD01e63FC67b6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65C337B3d2b4C2E208801d95eA55Afb7409eaE2b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAcaF6D4B71f850b2Cd1875d6eA7f7DE2967Cc21c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf6DCa69BcdC99Cada8B5e069a4A3cc659D482559": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x17A525ae5C6004f5598CcA843Aab9F2CeBc886A2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd4154916d1330A7eAb4bF3e21295295805A1AB4f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x019d78D1b7f8D6DBb3A4472f8882344f7fdebD4e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3b7318457f091965c488dac7e58559993e4971DE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2F061aA574882C84649230b475a44D35795cC018": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE0bC753e49aCEcE82f436A00EFdAe9D70EDdc68C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd7BaF6EA8580Ba201e4C9B75f596f8e4859f0C75": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe1c15F1f8d2a99123F7a554865cef7b25e06d698": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xCe08958266f58b638527B224D8b7141a3ff9C77E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5c2e883b16D73180F60FEbF687B74EC615D1D544": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xa0F6f7392283163E133BdafE35F8CD7d52520ED1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75662A623b3B1215be070FbDA87CeEb54C368907": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x94ADA56Bc45369dD0c1df315B3543d1397E7574e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2da6014cF9D8056645E2e9B1ab47b799EDE840aE": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7b2Af7a96Ae32d71EEc4d58708C046C588136683": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x891E8ebd0430Ab4360b7B74996C2AEe650A960d9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7ad517B61005cBc5fe33c06b7F485961CB6E61a9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6Fd4DeE3C0351AD3184ed041E719D260B8D4dc92": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7C7252B38450f92d27337dCcB0d013Fd0AF1ac74": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x435a05646bA2994751B3d93F5ab1450C109f768C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x79776E826C78f0452a463ee27b9D66eBe8cEc865": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5bB872d51BA73847DCFc5031fEe0af568d2d83E3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xF06c79C4fa207dF457295d81914BA74A7caC6bbb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd890B6F0551345B8146f66F8c329f70877c71119": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xd2B41B2209de76ed2B6224e9204248d055ee20c8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2AFBC4356Bf863a029ef58875Ad00CF6B8975A52": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE0e097247F0134DaAAbb03b9d9F7791a0BACE99c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2481Fef92F6358A410f4B42a7672f23CaC514c2A": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xFC3733587E4066D664963c90CA3bAF76ff05fE46": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD69f170D82DE974cff7E81E6aB4Bb09A90dA71eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9d156bc7c8768294510A4A41883d5A4EB15b15E3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEbd6dB5a58c9812df3297E2Bc2fF0BDFEac2453c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x28265b4188FF587E5Cfe1155606026cD2CCd243d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x393451651A91EF458e954dB8804D42Ae15bBC813": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x6E1368C42c9cB0a51A55228BF2de2c4738e83A60": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2eE6c0C72952F280876da353973caCBE238AB334": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9fD841A70b2Cf43964d46A742636d72Effa47DA2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x83720DB3C5675ec1Cf50471B7a6D3715e4a93693": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x958559eF569BE81A2EaFB55B86dB0fad8326b96a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc6cd72c56D94792fEC8aEFC492b185aB68DD9a21": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x814A19b98A84EC9F72b7609A24Cc6cD35a2d0B9e": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9F50183812BF7DAD0967e6CB42aa041919c13026": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xA75d28EF5aFe56DC916a4b18070a0Daa2d3429cc": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xB9F278Fe221CCCE7B3fBB8A8C1Dc5Bff49918054": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x761dE38d73B4E1b0240f731a1ed37bD879281229": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x2492A8400813764952c89a88232F1221858D9C10": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x77D74a7611DB43241E25c65888e6a26fa69019a1": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5d90576d027480BF06f78AA3E9A9c346F61eEF29": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xEB74C6E3c046E16190DfeFB7d3CBA84Db5790CC4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x63eE555F1fea9798f09069b4830CbaA7E6E251c2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD5730BBf7897607b2302540FBA00fBe6bcB42880": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7B65803C229A2044534c95762018FFBe01207c27": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4D00E2DDe0Da6386E888f2465e80162F273B7552": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE23CD65ac0253f67Aa75666765E3350D14117866": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf7bfad89da0a98AF22140fF10A700F56fED3ce22": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xca8d13631bAD77f49B7fB3dcb82A13A81faFff54": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8484fBedae4E9b2e26Df44b92cD5f81B71C8150E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xfBf704AB4c8255a68d127A34D4e956594f7f0C2f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xAAe99871b32A731dDeAEeE18517E365eBE44F395": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe68f971B545570A469A6bCc99895119A4483AcB8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1Ca0196A35CA44540616945c27c79eEcC30D2c6F": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD4c6325Bc524bE5F9cD4A934A4e163F41f061aEA": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD433c1B56055b7aDf8e5e2982E7e2C00C378706a": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x69b8A24edc9053b3D007710E7B986dF40a0BC7eb": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x697560Ec40177d9f3B450abEA56700eD84df7cEF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x8f179ce31fCd8E335410E1A2281B4AfBA815DE2b": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x885818188ff2FA182BAC9a8f0f427dd6dA804c81": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdb88e9CeDe3a24e7070450fb166Fcda4B787015d": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x461e76A4fE9f27605d4097A646837c32F1ccc31c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xdd82139f133F25ACF2B711664acA8Bb676b85699": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x3D8555F7aA7647d24dFdAC7E4E6054534627b800": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x33c5756eD0a5eeA92c4de11Cf181910Ee0E677e7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x65a441c7A0607f76B3B153fDe0fD2f3a920CC8FB": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9C1dCb699e6aF3AE59b7219e5EA7fEf6D9FcF9C3": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xc61CC53572f07062731b21685F07fb1d71495fC9": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xD9D4e0F4C81d13EDF3eE8ceC6Ff026a06D418301": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x05A13aeAD76EF4d601ee3675f7C31679970EE0C2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xef8104c1F471C1995cb6F7276716E8B38dc1B9A7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xE55c69cfD20Cfa25651c72b84383dE6104104Eb4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x75F2e07B7d6EE6CD0A5889DBc0083c428D9Ee3De": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf174Bf93251c264d0322171402D70CD1f3493A60": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9927D618FaDB02aFff86A8Ea7a2427A53182B711": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x9F5141e8715c6691E75188BDA726Df54c14721e4": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x260eEb1441280Bd0987F717F0B045dE455208e71": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x29eCeeAFDFFf73E125C2Fb93CdE3E6bb6F1B602c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x7196CD6DB846314014Fe2E4E4133B5b11eAF4eCF": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x80106c6E3001BBd2620E329Fe9411D4de371bb2c": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x915782DB070B286375C4B757f63fC9a81c3E93F7": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xECE673f4A50f557245Ff44cB89a9367851c31019": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xf04946c11127A096Bcd6a572c01C89C164f2fa12": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0722692DeB9c7b0B910C75e7d07C25A0CE920Fe2": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe37B696DEffbC7e2639e587C0Db1Ab57f686dfb8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xe3f201d68B473c89b3D82eA9c9b0E951DB7345A8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xebB884f8f382231003FBDDF80D2884187f1e99A8": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xBfd2c7B0e0E18558439448c2Dfd652d8Cea6F97E": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0AE8A421E5cF4775310D6339a4Be20552bfF7080": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x1164fe7a76D22EAA66f6A0aDcE3E3a30d9957A5f": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x0F3f647e19ddf45D1a963527Db2Af07c8175Db20": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0xbb955a01Dc7dD9c1dB5a83F554000799Aaa38Cb5": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x737E2a0Bb15F6642e4e97B9661511b2DfFdDe8B6": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x5ecA53F6Aa3910628d7E8B30C0e35aDfF6cC0B9C": { - "1": 500, - "2": 1000, - "3": 2000 - }, - "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41": { - "1": 500, - "2": 1000, - "3": 2000 - } - }, - "PUBLIC_PHASE": { - "4": 500, - "5": 1000 - }, - "ABI_roundBalances": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "name": "roundBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "ABI_totalBalance": [ - { - "inputs": [], - "name": "totalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "IDO_PARTICIPANT_TOKENS": 37500000, - "MUON_PRICE": 0.02, - "chainMap": { - "ETH": 4, - "BSC": 97, - "MATIC": 80001 - }, - "LockType": { - "ALLOCATION": "ALLOCATION", - "COOL_DOWN": "COOL_DOWN" - }, - "DEPOSIT_LOCK": "mrc20-deposit-lock" -} \ No newline at end of file + "allocation": { + "0xeDb82EAa5D2eeb0156528D19aF8F942b65b377c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb57490CDAABEDb450df33EfCdd93079A24ac5Ce5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4CC129Ca88ff495C1E1Fb33688FEf77461dD2b10": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4CE6Fc21d309F7A27Bdc42D50168e2AEEfe80966": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8849857Ee94b3558A91F6C4B32e776c6f6A8A6f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5E18Fe3cdD39C924f7d2F03fe9511Abd3d31A6D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x720d07C87123c203300e3D06454Cc52642e3DB21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D4b88E19157ba9522B279211403Ad99fe8B7278": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14108773Ca6b9572af48CE19f0625e7154bDf2E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0324ad8B269a7CDC9Ff3d7962D3257F9C94c4b3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x449020a39C9Dc3966Db7f12a3E1C8Ee9EdD23B9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x918DeF53676ad8D5955C637c43983d1D7Db46DEA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61BEa29643aC187088e916609cA2c1BcB5c3875D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1aCe01A1fB96aD6325f99877b08a40fed5f89A04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bC7893646C7F842C02F37eFdaB2805aC5142ed7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d97cd6C9DEc4255ae4F0ED88593fdfbB2015ccB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1fd8563c594cB7480919a5470EBc21EfbAcDEC9b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEb30Deac6db83eD3e1ef97FDED89a92bBcaC263d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e61fD005E8fC4E120fD288a8dE47AF343028d3a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x478de03AC3671051F0Ca1b406892322785B36816": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x02F3C467118850Db8cc8e49f8B0159F63B44909D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x556e8feA3b3E44588edA68CaEB633CC14d998c20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe12D11df5e9D626Ed3c46fa6160bdD94B5Bb193b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Ce8BfA40942C180B4c40c72632351681325F2D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x054D816635A5966121f47107A8CC3e4F1609d934": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd80672Deca426e918F7F3D2c5D98bc2ae745B947": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4CdaE28Cca629Fb033cf170032a2A3079F1a7Ba": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x243791675B5C0db7165159E0D4689B2D4f558d5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC19d8a0872666741A15F370eaf30115D1Ee6B135": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4E5e3e9f936a59568C3A7c6159c5cFCE328D496": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x465F302C87D19FAD8D0f3C5156eCfBEe2B97D342": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb891072aE0B15B2BC60d53E5b91f9Cfb7C47289": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9709Da4B1cA1B7296d6c64633cD2f3F505186AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f6f76F0Aeece29556bA1cB8CAa59e8904B5d19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Df2b2Fe0da71EAF9F3aDb0C3e6Fb584932Fc93A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f52A6888e9D0ED7DaF51DfE1CBF5C3d25987014": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D63d1ac6ab0Ab7d003b12946b0ba590c14f708c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b0649B83354a57c4C851092F20E7833Ee848305": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ec6bE1c8630A54DF55D98530b89cDfEa1C11022": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33870B891b4462a2cB3820ffA27BBF2568251b6F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc959c8c2Ccd5f8CDa447fC593c8b335484901790": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa650DEd93F54D02920E0Ec5217DddeE2c9e6198C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84Ee322C64569aFA8C0f126723452202D9d906Dd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcD180Eca01740098321951e9698a43520C3B6fAB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63Dc9faDD8d4291D094bEEE268468f2946C71F37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64bdeA412a5175faE2d084D0FA5f553AE107d466": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1eb8DDdf92Db67D55D57cb0Abed31acd538cd34e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9fC8D24063e4fC60863E59CF7d355A9f446Df9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x054513707f310a7D12Ad6367eC875FD8a4E396aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6183445b14A09f3BAEf63Bc4839Ef54FF1fb059E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56F6Fad9310d0D45C7272F4e4D2294CC10D1321E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x286199ceAF739294Be9f2fe985eED0b001Fd3F0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0224F15eEAa741Bd0E861ab13398F6d975456e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf9b2F57e9d828f84b07ccdABB77FfB404a8506B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2615b5D4f7793063E037D51D54DBaA69254C9ec1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa28ac1264Ea4Dc2fcAe85C379A25E24B44A1aAe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f384331714D0ED9f549e133e402E42f38376F36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC39B0d8c598ee1Bf6D98B9F918f253Af99A2744d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x50b818d4bF0E3Ee535e6356b560AE0cdf4c5afDB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC06d8FA518Ab6441438BEc506fFf785b66ae9912": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9efCC59a68a27f07Dd946eC8a63dF5CFf760eD4C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42664Bf05C3c126b00D26EA3093A5c3B3D898a15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94A49666Bd0453C925c8612a0822E48Db86C8235": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x206067193a7fea2e88b33FB8B2B0542731FED46B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb44FC6b75576BeD059BACb188c0B466A408Ac7AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29F6710aFac24D28A4D3F329eb4Ed874d0Cb6921": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD64C20e9627a2832D4e57b33314dF88D2FFfb52a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x884FF2A87d0E4349445bC91dEF1ebdF2B6cbefd4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4AAE8E210F814916778259840d635AA3e73A4783": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5DfFb97792fF5f1F728DC560feC28e420B6fD9e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDDE733b93C63a777b9ff1De617BBF54dB16410D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E8efEe74aeff5c49342B4A498a2ADa84854c67c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f278CC17fC894208314deFA44ab64dC3B34F47A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7BadFf2D5e606AC60ABF6719049466b2E624E291": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5B1461b986D6Cb70aBFA3D924C5767B18D49E14B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC7C53721dD281D8C590C548f3c35A3412403e60B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD91C6F109BA732b8a16EDF920d8491fDB05935dB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xab4363Ad5C48B8B28Cb3C15cF653Cc0988bFBBFf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14C330459B21967323E74f8517e5F54915792a7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa76bA11Ae56fd4966B019dfEa634eCBd426ca55e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3B4e4466f385562bB7dC65f3E4FCdfC7414dAFe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x928b60D66343F159C85B3dab8a614016B774856E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x029290c564Ef921c56a784AA16C97E930dAF7372": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x538F418DF790c7009CE59eD69F2494E3b79b2c55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fFe16385983264b51814FD7A5e3Bf34B43847c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc89fCf092918cECcB460b41D27AfB860Fb96345": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16b59935FCf119C914302a3cF2D06A5e202ed22a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23B71AdDF8eEa49506aD7FaFBC394adf348E97Ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F8497037A48D3fD51838284F49Ad59985862865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf698e7cEb84D072eBc02B355A393a67516003CEa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBBAbc2B3BEF7af5913987C4ebbD9E0c2876eB717": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4C43928621C0A39a9753184C2aB3B073f85eab40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC75ae9180E8508488bf52f56fbf3e5d9b72fd28f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D068D615486d5E7DDE0538dAB236E85329A0021": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10b0D4C689DDfc02cE07C28F46B9Ae4C9ADC3C44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2007D6f803F33dd0e7a307faC889958632712d8B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFcAadc14Ee1A6f5B030Fca5454Ebb060C8bf563d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d378E5c8Eecb1f0214447d6231448F56a3ee35D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC90F53218b8021D8369f57084FcD78f5C37398DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55e75e6710A3629478fF44Ca50d224FEe89E0F9d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1131722410Cb8FDc299Ea0669256bcC00b208B1D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE4e6852c8e89056F96031283cDCA8CBdE435fA3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8590FE40fdc8cd6bF9e67Bf2073716230FF16f42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbC61053AaC2acC27bB8AC15F88Fd44b326F3e72c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0C1098c79876ff421B29a2097dF182E7dae1116c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd534f1799298cbE201a55E52FeCb2C80a2A73adE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1fA50dfCC60DfB656D5b3eA80a162da896cc7f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA80709ae5E6Ad89Aa11d09B90d6A6531499C03A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf00C65c7113E9b98225fe5444121C4bF967d0650": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19cfbC0C0Edd85803049E8cc45e3b1F88BBa94a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bd20EFB6cCd3585675EF91874a9818AbE2b45B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe13dd5586392b8C16CbDc3Be3E45Bb79006205cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23Fe0e8C664c47ad3392388e9C438a2768973f79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c4201806Bd97F3acB301CE20D62ed51fa29E461": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A166f2Fe92551d6058777367634aC0D471c9C80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA130f341f1100Ed2b4600336a6Fb855043C46731": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9B741A1Bfb5DE7bF6dCAfC4b0648Dc2430e6e0AA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x124c5B4e6544D73A47f0A14433F5A75C92b9Fe73": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3500ad34614b89544BD5671AF549C6F7Bb948cDf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9af5b257B8209D6008A2436594DF12a0F13FB747": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA43Fbf78d74D7B5818B34b0805d459A438345641": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x402824c43D9b95c3337892b4d39f4b222A46cB7F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1eff5c785c43E37A3D2BADb3631743cd6c5E40Fa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3a426D3E1ddB5bb1dbDfA9D409132c036bCCdDD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ba65990cf61a963059af3d6f193D967e9343BE0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33528E95db263686935F11c1a35931C1dd421CAb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbEa177fAABad8d84b3691BE73645A4B455Dd20d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30452F6B44EA87a1A9Dd518fEb4f5E292bd91e1f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0491ca1BE2dc5FfB86cE7972FbD5459DdcF5184": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1ade4CFfEBE30590A9552fbe6C27BA2def37D19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x502366d60c5ECF92ac96E202837951A86D0e6102": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdb3c9373FE06E4DBb31A0F90c872e3Fd848cbf2A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x413f35c8b02260f0a199aBE8da78557918ebC46c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8A72F456f4e3F153634d7713a8Dc32cC4AD9dd83": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x527ED2DF55E8e32C95C2f4f510F22B5a9BCC3Ed9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfe99A10424FcB3D3030192d87302C94238d56e8A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6F6a387019961592C97670FC4C243F5fC6D2153": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x255ba29130ba7930c22c1D5Ab33E99A17C45E317": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x580e5Ef735e0E83285e5Ee0e8C03677a3Ce30C7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD63Eb32F5CEA9c05876712d8C41f228Dd9Ea49Db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6ccf5211fdbcB0707ee1AC2735D9DDf8909d1C19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbcdd07326A797a06A392Ac79a1d7Dc329F589067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB2C3B1299554e37DBBB39b9F7b151734545b05E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB7E9b1010e203C397b009f831e45D520Fbe5723a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3f9abE9D41368596201c605d439A5C7fdeeD094": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b542E727C96AC25df977960C1c85B89aD41437D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6AA33d1F92f2b64db7Be6d8190390091dC69c8Ff": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65e2fddb87C8eC5D0B51244a9eCD029E8df32d16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaE86A6E79aE2642b6413D43c4b192cD4B4ECf59C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBD430cfb43f0787a2E73e4b8720544f4bd09DF50": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e3De63eCf7421944412509fd4A0b79466455349": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0B299D802a3De40C8b74e3845ee48B75cb8Af9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeACcB1042405415723A91d216771d535857aB410": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66d24924D124EE838C580063bFD1658dDfc13A05": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAfEc889E1e57F4970425323d71C7abb085265729": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0422b3E153a305aBE093f2B2dC90aa1094CE653d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12E0694e7BaC62747f2Ef62F4504a25199B5ca27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfA7eb6278d3bFCb6b5607A01e6603422150d4419": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3a00c3CA08A1BD29341519A4f1eaEdBBa82ca39": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5acc27d89bd9752f7C07093BF958eC7C647c6F2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb902B6A41000a3807F7fe19744BF111224AbBd9F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1FaDB61D41Bfe71b990145390CEa8f99e0284E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfc477F3b1A2195948580253829877aC07662e237": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9246a01542D2779635CE29AC3A33500779442452": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9368A8296E48FD7527e5b258e593e53FF7F32Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2c9748A2762103363E08273922C686dd6FEbF17B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77884B7aEaCcbf1B8A0C5a33E254391b9B49eA8e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61Ac114D3BaEA159cBdFb8C0613B8C84277D8B72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1355E2808b19d460F57d9650f5b3725956B7D060": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1dc21e09c310cE0273F8D5554AEDD848dac97f74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C797e2350Aa0FFb6c52b01DCFb6EF89D6D255d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF47fCCeBD8650838001588271C9BFfcba4CbF1AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf927F8B12dFc263b05e5355cdEd0a0008294b026": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e58132B48A5E72c6EE5204fCc9011638116d3C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F6f49aB08bb5b6df9bD7D357E01e88839EbC9Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5bB10BcBdc20a928eB07DDCF481dEA7c667698bb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0dc23062D8886b45a210325Fe95Fb4986B634561": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e841Bf726d8B72c84CE4cfa9Aa7cE8059e4B3d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c6410396Eb84105Ad728b52244178BE34545fE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9973d1f9Ac6D372a2B26c253e17078Bc90277D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdc9B3886d7bf6B8eC6886bfbB38aa381bA47e09": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95AD56dFF3AbA310504328CfD939F479cAA699F5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFe8eC7DC678af28675893890Af13bb0c7B242C51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01b23f8cc7FBF107b0F39AA0Ba7C17eBAFb5D618": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40903584F46E4e59a16F726DeB2F3088FF7d6306": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc27636e29fA870DC22FD7240da3104Bf1e5fF195": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81FD1f668BF14736231166dda22b10D3bc9388D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87a819287d0e55155e7578c499E5B0571Fb00BBb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42AA6878019689A61720DB7512d20655f9d2E4b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc27FCCaB56B16156804F735e2140012bb84aB1f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3DD3FbB690cee983681dA5c083569f2E7e3b47fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbef62042A3828011Ec5E65BD3Bb1D04196ac8720": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A598e7Ce9C79e7555739440A62C6eF3430F6bBe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B4A1FEd369aF43cb0901219fDB523C91709347B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81839EaE0E46885faBa7082203ee9308D785871C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x86A0253f3E40342E5bBbfD19F6b189939a5879AC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68e1a75F7d44463F30225e1a57F6aFd81E736f3c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53563Efbf3CCb1014dcB37978a6e9663712a4c7f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF087aCcB193b5a22407878ED324B5B547A2EB4CE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7939aa0E09b806763fd4533014C9158dC74ad0cB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5954174A6f56F24130066b21a9D866E3D348f363": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56A226049f88C078A4F25F13ADdF254DD5986446": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37ED81Ad6f49E5aE1A3E9AD54Ed3b9eD30b47cec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD653443d008181D2733Cf7428aC63d96784e801c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AF2B1A2C5714d2291049Bf65A4Daa4Df79eb93E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x043CF0414AD2991e910e464E4F3e80F14D7Cf0b9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5045Bcd57256462bA2639231d9639b9B290A0a7C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD871915A0bd59103AbA2172E1dF959e55146977e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8caC061efbc42F8e9bB48772B42AB07ACA89c86A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34B6680552E959Ce353C9C794495FFA9d7d7fff4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x287037283Dd2A60458C74C675746e18Ce319F205": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51892CF8845384E612E419284b4dC636315e810c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaC1865e71552c8FfE239F8E95461d7E6D74d2D42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD58bB5E99621EEe8768E651bB36007FC622e9CCE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAecDc6B2bAA5D611796C10ce6ec7CE1Bf37f30bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F13D70A9C7D4661B57195AF9F443908aEc9daC2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcF24f9DB11D7cf69b1f6f438c1A5b576456F6df2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49ac6A3d7830292D2BE2f1416D4A53ac367a7463": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01524Bf6926c04898feA53bE4aB34E8AdBC931F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBae396d264452921FCA831B534902e806b166c4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD95AD0E63f724632ED496786361ba9b6DfaEF9CC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11faf40FFc2F2a60d22d5431ace9D9d61612D22d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEBba2585c2628B00b3f224Ee727e7bb3dAf6d07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x343C80183e14183024D3a2C822612B78C94ed2D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfF7fD844B7AecFD4cFf577d2deBf7C524ea5D6c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5844DA3A1472FE6A811E28331daA66B32a4e624D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3a32affF419bC3a41c68Ddf793917CEdc6FF9Ad4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a6481496c2da4a7FD40fC43842178cB2F599d90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D9C651bbc2d41FBb83a0DD1fA59188fDB897098": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91cf6f1601aC171f277CaAe84b79293280fFb1E4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9663B3d553e63172608D29b2c5530b53a1ABC263": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEb60bA7321e9fd8F811C50B2d9a036797982f523": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AB4eB43Af17f29ED36E33e9f9eb60dD5A5e866C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73b1572C0D1BdCd3aa9E4A98e6A03B5d8e6917aB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1c9782a047C2918f7C7e34B20Cc9aB821b4914dB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2384194Eab2AA0B4DC25F8fcD958F7efCfF3Cc1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbf0A6D5580203623255385D00163B83a4a68707": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38E14a38Cfa5d2C97253c7815BF1D888FF7d9f0c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd8F87aCb4b9f86Dc65B0ea9A69522127e0f53Dc4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fB39dB5F14FcE1900dcf98162747C90f1b3c37c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7BDB641547759e184ec5439FddE496937d197355": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0cAF40437269caC99B47F6Eaf19BD04B17024d76": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDd5dB43e5B360F07aE0DD0cbD562a6d1617FA716": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4a586D0B9eDB0605D8C63f16b13CFb63Ef9f88Ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA2C434F6A06D59f8d4584F82Ae39219Dc74CdB5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x849C2DFA3b19Fd683bcF82a345F9f630d79D6215": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD11B8C663714A3AEA6F968009677987329c43aE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65382c6DCaD251Ecea9000497C683f7Aa3850aF1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCBefA20f73335A8B7B434E040C610aF247794dc9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2de5f2A28c6fC68bac4A7e64c51A025217f5E09e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC4D3F6feCdAe82fCEE242c794a08093D3024b576": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa62FbdF01F661BCBeE4766bcb126EE44f1E8FBFf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdcc8EBe0fE65B8f0321509437EE5a0d11cBebb94": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA8995b4126e15FbFc629744bC506ca05c3Ee3fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x290FCd4556BDcd4D05DA39600881cE55556c8dE3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55ea799597fd1331bc8F55c115a9C3e20c133e5A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3155066B5C0C80E9efEF37FD9D44BB7D201dd71A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDcA5971689e7f561aE4B84954C821b87764B3d9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC7CA66152d91141B5637fFBCFB2157d9Ebb4A63f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB01BcC2c7b6f8B852866cE59fcdEd3981a9FB95d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D4AC8f94A03544Ad6CC37eBe815c27e1C6e11aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28aFDAa65B529fb53fdf8B73C78e8b66AB1824f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x746a8780C65b53e7881aD6e5EC0772e2c645C10C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2c66f5f1F83c05E811917Ba44cC2745A66e9cB2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3d4113B1cEcdEe2E91e7054c7600Ef25f7915Be6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05098506dcb81680d181e6C311019b4F2E700200": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA830A850589Ea45F909D12F13Ef892c59F3C2FD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCDaE337877ADA30CfEf47995788c4496839E333F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0213ac7D6417C10c1aB433612a522b1a4975fE67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDBC60536ed5D774F00b6FE4F4270F42b713c3896": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8224A48B79e69041A075643946c85C2316E43428": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15fb86328E91299B707242c71aFE13353c96B6Da": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5189E17D3dedb230567a40de17bA919712a5f21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb69B6e08288AADa7CC8D99327EB42213Fb6bbeDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2443942ecFb90ae63e3c46eB2314d1F0E3c3a4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcFf7BE8332c5c001ecD32566e6C5c1507E7E7435": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd8A60C70C9194641A4379ed5150E6BaB11341Ab6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75dd5b5B3D5FA3261b41e62b90772fc1FbF1510b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFFa76AA8387450e54ae290c821A56d3152A8dB92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7925A5cD172C203353ACA3dD71b8cA05148ad3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b6c7641f13Eb16c9dBFFf2F43032af426E3FcA4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f5dbb63cfc56a7a22a0a39898C6CC8C5A7aFBCC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0927A8554E7Aa892F4B6381Cd04E33fAf5b8cbfd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6146745aCe59Bd6B15Fbe7B52CDB97794291f4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC742A2F67D245970cB0588Ffe0807dCF194eBF1b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x537AE9D9021bDfeE352E6eAdb9bb41F3E45FDBF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29423f7d062c8CFad0f1DFaD2D325E28bff2777B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7De6b064b1c72BB804ab8f1be30112fcE84b6693": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcebeD608B507B9dc2A5Bd2bdF3FF6121315Cc2dE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6Eb5264D6B427Eb8840C690972516F931A28c37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37267E9Fa3eDaF91e0f3582B53d5DD00025D3a74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80b744588fd2feA8ef14386bd953493A097eadb0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C795Be0a4887816Ce761D41e482fcF4fBCa9963": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b4E19f8D24b33937dDF3210A81D6AeA54402e2d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb79BD4C2FeEc4189025FA553715EE297E110D36c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2fd42110f478433812EB741AaCB4d6005301edf9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Fa33056D9067Ba93BC89a3366AAD64952743028": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f3E36Ef3c24Ef8fD5e8e3194AbB386b20aF9b65": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF370c2a150dCe78F6625658A498443Ab68ca3A73": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x715Cc50A7aEA3ebA30b5574E7b469577e4C547F7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF7DFcd5cB081791BEb3CDC7271c29C8EE860FaDe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3496eed23CC2B0219F31916044595c6787d8279": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x385757F0364eeD6148042961dDb92cA9FA600307": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcC72D781BF4F263EB1afAC43632905aaCD960736": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a2bFf68d2591480d06a98840805F14e65cC3aaC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c18FFEd1d4C2eE1169DD938C96D3BFd84A8EC00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71848CD5FDADA3a5055623b30B09ebD6a2124Ce7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f9946AecC395eD458abeE7983e04A7B082081F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe53D26e4E941D06AE5E00C70B613bc8e8ed87512": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91e3d5bD52E1E3d6765Ac3d8BdE3dEf74CCdcD97": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66679b38688a4bFEBd90A83838c39BDe36d0A161": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1BaF16c71Acdc044bD7B6E5805D93A8b2bE90E78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12797b71154fCB311D6C92914729E86253dd7D0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97528D8E28741240ED6219Dd6E1A848Dd57529A3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A9b3e3D95CA45e39cDdA9345de9c1e667a645f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeA72507A3b094F03492DfCebAD1202BC83596DDf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa585De16bC74E2fce7d7b17C2D1e3D5D783a5C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7e7843B27b89d692269F3CEB1577b649b77F05b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x416C1018Fef46d19F7d6D32E00836Bd0C8aE2CC7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa972836F256533A8f39661d6c061C3211C80cbB0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42E4F53b09250BbbFF141B4c7EFdff2AD9873eD0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA878f074Db0d79B9613812d3316e40352ec5aA64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc191a29203a83eec8e846c26340f828C68835715": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf4d1B6fdE396C478741c30E045009e3EdD92669F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF9dc1Ea1B25a752CC4882F7B5fDf3aA53cc32eBE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD188fbB8bbf515D5b06c3c1e77130C056f8F88bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A5EE74414213611378DbbCC40f64b58c3d2A46B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x129fF5246b9bB4825Fa352792Fb04550Aa8a587E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaE529B3ee1e0F66FdCb1eaEcc3678896dA19CEbF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x407410d84E15f79642272eDAeb437aC65D7298E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x916b42Daad94D97A0b9a41d0c26eBf7F5939b8C6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCf4e75c9CCFfBc6dB98d43256a4D3721C7d09B2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73F9639F79555f64DcC2de5A57ec98d1a2AB3180": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33f6EE932cEa603Fafd6854827259bE172C91Da4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf298D142486bd66C76C3D9adFc4de57ccB2A9Cae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x423aFf57B3b3f60fff3560E9FA6EE93c5a8C2b7e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33CD689Cf11F1B045a71819524c7D48F3B647d35": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f3Ac9539b3aA46E69F81b691B9FE5FBdC37ea27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd0DfA9Cc867b775e096277BfBaed57918CBD40cB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x685876A4e1506Cd6079e1076249170Ed82116341": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48fd419BA149B17937a0678a783A96F7E2AF9ec3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08065aFB0C0fE66E084a8e544E12986B969950c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43D21D4Ad607c5Da1c2CA50C76fA5136586dD75A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF08A969B766a2442182E69fD562a2c760C308405": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x555664f29cdF66345E13fc2983821dd74e3a32df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Eb90b15c757a9c3d2bfBD8Cee3a51Dc5B114225": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9151Ec4e84931baBCC821e0bfb3b035D38aacd24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51BFff5F990bCa32de6a61EDDbD5b51747e932FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9BD8760Aaa6fcce928Aa0ef2c80590Fd6e80a52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4B2D6458a187ffe306cc284f329602100f5444Fc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x267CcA18263d82e1D2B6E094149Da5462cF5C961": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe418fb36dD92Bc996D5cB8C1bDcd7c2628626ca7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04C98a96DcB4a078dE1E31487CaCf436c5D9Eb0E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73179b92ff5538e873B1B4B52801a2933729e0f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2Bb962EF85B8389c83C89fa78C241C5Ce0C51a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB4344312Bf0988A9a9D75a45FAf4F1FE8Eb6B79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x324f0477Ed3dbA6bf5Fa4f34d2AA3B912D452500": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE8503f0484c2B8bBDCad489A25e699542cc14139": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x62d7Eb2560d757C6Df8A14F9077137E4B0af4dd5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x645C946BB911458326D6e83393126Ca3479C7ff3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C163AEed3aC423019e4164c8485530325759c85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF08CC2AaDf3Cb934475daA8D427eE2600636A198": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3aD9C62F816E7D35159D69ce8fF5F57E29c0F239": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdCCf8F98877666e0De8B03a8df16352ADAd2B87E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0C2d640DfCdd73c02e85526dBc9EBbBE83117F58": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdf8FcD3FE63Ebcd8aDD490d3f4dBaaa7C23128CA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8206C4ab88425dC33828d4bC5F16d7E45D6ffe85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70e7676a7b33F8d2c07049cD0cb880fb2C4ce91d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59baCA5484D0048eA2E46F8F365769E3343478A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03b2e329a42c31AEb614F06f17e634D4CCE08a49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4DF12C097D10502E45da975C3E40e58BDe1c97a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a4c7629Ed8d3E7869Eb52A7dE794378C655f2F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd91B8eb0f224B0908877770946EAFaEa96395178": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC2FF78d2EB719a5814ba006806b710FEa5652EDf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3213CeE23DB014511a3df039F82c71e8cab3bC89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xec30e1978F1a07b6ff256eCC22c273B225d7DB33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F856571d64A78fB015e89AD3A4EAAb4f21e355D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E230EAC1e30106feB33cE8081d6836c489d0144": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x592111050fcb5f530Ea499447f2cbC0D1C57621D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE12a08BDE0C8DCBd8bbB84783aC9eF8fcb8Cbf5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe98aF36E6250d5599F76FA3D2b012b378c1C783B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf22144a4c87610C829272B76D0Ca36De2D3E16CB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c70305772E2b5A4A5d12c817AD4Cf71A37D36F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f9DF833FD89786e0295549561daf819191eEB56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bdCE7FdADb022369188d7158f338a4e117981B1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2499A83CbcBE1aC68bD786eB6F4AA19D8Bd55925": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C9f725f9E47e84f05a1d38e450250Def76315A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8afBb227f3E5f4156a2D798de247810dfc5CE79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2Ee543f185fefDBbce85A87EE0938cD2026C9Ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAA297E64fD3A3DDA2950dDCb3A82e75B704e88C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2c3E8a5a0B846cfFA080C628a25287B38FB6A58F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCCa264fA1E621E64A78E36a123392A0974884911": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53f3B0c934781b39Dc9b4e74c5E0FC047470F190": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39FCC5C249305E5666684f25A9E4e8FC8834f38b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F1d33eAB6a24c8fAE6f1867c885FDC42D4352f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17Bd178D155669D34Aec86bb404E12b7d4905385": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4607c767dB6b3a1D85200Fc09eE24370331aF53": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x667daB2FFBb94a4f85cBD62268799D0904045C47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7aDceaC5EB67f5973424DDD6841172548dbFa2dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2de8c7BA53572f8CeEB5bC2F9789a415ECF1AEB9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd063407b7854e413db278782A8F934Bdba8D1D55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd715ddCed1deF460Fe042b1Ce142C76549B6a713": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF0b8168e24Bead4A23ab9c3116B15734e4457662": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c97e931aB720760a5dB28721CC5DA30b486E692": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E30731a598A85c707AF85EE435D387b04400cC4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1bEA90CF6EDC9ad6F7449E22A74E3F19229E14f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfd2d2b856813b6f58ef4d5A442B43d1B37088220": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c23da391D47338FeF38306D509c01911EB53cfe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C46F44814b9aAe2AD796bf9b563E13917edFf82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd409BF118809e11A5443d7BA6343DD3A1B36c2C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6d1766144D215AD46A83c7aE7D1500880Ab08bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1964044B21C8A468B0B0e99733a458FA8F3fD0De": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4ed641e82F276fC3533FC884F06d3744631ee560": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0822fA326F199E62BBC7800864aBd91dB044Ba5B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x711d64273eb08013bD50Bb2dD05d902004a47aef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19409ED3dd77c455306181d63e49f4d6C077271D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5594a207548d65602b82b6fc8c1FF38c406c2547": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8E8e46b34C790b9eCbdC6d3dd8139e7c39B6f0E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Fd184Ce671a131cd0cc32F012d0390C6d6069B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76c3C27d51693bAe283a44148105B0B823EE8641": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x854c3CDF79757043dB6905e8922c1b0a2d9cf1ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f67387d30A19C58580Fa2E169D412718b099F27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45268aEf5B86974946bD073e9D26D34F951D4B4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb8bDA4c3A269C7B4B64732a1812334Dd043Dd450": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF3ef55B4e1F5963C8efCe7E081f11dA8618dFB9F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12db173E3c3C33f26b046735258fdf76620E276d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE80acd2F19577dc778881086EE71772e65c24148": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5441fFCCBBd3CBa5FA802744D08CDa82b6C39ff3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaaFf4A882ae2cA575279Dd98c2DE4214f5A8c010": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3318aea4c90716F3742c619af1351CF51BC845b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96930ce4B4078f5FF0ab80fc30De00bb62E58aDe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1c2128ee78D1c33747c1561f0f2510544f3d9afC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5dc533fFae3A4AC8785BE4BAd1e652ebBD4280c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F384068b2DFB70Ef97b361f10b33636a4EE44F9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bc9F83Bc42AF59e43562b4c6662aC2A4B579b35": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3D94e771FbdCB55Ef11380cd154Fffb94760b3e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23f59429Bb6F8f2271441C5a0fa7CA303312Af03": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52b66cB6a5Eba9524F4eDE6784FcA99fF8EA7aD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5e0a06217682641Fea5e3E2a953Ac842fCB49A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x521436B5bE5E2B771131BB2CdbC46Fc2D88f88f3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA1514130AB14826F37e0Fb368E5889E201F6D8D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ff2dd38C029870623CFCd8BA4d396AEDCdd8bD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x040BA68D5496e5f3da094BD1D498A6e83DfC7bbc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF7b40906CE5bdFC68CA80B95C400c735087B4b0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x049e660Eef111d2D3be2436c70C540480F863a41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2569A2F03812E6EA2cA08108bE180F520227Cb3A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e791938e080aC514e380958441b3Ee38A9e4327": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C2e50F45cdF6B85d5ea14AF9EdeB9A8d4145Fd7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28257d5aB4aC21a88D42095cE669819b8B6aF5a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC376fF31C02CBf4DC5134f11BcF76D6C150Eb370": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77eb6203033a1deA9353dd257309E54A257692A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x402Ce3283e75Ee1E0BeB9e1DcEF64e60a955D33B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76A2648ecfEB54960D14d38C749bC56a6ed0f81E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75EB9d84A45D841912a48619E69376497dB62232": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8dAbc71Fdf0b088A0f91749b126E55064c21dDb9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1f2e73De40cB9d426F19D4937994142981906E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbD059E3FAcD81e32B1e284DF1845409E584d5Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x559cAEB18C27f2580457308df8864e3Ca035dC2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4121Ef83bE1496Ec9FFb76171B0Be9Ae21200542": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEfD20aDE1F3292d382C8Afe53D6498ecD07c6aE0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6477c71C2C406c4E55D2aEa28b69a06B8Ab4D330": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xffD6Ac4BFbAbaB1D53b408c08d52C796667c5326": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6088f3B87A1ab72AF831A5577216ef8099b60c7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x456682cd2ff91c31Bad97fBD4BB6DA43d3538212": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C958fa18F69044E0C67A0639c952d952006cE21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x648eb8AE01801F9f6eC4aa1C33cC68068882dFbb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c19a2CC0366D2443d36EFe9813Efa2152f29312": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x705fd20C1DE8bad42446E324354eEb7e25763f85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2760db1A05AFbD1876B933cc18B041EC8692645A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAF5aA8a8a990Ef0064749481e21389753166773B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Da1E366489c8A281eD40e3330A29a0aA3Cfa57c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD35f8d7dc52b38e14bD2FC76458fe54c3A287A8b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD21b64cC090A7E09b3187A5D12Dd0a125938CdFA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38DB681146711524cc0d0a8CeF51d3E1Bf1fCA02": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAFFa6F661c506720878aCDB8c50D7cF8CC459d74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x358cCe899e541a860FaD2BE5C980C721D4E07321": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3E3190fcB09315a21faFa6f8b200E31d1E2abA33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa63226Ba25769Ad47F741d82f7aBA95d843b6473": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe31813faAEBf8ac9518d085c74a5b2737636235c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x753B8c442F536Efe5Ae559D889AfB4dbC498d9ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf99774b739a1f8007a2afcBAEaA9069b83667199": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a6ffEfB26AAd3EeACfA2b217984F1D17D330fA1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeA8EF43fE5D4b6E5Eb4313F32A5820c1F2Bd6a8f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd59dA3BE0E413337d7d931369522a5CFcEF8A0E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49F3Ff21E64780d6b4cc44712024c0Df3ee33805": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73B06899838D34F9febAB5c69BeCbe8f0CFfAecF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x907AF363423C3386A3Ec77223390CEE0395Ce9ED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x761FC9A2ff111D8C21182FdbE0E550cD654CE3B7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCC4e37F04Ca5AC6C7c23411DF3e63e44aD5fe349": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6935a786e5849DA3bc8B9F56d6634F7031Ef809b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC0ed78BD7c72dDd77ae556F10a98c958b9Cd6Ac2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76de1e8B1F6a0Ea213e26cc6fCeAc3FC9e1b31a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x378d5B33e79E25B55748c5e8EdFC7D9d7E3f2E97": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E993084d3dFd21c7D12F22423C28bc302065748": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb6edd9Fe8B931319C9C76036146e3aDCD5cFC15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF09137b540F678Bb955a9316eeC65E8e3A2b1A9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5CD546b78fa7038Abbc931819e97F6A1f2B8FaFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68edA9592E0973F829A2B76Bc689aDb4b42453BD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99d0d726B9c308540Fe2B0cD0ca1898741f37Af8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aDd097754F6eaa353A01eC8F3F478F0f5b87d21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52a8D238A5c1a3f99d5f37FEc62B3e3BE726302A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45C21bC0b2E9b4d20EEf6b267Ace1720a5499ABf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1707BD3a35c3C2925241F9A9cBbE1262364b353C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB84aFC36379f6E36161CE0125F4E198aF36C00c5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8407bd34d1f042fDA57848442B23b8f496DC31A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbE2C524E015Ea016E7fC70A83BF85419F7375595": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC66aef4C7c2e74d831c0A44b3Ad87D80111A12a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C2426B8D862A8ff941faba634365c8ccd715025": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34512eB82B7Ddb4B2602129de7a21150a08162fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC961018af27A176Fcc36050394bF898c0A80289d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x093bf182e4D2C58616Df7578B9a9953A134596Bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Df2F1c7dbB4D0B05B03E38ac0d40b6782f18445": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCbd094e2901E3E27cC8471e40f85D2408fba0992": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0284250461473BB84D3Ca090680032dDcA372336": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20E3c3aA41e1A6b12932C38cb1A3fd9Eb7ACb5Ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1e008B42205FcA18f7FeE70fd7E097014A1F84dc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF6f64b470Cd078d92e023E4B2eB8E66AD7a7F6ED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x655CfF08986761264357a667b73b871117a5104a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A2a204648740B44F40f9662BD930320CE5de182": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC3483C41f0f4e16E943587E183908580b641f52D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe89e7ef0efa47c4E43A17EC1eCf0Cb488e54f717": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a5BF321eAE8238978eB3aE80220c1376aC31965": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64B4b3F4F3f6992d839e9074Dde54A019a02F3AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8b7cf462AA2C8eed2cF5Fb57589d395C013eee89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57277634682D991FE831fdE822EbF703aBC657b2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe4d9F174e9B9F987836030Ca0b244A5b4F615869": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7862Ca0fCb33845FdC64db0aE4F9F97d03b46af0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x62BD4CDb6a9CfE6B3Ca3ad57Ea7db61b9eA2eC42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6455ADC2219aDA25587e74d475ed605762505802": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3CBB7A07D4b8640DA21AE5Cea72c551814a7Bbf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x851925CDd9Dc031df1257Aee4FA15Ff7c269ecac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE4db86a306A55c9C18c17d0869D552B796a83759": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x008eb737B5029a92475e49aA502B87cd21B67f15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xed6E4576849826081fE2ffD0d94753838ed0E1b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb937697858A59DD906cfB5D2B50A73b86dC0B670": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x806dBC5c7c588b23Bcb3d71f4861FDaf37a99e79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5dB239D5b52b0b738a4975B1791Fd37519fCC881": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA819A27C5D2e7c07f7739FCf2b620ED6b597023f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x683fB8955D01553491508F0815fc519406958dde": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ad8a20CE02aC9c24890014C6212760b562C26ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33d6683f62e7fF6bF89Aaa581C73fAd73090FD43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAAA0fFf476aFE3d015247eFD63151364263DEcF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd5C1cA79B5e5A3A383034eB37c8C0C8fE9F9871f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe108974cE7Ec5F01161305Fd808C61d1A2322192": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC0812866e59D7F8055d25fc32b74b0A6762a5880": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97387Cd12239da78d3FF9046C225AC8Dd44b6892": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1FE57f502363B796b1F6Bc7db82d00fED91a137D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61A06C3D45a9e5A087B83a0211c01ed2D6f0F43F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2B6a048bF4a4B2F2Ae71850648cCAcd32FF81025": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEA3d1b241925c61aC490EF767Aa57afba29c406c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc252FaD4840A21101e9425B585208feBAE5fd588": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67ae28021CA9E6aC751858A81b2B3c7EEBdD4864": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84706593AC692b9ac8f721579C1FF12AABCF74a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52F761A82fE381f539881786C34686Fa12620c9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2aF129557c88732f5Bf9C619666051EC009d8B87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7c0529897b146B6f7A27db73763742028dA2880": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x753D5b68510Ee838A85Da4F0B10E9B9c1BD7554c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63Cb360E704f2f4779d5608A8A5E3528FFFc5771": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE61DB1ddc44A3c740f5468Ee27e5459AF5C48303": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20b0617cc839b321827C68BFc87b632f6835E57e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd647200E22395213609BDFFc0dA202542EBe2584": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x344269Cbf90a777304360B06c3482A4B3F9F7511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3815Be5fd65d6CD56748C4381Ef2E711dB5956B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdde01Dd8d0640a6a812061d06b6B72203147f42a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc4fAECabe1D33eCE2E83c7852d5fb743Af6720F9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70B0eF7BD6cd353cf89791a72986b3CB2dbD72E0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66dEe2b23f95af7cA3AEeABA670053DAC6913067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94d61261AEdEdd27141C0Ce4c90164e16C5e6fC7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63EcE9430F424661c0fC7351AD6e71d4281b64DF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac4d52d7AADfCc7Dac17FD91B12D95F425463c82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F56CFCfD8DF725D548175FE8B68626ffA60b684": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0c0CA89ac0cDe709bCde39066cbD63E1c6cf766": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0909c919007Db07CdA603e4BE121c3e1C9766479": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa00A24ae4C3d3799b206A0347F29285aF8513199": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22873033143D426E98903C8bE423969329DbdB42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9BDb46655344A13aE88C0F76A408580e2740FA95": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x489E52AB06D2E5cD68Ab12918813470E5ad776eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05eD9F2e22187b90c3DfEFb9B02A88e9A2f4be8d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE57C2d78Df84C41b3A4a9F335550F69e10e10B19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6D8a3d21Ed1e371A1E74B4dB085D1A267cDCBDD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9dB9901C9f2e94340429b3aC9B53234f0B6df51c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf5047b7b86612cde3c556121460B73142cBa343": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x50B18ff7D78B1Ac8bC2BbC373a6Fb30E0f107C19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69440F6762160Eb39bb41FA438838B535379c180": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fFB580DAB3EA10Da58B0B9C4C079b339b0d9470": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x688c0a468ad7BE8Dc2e1cB92cc1b9b6fdca84d5A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39b0b46956638d395fFB44Ea49A436c8ca438CF7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb697ceA2DD7A0b9C90Be7DA172831D91C32B70F8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8fd9304026dd59eb74717e5c73ac0002c46ea00f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1A8918F18e31a2Da51e316cD5d33D50F54822115": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc77942427e282cC38CD2F836F2e0006287c3fb7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDC2834718DCB0629A3B0ef7D83136e3e9d84dfFF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd43BA4193920dA3A288AAf3400dcb5be62fB1dee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1fd374ca9DE2437004799136D748dB235c5ECED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf845A40a01763ba1b83462BEeCee331bc4653ED1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27149c5b6137037b1FBb7CF04091eb4576D01F0E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf4a99104e15515Ba8EB0F3D7b745f75007Ab6cf2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcF0e7B312E7F59F62FC1228d66b182B4345B2F16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfA5eaA5d72cF76E92764E1E9128A7aE792C8486C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4d2D638454E465229aB104116B74596BD993a636": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4F36394A5D937f8e13689D9F965c6ACC05000456": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD38476D3c1EaeEb5cA68aa7f4EF75dd0b18473EB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcFcFfE706f54910DD3C98f9A7297B76BF663295D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDDb5aE2D3348AbDf185c74865FeEa8f90505D43c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x705d493C82305BAC4eDc527A6487eE5Cd1D1AAF1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8B139211fD5f39C9f4943D0C2039957E8609e960": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D137303c07A35664FeC8B68805937902b56E1da": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4286419E11938Ab8EcdeC7D74438e1FC201153F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC187B535241357D7299C6f403D382d02eB88BF0d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD80A167ab58795bD2737d9D8697fE754CA1f0C7D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7467cA8BE38beA9073a94B2F48724e90e9c239C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C7F4B0319D549C8Ca8bA06a7694AD7DcB88837b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96e70215d17611491F32B1D3c9035E0Dba90E11F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63C1d4CE3f0eA0a37Eda12376205e25D2298Af3a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA1e71C2D12D70506E040cc91b28399F777D078E7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e9923548988759EEF8B902Ff67CBC0f1BB4a876": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1F3bfeE5365046ddcbeA48dEa8679e127DDc312": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1A48B674b52D9912De8c2d72C542d863215fa714": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCF5AE86A10D4730035C166c30e0c0E91DcBD5BF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x171f5Ce1e0752da51A9dF92b9f48601b91fF7FFE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0fBF737Ab724180216D4A3b0cA277Cf47D0cC74d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF165E3d91fBAf01B18cB23bc770C7AeDFCAEb497": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b7f08cDaCDAA6E0b9F8e7B334D42551eE96f0b0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBB7cD10547f34a986d5663C8e4632521ddd58947": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8579752e97A3ABe2a56C3FBf166924C2fE5c610D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa50b0E76Af8320aeBca39Bb925472F23b59e0FA8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4cfF121c7cCb12B54B46757D8bd1250dB0d7B2Ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEcb3d784d93125BaC7610C79148f1Fc4d105D071": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC7eAEE43B7f235d3380C77d55D639aa97c0643bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f39C1FBd5C43071Bbb5eA52a576f8D126633Fe1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8a730967F2Cf1A2cebEe1781892AFecF4506ADe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f7B7f1C0805fFe647e2d533767d2Ecd1ef4875": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x068D1a6030BB3e8cf185b0433Dd3c48C6D3157b8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5eFd4aC2F2f80bAcFd5bc5ad94b20A5de023409": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10A2C645aE42Dcef8C45b8de397B8a4D9C47fba3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32AccAEfa35620b51c061901AFf1B74991E7322b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdEffE0596B5759E87FE88256415F9Ff7BF78C2b3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E4996cB18E2619dec2C32841981CCA3001eAf54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa721d41a817723707f6Ec5169C36539989d02cFc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x549F2eB041Bb5b89d954d4ae18fFe1f0d4377056": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0ecd084eD57d964a74eb4620dd7942F5384e30aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6FB3af602BBdc75C03d1C5A442E2637615CC9b4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x90B390AA2ab89C7DEA543951B54A1cAf7B6Fa771": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8af7810012012Ff02f0734D46d09Ec1dd058cAe8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c4601E5AebeFe2c0854D6Da4BEbd376570B9fBA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb2017a931F206F40CF06268E8FcFDd3d4E4f5E80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2667Acb34671815eA4b242Dc397101B06c170430": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14E9999E96b7394600CF39E243f0212434810f52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x159F7ed0D057494F0de525b758682F5904B75Ff1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82393D1fA94c15729628eadD9E1811705369F8bE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2e4358ad08202eB0071221d0E5C68E14a0e266B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCA4fA1eF929D7Dbb9Ad02719C499FE9412cA176d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A2db2C9F0C7a048f7b9836525886EF331AE05E9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x361D7E3Be644f68f663E5D3E49c808818eFc9814": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf0b1d2562AE198c6557b53DF5923514d01aC9Ca9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84e40CBf192E4c68Ed1E59af454E258eD3403754": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf8BeeE9Da85484a60b90939018E34124C78e24E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x255be04Ce7C721679440de2735D231C3c893f262": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7333E0A08BeaCF70f04e43EDf3eb86A8a053f64B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x600D2B986355D25EC23155c90041a3571D12aD45": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95735465cDf5896F5678FDF83a5C9CE4F518Ff81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaeCe85B275B7EF34838DD28C0608E48C8Bd3171D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6136507E755492035593E4df10De733996Be2ae": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F638b6CB4F208710F9a768F1567a45015c3c3F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc4A6E3D1454ce9F2F7b2cdc59fe5825B35619C15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC2cEB2B35Fd94D06F13e3E194173F0bde152098C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7AAFd5eF980C17EcA27a2107e76Cd047C90659e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb04B688b2Fa620effdCfEE808ee64D08482caEA4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0CFa219FE4b24e25e4cbf26e448d2De37CEda4e3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3eeCc796B8aa53d139404c13a3610C16A17e5aF6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x325409632bccFfAc706d378A2Eca57Cafa21ab11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf90EEB769Fb55eaBE7a8dE6Fc162863cf724a58b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F02c4E2Da54A0df1F40DFeC773dED5125dC28bF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8506c53488eC8235ce858049fD68F23599879328": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04937c1c74B0b850E58f663B550736e16FE37Fe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1CD53b78A2c1a67132eac4b3D584Db8806238f15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x291c26B3A8FAaD1bf4B3606883E8a85A7763F8D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEc82EC222E99DcCBa7d4ba69112706e82715a8C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59F41Fc34604DFBF310B1Abd35230F8abF349053": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43D57590472FCbA03402b80A3CCA22c52dFB7219": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75D446065f56FcB187EEa55B50CcDD7D495E0481": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3ac97095995Da83Fb3784E63E67e98E228F4FBdc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4fB7571B239CA85A049f9f42214D1E238823440": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0f1ff4e59a52A17F0c0b2E39576C19CADa46F1E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1530F2940Bd7E9d9E8a8c5EaA37409Bd22dbFB3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe797F884588095Ee7Da45981E0eD469aA9cEb009": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEcFfF554D4bc60203F9A3aB79Fa31E623f695A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBe6e477b30aa4919FDb2192B74C0D64d36004D9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6186496D413C09c7758cBFC245dC6Db34Acd5825": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x286d9E38217097eC8dFbEcA01dce517994fe8C4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F2d1Ebed1b0E301fAf5Ed551eEc06621593aF23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0491FbF3b495Fbf4Aa6D73F44Bd5b39eC43195cC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBe2cA6F56C541eEa195f258D7db77d51dD6B106A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56f76fC1848863afDFF65dB8c953b67997881723": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac3269A2a0704bDe92E2a019c5b0E4F5fE323191": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5543F90d0E039374b80FD1Da0F3e0c242F67Dc2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE3dFB1beE32d13bD09841e52387D05eEA58Ed61f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1db35F617c96d1B87175Ac08d3bdab9B38559d22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29B79c547f1E81AF85eEFEA168D7478ABDd082C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB10a1BD46E15e36a25baE13C49283518a000cDF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x358Aec0953239C84EaBB6C61f61d7a1D1B7dfd93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6cc77695e67BBbb4E07515189a1323965cAd6a1C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEA735BBD150d3397b79dEd73F278aD635eFF561": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2354CBAeED67B41522E8bF2445B904c8F1631DC6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA18D33a6F72B5E5bc1BE1fE494D83B8C7B2b224e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa9E993B57a1878b59a33DE3A753E1291FeBC6A59": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE308Ef1a6E6606476996c5A821c1F1Da991cC12B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xae8F0E1Be19DEAa4eadb7F61607C9570304ca46f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdEABAA81a54725E7Aae80951E93e7AA45d92Bc7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6667EebC2e8A033f60f0db49ba30Ffe7A06FD1FE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xacAD95570031453BE812b88Da058A074C26E3535": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEb0A73934c99ed7E150F343bf2F56c662FeAF2C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7f54A1a866Fb841ebf1290a02C2a2B179B38a72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDa8e18501Db98C9898321064f5BBF0D06031A4a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3E0ECb366a64b94345F61f679869a5313903ab5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0402E6aC3476DDF96fbE75a5E6Ea1824cE00a7b9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB5a998Cd81ff0d7613981A64eA2B1d49783b8e5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dd62BdCE70D3fdD2D7D72451281Bb12503F662a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x732806C441e29078F70c9d51f4A72021fDfa7354": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x694b7075fe32a0a424Cc4203410aD0315F5D7Ee0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5663F391cF21C2CB65e4696bB6f9280d0a58Db8d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x030A9230CBeB809C51FC71eDeb50E15A802A9535": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5041848f86a219eDaf331091f81eE271FBd56004": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc988f7844c820cf3e979c3F48Be627b389120B4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81F556097Cc0898aafA2c10141196C5a73a05472": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e0B792F6808D2Cd4AE37FC7C9370157801EBe4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAFE9787A96F5811b1513c6408FB5e85979Eb23De": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA025cDf80b2474762987CBD727c70539b252918B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3384875dd5905F9004E40aC0f2761433F5082a8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33C2d1Ea6e63e29D56C6CE07C73660c115b2F717": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x336a4Eff61de62337B0E2b5D584079940Dd5F4CB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6FC23962D71eFCB8742E109b62C7977cD392082c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0852a883B0b3900395667814638C0151B547088": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fed65Fde5151635e240D37c69ACb414f3751Add": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf600BF216Cc468dfA31d90AD99e3BE2607Ac620d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2C9eE9409c052Ec8f540552216c29A2f4289D2Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA9dC4ECa1BCAc5a7CADA4FCB71F6995355bE2026": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35Cb3Ec240eE2127ADA7Ada6ea98e6e1cf8B8810": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6d470ab7871b8Cfa8F2ff6A44C9C6E9EA2544df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcDF33a991B66811cD25a42b7887FceAc776CF0c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fe1d92b85478E99DD6880a647cc150445b5aedb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6160B705CfFF47a163bB5c41907BA8286656D6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E5B9E4b1F29d0629Ad130Ebc5904ad9AB2a61A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEF9F50716CDC3a6b32213D04ce0977909Bdc9F62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc08bD156Ad0A2E529Ac3798B6F3F74DE4116Be49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD470F08E94259bBA8E3c0b83CB637E15d896E27E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe30Db1C12b250AcD85C78ac5E40510C410abC902": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Dd3F3a57A98e3c673744Ad9D1B9Da7AFd96f4fe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0C14B646CEa888b58f6265614cea02219DCB291f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC17C30ff3c6A9fB8cA42fCCB974C8BabA066224b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6673DfEF0ce1b0Ba9BCCC4373D5Ede4CE12039Fc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ced7d36F4B2C5a32B2927817BD009e7e1A4974F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5F068AaCFEFc3A8a047A390d654f4093f1bdf65C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x810f8Aa09e9e3f1f77eEe61ca3Eb7AE85808b59d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3935740aac0C7EAB611EcEe993Bd0d11FE43845": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E826Cc1c9f60333C6d6CAB9A294C766ce01b2A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x375b52A960642Cc9bdF5404412450b934d0618e0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4765609A84A1F13aBad4e3d70dF4A6d5856c70AB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x820d131A0532797C1BAEa4bd378eAaD9A5618024": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC8B0b4Bd1A759d76314EeeCD212FcB89D862553D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9925D8054db7c1f5F5A9dC2D70E416010904bE92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75e04Cc0a0E9bf1739735F040eBB52fd85Cf78bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b615eBF9045e7A015672d183FcD1A4A9A84C17c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b16B40f113349587cE744e3C196085A60F473d6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x596Ba74A37684bD9516a50342165A61446585D8e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5EE9b5C0470F18baEEfE36D8c4DA8DC4e580eADB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0Ec52403Ca74EBecbBb64a02bAA7550b3eEaF7bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x676bb38C6C70E8D6B68b54007D8E2791f6256b24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65a012AfFD8AC32C9a5c8fC97D383de16e7dF1E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x083897a7bCd62b82CEB054Fc939Cdb13136f0f13": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDB46bcE3408cA4cD3cfaA7CEb121f679c13f88eE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0EEa261426e0610C69921568C254D457C882EDF9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE26f1Ec65D9526Da7C8D76f4a67E5f296E26F47c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98000f240f63364E5849e32F9d14f1f5733cCB26": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f77A0c5015DE4BdcD6126EEc78278e3d97864de": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1C37a2DaFd8824C618c1571F14bC0bF381f8ae7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a70b9F030Fc2Da0a2FBeDcB5040f5992f675c40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5E67A1aA062834a621568df6e6Ee9e4AafcC920f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9597C3F0EDe6B7f7D69a340de865E60E829d969C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc6EDf61f104CcD0d5B05970aC4Ed4C2A8790bb6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48dE181811e57A46e8418Cd8A13fE88F502d4aB4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e05455a4aC6710fA775E7DEfd028bC557f247DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24DF2a29aDEa0255A978C048262F6F0D5256c78f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x754fd4B6d458aA5d4c470a3cEfD20e7E5948042E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7615BD06BC3195aD4299f2cF6f630535e4BF4eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1948DbDF972e7f8cF536000c6396e2EE46DA3B04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfB299adA3b1BD0D983F74ee7867ca42E68e1c779": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4d1ffe982e2ef4dc5fb2aC85fC8b34523A6D531B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x980fffdC7C1F91834C2752464e40E111fF11BB79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87DAbCfE72125A79049d46354dF731595a4DBC78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x209cf51d8952DCa86d36924B68525994A5E4674a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdC97DEE77A522315f288db3197a0802Fb673A279": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ad608A2d923451cD4F19bC39E986C45aFAacE6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14D9BdC2C87a526649462be31A310772086889A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19fa643dd736427E78b91a8982525aC162b890C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71bfb8031F56646c20CFB862842E9dC5F1162ee8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE40207F3A8234D58CA30d572b5f28C85Ec0f0EF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7110eda00d37a20D41FE9fc4a5580338ca57bA44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc8703E26550862E0DFCb9ADB27ED7a62cd7162D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6CcaB3C06bbcd73A8B956889c33E5236D850C43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x559E2eD7bB9FC9aCa24d47F61c9d32269e98A160": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF42CaF01afD2Bc1FaEd6610B82a22117497476f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dA927B17F45a4eaC7bBe0A95A483F740439A915": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x245407c29a29D99ACAf25557D9DE5871fa217001": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58ce7D2b62570e7fecAFA9548AfB12B312C0cE70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82466a963cE2441DE00623d83136895D32CFcd1d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAE417614DDA7fB748C7c34bB1c241692b91ae852": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2187F349561dF26540934953b70E47489c4F9783": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73bc37f92396a8bf4FBeFc7D8fe7913344D36366": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33757219ac4775B3e3E81B6d0E053D5f770ECbeD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBE1ae2C71F384CCa7d0B506F5c2166DfC33d3dcb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52b4E2C41222882c1CbC6519ce4e3B4a5A0b6841": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf2d13C49ebCe7BA851d7e9d059d6Bef996D10bc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe02d99d813b952A9548680D3C3e132842f73136a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E8EdA3d91D50d0af6b4dC987a39DaBc0A5D6506": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c4Da550d6a9875d78C36Ec4E4DB655032ABc36D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54C08cC64314902b6c80C8f28f0b96Fbfc25e21e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40e5b28211c2E55F8589f200e664eD95584f8eb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0EFa887eE2804B2D9F3827E327C01F3198992c4C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4F4AA432cbBA04c6Ab90Ec7ECc50ca5f28Bb77F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17E33448B40D5b19169840D2B8bafe988e0745a9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7711d293dd96508bC476f629501ee2c22660Db3E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBcA8f0d158cA3600C457DfFCd0012B5AB9e2b21B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b73e69fBeb4b4110579229DbBEb48586aaD0F1B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa5727b878DDF21B4Ccb8331E0D38423E6AF37dbA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20C48fBaE18602cdf29F3112fEaCDF549351E6C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB8100A5d3de4e5dA3506B4b8D71D0Ca20Ab790F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5681b5A25Dc7ea8f89fF933652dA855053f39302": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Ff6AFBC176965159a97970aAb9048C184F6edf7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a754f76162e9f28B75583F07Db3Db78A291a915": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76c8F3806258FB6306A06c8531d67664F2684D8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d7A95C4f6a28B9339F4eA0adFd40b7c6bC8E499": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x149fFA1e656420f04d273CA1D9759036fE64dC65": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x686F14Ec33b1bCfD40672baEc71AF993b9522293": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE3aC990cad7E76F704DA58fCA67b9bA7415CFdB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1400B82FDDD3c27428A5fbAFb784CBA816861DEe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f5B7ad7feD96C51F39D360c05d862593A9EcFC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x843dEeD8F4A017aB863d6d5a044F5C040f3a4692": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5aDe16Dd99F980B8526687A678733D32b9d6f059": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66D50A87689fbA41b9c942aa7FBF3Ba1395b91d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeCa94432A404A1f232B9e8A1B5e53096a9D0D4cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa7d55Cdd48C5376bA1080937c0a2Ae01F202E02F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7bedf27a1499132E083c26dCfAF96D1D5A78F3ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x724186d0C9AcF65bA3335573b2C81D8C9ddab282": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAd1f70fb535dF67f18E1fb47fF12b4b4461B3419": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x420429c0ef8d86b5351C72d4EC92eB03c1Ef265C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1654B10f586803e41C0D4cE9E1A0F75a7Ca9B98D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf543ca33060972EDc3668fb52b5FdE2ad8090386": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60747e058c40f9D60A9340B0a651d4Ea36740D6E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8eaC39817AA7A1072c6e81859afF383f534A4105": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1801088BE935b0Cffb00551D465518C77C97250": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb61ED12f4C3704E1a836E885AF1407b11e3e431d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b8C1bE0FfEb264081586f5Bc49eaC8786282940": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5844c616eAa7C35dfC395eF57eaA2fBBC91dfe81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5E403F8Babd4aEf845ffE441602E072d1fC91136": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x107c2941Ef7767DaaBA6b28CfE2C85e88207E15A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bC6c50B8D38c850778300A84513Ddeee9179088": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD461d3eA392609f17F187145D8BBaC8172C8Aa28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38140E35FDA3F160ddb06E0637488a3E174ACbBc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1Eb9169D7D386cf404590e74Faa4De8cB58258a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc304B2DB3a3d21a4CDfF05e94f499a431023D94A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeaA0d37b9E7616799491F0c756b255F25d16B646": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Cb3a0876Bc051596dd7c575dd34a323b9b61106": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29DdE95e4ED3457a5A97E4Fbc5CfAA3d4b461A18": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2eAe56BE1533A1f78D05059364187CA680A0c506": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfCd6Fa6ce7F0d572990a9Fe2Fe63F16E390de012": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC6B5C4Dc30F4F0697b2Dc85591ED34D4803A46CE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAF174C62393f18F6EEA9AF11A9752F82771EeAe5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7da8aAaBb8080419bA604fcF102f75A9922cadcA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfa8300A4846Ab6eDf272A5BF61374A53Cc872ed1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc8734Db9E2CFCF62acBb131970aE94Db0C772a8A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x236C684e8424015f8c8c1E308E7eE14a299e0DD9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF19F2fD99a86327A3A8bFd583a2645D936C6A3e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0131f2091e555E994F7e2c0E78E3AE8749b1CBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93B8B552A6b7de7A32b40a6154Fc96b3c71E07B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x913aDC9c72b6996B18fe057e22fbAEe33897c3a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x88f573eD553F6F182b524D99c9B4f3703c351CE3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43bfaa06F33F277109571c5445c7b3E7eeC452F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39Ce625C059b2E737512850FDEbe372B0d61eB9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51c626aE5758C07eD2b628937dedA1a0D09B6261": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb990f570f1B3d3d7b5bbf188119D16089bB25c72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCF2bb6cb68C7A31aFF0516Ac7dbCc41B8BC310c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43E3c50bACfD8C1A99ca8A4F6Fcbd55cEa4AE19A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4E1eeE3a53f0007Adb18931B52db9E3103ac757E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa9c986de4Aa6414bE13063c5A0627A459E195D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2debC2328a540c855484a3a6C8DE89F295C37A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8e8a0C22083fFC02357A5d0647A591b221F110Db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x059EEEdFe126FF4C918Da928a33826deF7402744": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42D455B219214FDA88aF47786CC6e3B5f9a19c37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x779677c15162419B30Ec8220236AD7151b872411": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x041683A2642344ce5a784AaEEeDe75e5Fa08df47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfDEC5417282F5c04A5835060C69519B7E9D50Fe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDa03120A3a7c67612e6D2c31b2b7498a876d2987": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xde35Dc8826D86421F4C9fE8394746E40a2BF67b7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4d937D71A0B679a7937668c5D488190de8c209F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3EA35425B7E3563A281dC6be65cA8c90D08F1877": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FdB24bb9626ea8032b5D2B02c05e2fFb059113F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x201f9bE259124a728827d276a690e06A5C75870a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23Ff4fBB437708BFae0A2F94F11Cd5bC27e93df8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05a703f545672C17218e3D7ebcF3f330433b71fF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x539E7F735954c051791C8d39cb79d187f9F6Eb81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fdF5006e050F79D2802D0442106bF828744d2Bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29A8D4D96e9138E5bD5670F6b7947896e9267B13": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7E3A0f710C0504fE07EDe2e042348831a2d405a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7b252516F2abce705315C3f767A9B0075F97aC32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4E3e667628bCB97377E76d473C7FFB2c9394b594": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9279c71c2e0c9C38aCdB253A8e36A566686df5a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4059F9ED26B982aAc1FCc565f9A3350Ce60d63B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E76E800745D5e6CC76E11eA9fFdE2D65b4f60db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc3bF8B600092650a76B020430b06B8e5f705604A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFCAcbac2CA1bC385de62f404a47B9D88b3E6f101": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6613Ee41BE851a3B1f18040f3A8759Efe4c390d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAe00Ad7463D7B42745b95B33137eA0416ddBA3C7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72538eeFeDf9D1a381bc7ecb74d2444CE7475CB1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdBA37fc71c53842c0E0e7DBd8f7fAd52Fe05F4A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C1679Eb432Be2d59548a8ca188e104159D1db8E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8167c61351073A874A9F8f1Da34fE214d2100C6a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7592533Ab4201D2ded90216b3037cE5d050D2c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x755CE5F31617deD6e41D15Cc51D8FF642CE10e9d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3D648c59109566f0bc10F0eBbf9100718E95B88": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4d1b9D045c743D2FAf90c36935B0D5505931Cd3b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe03DEd53a4CD6Bab75C92Dc8e9bC7bbD90b7F71B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6dA80bC3D3807148fC19f9893b690CF6f22a58A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8902CC62A40C264cd0dC5E7dA60AafaB1606dcC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00fE7c919D67a36A78c89F2AdFc11C4A9d88B76C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9b75D0b68b475f36c15f49b9BbaBeFc3c458281": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd053bA216119A067A4C5aDC956a34a821d338704": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x002b1e9E42505816de211119339359a03c916924": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9d28C5a609F53ee48f8374038d47811b18983e8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15f94245a4Ca9534Afbb018699c85F320c270721": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb8426Ff2981f450452C063e4942f0e09218C622c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9d37ba15235fFab9F6FD6e2001c93784A76486D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfCBC81E0bd5b43361b17173697Babb1f131683dc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e8c101BD3beaAA049E42b0Db1877C9c5f90b724": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78656cB8299081C4374fB8D081f30cB28Fe2f608": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x791dF79d5ad94271e78C6fE695C5AC42983F47fB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93559526954A35A690357b303518cBB331f1fFAD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74e4fD1Fde7ee919055F01125ce70721efCaB2e1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfF589102d5B5dA5977147413239a3481a4E7334e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf270Ff01b896a5c7BE06a17ADa9a6BA1E130974A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf7dd33F4AB790059B9CE53F00f8F14F39E10657b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE3cfb032a487144cbD03461a2a2b296A9f9E96b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdAD4169C8B59B6d564d157497847356Fdf5ac092": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4b70fD16f2Ebc217A242c60b20c8a59e16755bB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87Eb26E17392ba673E3bD775B13Af3B684a8FC79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5F1D42eC75074741Dc7B8956562EF9faFA1aC6bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfD4a6E8D21230fe448d411DB726DB3e0AB5cd6b3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9580e99605c46A4a2C45910E624533F611Fa254F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdFc92422d29ba035D2bA7612Fb045382B5AFbfCe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEfd90A54886f9D3632585f135b1cac0B71e4B2cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3ac0B8294ad1B6F4a6D656545663f60209cacC8F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7AcDdd5D8d13BfCcF6555728aFE5F54BF5Ae8E5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6309EBe619ab9eb221fC5D8DacADB2Fe4F889C6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9192a21b4e12a3DE2221BF97c4BDFCb5a95Bb25E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbe8B73AFE0d791dcA27ea1afCb26f8028F52Dea1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0e0e756672B912Ca645298Aa1726312A63D6Afca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb590827BCd1Ce352Ae4A7089114AAd6Ff29F8667": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x001DFEed100BC14859A337de5032ec3DbE36eB1C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66F91039549108E595A3936aC634f57f7558dDd9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc4B8FF9d89Aa1ffC67e636d14A52770DcEC62f45": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA67387d6688760CEA19DD2e320a6E1F24684aE7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7601F24564F3132fD612F5f19b6B8f37Fb096F68": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5001895e6349f0e37F08e8487067ecEd7d8DD23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb80E0371732504f76Bbf365f119769137f6a86BA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbB366173eD0b64E83bdb2fc31fA48F0F6A7cf412": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe15D8DC0519ba0e69296FE49bF7588CEb805bab5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c24570a39248819024B1800AE2f9e629DE1376d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x125D8585a465D19C0fa0156c0a860986b0d74d42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE6fFc6389065570ae97984cDe29E5ce1F150FA51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeb369022C2E2632a6CFBcB308b68177409c0e5Df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f5d217E5419ac51B3a270FBB4E8059c4299A79a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95cebd1650394b66f49fC7302f9a3874283b00a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAb8245FB683121B20876965FfdB41164c6FD8756": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8e2eb28b91E2A4134Bc896356dBc925849Ab5278": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDc25ea1C0EB8E2F3dC3Dd7c8a07E1d83b41fDD40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcEEfe31E9FC859a6C6bC55e7Dc566c65366E048a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe894A24C5823d8339Ea43Be889d975DB57D4EEc2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3FD8311383c90CAe13eb17441FFDC9f71a5ef72c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73C6c2aD6e276f40d15194CD92721d7c2d6A443E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeDdC4062002714CA4aA4B16634d151875aF0b3e9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68539F69667c76b6d35DEa93FB332042DC74635D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a2f1f54d54c5321dA9C27A05cb3baEe8d94197b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59481139bCFa6C57c11a892D77d0cc16F20D4151": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64DB70e8cBB6F1cBB04154A378389F51b5C3682D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7aC159f266bE93E67c24f91cAf18a42bE711ED12": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64f582318BBE4Ace0145007Ff636649ed12cDBff": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13d2Ba431846fce4737944B1D4008B0B256969a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8dB21c3F4EFb3D70CDe3A9764Bbd39D8c6bdf9fC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc250Da366Ee67A98eF094274d73B7B71e1131bB0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B4d9fffcAf0626A958157b288e48A282fa66444": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa74974367597159D97442ac54496f3F2Afd0f984": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x061663C4b80DFeDf8a1970173766A7F0110E32C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x503A623911095e2c506CE900B90Ae3E1097a24E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF0c8953df924FcC59E718A8D51B3baa29C0807b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x709f0Bf568a63ED28d72D342ebFDcb3b1c81E804": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x096c08408a86A5C060AD730B509aa61EE2BCbC6d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f259c90639421Fa664BE8A2C9d1f6d25cCba3D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC2EAc8EC7Fad3328F51466B0c7AA789E28D17416": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70015e62e7aA017d7A7594A51219fe4C276D6AFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1c41f4b0Cc9B1aDa7DADE18d0c2DECa6a593B33A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8fc43381d89EBdaFa7b2E0A8479F37e97b0b277D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6A4C852Fa867544b0462EbA736Bc03421127f48": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF12127aa0e1e165793c7511F904c011Cc24A8C32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D87BA26aA6E6f7378d6437AdD3A16cdDF4f5A7E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbAD19E37e23Ebb8E91Ad0B7BfdBC193F4010ba2e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d499824BacB2E045b49D5bF6FFb8cc30a569259": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e52fef95Eff67d04fF2F1DEF9819A295bEea770": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x853Fc277EC612BBde4f69deaBa852EBb6d7f5BBd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x873D2ddC99175E7B82ceD021f0b29050eE14eeDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43d41e511F0B98B959bA1f423b630f31E11f11cA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x728f3EB85c904E75d1b658f7264Ce845aD965B52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07A27705eD393003Dc066160d2706394A5B96d61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe877D2ecD4a646995c3fcb52afbcebaB647A732d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x014208c7C3C4fC25ca755567ee8864742329efB5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc1DF8Da79636716E957B1894dBB5cb5A8AeB62a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93822a1D799FDd43C206034be0C9cF84724049c3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeE2da0eF62f230134b4bA8cF4221975AF885B797": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC04be3860e35D34D12995F36D41306feFdF63455": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2aA822D1B91D0D82C6Ea9c3a0740f84b619EF858": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04b21287ea720C0C9f491B21A8a7B687cEe77892": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6289e145C78D4c28459496c25cd69bdb3E715bc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10e3EEE744F2ED92b38413145868419AFc82BE41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0801964739CeffC59b3390DDbc851553C7585EAE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E5D174FCAc4e06949b7d3f82c18EDC4199DA0fC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDfDE0F3B4e533cBF46d30E4a97946402dAd04F28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bE56342FB71Ac706E87134e039C7E61B5278079": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0Ee4E6D826e94d92A24CC4ca2e481773Aa724B25": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07d084110eC4Effbe165292CC249fAef89F4720c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3DE62a6374742cE05953767FB24A9F1764D2771": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8F20AaE44F6242fD32Fab01E78eE96506f91e57b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54356DDA1D00A913494918859E8936dBf3d7B659": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22a06D61630F110A552147d9Cb93d407E30Ed8B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6058aB417C18cFb1Ae17Ffc80beAb7172A83049a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Bb729e2C82Bb9024a54c5d38fa571d1ecF8289E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfa74C11a96c937D2Bd9D6821C2E75C98A70cB690": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x225964311B7dc020ef0F981fEed4285D1B685ca7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcACABFafF911d7fE25247E9aB6b8C8D19E37F21a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF50120D2c245A530Af7b0D53b361cddF8e3B409E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40A25b3C5eD876111962dfEFdaaEe426c8fbd789": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x082C44223bA863db824Eaa86D707e1e21c19c878": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x504f2284A7fE2dB636435fe654d23DD2803Bf067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x116Fa052D6Be17352365f78cBBCc4610c32f8182": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEAc902Da57A1E4EC5941d0c8d2A363d274B5AE15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27Cf11a70621690371fabEF536408E9687aFc38f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBb60cB422Fba4dFcF785eDb06432fe5eB0FdC51A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE74b69aEDd6B159FDef0370BA911DA7409a590Af": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96822331D79AC7e4f45E83dA92F0335555FE8466": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x956290cae406BF01a4047035f1a8975Eed11D1E4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4F1B83Bc5CDbcE3Dc933022501Cb277dC1894593": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39Cf2bA670396BEFcb894989dea401d215aDA942": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA2860b55082333445fc2F0C6F3f3c1E80d5751F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3fE0E17D58C09404C55a9f792E62227e8f06983": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6145882f8Fc4388B7Baef6f9EcdE8dF83065F5FE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD64cE7ddAA9E42C715ED6bf0c976416e14Dea7BF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3578495d34A0f32Eb144c800BFC6fefD7828982f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x392ADd568C8c910d480D549E69CD86630942C0E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77b51054262FAbFA05C7eB573CEA28038CE535A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60ba87b357Ff0E8380Fb907809afedcB765Cb54B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f5928C0c6DB6C8e09c53cCcE23F589d1b457333": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF4C390caACCb0B92572328cFcc25442eEB682fD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6249cE46c4593cA7912E8b5E80dD25EC3Bed56Fa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a6EA184bC940CDd75D500901bae67b3FBCDAD9E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF26e9E6DcC5B14b93C7B9b0f98B24108fAb5818": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x415F9cB3b8682BF1748452812e9FE60440Cf27D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f8A8ba81d32dA0Fd84ee40e9019Ab2BD82465F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdF3b03c0BF5355538BF7eC9535dFE593Bc6c4B43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55CD6f77ce2E803FD49623dC5c09a42aDEEF1840": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9e13Cd95ac011a6587EC54245A16c5333EFcEeF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40d6D9adf9aE71A427903a26618247cDd0Cbab60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC54f4a560609DBFEE9c6F96597b861521802774A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87e9509c818482E0eEb9251869303D5ebd237396": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49C153Ac64F5B620D2c864DE9081d1E1a4a7df44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAB2F4075FFc0AeE5ec1b32f61Fd660a348388544": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7ce2Bf0d26148f8CA5501d22EA98C62bc165fC5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x525F6FfE9718524dfCa10c00AeEcbAc37B0c6FfB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4821462CC328EF4cbF926fbEd9697eBf8a565b89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf39CA9e29dbe35702B21D1d2B7a42B95Ad8EE8e4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA483A73315d5e130B46f6C8EF3de3C2dcd35714": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6444c8B19638aba814bC794C0eA58cD2e179d50d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87605C060b0cE7d18C67fAeee765E2d92050f459": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA9C65614Fa718CfD201721066A31EbaF1C7Ae609": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1472d1EC24cA685f3704584315670fbdd2cb4e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4FE38170E5B1Ae39a59c1E5314BB5CB64B9FFed1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb530d5A828a0D8664Ee8f5944Bc761ac0Ba6CC3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37227Fd3351F34ccC647B95e43b6334Bb56b2BDE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa9abE4810a2e47C1852D0570008A6BE9D2F719e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b9aed5Cb3934Fd831Cc84E40a1987F006F000B8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3F83F54AA5ad97CBfb880cb7E086AC5e5c303b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C30B69722403CC740D30A1FB551E59f81a2954C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x558a9d7Cf72DBd49052D615A178b11C38fD22650": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaaD98aB328c928d94Ed068ad937bbc09a3F79753": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41Bb607B8Dc98242EEC3c95584418706FdE4bfe9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E39bCabA973984023897978EAF19Bfd1c95412D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7aa853276Ba0173C5F9fd41BA33C0A67068cF43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B8989A7fA866c83Fe40423597C7fc972575628C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDe11B75525a09C4D444eA8ee57921a4d5fBf702E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4730eb54a065a31b407607e2dDd14fCA66A0fE6e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f197e77bA45C7852D2A7E3879e787476a936d4d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d9720eBcC4B521147C45d81D4a49D6e58644025": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8ED4B5d84a2bC0574094499074D2D00Ca951f538": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x588Ad37bf23763d75eb2B33D18694fA8F292c486": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdFa52349350144d306af9b7bD69B3e9594b6A4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA9209e0B6650065dAB92D5ecE6C60945544A7997": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeB08058a37e2AdEEecab2148df12895F311c3e61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57bC3Ca2Ab93A08062aF9017D35C96245fA0F26f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33118c1F28867d185d41b5634ED33aD176EefF30": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d9812347f55194d0C071e384D059ff78fDcDB2F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa702a1465d060263D6070c83f1AC81ac80f65DD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20ABe68290b1e0dEEEf4B5E09aA5D862D511D9aa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03B7d4F397F3EA07a3A0959B63077E2eB24f954a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2889f8b764cc5519C6Fc2780006965c35fd44EFd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6d8441F832c151349f0C1De3901Beee5839563Ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB27cc46A9430aF5047d853aa3de8fad1F2C80486": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBed03ad2B5e1ba98A9b67b4f12b4C5FEe486d40F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7aCF59b3Fd0D4B70ac0A96a8ca773FA0a793Ade": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F914fdc79f2aAe5B33A5D0B27240134bDe749F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x043969ff3b18b57aa273264fB09E7c1BeE5Fab39": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5bAA688DdFFA6B0cFf959A8FA06671cEBa330A20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06c7aA5625571F50ae39ff4f72D7808b1EEa13d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdc75Fbc4dbd72bd3F82e43E48E453381d6F6F6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC8c2C0329FA96Cb88D3fe903Afc473A820d3581C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfe9E6efEF101b8E17d7367b081E1D64Be3CFA862": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1491119314d67455f50ab9799D7bec54EA681DA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15D4BC2D5bd1ef7Fc46a112f4da12f7F1626F433": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEa4B4242f2915bA771146C1C427B2d44C513a445": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x44F7D684401A3C6fe7E650f2589579c6F47FE3dE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58D00D09A5df8697114ce8347647B1CFC93253E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb7521e177b4C0324CBb022e27b339607e903D593": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67b1FF96DF1d0923467A5d8F972d0533C300cf43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0B24a36ca239Fe261BA74caBED3B62A36C215D2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7c97163dcDC44BF7890EB3239B938E02f1b12F9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1448a70529a705768a6890E9D1D81f9779561cdf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCe1B114d6Aea522b4bbA9C8677b46fB402E223ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69b2176Eba6cD2654298043f1CcD808A1cB82DF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38F44E9a396C45D8D13687D0ee2B3cC6F39826C7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x350e62847Efd61Fbf6D4569a93BeDD2D5C530170": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B45BcB98a28e48707DbF1b689Bccb5094a97A5C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75484d72e0DDcB858c1771A26704C13BBE37CCb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf829f2Ab41FCCB9168867eAA6Ee0ff19C56367B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBf8C3989D348b9B9e584144BEE2eada26693a01a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF009428BE1A9a550f2d5DB7e49FF439617928097": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBA60283Db86f9fB7F16c03fD7a79355708739530": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Cfa0A0b4BC50378769372962d7fC2c94D5eB929": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x773647C7D04501fF4cd2A4E359C03AdD48db770F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D7d75FeA832c709829C9390924F7Bdbf35991E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59370435391aFbC36997Ff5774100045c02105dA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x052658C0e56C1ba8D45401d6b2eA032427E2Aab0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x95c6f877097112048642a07ea2c98884294Cd69d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE06cc086c3babf8FeA8b08E0BAcb4030F9AD5740": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe8bB7407A2A675F2A5A40e39B09C872360F3e571": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe6468327D24d1F19Cc1093a75ccb0aB69DFEb62E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCE67F1933b69ed0CA1E3b4DF1c2C2286Fb643Bad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe29786A93F37E7A631DC3f0B315928A9083364ed": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCBC7416FB4a252DA1f07a3F1Ab8175a35E897bf4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbAe81DcFF994a196FDa5022425C92ee7D40Eed7a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE161663eDFd3cbC26E237729eAb4fE88c193fCAe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4A1B479eE0a90E3720E22eb51d74aAFDbBcDaeC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x519A54747d42ffB8Ad1cA8A36Db0438679D34aa2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C6553f0c8f75c2746c6B6d4Dc5492c2E9b5Ad4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x224BA14C02238fFf93e5902FFa550Adc55ad33ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42BF007D2837A93825B4e43Bd294cf854967A9A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x061eA8E5c045a2A10a96d089081710B046DA1e6a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x837fA98272ed6f7E4bB493dfc664Fc7589c95934": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB40F96443A59C3bA6c47A9700c299382dB5e7979": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA4EcB643c6A5b6bfF5eA8CDcd2C2802e8642b052": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38E3cA0988eDD369B8725214e094A463348797c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x743E3deD7CD4F294544be62996364c27Db24BC6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc0c168A8B4D516533008A8a1D17be20f3dEeCA68": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11414661E194b8b0D7248E789c1d41332904f2bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaD1DeA5b919E13Da54482ef0eb29ba9bd8DBc4FA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16f7A5fedFE957C950bA41039133CE0BFEcbaa79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd355511aF9445882d3398D8dC22fe9D78273aF54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e40c26E1C788777c7BD76418a95649266d65DD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45DA549856896a4F2CEb02d7512C8Dc41a6f0A86": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa1Cf5879522f566FdA87C7a3850B7d83F0AdC55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDdB5DEc686a9dBC0bE659b553a7097523232C777": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E817382A12D2b1D15246c4d383bEB8171BCdfA9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3453f0a63f72BEE573449d446895C805920A4b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF22163A24BB35916531C22da0EA44ce56AEea2C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4C2b8dd251547C05188a40992843442D37eD28f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe22c86d319875A65c659a65667988441Dec87FaA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe5FCFCA8519154aD9D73893E381Db99fCAFBF5af": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54b04cFD7B35543bcA96CccfaC0a768CBB880bAb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x89D6eA05CE4dcF165cC801287348Ae81dcE5E511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x574795F73AFae9fD16DC42bD89686B86203921e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4530C72C1C2E8143fA0DdEc579eF4020D5543cF2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd1D65C4C6A1318140F99521c4A4129e4be58aCC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D2Be688Cb203Ee577B6bABbf84B933961497128": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72261E972A5A958d043f1Fb8B2a4Fb162D715898": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC02F61E6b2dE98c72DC67FCC1974f97341f777d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34241Ff275b21fAAFCC405d20E9C264A775ea5C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA1fB97AE62F778f61EFf54E3210A3fF83fDF6f98": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA004A6edd7f640F1b4DE345bd6e0c63cb1B2b092": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Fb0058280611B57E7fd96dc4bA3616bD0d29806": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x986c989A5265E9eC3b8d9a37BD41b2412998006F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49E59dE5DBF06ED83116AfAA0570Bfe13a8D5bA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x528935B9889780e8FFe3B3AbFb614d31718D9965": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0766053F1Db632a0b29C5cBed33F12eE2875823C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb69e4B694a62812b1C6543bD9723cB4CC001D91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6D9a105163fC67a61F0A4D1d5c4032A1E51501B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8E5DE30509a7C6e2Cf39CE1C96B17c1028Ce6Aea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b9100896b556Cf3EB01be2c7c368F263771fE61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x381DCd13738D9347b84BC5fd67aCAb6eDFdE341F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x375f554a38A66D12f57c2E2a5FDA5b062020b0f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAbd0C2cf37661841dF0C842764590f133A1F6233": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36Ba357C27c999fc0a686a6B5B553f134C770A9d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4B8598bC8AB2Be2c69e65594b1E518F823939e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAD5d12d71DC6DB8ED6111f50115754078982415C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9D7A48644e1dA98d5241e0b26dCbF7995013972": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5165a4E25bdDc813e595Ae963f6CB9FCc4F77207": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4f0C739fa3C9fCb577b7002D8C292f2078Fb14F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE93086375044D0ac07ACb498BF6d8B25bD53FCB1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92f20eA9a71f5DBdaA161171A16Ea905b3528D69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85d130a96691D74067cBbaa7AA32bb247FC16784": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1992C0DAc6Ecaa27D07633dF09196C6c45210130": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35e683D062490Dc9244486d271A9B8de2E3e1C9E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf8627F3849d60421D0F5978Fc7685e561f7F8c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A5515952a36E60128e763D222ec41a087E4423e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F9692FfF5Ce2C81737f62bccA101a7a7bC31c46": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0681Ea1B25dbeA82719b7309F80C7635874685b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCad92Bb29DFF2B0Cd101C8D677E47f9aDc3f979B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA31a1e8c5d6E325f0e5c1882B5200B955B3e30DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32e73D646C0F9EC5BCFc18DE6F70d4304e72bfE7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE828556a57d75cf439A5003180CdC8161a838137": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE469cFC3Deed061D38d401508A0638ff149CAB9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBa4624b03043B21F5D7e1506bfC5C9340c38be64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF427f1700b07d22146837D851213aD2aeC3807DF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a3f00A013670BEcaF3E51B5DB8c0A530B5Bf08f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x649Fc67B3f798789734bCC750C6e370056b94EAf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6a0c9A482fc762D5496185261998Fb3c706928e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01cCD75b739eA68983C53dbb2f30F47f7370a352": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ed4B701620564869Ad2b1fbEc2b52D87240A990": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46706ecCb18E5220Ad1B85b362169a744Aa9dc00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f0d15602014f5C551F398821A0Bda50696b9189": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9a4cB63E919AdB3132C5576048ad40Ad341171A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f49F87A75e31080FbF7FBF538f52751b5Afe829": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A52ceFecc09C9D60B300117Fab3795275d01D4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4183b2B7651521Fd453Be8e75269FE702Bb7721d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D5B8EE06d2f8176A2b866ae0a9773208a5F4B58": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5B775fE6cD248458e85abd122b50C6102bd06868": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77f167cDC43b967658EB8aE473f94402c1672986": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x259F5697eA17b6Aac36677aDeb77290f6162d6cA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F620D7e30e7C76175b1459158097F6531b3988f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a0dC12A4bC0e04Abca323153171e5AB12F11117": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D9E74aeB88F07A99F7828e89520029f91b36162": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C97DdaaE28448a51e1856424efD7E16D2CBa3cF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x88902117D492794c19e16785369ccABB65475c1d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf35FFDa03B930A5AEaBa8D9b8c5B559fe085d676": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9e3633234ecc2e2e2816b6a94132f6b2e49E4fb9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A092e4943FD3b045f8A05AEc3e56C82e05a173f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98757ef6865414Cb0121b3242f97D78fe12f9a2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73C27b2542a3E7481B796a47C95759B4216a4bd2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81f89a3878638f497598d79c42F7f4935D0c6A61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAC35b5e59fCb88FeC8821D3E464E4366A82CBA44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6899440EE02F541fCbf4684A762F3837e7ECae7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E06ead7629a725Fd77F8BB2D21C93588DA6B65d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1257D26064800Efe43aD71e4284c07D14d78E4A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39AaDFB93DefC465b6Fa3FDb409E9B868f6639eA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x471D696cC52152CFAF0f3071528D6d3bC570ff4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD09d42e00C55A7E4d24FF55CCD812a2CF0aE4EF3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbd1931F023dDDaCD57B7175d342F881c6467bE11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x066EA6c41058512a16e28685D628b2D666aBc88D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1079778B3F805b8030f5b9fEDc52E92D65f70cE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x804c3083d6565426a35482611a514948AbFb00Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1D1F0E5370331048Ec481E3518fA92206af325C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04c4a90801d1ef5aE8576A0A5bDd8EEAb362a644": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D00ced4D79852748147Eb74598ce56836dD5563": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xab2035D3b57b986B395398714743289e974cA568": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2283F49C88f818041B6402084ca22778df4BdA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x611adb9C24482D446bfB562C87c6135d952Bf171": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9E3D240FfE816566bb4B9d981f409Fdd92343bA6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8a461D8c7B7f83249Ce904B6AC5Bd543FcBcfbC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfC8C19E6f71af8282A307b9278dAEc7AB5917964": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB76B88baadf6a33544a50CE755dba88C8e40DE64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdD65C5E9d1D4124A4730A9BaD9BA5784F9B1d1EC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd507D4Af71088BAfbf2eA0CdB6962694F850DE01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa47d3FDD0EaB701a5C5fEfB794E538273f0d25d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17D3a75B5eBFc4AbA3F2fa0833bE73905788D847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8272786E9bbc769135344f21b98586615Ea2a379": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbA00D84Ddbc8cAe67C5800a52496E47A8CaFcd27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeCF37Cf863a1979C939b458b6ac149820e3182c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF3c9821FE05b656D32148ADD93671DC1b53b3928": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb458FcE9B00E79586259E27498Ee26cBD0e1e6Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCA2Ba6FcCea3aCD02f1173653E2AF738d9eCaC41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91A22a39c32204e3f75F2f5e90FC7536BbC2f42f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF846638AaB987d031c79bf12703500d8bD5963A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39Fa9C5d71A0eCd684B6Ce62c5EE897a6D2874d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b82602271dF9e355edc5d54476A18b3B1A544fb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D4888499D765d387f9CbC48061b28CDe6bC2601": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c36e66695c38598A08B15e1C6bea9aE0bcf860e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA39642F947518F417595849BB614158998D054B2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3185EF019BA1C04B8d65eDB64c1c34C3eaE52271": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D76E1A176F4893b30247D5cFd451807C2a7d54F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C4Cc4eAD08221A5b3FbD8F5E20b4Abce1b22be9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d74E7aeAfb9dB4379B72f310D2120b485B07065": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5915ebc0bD2729b428554fC783B9B9B0876286F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF88D367DcFEDA5C91A1B8C012dd92603b8D58467": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe63F5eF0297dE25EBd997360C112bba05C5178F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Fc6eB776fA1795DE8d05c7E2dCeda4F7c63cEfC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16174273B883ec5b2AD3bD9AEea08E67A2711D0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3721c97E0282a1FBa7daB91fD570813FB4E9Df2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x566C6599f9Df969819B3d213B362ad5fe6e39975": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E7aA15C7f04376223a03A111e21401228824DD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x977bc167F889dcd7A6eCe301C92A059DE7B1772c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D03216b776639c7dbfA2089F4D8Bd00b4E79D54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x560D03F2b20e9047714Fea87Cc113D95a3fc7179": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38E5d5239327F1735905057647bA8137d194bc48": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa046932c87E3972807dF273bd9A936eFFa86D163": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75Ec476B1D809CF1450Dd7530DDAeEB2c21B32C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB57CC94Fc53b28fB42bf7E869e460d0ec5FBb32F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x703adE3D59A79a2261A818F5787cB2cC437D375b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A0b54D5dc17e0AadC383d2db43B0a0D3E029c4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbBbc0Bc739A46DBe6f0ac768d2d6fd4949ab733": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33eB60Af276F573343BdbeA5A514e22a0bFe9514": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdaEf56Ce18eeA40C40BfCc12Cc80fe110960bd7C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d8b05E372e7E040394A558D6A5210ee697DAB57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x088b5E59Eb1109c3b0dCa1dd905298409ECDe83E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xccEE88812Bea9Ba2820afA1737E25771988D57d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x465A8228594a8437014B092f65E925bC0473e6FD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C6319eD03BCD939921A4b5c46044C2F56e507b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x572bB56D7F23B41A507d07E02f2C454d378828c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2eE347a9055cA63ba207CE5701bB513f769A988": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66fDc765040E6E2fb46816169Da209Ee72C14D3f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76F34d1a4535241eC054b49d969bdB37F444eb38": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0da04083f712bd8431037D05469D6314a0af7A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1DE869688cF52ac2eBC0E789c54d492615714438": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x123aEDA9e353a64ee46fBA894f6c631db9aBe76c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3Eee02F8A71992546889C7F22D759B2f6E8C2A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57C191389cb4cf776830564e35d2cE3C5b744531": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6fD2Ea15bf02b1669DAff86Cd157e181b478CD7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1189995B5AB3745C806d48355088183C33C813B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD5908c1C3b34cB41f89EB5b1478D13c55eE22060": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdeB0dA5D7c8BdEB7792c8Da952dF187d67b2c9cd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f93DbbC5acE2E0Fac0647EE55497F9E994D2450": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x791F3bbB14a6cd83d36835cE90A1b4B69e7fbbeF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe869E83bC68b9b5Cd72a1c62dAac6acBb4965466": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3267c7cA67667ceB4A1fD1Ea89275DB5aC8b607c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2010Da1E3801d98110a04bFefA1c7720d6a572D5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60aA466Be00Acc37DC5e3b89ff299331907Df045": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x101d015Cb6320a74b0ca35911C80c41e44cd29F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe49CdB7f9821A47304b9BF98cD10Cd92cD282e3E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc3A6e9F874E048f0B88BB8e43c0F38bEd6905B71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71535AAe1B6C0c51Db317B54d5eEe72d1ab843c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e3aC6C1927418AB5B5B1FEEA75Fbef94b1cdE69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD492aFF2A83d9B73EFBcC29C707a6756F6905e87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60Da45F8530042D06580F45a092D014B52aCdBBa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d9A3B477a5d85f945973aeeBB438BB20620e074": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC8D86F5C950f4eC0B7db7A7238369784D87D68A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x638aF69053892CDD7Ad295fC2482d1a11Fe5a9B7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x744d6b531570951a8A51622746C796a3Ad86B4a5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBaa9B493bCCBe1A900b39870980f41356f85822a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd61FB49B764194FB30d3D360774692dFbd6263f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e53187f378E1C04Ac3f349b44c74D71De310021": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51C2A5Fbb0F4362466B0b2c1FC0A7ee2686D9176": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa25b152FfCbf927AD1eA80269889370326f9186F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c5E42D8915E20472079ec483555FEcB3EFFFE84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB75500721D659c44f07dF306D168f9De01968DC3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03feF62a00c67520e1f77F07e34a8e64787Ea2a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27EF5f1Fa276E8394681A260F77208ccD0305013": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc063ff5c81c5B932E6dfb7ee9841456266C5b585": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc821cd39EA427d701e5A76C75B8626392086EC18": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7eCC768313dc3BAAD238600A466d7bf08b028fe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa01f4973d8193ca2534ec8467c4eE308b0C5cF80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F310c961b2C695A418DE85Ee5B18DA2D96493Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB5a3E180CB7436EfE43eA2e248Be8acC489d0eD5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34A640A430a5DC2bD5187dB98bE819985248006d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x209f9c887d04A06F61710e4A2B1f4dc3ab1546F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9AFfe964574192aAb6DA32aceC63D79b3671bE4b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfB93E3927dE373ec9915FeB89b176D428808DFD7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x026bc5E126E133Ab2d662BAe650f6ABFA2aD5d6e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc906edB65fc858F80FAA6Bb38d3f6Cf0E54D866": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f36b1Ac2b16FE18C784dc113DEb789c0188166B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38ED9BC1a1E17662CafBeBd359F6E9122faB7314": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA893d78D5d4014B6Eb2eCDef97c225890264A5f9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2EE3300306c156948947a9c63959e89d9d60824F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aa4243Ef5fE3D6ebe375fA6D47A710266Cb0CaF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFA4937670686c09F180C71a9b93e2FfCC3A79F47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x508C27BC844990f219579470EA6B7C9c44E226Cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D8eCA22730D06b125eDcEe0EBcd251693659faE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC850CBEA5bFCe6CF15136d9920261F054A53d1E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA770d4A353293385C0eDB30ad9519a1997b471a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1fAe7DAb3A21DBE307d4EF3bD047325B5B63b17E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38ca8396E04e23299635Ea06fbb657e2a4e693c4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01BB2320fAea7f514B790A04812461112687bB19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFc193599Fa211539D85B3925D62FF351885F112b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1449507bAB28b616149b79078C0380875ab28E16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2090F48E26a758d52ad48A449daA5c20C8CdB30d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d345c1DCF02495A1E7089a7Bc61C77fe2326027": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71D7138C14C34Cd9d6e600D3Eb2d615B805C7761": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x837D1b20e21119Fe641DBF369F775825B51b2db4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4EC7CdF61405758f5cED5E454c0B4b0F4F043DF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Fc809baC271a2f6a7C61AF3F3ADD424fbc0935c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB9cADd85C510ff5a4Fb2D2bB6fB4b74ff3aEe34": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91aA505769BceA5DCa318e2a2F3A1095A804e865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35fF7C02E7B58DA5F4323CFCbcBe8969E4C638A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD749a274d85040ea4eCBdb670505a7679070Cf4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1ba529Bad0303e368cb58673E4D1aE8738D6449e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA0efD27acC781549D5b78e89E561AA0903932d56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC289403317518a547e3920f6407CaD72B600f340": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6741c05958bb9F8436927309E92F286E636Ee37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7059dF82d93aEa2a02B9b137a028749526be369f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D915AE1e48A237e97d34C1853320F1869C532D7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe345b57A27145685D4945872dB357CB453a238E6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa21FeD132341f41c7f96Cd9A5CDb3965bc0b74B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E2AdFb70b077318ACbc94A5a2C0421D9f0775cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45E2FEB81BD6630c3b136E489674C8B61170eb22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x645147d317B5058F8442C77b0F1b42A3B03d0679": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63e508F44A87051CF7A0848330Ba2760CCF375B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78A7B3846f6B0407C051aef02E365a76cEF586E0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1546B970afC85bb7448B2c50504be0C4640408dd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08b7Ab9bbC3a07cF7f75b4aCEC5b536b7e040Cfc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x243314f50bF9A5172Fe44F580B72cd0895280691": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC69e8275592F10a7ebeF418F8743A12e645953F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1332f3755F48A9C7f618681ae3BDBE618Ddf65D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA69C61c28932BfD6181A37F4203A0919614F2761": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8226dc65d9EB3000895E47fDB40A42b06dAD43B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf89fBeb1D803A2e2Cf38e32a0E7187890Cb67A56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6eAa0dc601a4C273856fDFCC51E4e4A6E6c44559": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x492261c62C8F0e1783b6F3e60D5C03e2e532F167": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x126ED947de7b84ab29526D35CEF99C9b72B285A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7F6bad6Fc716b889F84a94fEE046188f08988ce": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x766Ba6581319429143098c40290fC1595776b8D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa2edc47F1659dad8db3027eAEc3D23273E473D3C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf66128575d8EfFF079205BDA33A1CDDc7E82C72A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f108Bbd7E05cb6a360EFf8ff77B4e9D098a51Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x26A89D6a6A9470ac84734658A795e66662DD4EBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA3Bce8C3c75b290E420130369df037C477d34a45": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb8dC5739b7024ed22E00447706ec5F3DfFc5aa0F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x969a3454ec5DC48D11802bEb77218A7A8744a9dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15c8857A10c732b5F8bbe8AE351Be8704a81CCd6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ca148bf94F6DFe9a36534ffd9D78dFE58B9de57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57A901Ca3688d505234241d2D6F5a02Ab41c0762": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c7EA81Bb46ec44720AF326a25dF1DDE93BC4B87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B1d11143c69d7c361582569b46fABCD78D8AD08": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCf7FB3AdC0A9A4E6F7Caff2ca8C365325Fd19277": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE02bBf8E1507427e07D9F8063a8FFc7d37309C89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDcd4FE2842612743d45a3A66169E9DBA8038e60D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE457134dB87f4246865882a7E3835AA84C4b8D6e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39ceE75B11596E64f8516EEaf3E17c170442b6f5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9dC9597A419Bb3D7c727f57a53a45c39937ee61F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7732dC4f380fdfE7041d799A605473578A5De58b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd1b1a4BEe37b861fafabD05E5F306A862b94D037": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b2d94177E937E090307DCe76C4e294aE889779c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbCC44956d70536bed17C146a4D9E66261BB701DD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c3467E55ea5367f383aeBeda2A68D886A5cb944": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f677CeF6550Aa3972dfC47524d913b4e78D6a29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFD7bD29E1050932829c1FC080eA42D7394C42847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5848a1eB8a10AE88525E97559Ca007618195ad89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x133D93566f9699B3Af46fE150daA8a67a9563ED6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFd6422196C78E4f05106423B6dB46c7DF6c63cA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D3B7C3c9245aE2840c96F0E49705E7C155E36a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28bB020fD8d73d39B3e2C1c49990102A2EeF3eDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dbe4E37Fc0147A29E399d25c55f9cE817dFbff8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14a967d549B6cA6722d5591Ae118f69Fe2E8920C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c1FB03612E943d2b7cB0bbde0FB3470a0e633f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52f300747aFE206Ad2fC35863849c4A0594635B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3a8Efb3a57EA4fFb5b3B2a1Fb1D16C804Ad235fF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6BC3e7B5010f588cfe347473c610b9a5d363e140": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa09e4F96e5ABC839ea82946f47e79AF93759D3Fb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A5252ECeA88672002fEE4D6141e8d0e2C2952e5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa294A99A55F03b2b0A42B4388eaF30FE4C2893f8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03B721075A42103bD560aEB745Bec088c540124e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB31b6746478B80402eB055f3F55Fea6df204610": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0900404261A24027C849de1a268BDEfA8407A9a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D8fFd05c3B56604ef791AfdEbE4fC45f7AD69a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23cd04A4C2deA3CF49BAF61c04AFCB4a23acC573": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f31bC9357f34e51115E232Cfb1Be525AC60B82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14652DB5C36325b8FCA22cf1325a8eAf121CAB9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB0A9d798f7c8028B0e467b913a02b547D0528C4A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x022d5912C50F0b2bb08C52Bf403BAA51bDb63fce": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bCc303a9170a830F28a57Af7C2757c1FD1714aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x276777C67D20b25172f683D0Cd56Fd46E040E885": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf42FD5F1f398c8EB827d65BcF67007E89b992008": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0eC8A702B3012e19B1655A77724eF8981178B259": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3AB1c7848B48a2B900e16D03a7B91D0e675Fe38a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1906Bd0244b749381e2974192fc581Fe0DA4D363": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7128fA11515ac9985F449f02F4358C9018cD8cAC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98838021D6dFd264b0FE6b6c7b3cE23385A8cFD5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcD47ba0aDDCb12081a7Cf0cD6962e99e8ABC3FCC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8C7864111e1e29ea89140900aB0b997be47f1bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa9237190Dea4a58b5E39f88cDEe901b89ad6662": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD80775766186eF44c73422fDF97D92701C27f70E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7dEFcCdc77213AD10222866D9F2eeBd9a5B8Be70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51F1e782FB7eDeA34389EA47516ca7c31E9C073C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x913F2E804035200E7dDF33C2AEA922d6D5B65021": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x481797F295D086DD536e22D36F34E8116F8F0985": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38913De54C1dbe16E4079bb8A2a3E0973BC63D0a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5e46A8ecd4f4f0737ad7b7D243E767861885ed06": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD85782De3a7bFF8d30B8f7B7ae4fEB6Fbf0600BD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x075873d2F1342828d86E47c71B261e6a33044ebE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE11C94a5F28222001bE49D01f5Bdaedf9B9B0620": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6bD616DD6c8145e2151c378dd443AE15222CE833": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa07ae4f9e2D41715416ae074c7A6fe857693de4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x704332b1c8051D112E5Bbc178D2bd2414842c240": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x183034EdA5dA3CC088C7326114B09A2A5e57e044": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3cdc6F91d41F1738e8E1cbD2A06F64dc6Da5b0c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f312DBf7d8b5A86CCF37024eF69D79661e4fA89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80cB01Fe8D4E5aCF333C2D3dbe0A42357a391A91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12c6DE027b16D59dD449cD9078E5f09E9a77A73C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe7661Cd7988C3a3f7B417ae10cBB7afF525ad921": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75Fe3943a6C8866e1C41e1F35c74A9fB7a77b835": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2124ed5982e1d3384C4800ff57B9f883b2e2F47C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFCba0693FC16DCb2a4E8FA7eD3DA31f5296993E4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x90077550db8D23f3825634C3497AD3a594013137": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa1E223A5eD88e272E7B652AE898701cea20993d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2Fe95bA46D36e6Bbc8d3bbC6BF3F18c85C91f3aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9c2F269ac049c6D2C3f893EB5465F8B33E561FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDc5b17F7e80Ba5f2C06E9d04bd202d394165E093": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A5fcA2bC2F971889Cd51FEe0bBC1014D03DCcD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD892F1cac31704C0f4FE586D142238E933945bE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFEeDfe9c2aCb949Ef80b0fa714E282D66Bd2f955": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00DA72BA500D6e7c5DBF6EF79fF90b741d6d053c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEFFDb9141B8fAFBe36235aBbC903c6D1b924BBCe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79e96fA806B9b688d366be81Fa618dA49c6c5685": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf48F679B60A4F690613D9695a67933e6014f9b43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3CEFb79aF1F4126DC679D52f5f7458A25CE74B42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1436267A9814316C6ca9212D38dB060bc365AcCD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBd48dd506E9179a757AE229d04745476ce6C2aad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x632F93865823557466340E49BC120e3B668A2C2e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4E003EB4382d35e1fd245E7793AdAe3fE9AEb1aC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1681CCE61B0338232B80AEa861413A3D26880DA6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFae01460fD7Ad6b9d6a8ae73c14aFb2409B48B92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF9cDE0Edd06f05A7f0b412dB3B4c48c87160b5F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D0036a91f8447F7d28B6d3AF8a8258688a93896": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf78177359b40AD2733432e593f6e0F730c6E5165": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEeC0D28Ec4eb457033DBb3B1Dc0F27b45F1e20a4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C59816c3Ba468759381B0bAE2FcbE3A27027488": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5305095cF75CDD312C202e27F6aAf3CA7da79A5e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94625BE060D1E09698C616a5808EfB083C769166": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7fc361edA50DBB5Bb03aCf37DC62A7A43cad2EeD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5EDFCDE8B5e43EcfE382Fd5855612b3bf611224": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x861051050074D31B0fc8682D0C383e6Ab01DF0eB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Ad2bca0D3316bdCB8cA5135671Bc0290E24E6C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6A2AD1320Cec227f24f404fcCC120B71b41757d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68820E5cDbDBB1cB131151dBB203d4fef563Fa4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF4d63BAE0aC9C6fC57ECfB25A1E0077dBa6aa091": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE33e58F056FF0f23be3EF83Ab6E1e0bEC95506f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x658205D6D9d3bb93B4463dF7088dE4BEd1D3e88C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA38e40797fAA6EcbCFa4A64F14c7622d090e8a31": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD2184C8954427474e04a0894b7d126c9da6e755": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F8f7Afa8314dA4dEb6be2086601FcB084A30791": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAD6C9574a601fdAD18ecb0Ca7EA2Aa08222F4AE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09c0CB705477D94F0c25D9e535D58d75eE8895A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc22c41E02952a88cAC1Ff34cd707360557e26713": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x304fD132F9CD88A53E432F79A04FA2573Ec4995e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA641475dA364ec7F6e964Ff6E2400cd14e13303f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D005c2514f6507A4829e0bDb9F2957f0cdaDFD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xba3a4398A4646dBaBabE2dd342138165914f4F33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5709569405723E366656c7346A2Ad100D0cF03d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9C9BE1Ee54b1842bA20387aAfE867796FbFc365": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9F120BbF6a096b3776FBBDa792F27565A2c4A3f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01f96D72AAE9AF89C055B7588c590870836f65f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x86D0f719Da3e41dC34c41b395c0AC48ed781f1C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D640D6d2CaE44C3192a70Dc1179aA890484cC7e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f8C7dEF38b418DfC255f08f390476285d578B05": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74726c43FafD8f9C3d50A9F63820bfB8860F3481": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x078Ccaf9d0B60A5f4ff6FB3BFdF54f0eAB9c7AD2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07E8617796E30Ef3Fb0E45B59446E28fc7E4FBEC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19E45bDfe8f01cD24f62381Dbe41e8f9fff58C1F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd9adD884288d623d14dDFec402E4493BAc9f4F15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x394333707d70Af2Ae14F6B422256b4D74a948b4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69eb356c440C88a37931afFcdD2cf316fE30a79E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf010031498dF4886a99ef659f830693C839E7198": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x965fb931ce14D8210053fF90f39d00F443FCa7E8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x798e9dBf975BcFe74Be0fA3f9f3Ed24D208F74f1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEDb78aB669Da097dE99D82df95d187Eca20F7E47": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1f3050671ad54Bc0201BbDA76A2a7880A64a1E0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC73a01E10848881F3c4FbBcbd3252151204cf3FB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC15e7Bf5b20e19e50Ca097862211dAfACae196b3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a2829E0E388a438a0994c02ebca077bf1aB6303": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDf8BeaAbFed67Fb3FbD3d9Fff14E2e176AE10e17": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57e98f563309996b3648ed398c761aBd6093fBaD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x258214591AC4572399FBbae9f807E159e69B1Ec5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9740D5Cf593Aabfca5598f746C072D73F5408A30": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34fBC236b6a76B19eBBE138cB84C6C63C3A85a23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9968eFe1424D802e1f79FD8aF8dA67b0f08C814d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33Bd7e2d0fBA88940FAC57091d09ba8E9982960E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDe2C345fD3a921222Af6C3837728C0E628CE43Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x473E2F6E83924E955926D287384d5879EaA3eC12": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDb89f642E287175B6139372899178624719871Ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAE6e4C7A07F2a2b7690e101a9B6BbF86f856D970": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10AEe62e812103d361380dD94246E0Ef3a6D8FfE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8312D523e565B418810dEeE43b28C5BF89Be0e1A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35856dbE75CfEDc4A14AA88efe1f90d87706E760": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81aFcF6Dd79897cBa488471eCEc2f41BF3f7CA9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x479322AE62348eB17BA1F2aD0BB52852768d883A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7650376aD17592801bb2CC73BC08F4e777DEa7F5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56A3887c5326321A39FE5c66b72215d8f5B04c9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79F6c043669ad90a79Bb2CcA3B890EF3A54E5128": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFe57DC4B1291384a56e5d90fDc1340b7036f3767": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23Ed05AaD698cD4bE7c9c5F2C6F8c04ed1827793": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4288E54710A478D269E51cf72689fA3d42f4cA0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0B0b919Cc9FcDCD0B2DcDA7ED844584FdC00355": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0adD13cDe4C61734f46E245b1B5Fe3AfE9b6bC29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68e1176f872417A9b8081C516F1b1421e9bB36aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf14F92FEe5452c297B84a2971bfBf995440e4061": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e536E5Dd61DB8627388c0721e8d5F823fAb2D1A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93C1FDF5b0d5bE85099A80beabADE1328783F2C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6ee569Bdee53AD43DfBc9417FDbE932DbDf524Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xec5021815178d72609e6Da42b6B8Fd457AB4699c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA8213ad427CC7C16cf6248e0653553bC3008A191": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfffaf54a65eb198d704ea8C0B48eeE29679120F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf832B66AE1056105A48A310143dc49dEf034061": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x938c708De2bbC63A4e72Df7b4d2Ce1da645f73bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6522E32b435c79a9eacFFe738bc711E094a52725": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf4cF8a63b89A456e576a45e6c1419307A520f8FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c0AA6B70CbBC5550D0a9948eC50c8d973F8E802": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5576e77b664FC8f064a23402050AdF088ade56b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d1f1BB15b4440968B51ecd7Ff99582c59Ae56B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x113d21e5E2B35Ba08D0A5c826ea6850eaAdC28ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96d94f4549A03411DcD60BBEDCa7A170EAC644D8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0AF4dA42b7D4F0b92c386fb44b4Da451A2C22F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2A3E6323DC5A05F07420FfA0282b1461B660a55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAc0eD2862eff16F3FBbd083f2b44e2CD4ff1D381": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x699fec4921001c4Aab3b6810019BDbe87C481F7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e448909Fc3f9d1044DBEF478482A5d1d064EFE0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc00A397e5328527734D5F44638C401658f939819": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac2251f7c1c18B91Da2Ed7F186d2A5C9E1Fc3d22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa9ba74eE20917211ef646AC51ACcc287F27538b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Dd8AFD0338510eEf17DB0Fb4F76B0CFAb9002D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6c91E8fA5225227491255415bcb61d6f2D18C2d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xACCb019890BF879d19f5aAB1db068057e4CEA0F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF24b42D4d75E7afAd9167BDBed1B6342CCD54494": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12845Ac3Ee7c93b355f4fa95fc77d8A0FFbB3602": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbd313d514ECd15a0224da4dE050C79E2CD8382aB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc8f64d227c715aE078D642C0e3a15D44FE7a48B1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42Fe01565e60D0687Ab793dE8caFc1e8a39816A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0d6e23c10C2C4331264c59e01A5483a22b1d543": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13C4A327De6F7E5aa01bF49141Cc982Ab1f87316": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6B0F7e747C23f65E1f99617B379fe69b56Cee32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99093FDAbdfD53Ba64B710801433795cF1216dc6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe175c44341736349fcB4c1498eB27d77b96d7Bb3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEEf114D114f1947BA4a2979159818E4171E91D14": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81477d5014adb4B4a57029c848B3df4a797Ab849": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58502052C920EE837c3Ca71Ccd7cf8cB0457CA9F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07a1f6fc89223c5ebD4e4ddaE89Ac97629856A0f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeE432D08d766a8DFe198c29a9b68b7Df422c3a0A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x47C5700674C7d11E4213D5d8caBeaFA849469995": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f2678Bb8EcD50B65714816b4Dcd5fA24D67F978": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAbe6D5D0F96E2d407318bd2563566Ff4F17cfC76": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3c2078d07196837e3E15Ad61f1Bd12B84ddEa47B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3E1127272C69A8A743a98F4175abA549c2721bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05388b4a5f5D176f01157Cf93DB3991ce3EBD077": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32cC3793f3103f72fDC40f04F0C03C019eD46638": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x554eE99540949C14cb9Fa64Cf00A09A8047fa747": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5b113cEEd63a4D92820FD7eCf6fCe119cEC75AaD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ef5Ca1A8724B0b01D1D729D8AcC99EDeD068c37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c0264Af1c7502581ecB8aa261E1a9c0C7CCA397": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x320Eb9c685d069F100Acd17B64d90b963C2b7EE8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65a7C3Cb6d1C3cEf361063C57936d9d4c9D7bCAB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc690047a38334d72B7fac68AfA3D6aA62252D29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xade53346A42BfFfd0b4546dE3F83b15f24E6ff7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85312D6a50928F3ffC7a192444601E6E04A428a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe36DA3923724ccaBBe9487E4133ba43d8509f1fE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65ceD347A006B95C8FA74Dea8DE4F688A264f9B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FEF584AF9FB31411671F721A77b9d2a1D1C3e23": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x325eBc81dEc49b15b22459D98834C051C5b3E09D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54881c1b56e0E7a62a3f0752180036976435b891": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF602c90E89d5fE4c7D2AEF3eC84e2dF880Bf2075": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDDa40f30197C903A43525154Be3f1a0aFf5A1D44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfefB81Fb50FbDf623B1523BE3bC4E52C7d6d5353": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ACEe696E2165e33c578d8956cbCf575e5d631d1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x18854d2816c141294AA20A5317CA58EB69AF5FC7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04Ddb8ed83C1cbd593619F55579B11CE8B29e3A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F74f38cD701d3f6E8f6baCFE29DC65Ce7D42d34": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27F8602E403B6EA18f8711A7858fa4a94ef3269b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2DadD6dF80Ff7008CEDde37aFFeC883655480Ff9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00C512d8Efc7Bcb786F97A0F83B2087eeded25A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6D0E6ea70a666f8fc525b0dcF2e09C83D27a09D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87C3953E534f24D30e5A1361ce404063Af43983E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0000000901C92bb92C98DF004bE56D37D1604C93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12E307075F20Baf6B67F73C9017251818F7e5d81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0A5418B84b6Fb083c6a57C2a304C9fddc592090C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8AF74a55936ED855a676cb93e839Bc4A1d307639": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4eD7A3Cdb17c9a3363b5c6F5AAF981EE2DfF43f9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A45468c2B85A969Ab3999f9b286da9bab226709": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xba04F91807dCB266d0976F70c6685B63A2E862d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41cA142B14757529A5c8988252f1B4Ea6b47F7Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x765CAF0DeaB530c043eFbc494bE66Ed1c238d324": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3151d8b3b34aA22287d76532096eb71CD9E50A4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0168459886Bd2Aa322c18ED0b209887095aFcACb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB87ef7588e58728885E4Be915c0749E33f1D6A67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57356852964f83aF7b59cA1cE9fA0EE8ec0eDcf3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2ECA89d84843266d271c98A1e11D95b1CF002765": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43374601caF79d672af8eF27e22C378Cb37048bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa28e586e24e6d78d05e822188DDC118Ac2fB034b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0CE3841FFf2c2489d3231fb74269cB90FDD86883": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd5817F09469D9F9d9FfC54592959238576Ca9bb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58fa1983f7E45dda5b681f5e860B008e796f224b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcd4749e62Dea7EbaC7e8877b6B4869A4a6748143": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d2217979Df6C832d756830869B33D5014e596A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3629035803867E65f2503506c948D3ee31F3Caa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x200CCf3eb57f40D5F99FC53135187999F780c20E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdfc638BAf130f8Cde8944d36F36115c995D5618c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5aa184B1D8bc72022B36bd724bB723E62148ff8C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf55893F0ae16F8867F7a9c7Ae47c12422FD59943": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4683AeB715092fc0442532b4De476EC56ea1592": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0206Bc8FC7C1e8635D14F73c0fdb035493F2FD84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fAf276f6E3e0b10213f8A04BD6C872f8752949B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79EbBEd5297daD97020BDEeed99b317C840f9d22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69ce31018C82CA3D2d9E4C5a6D83161B4320f9e9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D85B56C459fe2AAe459B1BB0C36b33592998d0b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9AEba50C5d0727D5bEE2D71B10ac98E898d416DF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15A3F14bbd9a1D2f6472f0C6081C730F8AfAb3a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f7B1afeb239552Dc1B0DD13a9eBC8d9ec6E079E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x166056AE7450135b9AAd3b45CC6b6625F78BE1a8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaD6ED7545a32ae8B005687Bf7db1E882b53bf8a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0988D84619708DCe4a9298939e5449d528Dc800B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1F1163c6c0a85E91fE60f8DD5d1a7007DdBf95c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD6f58573929d44b95248ebe038cB8cbf48a48d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x608b10b5CB5154132564e1d415B116dEF66A3960": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdF4f0Ad809b9476FB90475F728aF100dEF5E9678": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f46E479555d93049aB0FaFcbDD8C47bbF67901B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCbd20e9A39441166A1e3f45971df14c3c2d87479": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x206A428716a6D27890210306AA2af9cb805C7B78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x386eEA5d7e85f19Ee162D7C15B385e896038756a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x942A79202a94222819466594D6a0854cfEa082Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3B2A91617Bf4f4f6468ad3f225d57f4A967Ba38b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16f86449f135CBD16eD5119bdb66138E42B50B2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Aec24AcA614bf525D26087AE41ee3f9c7B0eBEe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70aD81d18F2838b8650D88740d8E337032c9BaAC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB68Dabf88e221fb4469928bA1ea6Dd312a342Aaa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4A669f017c74b1F6890846FCCCA2F380356BE107": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E9ad4e3145d2be858152d9608FE008f8D1EBc5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AB9e31F358fCA6A43F8392Ff65aF2592885b749": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34224315D978b48686242cEE16E4fcCD3aDdf952": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb987b8c5Dad75e631030295fA23e697Cf4486315": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2BAA98f2bD4F5CFCaE3f3a2e2eCfa3B1Ae9d04F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D04f4DF74438b21B3e7298A13aA9c316b47C632": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC561C9b7035732B4EbDbAe6aC43D6a293aB53896": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7267db34b6072080923F92E626C2Fc5DA91fF25b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFe3C6993920Ac33bA28378A9f92e18De52795117": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdd1C90A381B759FCFc4E25c7eB28DaE80A01a8F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x795a76D8180d05B7465351a83Ee5AC3bcEa7f836": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9DdDC6321304caFFD40a2F848123763532401DeB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97DfaF239e902071285a72Aae5F1812Fd49a491f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f5d5c850ce1fE1Da479B4DE9de336CF3C68D2eE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Bcf10D5bD8a0FF835221dD2a9C794B435c52813": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93a4a366dE322dCFC68b629D6086C6b19Be4aECe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1F507bE0F25fdED2b4ACf27C5b3467E61477C39b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3a58489C18b759BE1c282Ef8885F70cebc2f1F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC04509cdc603589e79612576eDeAe16c1f00D2c6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68b53Aa18D1b8437B7CD9524040C776E2261e06d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a8207adF52729c8BBbd42BB0E40155AdEBdD101": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFB09D6570A9C1dE1b22367e46932685E14077dCA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x195dC9FF8AfBD22E176B6705e270586B6D641Fb2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf49B0c716c788d4F91e367136c814A7BA6A8b7B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfdd7C88dB10A4e099337A09B1651A7fE5124D88f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D62F1d6b0D829F5bCF177Ef5C36EE4b53629CC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01e45E43a093453Ca6Dc018543063a71Ee1f7Ba0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56a7a158A7C0fD45A2f8071BCEec69F3b1c912AC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f9fca3144B194Aad5572bC483d33726282c8a31": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcac63Fdd00e0fFC5046eCb80197cF6C51e356737": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb70524bE392B9f4681eFfe0cde9FdA3153DbC886": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7a781F490927cA1C92AFFdf15f580A9De317EE99": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb52ce4240900D3a1A4a6E1286E90272d292dE4F8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Dfe145B69BA905Bd774f2e51cc0618F1d56EBe6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C50849d873CF92F04F0EE7E624B384Ca4Ad586F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2973787DBDF4f3E851Ab420785FB6bf68a84fC4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaD99F536266E2aeAC263ffD9556d02fBb37558ED": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x000000000000000000000000000000000000dEaD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA3C1831D7A56a736a0300B614a78206A4E2C4BAf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00001ef108843aB7c937974c54c42360da8F9000": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81aDFA0309A1629f68dB6A6cfF37a1fE68FFdd2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd636cC1dE0163a9de320FA2Be4465Bb4E25A9694": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42598d735a4Bf52878f18F8a299F31128272Bc3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0571467fe10285430AAc57627F0Bd1223a909865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCd0ba640AF5bc02bDCFEda5dB547263A2AD07232": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7985653E99D5A7218FDfF738eB420523a205F21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe26E2466e070BD45C6E159010dBE4445FBba46d0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99ef210F7d6e92150b2Fd2a114d2f013001E9022": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D3F2735904881EA4f1E1097A7Ce07e503FaB0d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x526c17b64d59fbDFC50FA0fA306683Cb5Aa8cE07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x042b863B999827ca68311243210FbBf22210dD9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdFB6623Fe1eF1974EAD1D775bcaFD45A5CcCfaA8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aBc16e919C61D5863b34F920dfb4Dc4a97bF036": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c4061DAC92AE19563dEf9F8728Eb26af471FD22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09Bb1B41BD79EfD19050Dd62AaEFCBd4a96d895b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5423D3177A9F07BfC1de140190D080801c68199a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6127cb39Ac8e6066C469aCE0edcC3506feaAbF94": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7DA220633dFaA2dD4eF3e3B222e836a2E23A496b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD6dbFCE2d957103Fc8E0f66c7d24AC2B481E913A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF38DF4E0C9029Abd0644B9F01C0A5797656D3e7e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9FcDC049601f9dff3bc74b783aF0F26E15F5C6F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF28dCe94A86f64606bb80B38182C2962157BB2Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbE782eC98CE7135A056E31300a9831fA35D52865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Fa6B043DC07ac6081F0fFD1D62E937f5E4D63cF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4FEa52fb488Ab8Ef349e6f8f7d3159075B14235": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E4D8279F71F417A80F7A951DFa2bBDd2A7A3f2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5BBB655ce71A0655Ccf1762A6482fc54A8465b5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22f53AB05e84AF7D0Fb3faF5e2d58eC764B18110": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2D7C679AeDc71DCFD65Eb381107f8beb0F65666": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D2026Dc4ce6a25a596542829fED4b1489aa3D2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6946A82C4A2Eee8C3F3C9f9ca5e4fD5c6e415f6b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61d2Bb94d0151457102Fc32Bc08D0F1B146D54Ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdA4B92fC2A73Cf8f65fe043D3A3Cf80BF06acaEF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07a30C79D8E9E75417ee78411c34eD5F083FC5c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A15764B19edA4F2ef2d7F31f6A3fE59A04E29C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06D3da385a3802DE81cbF61d852b05c23FDf245B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf84F39554247723C757066b8fd7789462aC25894": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74Fb1010db5F44021904803A7793A204ca11775d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd30AB27542DA631fD4bEdC9FaeF5B223A131cEda": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x285bE47bEE9f9e4d9A16d9707c868EED10667020": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3792c198ED0c3C0Fb662f8d4d9Ca27544268781a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b14727117215d7E347728fA426D384A5971addf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42c6Be1400578B238aCd8946FE9682E650DfdE8D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7f818aea7A6E26F9c1ca96ebE980D39159DA069": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf8D5230E47AF11De499a4F8cF4528dE5f3f692CC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2D54033190bbc5a322cb93c7B36c65670D63264": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05A55847945b8eBa38419d8fAa56431566C79f71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3944a52E0F316df45B920CBD3D40aa8eb5E3D76": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75eb35c20180b5d2f661dCD03Ec7ca70F30867D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45358BFC9a1F52b6623fD299a214CDd88244cAb8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6C24783A22bb9A39F6317c24F9208Af9f539937": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73105075FbADe3896270A594fB5d963F5683C935": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF264951C9992BD57f6c0d9b06308AB92a21fAf4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1254D21A56CDaB81E1a123f582bb7A47d1be5EDF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B6010da8365BDFd89Cdb0983FB0E0f07eA28442": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Db5a7Ab4ef7bAD6b0153d334f69ACA563Cd0bD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a0191c323D4c6630a180690F22793E914209097": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48002B13dc82762372e124605c2E1Af7b43c3c08": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfbbD6e7d90C19b602B602731c9029119d89490FC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6BAbCcf93b1B8D511d9029D7aCA71102f35F30ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A8640383B34da0d2c8C9e5F49376B6d844c95f6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41aF90cD357748928c5e85e6a9bab4d4872DFF54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2805847D172e21fCD8519c7ba7927EB2111C920C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x061Be9A1e21C24D5e217310E479DbDBdD811E824": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcc6E17ed3E8dE4752329FC8228eD22Bb4a092533": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45376F3927b74d4625d5c1CE3fFf609dcbf8245a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb2a86E3051bB321910CF4eE10251C22562d58B5d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51a418f72115B30d092F2A2FA271B74cF21c528B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9FbfA9EBC8930158df2778948403ECCfA3E43206": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D979a82ED53b603d5BEde17844Bc86f3813B2c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94181fCf980FbEC537f2133e596b3Cab1360f847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78ce74e941273907164D449C7511ba7783022144": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x829A31859894aD2791F58ef165a698a59F1845Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE9E3b7570b65d4e4b9946D0CEa4653aF0D0708BC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9ADb2916a9c726d169C3740506f87069f4FCc7E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B47235150bCCcD6B51F60F175174dD2d579Bc13": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5d981215Ea25503Ecd34f6EDa4b1Aa4Bb6946E3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFfDe865353Cb473544b8f98965A9D1f284ddA3b5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c2c95ec9e13316a23237B0c21aA92A32a9ebFf4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD18B8d61c160e779ceFEb61d47600061007a6130": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8C2275eb9Ca4E6FCc2b52582faEE40C8743048B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x57400664F4543214711d9fcB5a9f4639DD954EE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3f2bb48E3365a558c8C3F45760504d6ff3B4B63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16EC5EE1cC431cA95de00b6C88d21D0B4d3Fc2a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6934c6dD16a5F629fd807f3B22374E4cd5D41387": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A90b8F8Ab571Ba5815Cac0B65a3D34127135D2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd905effc7204CC9e7992FAa1b68041bB548ECf0d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58aA18A6294b3Ad4592d8A3336aB78D8D5424227": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x788dc97cd03d04f8D1634FC4A82e6E3F140CB4e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA75834A3c8cEAc5863923091bfD07167b246FA2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd034055741d9627FcEB231f4E30cf03773949c2F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D617029e2413887DB9bB4702fdd1c39De570aFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x477bE27B2085D890DF293AA23BCf010363cFB2F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79Fe7B208422b97a83ABF30149070bFD7B096160": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDc232401fF59C1457123A1b59E2DA06C3B0C6102": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x827E301419d2eE967fC62C3223AbB7eE90651D79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xabc42b6a90C2A5962C1Be78be7344A7D05848eE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5B4C93a02B7264F5bCF6443cDC70728cEd257c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x280dEd1b7e430BeD0Cbb0Aace452Fd2ADEf2b581": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc1E5b72B1a017F7b837b016F64BbE4374162333D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x041635715c70ea53C35552Ee6d1fAF34b4c9E8fA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd99E28EF233B2B61020927E85Bf89d4bba7e07dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5665785813011A5c37c10972f8d3D463441637C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x689A416F33c4984403Cb52E4D200De4FC1810Bd6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55eA3d952cF89DA45272d9EB9BB45B46790c55aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7417E3bCdE8726908895152A8F3925a756b1894D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA4f70E0f3C22f70EFd9De62F96DF357CCCc4Ef6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2a231e4308C07cc69D5C4467fbE6a18b2Fa6Ef93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd64780b6D3685d10eb0f32A4eC62170633b27AB7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEcB1E78A73DD83C3520af55d1B6BDE50626eFd67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F4117a7d074A20ed06a145a872F5B870f3C9847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72Fd4cdcA6d93897cCabeE904bc776b6660bb83b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9ffFEbf54cccd2DFE9531Edba4Cb413b2A6C1Be2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f1a417e2dB2EC1183b9d91def83346ae8d842F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f9d2b26b90bF421a35A5B7150365598FCe153aA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22C8D09305D827F1CDF696D1b9Ee309227938F95": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e412B95f268f7f12c8EEB27EA1dA31C813075d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22347EE5359db71F2b8B5DAE1D15518EBe50Ff07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2FB85b488CbFD871f3c84C42Ca3c8DC11c8Ab9fe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D04dd786C88D31e3d2d146A3c6320c23A3132D5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8fABCf470152e44E01750d50f3631F538b8C5d8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FacA1A5Cb35F7259B8F2380466be0A05DD4d3eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8750543C3c4D4cA1342e20DDfee80B2ef7Aa1a90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x298016db488516E9FdB860E12424366f47E3Df2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x62501959d7D549b5625E569342CB93299f572B69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2DB6D8C600b3c55C770b0B821A975e22F88D0349": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2E380DBdc3bF0112A3d23b32ec56aBcA2Bbd47Ab": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAdebe12Fd6E08B5e7235ec07912f838db7AA3265": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0866f8D156DDdeC441a333117156A4fd23aFEE62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D62a226eEDdb698706bF0C54169c5FEE3F4713E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x818854b363b90791a9eBc29e2f9c7f1055ee5A4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9cDdb9d39eb98DF24F381fA551a6D43410A34ED2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91adb02D63c18F6575F59c68161B8a68c5E41C62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29458f736833e336b4209B4514685f3Dd98FB4a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD8aBcfeC16caE6E4beE297dAab7643B37e593AAb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFD1779090710934F2c381ECcA22B68075aaf3DfB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf0A067EAAE33F91F4ebb25e123334a1Ca8970f3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C888b5da98453668579a8A2E7B323f91E445f4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1beB509874D823e6Bea7404B2F2793EC8659f63A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCcD3CA7841EAeb081d8CA9289B7E8A6D6ccCC3C4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D6E610a671A3FBB6e302909617b3Ae2604692dD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56EC2cebD7b7A163218A789cA0f2826012721eD6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63C964dc8fa9DEd3510af5fBe5Fe18baC844E69D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFE0a42CdcF65DF69e6f89998764FC509ff3b1dF9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAaD02d9Cc52aB8Ac6CC9d48F9a59dfe514aAA539": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd70b5947d42B3b3FD09c922633DcF299f47E0d2E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d21acEB6A14f076dFBb3ceB997306C8d1bd77cA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E91Fe225Dc45567e224E5cF413f618A1074b2B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfdB58a3A3aBE546ED8f89d894A27f9B5DcF2f8AB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x060F648C33D7227D16c4f2B41bC95C5Ffcc8E0CD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x167f2028e2410E0A5C51c62F63B8c1d4D26f4cE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe21Ffc0C426FB963cc5c2af8e2166F31Ea35eD91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeD5632E56c526F3bd1B47d5e88d0Fe5d53315AF8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3c4dd566C5F9B441e59cBE4dA0822B81B9500afD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdB3641140585AaabC22e26C72F6cBFaC4dF7eFe7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3EC360c21218887974984dAFfC30480D327f870d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82767B4b962A2C8d0F60df6e4797D77aFb108904": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7711A9a7Da504edF800Fe80f7E52A3aA33DAD07a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x25eA6deA6CeB1Beb08453DEa701caed3bCe46484": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6708687b9F61f6515114440d59233dDb0fc2AF4B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbfC7235331682C98DFCd12a9319dfe02dB6CCD00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x16F88BBccF3a483B19391278bdc9444F46f8828A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0bd6Cb52b48f084282174304A434EB44C995667A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8E6aCea99357E010F3F88E3841ae1aa43D54e5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06AD2f93B61eB355e6e27D9eb8C67EF8eCcfA50E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf35b80b9e771E8082Cb9740DD49FC5f26800d63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE21D5E860E964fF9BFf3dA800ADFc2e6268ba410": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb45051a5EDab022b6e39FfC7d3291c9aa267A4a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3592f06364FB1FFC68D320795dc57E742297ef7c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40aa6b4479891C4bF2e5122ac90bfF31f4E8d324": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8281e0Aa17BdCA83611D038CE2CF0e4856Ba22f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92b39b14AA07C309317Ea0c1D5A76B2808Ef0ae4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6347718074C3AE835a49ce31e293860b415813f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a1d45542A6AaC01CceF66d2365b8fdD3532E4cB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5761774922b95084454c8720D647250bAD207EA2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xac552Ff53a21C170DD57DfA088d9899a07daD0e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2F1A5bBFCc1B4490ff5C3548bFbaFF1F74aF6A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc42946F225dbc07797111B60738583D11DC54f2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC90bDAFfa6bd488da7649744b6343e38b1f8a446": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB219f71958BeabaAfa343D78dc9b1F7AFbAddaC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7E17834f4aEf24F732DBb6f0D364ad5FDE9d516": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30C80dd3e2De2e59316AD23eA960d3b013e93499": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe41748B199378b03978Bcca18Bd0401578201CD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd880507D359af862A5f8F318c8e934Ab478CA818": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x212694d63a75124bbb898092d1F022f46FD0B6d3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6109Dac18db4911B3642D9627E207cC8C6Ee6c1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a4E4FbE8a951047bE0a7990DF46DD8Ee7a30B60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEbECc0a1eB0A05f3cE7100f20Ec6b97cb93F0965": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x774D7A81C0D8331404eAe666b5822528b390B276": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc75dbdF1edF8301d5Ca89fE32F321eCec034C6a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4aD330E8B16BCb8546f99239e1E4D95280C93226": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e403B969a64BdD1CA18fE10BABA4546957bc31e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B5B15d47EA518CA8daddf31F54662bB187DE601": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fA3A3872dd95f4Ca792059F9DeDe4a0C519f2F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C0042653AD001e74CbA934Dc38C7B9DdAb364AF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bCCD29e913321fF41adBc8d128a12500b688241": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x003FF27Bc2a5dFaEe60D6e6450C516531aD8A153": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3dA56ae97f5606bE726f100891646d36c01fCb18": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe601Ce9b41a978eE16F437c9184FaCec9153Cb72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfDC3492ab736B575d446d288E087aA69Be6c5b8b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x21a0B6Fd81ec697E326228DF279F9Add0D1B021A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43b8b19B0064936EFe96ed635089743B5167DEB9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD38aAa4f17A3948edE996d3D8eA28b55B7C6eE7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBaED8D4f349815568A9a36f45f6CC04eeC99D72E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1373867Db85bf48af9F3133Ab65097a1f561C069": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Caf7DAC35eAc81d73272ebB30408D7fA6ee4dC2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6D216c42324AD8e0119c5fEb495D2f174a03f04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x26faC14186e4b247eAbD44c7bee15e4106303479": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x426aCF71Eb49ca11C3273379ee5c44885eD5Cc6D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08f2E303CbAeED51376B8e948eD10ebFB8bdC1F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf5ab4fD967A8D2513d5f5749905045d433aF6a90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03d835696c36443F32d98F059168D086E00e6270": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf8B41B4EB4D746696109b151F65CA1EA31d3A7B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71eC583a7442B97CFd30B398976b019f10683DBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdb5720551425dEF9f5D766ACfFF33bEf88784d85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2C0D8f4FdF2F5F98C3194B4EA5F5c1D67bcC4185": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61CF430eEB4f75762C6f653291aC4463976b9aF7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeC8B371C2e20096af6e7B9d62e1EABC4a0852D98": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8E4d6f64ae10e74077F5DDa85371713C3aF3eC0d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1606c25f314165Dd5CC67919fBC149f3bd7BF9aC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83443bC737Af694Cd26fd961Bc13d5982292EDac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4a1332bE364B686AB1a1ADdC47287cFA58f51CE3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1100E400EaF3a587Dd06880acD74CDb2Bf52Dcd0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCC991b0dA1C0eC2e7634B1e92Fe581614b86c7EA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72DEeb5Ab757A53997b73086806d75299Cc7aDa7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32882c68Ab8832044bbE9b0e9BeB738f60Ae4e2f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5aa084353AE452e07E890cA42Fb73Bf9B2D86D5F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9aD500F5595C9DDA818c3C061428E37b5c9af063": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54fA8b5918B00f0e5024a2e5255AF61bd8bA7B95": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9787b0652B26A2916C561fa5256A90B04D088898": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F0A650d08c5e7077C9075691ce66dF62e269F2B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77365aE372B9AF3B41b6BDa51cC87090aB19d1f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Bf15AB74F6A4CFA4CF02E1a84521523d897e4D9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27019E69C37BD994A478fC858d9eddb5b6c72b5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD575a54A345A43EfF67F90Cd5a54CFb4C79fa4F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f586889ccd5fb7bFbA7D40F2Cc64a96f444dd15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F4518B1512F7162BB798d4f5f9D879f101B6307": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8667603B91ffa9ff958893ac095A688FD80Dcf8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0892eB3ABE97620056a6e13e3026711ECf5f33D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA73063743864e854135Ab81eAFcF29B9FC1e6ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x232E7d97d1A332cD9AebCea341cb2Fd6fD07f842": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB290Fd44A628A21FCCBf6347668D80dE4177dA42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD542363F17498c81aa07ae24140D7791640Eab0D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ae7421f4E2264CE3F38A998421a08AcFE766A3c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4148c36308021303CfbBbB46a47D7b34B2aCaEa3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3EebC393516D23413E9d529694EbF68822a912C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3AE5381de8f6CA9e672ed55a3cD802286B45C9B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x944DD180Cf568B55757CBBf3f14415E7f2be0d09": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x095768e52dC0E7702dd2784cfcDd919a04B6E4D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x610C02e213496259DAeF68d8413CF13ce6306511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x445FE772Fb15e70f7A400F32B6f5CC2E4bD30b84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaDf094b2B6D2C6f4d8e60f714Be005A378b26D36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2Df044d78017B06dFb41123bB4249174FB8728D4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35eF5fFfdd91D6e3510Ff617B3B862c42bfA4371": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEC2DBbdAbcBe84E83108415A00c700756266fCF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3BB649Ef4FBa1715e1B3FcF99D18A16b9Eea2E06": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaE86583bd7963433bcf2e59971fe2F6fB0cAFb6D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6dA31701A98fac38d0536E4889DD3149e4b961b8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2FE2D4362A95686093Cc24c58CAA7b239BD9fd2e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9be8e4E9D4A68bBdAa8DEcaE9f728Ed50599Be7c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Cd68E8f04490Cd1A5A21cc97CC8BC15b47Dc9eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc08d2eF573Eceae26e82A84b97A764CB1c39866B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3eC63E862D3421eBc8baFD5f467b29d9D8f3fcc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5651aDBdcb766dCf855eCdcc47DCD89e4A281000": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAf750F69978B59a32b731BC88087A0E5A09dF8a6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48b211039586619B04CfB3b040CDD12165e3a9cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1f849e31d11cF3b9cA6125CD4Fd93E566f2A9E3f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aEC5fcCa09c5c6310C13B6271fa1Fc405365F62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D18fC023a030d97D67Bfe5957d115083c8C4a49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6767A7296ea3bDe8c01A1678E0ba3BeB2917cc80": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b2161e13d3a8E3F4A13f9Fcbe31DA0C7a19998B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD141b54984321D36EE4B44bFC621191fCE95F8AB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFDE0c45cE2811Afe8A1eB05Ea8f2601AE3d67448": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x607f2b38E6d94bcEe160Fbba83EBB0Eb6D94d044": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3557E1f1062E233109fEa543931A59Aa922e8b5e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30e02545ef15870C088e2cFCc8245056cf7fe4aC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc75265Cc1928eC230D53914F3e9bC36845BaD820": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x736011B7d04d8a014EFdAe6a653E3405f3CDC720": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4a403ECc4e55DA801da79A6C5CB0B9fdAB87B296": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x805eb25D7C5e4d9446aC444F1F4eb85bcAC2bC57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4361a60C18c992DC8eDdD27Addf8A8C29b18733": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc9961ACDF50a1cAb6D80241E0D7505B62054d788": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf947173d1D8D208252650eE8b66DA0e600266501": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x21cbff56FCcf44E5af5e1fCBa465b440800F87EF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Be0cDbF9b1Cad6E6697fC153FbA56deA1bE4Ab7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4B0f861cA9455422fAfE7e7a6080F193B54AAa4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7796a7f85F5C9E27B7ae6DC17711D49906D42a1b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x874F3C782cfDbD80f440abA5C63Ad69DEC41A605": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE5CeEE154AE2CCe4d37f0Ec24D3bc8cE5B0A78Be": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3d4f998B66F0dbAfE5645D14f001e6852271Daa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13aef869b0187BA0d720C8E4de5A7D51D7B3423f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D06a53578EffAC9c148a7D1669790bF83a6944B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91A3054ba5A5DF8f1F6E67deEc46f99c9D693E4F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb94Be5cDf97401560507792E92c3A29102E5457F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1BF8C88C258789a10144d1C476d47dcb2f41361": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36a7CEd30611fEE2507F2678971867f4494980Ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3215D514dE1a2380B7fA2d5E605D24193323eA5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x515873ec96A03F27EB801f4C3BAF4088f91B9bE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcC1731bE4A6d2d6739CeA6C589aFdC54bf5495fE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa9fd776a50b60A1Cf2B872696A9866EceCbE1D3A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeb129015e51ee819E2A765B8dae3B76D13fAE3EE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09c40F32890805a99392819c02Eb5860b71825C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29c813eCf79631f8C54e669dD74bccBaf577fA0A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa7B80231614C3985538535F0381a2A7ce2Bb9027": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA710c069237DDA9ffB25b5F7FAaE221274368c42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf38B9784d7b2a6297b7aD7C7ff29A0Afc77F4EEd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Cc6360E0Ebf3835616b56B970a7440F19066ce8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e268ef3BB2B0eB025B42b7f1e93B9d42ea2Ebcd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xef252a2c56d61D5417BD59E2586aC0aDF3ce538e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Cc6cA38F7791D9C725a3a30C5F24afA70813169": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04440Be8b67D169F94678c2BC4834DCF3398F112": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x156fbdbA3a032751c6f7A23fCF68ee3B7ff3Ee71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB057C509CF30cc45b0f52c8e507Ac3Cf8E78777": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9eA0C4BB61096ade0638E52bf0241deA5c2424aD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd03D5D86a113de246bB8C063401554F41108183": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5999498C4EEDBa03a6D9DD8b52DA5470d807d921": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69374083e0A19e5Ef86F9DAFb2c007A65841Db1e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c904bf30F05732c16e1886e2E2613E8cA778585": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E6202c6799E41E444F912227b3E15A1eCd4b91e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5fb8B8d72A3986d9CEA5736675280C137b5e1F9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2FF162e2C62fDc6112d9F304B416fB48Bd120B32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3bC1b0c0205847b5fAd18758571bDDAd56e5797": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb781e00935CEe03C817c376b9DeBCdD19822b418": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d608992A8c260DA65e1834C4f33Ddadc960F9c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2008Ef79a7d0D75EdAE70263384D4aC5D1A9f9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7284BfCaD25b9d16c5bACf72783C8a16BDE5763B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFA13a1Fec81f66a31daFcCACE04Ecef65eddD06B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB759D5a7D230E6eC0b02347dEEcD61a662777DE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D5AA448e1Ec8B393f926a78dA64e60cD5d14703": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc16373B5Fdb767C5c10b1EF1668649F94F925E03": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8A5125928Ec63184EBdf2ecb5300D054085466b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2c0194cA72D647AC492D1A962658485D8Bd807A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbd0049aD63411d25819C200D5B5c2601eDC63A37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCFFC9c89C666456819B9cdd4549cc04168986AcE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa2165c20395F602B1bd91a6f311858386531ea93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5519780a8Fa2416b88C6E1d4d45cA29db101660": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x915D26FA87D887e165d6573A77461F79A3De37Ed": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x702428abEC56404D3045057462e1b43595ae67d8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68EDd56e13524C78fC15b7F1FE24C3F5b60C928B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4706a731c981Baf43982624D648DD5c4F1E6151a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd4eBC013f5e30A6FCe6DA0391fD5b84e2e72c93A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0E8EA0e0c73827E436f2D6fcBdd5082bB60460B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D7753887915339438207763880674c1C7fBb482": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13B6F48B7D831F875771EeCAc073A28eDA4b137c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9bFf070eA85902dE09e1FDa1798E9B805dF2975d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Ea1726128fe7a3De7f68b152d35276ce14207aD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e185636571c331D63993c7A1d0e8098321418F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B0b03631897C5e843d2572dA36eDA5F79E7a2C1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8DCd8703aD26a51d62F83a2A94d44aF87DB72367": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11741D1cb1657DB35EdC8805eAE8C4911CEe2F71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1563547DD0c62A802779bf55af1184E65BB1a6E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbdF4B597DC14ac8c64E5F34e4eB81110DDa5BfBb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1816308Ca8CF95B0EDEeFBd6d6cd48b59930c194": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa2fFAdF727D11b77756E3e9031615F5127507bD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBF4Bf9f705809bb341908342b0856c3c6fd5D64e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6FC44766204Bd263b0A8aB1B54dECc2C22dE3d50": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52918e7457CB0e526fd592e2E573b67Bd17DeD2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0883cFB2aD3256Ef822AaAC610aee39127a08dCf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46dc1c5f801822a00A268a7555533D440273C8ab": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1087281C196985BBf5B68677B2EeDf2f99cCB018": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0A389DAedcB0583838def855cd0495028a683E4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Cd75894548a8969E924F0B3aF6bF8dC27612b71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf2d2a2831f411F5cE863E8f836481dB0b40c03A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x203750D4B97979e1ED4Ad083dB831a5AD232C169": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6232d7a6085D0Ab8F885292078eEb723064a376B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6297D8F6832B3152EBbB679B6902f2D0C010940e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78E86BAb5453213841b10cD427c9b77Ef82C329a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7b46f38AB6549c63479aeE82530b67e08b16dD59": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b4Ae5B1db33c238844F7ad71CEBD258583d7100": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2DDa27632C48252Ff32678cb568491d85501dE28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81E2C758CA9c717E4b00B5dBa9DF7459B68290FD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcd43AaD533e663b726DAe4a08185E9db8eBC9f6F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaB6Fc9d3bc84954375DA9485b17A6F350f1D7dEB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9B7D7c4ce98036c4d6F3D638a00e220e083116c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x478207b856E109FA77b423A2580F3f890b6933Cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c2f0B4bcDAB83b1C05CB769262f692aF74EA2fB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x714C0F366ebBbA21FAc7B6A2De517A9EBeb7231A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa94516Ce155fFF1880F297fFCe99173b88822D1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x608Cb60905EfC0b59ebaD8A9C650A410fead95A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8Fb2A5d8736776291388827E9787F221a1d3633a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0CF29C333A84064723B3c8d4630A5AF539F18E3c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x627FaAa13Ca3D25BF959325D44543e04C99cceC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77b5B0266D16D55351680B8961784E1c85E12c14": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE139962e5d7B07A9378F159A4A1b7CABe9Df1d6E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x303fC875D1fC3126B1bA0B011eaB69a506C50a67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x556D8baCD8cE1E0f59a1A3e9329C53530A9Edc01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C53635374a831dBb7049660bCB071a688e49930": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd740E1463b085F34a245129564dcef539374C2A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x25968e4c4Db0851422A065be460E6880A1E76141": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9819Ee2373457e5B92A3847a635490B242B25639": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xba69593F1F51D4b2ff0a73298c8bE0C8586be931": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8215503B7E5A27469C1861837c638198D1dCe238": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x735eD02655Bca15EC46491C0dE4946591135459b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE8205E8Aadfe4Cc6e7A1Ea369dBcff4179D55b2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE807e147Df8F55Ee8E5AB4A7c48AD01e63FC67b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65C337B3d2b4C2E208801d95eA55Afb7409eaE2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAcaF6D4B71f850b2Cd1875d6eA7f7DE2967Cc21c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf6DCa69BcdC99Cada8B5e069a4A3cc659D482559": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17A525ae5C6004f5598CcA843Aab9F2CeBc886A2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd4154916d1330A7eAb4bF3e21295295805A1AB4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x019d78D1b7f8D6DBb3A4472f8882344f7fdebD4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3b7318457f091965c488dac7e58559993e4971DE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F061aA574882C84649230b475a44D35795cC018": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0bC753e49aCEcE82f436A00EFdAe9D70EDdc68C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7BaF6EA8580Ba201e4C9B75f596f8e4859f0C75": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1c15F1f8d2a99123F7a554865cef7b25e06d698": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCe08958266f58b638527B224D8b7141a3ff9C77E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5c2e883b16D73180F60FEbF687B74EC615D1D544": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0F6f7392283163E133BdafE35F8CD7d52520ED1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75662A623b3B1215be070FbDA87CeEb54C368907": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94ADA56Bc45369dD0c1df315B3543d1397E7574e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2da6014cF9D8056645E2e9B1ab47b799EDE840aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7b2Af7a96Ae32d71EEc4d58708C046C588136683": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x891E8ebd0430Ab4360b7B74996C2AEe650A960d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ad517B61005cBc5fe33c06b7F485961CB6E61a9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Fd4DeE3C0351AD3184ed041E719D260B8D4dc92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C7252B38450f92d27337dCcB0d013Fd0AF1ac74": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x435a05646bA2994751B3d93F5ab1450C109f768C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79776E826C78f0452a463ee27b9D66eBe8cEc865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5bB872d51BA73847DCFc5031fEe0af568d2d83E3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF06c79C4fa207dF457295d81914BA74A7caC6bbb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd890B6F0551345B8146f66F8c329f70877c71119": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2B41B2209de76ed2B6224e9204248d055ee20c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2AFBC4356Bf863a029ef58875Ad00CF6B8975A52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE0e097247F0134DaAAbb03b9d9F7791a0BACE99c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2481Fef92F6358A410f4B42a7672f23CaC514c2A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFC3733587E4066D664963c90CA3bAF76ff05fE46": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD69f170D82DE974cff7E81E6aB4Bb09A90dA71eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d156bc7c8768294510A4A41883d5A4EB15b15E3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEbd6dB5a58c9812df3297E2Bc2fF0BDFEac2453c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28265b4188FF587E5Cfe1155606026cD2CCd243d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x393451651A91EF458e954dB8804D42Ae15bBC813": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E1368C42c9cB0a51A55228BF2de2c4738e83A60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2eE6c0C72952F280876da353973caCBE238AB334": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9fD841A70b2Cf43964d46A742636d72Effa47DA2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83720DB3C5675ec1Cf50471B7a6D3715e4a93693": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x958559eF569BE81A2EaFB55B86dB0fad8326b96a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6cd72c56D94792fEC8aEFC492b185aB68DD9a21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x814A19b98A84EC9F72b7609A24Cc6cD35a2d0B9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F50183812BF7DAD0967e6CB42aa041919c13026": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA75d28EF5aFe56DC916a4b18070a0Daa2d3429cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB9F278Fe221CCCE7B3fBB8A8C1Dc5Bff49918054": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x761dE38d73B4E1b0240f731a1ed37bD879281229": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2492A8400813764952c89a88232F1221858D9C10": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77D74a7611DB43241E25c65888e6a26fa69019a1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5d90576d027480BF06f78AA3E9A9c346F61eEF29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB74C6E3c046E16190DfeFB7d3CBA84Db5790CC4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63eE555F1fea9798f09069b4830CbaA7E6E251c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD5730BBf7897607b2302540FBA00fBe6bcB42880": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B65803C229A2044534c95762018FFBe01207c27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4D00E2DDe0Da6386E888f2465e80162F273B7552": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE23CD65ac0253f67Aa75666765E3350D14117866": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf7bfad89da0a98AF22140fF10A700F56fED3ce22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xca8d13631bAD77f49B7fB3dcb82A13A81faFff54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8484fBedae4E9b2e26Df44b92cD5f81B71C8150E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfBf704AB4c8255a68d127A34D4e956594f7f0C2f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAAe99871b32A731dDeAEeE18517E365eBE44F395": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe68f971B545570A469A6bCc99895119A4483AcB8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Ca0196A35CA44540616945c27c79eEcC30D2c6F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4c6325Bc524bE5F9cD4A934A4e163F41f061aEA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD433c1B56055b7aDf8e5e2982E7e2C00C378706a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69b8A24edc9053b3D007710E7B986dF40a0BC7eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x697560Ec40177d9f3B450abEA56700eD84df7cEF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8f179ce31fCd8E335410E1A2281B4AfBA815DE2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x885818188ff2FA182BAC9a8f0f427dd6dA804c81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdb88e9CeDe3a24e7070450fb166Fcda4B787015d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x461e76A4fE9f27605d4097A646837c32F1ccc31c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdd82139f133F25ACF2B711664acA8Bb676b85699": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D8555F7aA7647d24dFdAC7E4E6054534627b800": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33c5756eD0a5eeA92c4de11Cf181910Ee0E677e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x65a441c7A0607f76B3B153fDe0fD2f3a920CC8FB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C1dCb699e6aF3AE59b7219e5EA7fEf6D9FcF9C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc61CC53572f07062731b21685F07fb1d71495fC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9D4e0F4C81d13EDF3eE8ceC6Ff026a06D418301": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05A13aeAD76EF4d601ee3675f7C31679970EE0C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xef8104c1F471C1995cb6F7276716E8B38dc1B9A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE55c69cfD20Cfa25651c72b84383dE6104104Eb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75F2e07B7d6EE6CD0A5889DBc0083c428D9Ee3De": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf174Bf93251c264d0322171402D70CD1f3493A60": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9927D618FaDB02aFff86A8Ea7a2427A53182B711": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9F5141e8715c6691E75188BDA726Df54c14721e4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x260eEb1441280Bd0987F717F0B045dE455208e71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29eCeeAFDFFf73E125C2Fb93CdE3E6bb6F1B602c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7196CD6DB846314014Fe2E4E4133B5b11eAF4eCF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80106c6E3001BBd2620E329Fe9411D4de371bb2c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x915782DB070B286375C4B757f63fC9a81c3E93F7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xECE673f4A50f557245Ff44cB89a9367851c31019": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf04946c11127A096Bcd6a572c01C89C164f2fa12": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0722692DeB9c7b0B910C75e7d07C25A0CE920Fe2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe37B696DEffbC7e2639e587C0Db1Ab57f686dfb8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3f201d68B473c89b3D82eA9c9b0E951DB7345A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xebB884f8f382231003FBDDF80D2884187f1e99A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBfd2c7B0e0E18558439448c2Dfd652d8Cea6F97E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0AE8A421E5cF4775310D6339a4Be20552bfF7080": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1164fe7a76D22EAA66f6A0aDcE3E3a30d9957A5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F3f647e19ddf45D1a963527Db2Af07c8175Db20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb955a01Dc7dD9c1dB5a83F554000799Aaa38Cb5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x737E2a0Bb15F6642e4e97B9661511b2DfFdDe8B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ecA53F6Aa3910628d7E8B30C0e35aDfF6cC0B9C": { + "1": 500, + "2": 1000, + "3": 2000 + } + }, + "PUBLIC_PHASE": { + "4": 500, + "5": 1000 + }, + "ABI_roundBalances": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "name": "roundBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "ABI_totalBalance": [ + { + "inputs": [], + "name": "totalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "ABI_userInfo": [ + { + "inputs": [ + { "internalType": "address", "name": "_user", "type": "address" }, + { "internalType": "uint8", "name": "rounds", "type": "uint8" } + ], + "name": "userInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "_totalBalance", + "type": "uint256" + }, + { "internalType": "uint256", "name": "_startTime", "type": "uint256" }, + { + "internalType": "uint256", + "name": "_userBalance", + "type": "uint256" + }, + { "internalType": "uint256", "name": "_lastTime", "type": "uint256" }, + { + "internalType": "uint256[]", + "name": "_roundBalances", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "IDO_PARTICIPANT_TOKENS": 37500000, + "MUON_PRICE": 0.02, + "chainMap": { + "ETH": 4, + "BSC": 97 + }, + "LockType": { + "ALLOCATION": "ALLOCATION", + "COOL_DOWN": "COOL_DOWN" + }, + "DEPOSIT_LOCK": "mrc20-deposit-lock" +} diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index a035cdf..3e7342f 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -3,6 +3,7 @@ const { toBaseUnit, soliditySha3, BN, recoverTypedMessage, Web3, ethCall } = const { ABI_roundBalances, ABI_totalBalance, + ABI_userInfo, allocation, IDO_PARTICIPANT_TOKENS, chainMap, @@ -14,10 +15,12 @@ const { const getTimestamp = () => Date.now() +const bn = (num) => new BN(num) + // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct const START_TIME = 1659886200 -const PUBLIC_TIME = START_TIME * 1000 + 6 * 24 * 3600 * 1000 +const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 function getTokens() { @@ -42,9 +45,9 @@ const getDay = (time) => (Math.floor((time - START_TIME * 1000) / (24 * 3600 * 1000)) + 1).toString() const MRC20Presale = { - [chainMap.ETH]: '0xe769eB67d024D53EE29DC688b430F6f35F5c2F8e', - [chainMap.BSC]: '0xf3FedAa069b4553046f4dafAf0Ec273036C5972b', - [chainMap.MATIC]: '0x10b09c7EE431C477267f85b27dA7C1D230715E51' + [chainMap.ETH]: '0x38451EbEDc60789D53A643f7EcA809BAa6fDbD37', + [chainMap.BSC]: '0x0A3971c81B9b68A6c65C58dff7da92857B334b41' + // [chainMap.MATIC]: '0x10b09c7EE431C477267f85b27dA7C1D230715E51' } module.exports = { @@ -186,8 +189,8 @@ module.exports = { let tokenPrice = toBaseUnit(token.price.toString(), 18) - let baseToken = new BN(10).pow(new BN(token.decimals)) - let usdAmount = new BN(amount).mul(tokenPrice).div(baseToken) + let baseToken = bn(10).pow(bn(token.decimals)) + let usdAmount = bn(amount).mul(tokenPrice).div(baseToken) let usdMaxCap = IDO_PARTICIPANT_TOKENS * MUON_PRICE let totalBalance = {} let purchasePromises = [] @@ -197,24 +200,24 @@ module.exports = { purchasePromises.push( ethCall( MRC20Presale[chainId], - 'totalBalance', - [], - ABI_totalBalance, + 'userInfo', + [forAddress, 6], + ABI_userInfo, chainId ) ) } - let purchase = await Promise.all(purchasePromises) + let userInfo = await Promise.all(purchasePromises) for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] totalBalance = { ...totalBalance, - [chainId]: new BN(purchase[index]) + [chainId]: bn(userInfo[index]['_totalBalance']) } } let sum = Object.keys(totalBalance).reduce( (sum, chain) => sum.add(totalBalance[chain]), - new BN(0) + bn(0) ) if ( Number(Web3.utils.fromWei(usdAmount, 'ether')) + @@ -228,42 +231,66 @@ module.exports = { finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() } else { let allPurchase = {} - let purchasePromises = [] + let sumUsed = bn(0) for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] - purchasePromises.push( - ethCall( - MRC20Presale[chainId], - 'roundBalances', - [forAddress, day], - ABI_roundBalances, - chainId - ) - ) - } - - let purchase = await Promise.all(purchasePromises) + allPurchase = { + ...allPurchase, + [chainId]: bn(userInfo[index]['_roundBalances'][day - 1]) + } + let amount = 0 + + switch (true) { + case day < 4: + amount = Web3.utils.fromWei( + userInfo[index]['_userBalance'], + 'ether' + ) + break + + case day === 4: + amount = Web3.utils.fromWei( + userInfo[index]['_roundBalances'][day - 1], + 'ether' + ) + + break + case day === 5: + amount = bn( + Web3.utils.fromWei( + userInfo[index]['_roundBalances'][day - 2], + 'ether' + ) + ).add( + bn( + Web3.utils.fromWei( + userInfo[index]['_roundBalances'][day - 1], + 'ether' + ) + ) + ) + break + + default: + break + } - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - allPurchase = { ...allPurchase, [chainId]: new BN(purchase[index]) } + sumUsed = bn(amount).add(sumUsed) } - let sum = Object.keys(allPurchase) .filter((chain) => chain != chainId) - .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) + .reduce((sum, chain) => sum.add(allPurchase[chain]), bn(0)) if (currentTime < PUBLIC_SALE) { - allocationForAddress = allocationForAddress[day] - let maxCap = new BN( + allocationForAddress = bn(allocationForAddress[day]).sub(sumUsed) + let maxCap = bn( toBaseUnit(allocationForAddress.toString(), 18).toString() ) finalMaxCap = maxCap.sub(sum).toString() } else { - let maxCap = new BN( - toBaseUnit(PUBLIC_PHASE[day].toString(), 18).toString() - ) + let allocation = bn(PUBLIC_PHASE[day]).sub(sumUsed) + let maxCap = bn(toBaseUnit(allocation.toString(), 18).toString()) finalMaxCap = maxCap.sub(sum).toString() } } From 39527aba794163cf0de596c87a3463cbf17f199c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 3 Aug 2022 16:12:30 +0430 Subject: [PATCH 019/406] Add price_feed app file --- general/price_feed.js | 58 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 general/price_feed.js diff --git a/general/price_feed.js b/general/price_feed.js new file mode 100644 index 0000000..1eee25f --- /dev/null +++ b/general/price_feed.js @@ -0,0 +1,58 @@ +const { axios, soliditySha3, BN } = MuonAppUtils + +const CHAINS = { + mainnet: 1, + fantom: 250, +} + + +module.exports = { + APP_NAME: 'price_feed', + APP_ID: 26, + REMOTE_CALL_TIMEOUT: 30000, + + + isPriceToleranceOk: function (price, expectedPrice) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() + + if ( + new BN(priceDiff) + .div(new BN(expectedPrice)) + .gt(toBaseUnit(PRICE_TOLERANCE, '18')) + ) { + return false + } + return true + }, + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'signature': + + return {} + + default: + throw { message: `Unknown method ${params}` } + } + }, + + hashRequestResult: function (request, result) { + let { + method, + data: { params } + } = request + switch (method) { + case 'signature': { + + return soliditySha3([]) + + } + default: + return null + } + } +} From 2d7a9c4b5fb678439feaabbcc2e5cc0da6912a84 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 3 Aug 2022 16:27:25 +0430 Subject: [PATCH 020/406] Write some top-down code to return twap price --- general/price_feed.js | 45 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 1eee25f..10ef4c9 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -1,11 +1,10 @@ -const { axios, soliditySha3, BN } = MuonAppUtils +const { axios, soliditySha3, BN, Web3 } = MuonAppUtils const CHAINS = { mainnet: 1, fantom: 250, } - module.exports = { APP_NAME: 'price_feed', APP_ID: 26, @@ -24,6 +23,23 @@ module.exports = { } return true }, + + getSeed: async function (chain, pairAddress, denomerator) { + + }, + + getSyncEvents: async function (chain, seedBlockNumber, pairAddress, denomerator) { + + }, + + createPrices: function (syncEvents) { + + }, + + calculatePrice: function (prices) { + + }, + onRequest: async function (request) { let { method, @@ -33,7 +49,20 @@ module.exports = { switch (method) { case 'signature': - return {} + let { chain, pairAddress, denomerator } = params + if (!chain) throw { message: 'Invalid chain' } + if (![0, 1].includes(denomerator)) throw { message: 'Invalid denomerator' } + + const seed = await this.getSeed(chain, pairAddress, denomerator) + const syncEvents = await this.getSyncEvents(chain, seed.blockNumber, pairAddress, denomerator) + const prices = this.createPrices(syncEvents) + const price = this.calculatePrice(prices) + + return { + chain: chain, + price: price, + denomerator: denomerator + } default: throw { message: `Unknown method ${params}` } @@ -48,7 +77,15 @@ module.exports = { switch (method) { case 'signature': { - return soliditySha3([]) + let { chain, price, denomerator } = result + + return soliditySha3([ + { type: 'uint32', value: this.APP_ID }, + { type: 'uint256', value: price }, + { type: 'uint256', value: denomerator }, + { type: 'uint256', value: String(CHAINS[chain]) }, + { type: 'uint256', value: request.data.timestamp } + ]) } default: From a7b6b1b9f4291c7bec1f3f45445a8ac626737ef1 Mon Sep 17 00:00:00 2001 From: Zahra Date: Thu, 4 Aug 2022 11:06:48 +0430 Subject: [PATCH 021/406] refactor mrc20-presale --- general/mrc20_presale.js | 57 +++++++++++++--------------------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 3e7342f..41b2a0d 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -42,7 +42,7 @@ function getTokens() { } const getDay = (time) => - (Math.floor((time - START_TIME * 1000) / (24 * 3600 * 1000)) + 1).toString() + Math.floor((time - START_TIME * 1000) / (24 * 3600 * 1000)) + 1 const MRC20Presale = { [chainMap.ETH]: '0x38451EbEDc60789D53A643f7EcA809BAa6fDbD37', @@ -85,7 +85,7 @@ module.exports = { message: `Your address is locked. Please wait.`, lock: true, lockType: LockType.COOL_DOWN, - lockTime: 5 * 60, + lockTime: 1 * 60, expireAt: lock.expireAt, PUBLIC_TIME, PUBLIC_SALE, @@ -124,13 +124,13 @@ module.exports = { throw { message: { message: `Your address is locked. Please wait.`, - lockTime: 5 * 60, + lockTime: 1 * 60, expireAt: lock.expireAt, day: getDay(currentTime) } } } - await this.writeNodeMem(memory, 5 * 60) + await this.writeNodeMem(memory, 1 * 60) return default: @@ -243,56 +243,35 @@ module.exports = { switch (true) { case day < 4: - amount = Web3.utils.fromWei( - userInfo[index]['_userBalance'], - 'ether' - ) + amount = userInfo[index]['_userBalance'] break - case day === 4: - amount = Web3.utils.fromWei( - userInfo[index]['_roundBalances'][day - 1], - 'ether' - ) - + amount = userInfo[index]['_roundBalances'][day - 1] break case day === 5: - amount = bn( - Web3.utils.fromWei( - userInfo[index]['_roundBalances'][day - 2], - 'ether' - ) - ).add( - bn( - Web3.utils.fromWei( - userInfo[index]['_roundBalances'][day - 1], - 'ether' - ) - ) + amount = bn(userInfo[index]['_roundBalances'][day - 2]).add( + bn(userInfo[index]['_roundBalances'][day - 1]) ) break - default: break } - sumUsed = bn(amount).add(sumUsed) + sumUsed = bn(Web3.utils.fromWei(amount)).add(sumUsed) } + console.log({ sumUsed: sumUsed.toString() }) let sum = Object.keys(allPurchase) .filter((chain) => chain != chainId) .reduce((sum, chain) => sum.add(allPurchase[chain]), bn(0)) - if (currentTime < PUBLIC_SALE) { - allocationForAddress = bn(allocationForAddress[day]).sub(sumUsed) - let maxCap = bn( - toBaseUnit(allocationForAddress.toString(), 18).toString() - ) - finalMaxCap = maxCap.sub(sum).toString() - } else { - let allocation = bn(PUBLIC_PHASE[day]).sub(sumUsed) - let maxCap = bn(toBaseUnit(allocation.toString(), 18).toString()) - finalMaxCap = maxCap.sub(sum).toString() - } + let allocation = bn( + currentTime < PUBLIC_SALE + ? allocationForAddress[day] + : PUBLIC_PHASE[day] + ).sub(sumUsed) + + let maxCap = bn(toBaseUnit(allocation.toString(), 18).toString()) + finalMaxCap = maxCap.sub(sum).toString() } const data = { From 10b7da54784952ad9b5161f5e7ca1c81f0ea9866 Mon Sep 17 00:00:00 2001 From: Zahra Date: Thu, 4 Aug 2022 13:37:49 +0430 Subject: [PATCH 022/406] fix bug --- general/mrc20_presale.js | 47 ++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 41b2a0d..8b52226 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -231,7 +231,7 @@ module.exports = { finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() } else { let allPurchase = {} - let sumUsed = bn(0) + // let sumUsed = bn(0) for (let index = 0; index < Object.keys(chainMap).length; index++) { const chainId = chainMap[Object.keys(chainMap)[index]] @@ -239,36 +239,35 @@ module.exports = { ...allPurchase, [chainId]: bn(userInfo[index]['_roundBalances'][day - 1]) } - let amount = 0 - - switch (true) { - case day < 4: - amount = userInfo[index]['_userBalance'] - break - case day === 4: - amount = userInfo[index]['_roundBalances'][day - 1] - break - case day === 5: - amount = bn(userInfo[index]['_roundBalances'][day - 2]).add( - bn(userInfo[index]['_roundBalances'][day - 1]) - ) - break - default: - break - } - - sumUsed = bn(Web3.utils.fromWei(amount)).add(sumUsed) + // let amount = bn(0) + + // switch (true) { + // case day < 4: + // amount = userInfo[index]['_userBalance'] + // break + // case day === 4: + // amount = userInfo[index]['_roundBalances'][day - 1] + // break + // case day === 5: + // amount = bn(userInfo[index]['_roundBalances'][day - 2]).add( + // bn(userInfo[index]['_roundBalances'][day - 1]) + // ) + // break + // default: + // break + // } + + // sumUsed = bn(Web3.utils.fromWei(amount)).add(sumUsed) } - console.log({ sumUsed: sumUsed.toString() }) + // console.log({ sumUsed: sumUsed.toString() }) let sum = Object.keys(allPurchase) .filter((chain) => chain != chainId) .reduce((sum, chain) => sum.add(allPurchase[chain]), bn(0)) - - let allocation = bn( + // console.log({ sum: sum.toString() }) + let allocation = currentTime < PUBLIC_SALE ? allocationForAddress[day] : PUBLIC_PHASE[day] - ).sub(sumUsed) let maxCap = bn(toBaseUnit(allocation.toString(), 18).toString()) finalMaxCap = maxCap.sub(sum).toString() From 94951bf13937f625dbaa4ab8aa3785247d1a6afa Mon Sep 17 00:00:00 2001 From: Zahra Date: Thu, 4 Aug 2022 15:56:23 +0430 Subject: [PATCH 023/406] fix bug --- general/mrc20_presale.js | 75 +++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 8b52226..e1b25b7 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -1,8 +1,6 @@ const { toBaseUnit, soliditySha3, BN, recoverTypedMessage, Web3, ethCall } = MuonAppUtils const { - ABI_roundBalances, - ABI_totalBalance, ABI_userInfo, allocation, IDO_PARTICIPANT_TOKENS, @@ -85,7 +83,7 @@ module.exports = { message: `Your address is locked. Please wait.`, lock: true, lockType: LockType.COOL_DOWN, - lockTime: 1 * 60, + lockTime: 5 * 60, expireAt: lock.expireAt, PUBLIC_TIME, PUBLIC_SALE, @@ -124,13 +122,13 @@ module.exports = { throw { message: { message: `Your address is locked. Please wait.`, - lockTime: 1 * 60, + lockTime: 5 * 60, expireAt: lock.expireAt, day: getDay(currentTime) } } } - await this.writeNodeMem(memory, 1 * 60) + await this.writeNodeMem(memory, 5 * 60) return default: @@ -231,39 +229,51 @@ module.exports = { finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() } else { let allPurchase = {} - // let sumUsed = bn(0) for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] + const chain = chainMap[Object.keys(chainMap)[index]] + + let amount = bn(0) + + switch (true) { + case day < 4: + amount = + chain != chainId + ? userInfo[index]['_userBalance'] + : bn(userInfo[index]['_userBalance']).sub( + bn(userInfo[index]['_roundBalances'][day - 1]) + ) + break + case day === 4: + amount = + chain != chainId + ? userInfo[index]['_roundBalances'][day - 1] + : 0 + break + case day === 5: + amount = + chain != chainId + ? bn(userInfo[index]['_roundBalances'][day - 2]).add( + bn(userInfo[index]['_roundBalances'][day - 1]) + ) + : bn(userInfo[index]['_roundBalances'][day - 2]) + .add(bn(userInfo[index]['_roundBalances'][day - 1])) + .sub(bn(userInfo[index]['_roundBalances'][day - 1])) + break + default: + break + } + allPurchase = { ...allPurchase, - [chainId]: bn(userInfo[index]['_roundBalances'][day - 1]) + [chain]: bn(amount) } - // let amount = bn(0) - - // switch (true) { - // case day < 4: - // amount = userInfo[index]['_userBalance'] - // break - // case day === 4: - // amount = userInfo[index]['_roundBalances'][day - 1] - // break - // case day === 5: - // amount = bn(userInfo[index]['_roundBalances'][day - 2]).add( - // bn(userInfo[index]['_roundBalances'][day - 1]) - // ) - // break - // default: - // break - // } - - // sumUsed = bn(Web3.utils.fromWei(amount)).add(sumUsed) } - // console.log({ sumUsed: sumUsed.toString() }) - let sum = Object.keys(allPurchase) - .filter((chain) => chain != chainId) - .reduce((sum, chain) => sum.add(allPurchase[chain]), bn(0)) - // console.log({ sum: sum.toString() }) + + let sum = Object.keys(allPurchase).reduce( + (sum, chain) => sum.add(allPurchase[chain]), + bn(0) + ) let allocation = currentTime < PUBLIC_SALE ? allocationForAddress[day] @@ -304,6 +314,7 @@ module.exports = { switch (method) { case 'deposit': let { token, day, forAddress, extraParameters } = result + return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: token }, From 99c59009c582d36d10f0ad34e5f67b626475a7c4 Mon Sep 17 00:00:00 2001 From: Shayan Date: Thu, 4 Aug 2022 19:19:59 +0430 Subject: [PATCH 024/406] Update mrc20 allocations list --- general/mrc20_presale.constant.json | 3186 ++++++++++++++++++++++++++- 1 file changed, 3121 insertions(+), 65 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 6f8bd08..e3adab6 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -1,5 +1,35 @@ { "allocation": { + "0xE8FB09228d1373f931007ca7894a08344B80901c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5dF5483b14a077429956c86801fCDf90579D3F98": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D1C0Df7B16d122768502e853fF375a8D153bB56": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4052a0c3238ed0e44007fdcC9c9DdccFeD075BaE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2AbFAF3ec0b1323fc73C893e623610Ea2034CeaE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb90d924F95484E304F2E968f8f7408eB47CEff56": { + "1": 500, + "2": 1000, + "3": 2000 + }, "0xeDb82EAa5D2eeb0156528D19aF8F942b65b377c0": { "1": 500, "2": 1000, @@ -11314,73 +11344,3099 @@ "1": 500, "2": 1000, "3": 2000 - } - }, - "PUBLIC_PHASE": { - "4": 500, - "5": 1000 - }, - "ABI_roundBalances": [ - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "name": "roundBalances", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "ABI_totalBalance": [ - { - "inputs": [], - "name": "totalBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "ABI_userInfo": [ - { - "inputs": [ - { "internalType": "address", "name": "_user", "type": "address" }, - { "internalType": "uint8", "name": "rounds", "type": "uint8" } - ], - "name": "userInfo", - "outputs": [ - { - "internalType": "uint256", - "name": "_totalBalance", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_startTime", "type": "uint256" }, - { - "internalType": "uint256", - "name": "_userBalance", + }, + "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD1F5D5419C38FB350DB99079B3fCF5bfe2491109": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfa0Dd774f9FCF00E4Ec178FfB55c4A9E5d36eBf5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x680DB8B16769b49C5768cfAb7Cd13f1CE11219C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48e471103DD4945D146a0E28F4C62f56466B2B6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcD79272e57a870c0b1f69a8C840244364C4a0260": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x978aA0E4592e47327bACe8d157851E4bB0Bd3cc5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x123b121BB9771cB171D34c835E92F891759Bd79f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7eE8c4DAc9EB3c67d7Ed66A6173fe7102984B6C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98B5D3f6B37cda55B783eAAcc3e586E2c63a0e94": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D9A1eCe4CC5092428bFf7Dd07f9AbA61D43cD2E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A9C628F9B1b06a881407AE457Ffb0E51FB7E752": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x88d5E9e934d6d890D9029687d038714651Ccf638": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3a9c81FA92136c8062cf4fc838E9032C54Ad2356": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9129ba37584e95C592C1a3B1FA78FdAd7e7eeB7C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0fD818851Ef03e06c2F22A3bE54e88444C6A710C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30F89f5f4cF25f457B4D9cBFb64a64A97F00bED0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF29c6918459339Ce1d152F84Fb271652956C5c5F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB005fc539BBF699Cf72af82343e0da5dA5fcffDe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF278F9728551fE0D1AE6001012052D4cA7757f0e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa063D8AfEb5Aa7b5A0039716Af55694bcFA80736": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Dc56e85283cA780d5FBda7337B6BC98a5E4f22f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x585491BDfe0e82edc877f7BA5f9294dcB267c093": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4597E5179FA1E93b91046a0BA0ACc4bB04A983ed": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEe20f85dD3f826700A6A42AF4873a04af8AC6D75": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa48869098E6fCf7C67E19463938bD1209AB253Df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9277F43bDFBBD18F5ba0ADeB38F3ace2929E773": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeC22F3D7B6FF424950120B6203C9958a8197Dcb1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56Ae42256F47d488F74efe18089ec1E83f0ab9d8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA7c767854B1E7305dE07247AB85E30543d1d9c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF62DeB02342a330731a42D20865d2161F531971b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b878b6E1b43e4f5AD543A1bfDC8890455Aa9a0B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbBcF796a56b677d0883015A2bD80aFED165c1B8e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7b0cabc9691e5502654A4afbE2e6b6AFAeB7A38": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE7591D1D1ec6a6836438E3c3CeEA140C300C0809": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeBc462355194903ad1AD32fa767B3B74D5acA278": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6CAC40120Df8CAA99AE3e1B3Fc959e0dE31e808c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32144A3F0ED8145Aa42896A811C7a7cEb1717F24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1bbb7D3E65EE6f8bE2B06723d63680F90452f2F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc067e7F26f6e75BB6591Acf1FC50b6A5DcCf5835": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDC7cb1A38aF470093971b5D09cD279124CAe8810": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c3C301bB3AF46c86205844c7Ad9eF8bD6593BaF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDa6F75eE4c6859367322A4A415703fefc52EBF26": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa219712cC2Aaa5AA98CcF2A7ba055231F1752323": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC26AB5C747afaB250FD5a66232a3479D4eFfD4C5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDb60Ea59D0B7Dc388873d6c6ED73557981Fc267F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0A86AFB73c0922A50D4A985A25507EcDA8a9B51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC00a6614B8030cE216302016e11C6B4140B5e499": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3523481702186C04740e50396D0e1C807cE36C57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xed320Bf569E5F3c4e9313391708ddBFc58e296bb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2370f82E63B9605589BC1aeDe26916F839b420aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa231C74f811faE35A9F1ddeCac6f4AF49A9c4809": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5330D616c96118E6fc5290475B8eA377CfFB66B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5F0C0d4dc63dbD0dABAE462E328957352DCdC217": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0F3c91dD4F416AB4d555DA56BF83570CDCf796Ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2445dB49Ce5e58D97a2cb1AcdB8AF326AA592F8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd2499424e5822DC6DadEBEC9518C1AfC1b970Be2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94F94f0bcdFe296F4E94A8e3065D6d1d326D4a65": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8a70b9FeFd03D8C54877bc26203A87f253266FC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC57ec17511BdcEF72947CAcA8455127aA751c1B2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0c6071582e9Eb0e3125B6CE85Ff6d57077CCf71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa65Ba816f1f01ef234b8480b81A2ED5B3544c61a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5d8d5184B35F0569B79d7E169be0aeee21A3C078": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92864dCC5595D5693aA64304A19962C5184dF7d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4282890fF9661a51EA367AeddF341C6f6395d4E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6fd766148cFB9A1bee712Cef24EeC91645ebAfA7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x174E070920007350fA0193E0321f9bBD3984949e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99C04ae385E3c247D8AF67b193357B79ade10cf2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0a8e8779eAB42a0260C5c9C21D5bF66D2e49cE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaCdbD1de6BA82Db84D5333eBBf37BA0cE7272205": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x028aF46C0119aA6922C13b3893840BB116A41D82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x48802796282aee0Af46750125D81d9796777369a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6ba58CD30014A861b11eD429200Bd1DD8277DCf7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D6991085Ab1ae3926cB96f25684C40a364B6856": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b4759C59d003a126aBDA7F2e1a16Fa7DC4f0B29": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5AfdD71EC312eDa36663f72032f269BD9C950cB4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19c569184f60913DaeA2BD9409C12B031D06778F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5a052A9928d100bB68e14Ed2A8091C1a758e1BF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd5a2ec9468A5dE6e5F3f7D787b53994182775C1b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51f059C07E03d330B007B48630a857E582BE8236": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe5c4F20d6e299a637A5C172D181c30ca5950B852": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78352F58E3ae5C0ee221E64F6Dc82c7ef77E5cDF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3eb62166bd3c79A4f847782726481A73a6d3A4E9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B362ab92c2EaFb0B7fa28818f5ee65AF7711720": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8ceFBc7b462f04A1b56bF4e12219C051240c3079": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf389994cfE868F531c09A9f27Ca9470620d8686e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2406d61812Bbe600767fCE3392E868F14c9B67F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4965E069601a47811036d1Da8f8b09a3Abc2726B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x605088609f9AC2F1F4571C4Ed57a9318dd381F0a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x952cF57D0518BC03019d397e06a5a9dFCfde2caA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66aC6d2D7d0Aa472d470040702182933d0C5C9E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x88023c305b471649D326b7B95149146F4B5308b5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41c32b996B2Cb71cA1974399E3523C72F78F286F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb168a90cEF8256c7Bc82fa5908d2c9ddB34f0908": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24aB740f0545555e67DA1B317a048eaE217D2fF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4fc81d680A904280De4F94acf10eC6690501ddD4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDA6a346A27cCfcb25Ef70c5D455d651dFe4BeCdB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30A26c2837e9Ad41Ea5955949F00402DbF86f124": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5987bd550e80E2D91E177F354900D7F7b6566CC4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5B3067C5e26fEC823d6fBf8F315e43632658D2F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE49f9C282fE9C9BEc52905Cf11fBB93a59568Fd9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6ffbb6C376d0cf590289671D652Ae92213614828": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD93eC7e214C50FE64050d0A88002942f0E242659": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x846ceb69b0D19b3d1943e63C8e160A897CF8381D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb81B07Beda149C6B0AEe849D210ABf2Ee655e525": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1e11D7EeC288CCBC1b58F648f8B8427F4DC98310": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB97F255b37eEf7D47DBE1deBBECD1f2eCFC37Abe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1C3283871Ab8dF8Dde77436eff8cE5D4fD88EfC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x733EDA4116AD0F361eB1E439B35508869Ca0Ed15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9641F911B54038b568Da770aa75cD5310998bbf8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D5421f657a46CA82D0585F7eAaA7d7717a8D7BC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a3e09694bDF65dA8F6bF6bfaD147811100f4C40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8d68307D410eFfbB492eA0458A8bCA99D0b12c61": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8a806Bc475331F20022D897E4f9DC066Bf0324c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38476bc1deb12F317cabC3F49fBBb80FbaB6f3ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5221c6AD8d0c9E5c2F783acAFD4861552AC2741E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf0fEC8D7931eaC24957d135EA6D928fdd1756d0B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7eD7Bf2A126983DFde425126b03693D40477Ba7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72d59fa86133D75E5E7C4F32AA90516BDBD605A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd3e811293A20a9fBEbBe57985E40D7e02b85F211": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00aB97c782c661fb3D08C96dce06176938101211": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3AB05b82b47222b46618bb245369bfa7959c1938": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1e7651997235890cF625c3d3b129275a17f1889c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCC2e601F4e686366B7a0a581EaE4D26b0768F4b2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEba07C013fBF2763C169ebD5d826Cb7a9942E9A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37633c9F778c44e852914c7056cBBBF75323Dfd6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a4Bf9162F59339162530D2fd576a2604212E9f9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1Ae6201F681D8539AE07B74210b81187374b0bE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0076fcC7D245F6c7aAf07238ADFb48aDC62bDD55": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAB5eF3F0a671D47dAd2083943705F31BE2016Ae0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdf9e2288b48176B1f4b12548815deCc09E9f2F79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B230F8235f3E3b14AeFd3ed657479e8FFD931A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC56E12Fd9435bbEDD79E03429CfE798271aa4b5E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0f8362CdE80D26F7e0fCFe6eFBeE2A109eB695C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAEd826444CB27dC08c38a28EF97c5942F9C9123e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCfFC127C4f491856cC93433cC5c61a18A6DEF6Ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x780ad0Cfd2292Ced8EB44BA4A0eA2f70b4551c8B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x701386193B756f4931F68881F536724A808CDcbA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6454b7B2C1A549690E98ac0193746f734AC8c475": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfc963A93457c5644E51D955F3B2D3012e27aB3Dd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE740B669313333B417c3ef178aaA0feC40CdCbE4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5015753c7A8066999c2785CB2fAd72CDbB80ae7b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73422A2722066C1750cb9fCbF79caBf1f08f9bF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7eb010eE94Df76F0310b9ABCDa8FFC301983D6bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c61C77796F283C2aC37BA2D648c79595ea5C2d8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA050488445Dd68D322BFCf31324Ce04034fd9b34": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe27Be11E5FC4E585Ed65172bdAd028FCdd7340Cf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4539Dc7Cfd1D4242b775E4Cc851c2db739F9d891": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6d90562E565640725C9d57848c1fee90DC5aDF16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6837881743c4160E12a20a3639FAdCa8bDA2813": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x44808c767a1A7EE131948B79a9c2c0C8B279D3A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3542b2d6172bF3F39aB7f4CBC37aD0Bb40DFe403": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x240396CE189bA01eF2bE2cfd1816989962D2aF6E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5806594D03437742EFDC1b33EeA609A04c220B5F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc754f4753d394374DA4D3B6652c8443fdF4c12F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2408E836eBfcF135731Df4Cf357C10a7b65193bF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67C26ebe5cBf1d795E2c688171C96a1F686A6b70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbbCC78b70e5349699466c67eC05d61BE597Fa9f7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e522051A9B1958Aa1e828AC24Afba4a551DF37d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5538793f0eD24fD4EA2Fcd5225A40995A8f5Ac3a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d56F14F7623fa1Ab587e06a630E82dAa1425631": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x283A2549b640E56901A8Ced2Ec5277A32CfE6425": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc2dc013edD48afDcd7b872D51d55ccd1A7717e28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x326CE920365f3D8A6B0a38AE13fABe6EFfD7338a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4C7fD55834f50d40537f0AD4Aff75287f4C6fb10": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4EdE4498462462e303E3b4D22267e8eA04bed138": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24eD0FC5F7Ab884887e79160694ED7bDe1ABb6C5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x39a59686EDf5C08D9baaAcdbFD94314bDFe57E9C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0507B3ffe3836aD0f256f3D53b8fa7653e54E2EB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e3DD1e1840F6A4D434227D14c078f816c087CFA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8b7d1DDE98Bc3b58334Aa4C3Ff261c882653A974": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc93028eB06B02c90bEa187456BC2e2f3431d10ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9e1Ef8C041E408368e179B3B886E10Fd933db742": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x448C04C24f953b85Dc97babF6152C08ef3Ee3a92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4e53433495619613251ed5d9360d205A3B87d047": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf432Ce1Eae375d68D139c367881d3C67aF331AEF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC29dac18Bf481C1615caEbea293B84C15B383828": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7cB94b7a8b18539971fA3c7be4eA74EC9BFbB22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x096E182e1e574A63324eac77a12ba0ae6F4A5E1a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1ca51634120D3F7c9D4dE76c3C908E38775501Ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6827E77996cBEDcF7328dF08184a90e9099972E9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC9F7113042615cE4796f8CBbfA6f42170D908e05": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc13535c2db284F9D87C6F9484eeb4cEfC676029C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27dD96A81F9828406CF69b64Cf8BF05F3968D8b6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB276Dc93686BE0C784bD4dc16f6290c995359019": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5Fa70e82E5Dd4cce2f837175361BBd5B7E9E28A8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d9Ae789d649b7cf5748c8b9EB96d9a2068B87Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66d6C975c79c09c75EcE5C2066e00a6c90Cc3DBe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF842F276Aa0f801fdf2ee1Ab23F9207BeEF5C805": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa049AFeF83d112F9B9Ac4E9d743C50aD08EBEe01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA2157be126e76cCBb88ca7B031BCa4A3dEd48081": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB4576fE753DAB07635c0Bb6c8f0A355e1Db5d31": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9CBC9496aF2606446a15f85535BCCD1F7d20EAd5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE3bac381d2092D3BC8996b45df146A13A2ea8888": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd89e9C7B9FE41c668960B81F4987256b2FcC5aE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53b8F496a2C4939C6d99Ba7AFBc0f91DD17E158B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1F3f1f9D03f619f84C2344B4a11696f063B4c0b0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x145847c5759094C22bffbb69DBEf7b8f497052B3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x030836ACCE934616116883DE9Cf744a0c06171c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x34457cA3A154415eE1847d311810B33815Dc7497": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5e75f724ECEC3F5983bE78D6aAD977806aB24514": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEE79c08a76aa147E95994d9ca5849A1759226698": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F556083BD13f674c7A5838988eF73b79DD689cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe637115620d7B3B464b20B8A8F6d9CfcBa486dcC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBcA91F44C72BDf61AB159d9fA6D16Eb2e4Ca095e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE53D3f2B99FE0Ed6C05977bC0547127836f0D78d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3f5E80115268633E19D97D61a2752E1271409e01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4868962B4143f6d7beCD49E07E3092070a18c554": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE221D5371EF7334a76aAC4f70b94DD80d1C18a00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd6c1d5Bcce0F7E19f24598092F222d98A7d1b24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd97D29CF1c08852739a0179a9D27aBE52B5a6eb0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x536b8f6E50876928C9751a3db2f5B1f49AB284ea": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xABec29958F6539f969b9AFEA3aF8339b9a91bb2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfE9182CD69F9fEb2A22C8bB88D03dCBBDfF77f11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa064B34DC0aEeF23e48B400DC4b0A3f940B55865": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xADDADf3Df10bebFFf7201427d50Cc0448e2E6F3a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x601803470e6120bd8f4a3fF8E1Fa72CA48621d2F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27e9531d81E0D89CE04394E233d406256d66d36a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3214e141bdAe08Be1f382A885cf3d2a448A5E780": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A1cA7d233b732d50f9Da07dd240573c89B7e07C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFd1D918196C4586a7D58cb75f1aCAe330Ff5f348": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a13DcE207843a3a6A6843AeE8bA6aD46BFDfef2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdE698282E354705D609c0BC9067174160b3dd5E2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB47E31A043b326008bfFBF00e832bfD3FD7EA101": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF37627B2762454DC65e75c3A7Bce054Be7B4AAa4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41f7cdf33466ea516f4FB66Eb7ba7Bd4aE4D1056": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA07BE4744Faec9C69a92D654F5d2332fa73Bb87c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5b65d9B1b1e0F8f438536A5a589D2C76759B8481": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74c52e38fB622329f596e573a4878Bf616EAb280": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A505dF95aAc78f142CA98CeCd771d3c398b4b71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Cac725F17d5deB4a65922a6043eAc4081aC6Bc4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb2c9a817c1c347c0164a8211CF7014650379cfa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11caE591f2E1f3503Ed8d62af85eb92aEe2f4046": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7eA9F3f10622f7EeCD5288F4D28D29865ce3934d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0505B378a28e286a5771EceC63CBa0f84Cd7A46": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6fCf4b90fd058aede5c1f37f84940c5d935f0369": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe2eFa7C8A0769e91af174870DbDdC2D2500c08a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c48FAFFdDB68D443c31f4C2D178F475A95b202B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x794b769D5C7E4d66D9a8D1da91E9cb7A94Bb18e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x375C1DC69F05Ff526498C8aCa48805EeC52861d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA770C94a39D17075ca9Ba359b9ee191127649Cde": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FE1AA632A2837239f218e3Efad21E8018A9F4eF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8C1f48a0DB29aeaB0E0Ca7214C92cf6CCe877279": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe4b7FBC0c55299Db43553908C36C98AFd641D3cF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x28519a9B53D1989649d42e5F5F4Fb94A6c14C7d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x818bE59392c61DdDb1F88C314Ba9F3C3be292519": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98B5532FF6201D9bB679EEE90cC34C10137998F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72355E1377e4C7E4516acA780F2CEc1C6d3820a9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD5c4777e2A2e952a83f4119407B7D9C9cEA0FF84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF0DE256d741910BBe86173f02c795E1034CdA0DB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1fe6937a51870ea66B863BE76d668Fc98694f25": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfb9623855f4fB10152b0e173007B51c98399768e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4aaDCD845eDF94CdD31B1d95Ef9E452b194742c3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82c63c3D7153a61E072d27Cf878351FD2F7d7785": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81B3f8fa9D921C01751B1317c7CE4aE1d2e5C5B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67DaCc258DCCc8CbFB493c652ab5170C3CFf0AD9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0e36eFf6e6169B7924913C767F04a41BC5DbE3df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB2a7aAf1A0D8236bEC11862bBDA6a95C3fF1626c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C11972A0fAd3ac0CC062b39d66d5BB9A2c3c07c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x86f5649Ed6C2c868cE2DD93950A148feB1bf8Af2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF25c335aB3cfbC8edbbDaC498d6328E8FE6D8d68": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0028f13af6005bEB678a14e9825Cc5DE784756A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe02C2D59C208CA3220EC9aE42Ae1Fa0F29DefB24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D7fEA7c2A257048032290A8D4A4B3f966F67c1c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x450AFf1279Ece63e4A950797f66a4DC7141BEd5b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8c4eaa0559A78AC453Ea9570297F5Fc628c8B592": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5458210BF50ED1864639F45B5AE7Df76Be2177e4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87d767A1c80eB3488c6620D5f96C4e1841020184": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdC7Aa225964267c7E0EfB35f4931426209E90312": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x078b7b9520514eEc7e767574e5F0BF33C84d910a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa4DCbA3e794895A336149646781167B49ECc89E3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36535D0CC27bBE92cCEF6630253150bf2B2847e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCB6222f4Df04385ea08E8DA2A5871131FF5F6cBA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF6f2aa1B475630f5591f59D3C9B66d36d864146E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9aAE12dd452f78ae8919C2168717e7348392aD11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbE37a2275984d863D5383fe71D5464423434Cf3D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7326fb88D7F9279B2Bf237FDa4D051afC6E6fa5b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf46B47794C79827cd95F66ab66195AC47eFa98B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6855663972D7da311a235a8F35Ed2812Af2dEc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11E210FF6b8e0e39f2966D74c82C7901Ff54aa11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x761C4bb545fC09E2B7ee091810CDC4428C843074": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2705A3516DD983c81Ab7Fb17d075C77FF118d510": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAA56C1febDB4C9698CC09B6065eFE23443474114": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbBFd16b331E20bEdcaa38868a33b958268AC668e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70a13e91621a580bc6773e8D27DfF896Ba6d76D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE4c71B1152c182739A7bc488B1B66C79AaA93019": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37DD83EbDE2d144bF68be9a6686A3c9BDa6Ff73d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0DF139F84df03240441C625eAdd4A9106DA3a91F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8EfEA4475dED9A1B41f862cBfC9956a428507315": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0dF3Dc2eB13aB4784a17D7bfA19aD61585117554": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFbF559fF05E2cC602891BF56861Cf3Bf42b7BFBa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x99B000989F9615812f16962664BeD7Aa80454D21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8e45a27bf4Da9dA4B8B941B69E27107a025D7FC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfFBC2521db5f69a8339948E220814c7B465Edec9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD3d20F2D89922311F87Cd954691102f475833770": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a429aAde86EAD247E47D0A24a0e0aCAd47822c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAb6ff6724E4497BF24A2260aD9E65767393010A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D77cAD32f6A9DAB6fCfA9232e3F2fD13a05964e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAaB2e7D821C139e1F3793Db5d7350f8a7aDB2AfD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5d8270B344851D065C7f9839d3B276dB8989b2D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x97424388A67dC0d4dFd51E90e1B507D85Da3bD52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x820cb4Cdbb7C0A964dc4A628C72CD3D737D87613": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84FBEb26f4931f94CeCd487Bea6f7c88F9109E53": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaC963B7ae5C75f263809C0D8635aC183dE9A2a37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20e82da62cB356d2c73aac73C2d7036c74e84619": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2104D7cd49dE10342C97f26cDf0DBC864BE56E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x171A1146207a4a02C34c7E017a9a0b8362C8793d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7089A4717B1Da98147d5cA0f9a6F8e2f9B08285": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x346ee76f2573a66Faf549Aba1Bc34B33f323670b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0fD90eb42aD3726B8E5Dd0604D175f2aA9F10aA5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x055604cb55445f186682dDC127bD0A13357C90A9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5082DC20Afe9935C068fB94CB7666959390C479B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3771Ca8715228F72a0Dd8b9EcF2D09328da03fF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D5C8b593958eE0cB7aD6Ac2531AB1b818186857": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6c2693F5a936f37eD03CfA8465bF2D8BEFf19A0f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3b926f6d2bB5507fE711847640bA2086CB11A75": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61d7ecE32854CaF46c6304Fd536704EacD4dA256": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85200b0D9720725EA4C690b85273CBCb27a76180": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB0609EBEfD3282f74BC87E2a53eEFbc5Bc915216": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD957f18CD94bE11f28f3E744E8f1E4F8AA6F48D2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x523d0cd051E272856a2C925C08a5FBA8425c4944": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD2b19fdA48871E4fE48eA66663902c224b74CDa3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE3D37B1B353FEE1e7Bba0F09963bD6802fF2F1e9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xca88804207f350ea2714119F8Cc605078F5e89F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x515C0be0Ef8BED08eB6E5389EE6f81899Db88EfC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB609099b6BBaB96b126d2542A8d521D6ECf448F0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d6D524775B7568844fa2218D6d77265b8664Fc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38bFe76e8b15d585564781B2b7AcCB7393eaDa0a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD79B646031aE71f77DE7a50CC5F189f5c62b7A5d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDF2dBAb86F0cD5eF39Af65cE8411f747F36a12bb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3692854Ae1cE9a91Aa0Db6888105B466C767e112": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70F197468119d8C24e54531f1923D6843FB06188": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xccbb94F7B1fc2b337C77C85209999CddeDb589aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94485e0eDea98873D42ada26E74e9f06Bd76bD85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F85f16B35a6BCDe77Ff085634875CA608c826B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C9457A775015Eee6e098Cb1a4Ba6CF9b0fDF3C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD268277DE8D0aAaA312433d8e7e82C2Adc37F855": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAf79312EB821871208ac76A80c8E282f8796964e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB90e62724B6A65e0C5a918f7b407b2a3dFC6FcCd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14546125429fAAC7F3aa78dA1807069692EC7464": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBBa767e13782713a21900295A371A7F2E8A24dB0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60fB4B046b07cE529fb93598286339873d26DD0C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xda4C20Bb77eEa27a47d27adaBF2071328d93a67a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb6d522041713497504c6D8fe855c6f9bE52d35B3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xce11e75Cd3e1781202F73C641729bBB65BFe0226": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe151e48e1c0431FF64C620F2a240100F20ed4654": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x47a6A173ADe815bC1992F752d0f1eA33F5929a90": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC1a2679692773a499D6a6F1153e1A2c252E4a4aE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1C3840eF5926683F08b2385A09B87A58b771aA81": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x15E198793336CD403FA74EcCc690fC9E64dbDb78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x616F2EF297720E081eB69d4E4518f85572a6f8A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x613d440301bfB35E7c822B5226988F4e2c1615D4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c2737C678132F5Eb73F7813bbb667E7E9c76677": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x63A2CBc6bCEda3CC12fc7def000C465c20bF3BEE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA78B199576811b5078F8D38b4966A7114c1C98F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05bCd8f4D43340cdF06683359E2F01D3d64D6274": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4534b2B160217849776B1885e082b0e39Ec7dF08": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C98CDB3b5BdFF942dfe8F34A9aA57AFd1Ba0666": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4628871CBea7617765806034BA9abb12A5D0844B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7F5A75fc88c4038fe980F6CC926d540F6B824cf8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83536259e3CC890Cbb50E6B1469282B0EA9c07Ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c4b88fBE06b6B1E461d9D294ecB7FB0c841dB4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x50529509fFE2Bba712E309f58f73f22ce98991f2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7b252CbF34bdab0FB4bd971061951DB08Fa6D09": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00E8ecfd62A04cCbF2b22E7fBb6992900151ff77": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2f56bA65bdD874c0705F5Fd273A1b7312e574bfa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6D7Ceb1104b34E52c2E15b34FFDff304aC4CAEe6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0890f5AA9885C8a5B6105f66518A06B6c92EaBa0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x340209C8975508A8B6750C01Ae290Db038a275c5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7129857379AC8D36648E3E8c1278E6E10f8054cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFA122D9eE820873027411FFbDa06853439B8Fef9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5dCa7bad26550B04A2D6911BA64Bb7E7bDd67787": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Cb7ea06E9A9a4839646702cB8C9d7155c7C3A41": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA446FF71235AC7eA5fC11cF9dAB681230Bfaa3a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x434c2D9316f62766ADFFEC3b0ba9672eb7946ED6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x47de58452c7fF783530DD80BC898C3416c4a1FB1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54B325783095132A996027a622a5B4Cadc8bE876": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4815Ee939fE2efeC2f7bc415f0cE2282f6417fe9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3F5020AFBCB998DCDE5a33993FEcA662081d7A64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e5A7c8AebcDf134CBE239917DA695bEc709803e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD043889435603F2B99A64B99A065711aF3C02C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2572DE0c752336BE375a5C8Da9206e8C8D7D7941": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C4E5F270CF397bA312aE66381Aa77A05CcA4Cdf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x26eFf94C0ad04a5CDED83F1621FB9Ed6c1dDE0a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdca555a01CCbCcA90b7f0Cb3dbb970EbDc99189B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdA90a6e5b488a617C49a412A198b8187b7e9c999": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa24B12943dD600052bA36A2543f3598C5B6baF3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFD059D49f1c7a39864a4B0524945f9Eb4Cf6F782": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9B353E1814Bd8c88d056f4124F6eEcd4F570a6Da": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x609470c2f08FF626078bA64Ceb905d73b155089d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4c950B3fC61861f6651af4C441b16a8FA424e054": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfa22dC3a2F64Ec353d8cE30f798966355B7154B6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x31DE2673575c1b0973E628B8bc62Ebd0f4Bd886c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa9eAEF87c01B4C46a691862c7Ba94401394B8B9c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B560c8157F8baCDD7B39fdb5fFF10938acf2420": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCed3FC4610761F79242D7D8A72FE86F3A1c626b4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0Fa13F542c1f45fAcc537F8Ba8db3c4F91a4fD9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbE665801081aC20Bc892b0f8F9836E73e4fD0E99": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x039b17c4AA306437E6846A79820c5704966f8d04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53e06Bc69B92570059B93609c1791a0EcADE2354": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9a856E0d42c1a9D7F8Ddc0d7d06Ca27313ff4e1c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFd63Bf84471Bc55DD9A83fdFA293CCBD27e1F4C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7C6b59F52578a1bea4F8D750c5B4BB044669B5Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38aD8A093E1E6C41FA59A2f005d838eB839eF30D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x004ab0F6171FF2d5cb44b6d50cf8Eb2edc56105d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01ebce016681D076667BDb823EBE1f76830DA6Fa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0422211c02fef3F623B1dA67A116482B029D8BCa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x060e02320fc82a7Bf148a443C34920204d56E7bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0962bD7010249356eb89363Ce7773c4A53fc97Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09bAc567D73E8BC701a900D14C90c06644eA0156": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0A83985E4A6E8Dae2B67beD4f2d9268f6806Ce00": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0B997e226B63FdED87673Bc8B43bA24477b8147A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0BdA0F33311E65379461D0A555BbD7669c0eaA22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c9C3Ba64072eb566b0E9A4B6Bb0D7B204d68469": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d0C4D8bc5029E8420E1Fab78D1373eA175F4bAE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0e8D670D40F8784c7EBb1F1A67902A6086f5f87C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FCfe3C0d30b88B9b06F85DB087439c524369E51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x127E25D2106CF05D4198096eD750F9c3C69F8A1D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13c6ED0E05cdc2D4Bd7276f72D400aEc56195a2c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13D4CAbc402153Cb35Be28fc515cBe1342eb8Ea8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14edc2cE4e34d610539543e19dBeaC3ea8ac7d11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x17561E4A5E16E619e049E3A61A64F2A2564859f8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x18200c7033EBefdB98fdCf94769DA421A0fF898D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x18e8b8Fb3c843121B24e4fE7672fbc46C3c50631": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a6B4006Fb0aE3d0404228221Fc77cd03D95D347": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1abCeB40467B2E14992ed76faD18bD935e23E506": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1aDcF07389b1F6605C44a7683c50A5243829A92C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1bFb00d16514560bb95d4312FDD39553395077aF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1EE840962f7E8414092A25a216ec94d06E4600d5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1fd2166BeFF4b06230f053Dd0de8A40cD925fF66": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x21d9c1d2cDCB44b04e6DED64Dd89bcf5fcb09cE5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2322aC6e94110C5C902ac20CD6d64da07A41a3E8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x259Af9A30cd456D0D614e60BEb54E15824A85a1B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x25D8A0D5708BCa2130ccB0338E3D564d9827b07A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x29DFA3B040A65ee3fC0DA515343c18cdD49c635f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2a0DF2e096D378d3D4149539f4eFF1A0A748af92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2B01501C2E2e3200E68F1FdC557a10C82Bf05626": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b05cCa9ce08053B8aA1c3fDC276D41a82c0Ad36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b9ec7493E1BBbAa88c0a40c36963920d0a4e386": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2C8cDdB4Ed5Aa7d28fcfCc75313dE4286e0b5e32": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D9B54A0c8768F8343f54c37594E35D7e69B8e3F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e6A27556bF03125b4DB4704fcc86247D432365B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30044b7C080A6e456386d5b9c370Dc7c259AE2cd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x32b5640f17141c2e23B42C28a754c67e76fb7df6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33b346911A75e8CADB1D3bfA1E9139db59396867": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x352bF5e59A4C1a0E4403278fe5C9189F63AFDe3C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x357fe10b0CAa97c3d6cFB9987ceFA6e919eF7D1E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3595e3c9E64E29ce43aC3Be1A4cb94172f5738a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x369606Edde71fb6ec43353330796544852baD340": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3714E1078Cb6F67eF01442B4213012B16889926F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3838c954D0629918578847378Ee22e6778473239": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A39899DC78b7307aCd83f51463C853Fa79E1B09": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3Ab0918C1738A2D0d77740b477119D8dF5bb21aB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3bfC4807c49250b7D966018EE596fd9D5C677e3D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42cdCF83dE17756c8362e73571e89c060759EE21": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45A6194D91156e0B6B54bb2cB816feAD54593DCC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x468c2EDe01B07c19d90f6C9b67617d1d7e6e2200": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46C4c4781fBCbD501e11eF8D87180c44026a3EC5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x47C465E7Beac169081371969C0FcF62D10c84Ef7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49a3Aab8EBe80725646937b9E9f6f8b4e9867bfe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4A9b562176Bd1da06B3Cc265f2710251d5E98290": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4FB0a29c1EFd289C837A1A00F02457f08BCeB26c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x509dcC51971b5b77B91585553F3e7C2527c92460": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x50CBEfa2AF5A509Fe427c74512eBe19131F0f2F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5192Fa6618869fFd9Fe6230D94B0e4C8F57ADCB2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51d18E5F6FA6534bB2fbAaf90FD6f3336327fd16": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x523bE2D66fF21069840118d18E2a3Aa55A866CF6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x547370AAe88B00dDd7abD8D8281d8118803B8539": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56f2C4CB8518d0a4Ec749593dF574f7597A36140": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56FED5Bb34d8ecAe854A58502beFe1E1FEd679c0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5816BD4eBa5E1674b830fAf9E3857bDaDEA75646": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58Ef5039E1c799c4C2A454faE28a2dEE21916E44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59D2e0a2be0DB463c36038A5fd2535F58Ab3B38F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5A437400eF10265aAeDAd47CD3520C885D11514e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5B1b5D7f419C8C26a6eD51b46db09ae6376a82DA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f4d787692b0ab325DF37E0b999C452d4561A8e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f71CD2E7Fab7a8d976BD07003ebBFeeCB2B9fe2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60495321279827a6954447DA313F82970F51c7eE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60C92E245e2BB56B12d9ccf52398e4b79ff71Dab": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x612b8E8762BF14F445467d023F9f04c0C22d3DBB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x620f9712999f768600F995666775E7A40d151659": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x64368FAce21029A646d823c0AFcBB4dA08Ce9b78": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x648cf383a4fE746a0e507fBB522e6eCBFFc8EC25": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6573948AEf66B3EB45f35AB5C7516678F86d7CC2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x657A38e6994CB578351376dCDb077330D00665d6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68ab805dC4afC0B8701E45cedF8BAa937F5cd3F1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x68ACb2051b73C2342be78Cd1a7E5Ca44483D10c5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69b0C84cE54B61B2861867FEdb9fA9FF8617d40a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69C63d29af4bD1D381fba58a90b50Ca016aBD0e8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A5F44D24DCa8417DB339203d9E07D23321F030B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b9E4F287d44cEa39Cd8CcEDAA42488617AA21A7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6BD3B05516CD794fF8ae28648fCdFc930C1AbC42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6C0d470D97ef1F230EEF10A5c848AFCc8261ed67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E81417b312917305d12F76Fa3B6bd66FfAA75e7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Fa5cF633f5659BCf10DA3b6cC689C1d283116A5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6fBfdba3BCBf9FA6ee165C72714ed814A0950a70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6fE797a05359C9d91B1F85D418e2ED4Ea6C65a8f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x708dF04E03AC02c440937Be6e631FA8B46CB89bC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x71b700181b31747f28a7cdE2c26b503A2335c0ad": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72495d2DD7F0B1EfD05ee76A1C582801386a9320": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72C5cd18A51D53Db34072546A7A38a4f73600d92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7495f82F53F151DecF4Fe96eabae4f395AE3e2C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74C8a1de411952EC739FBc6b7aA1994F1d62d29B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75AEC1D6Bdb2d63BeCFd6c65A01f3E2175B98A62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76c2CD1b8A249F465F8445c455CB78E0eeD36f1E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7911Fa8d5bfCe62ef68B714D5b51A65A5732B101": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79785b784d43e2fCC6A675728B5052B8E4c4c7f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A0e7ADb1B9A40a4B4656ad55102d46DFdD6C19d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7a4d255e48646BBC5bdc1378Eb5011EBF47F713a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A4E47a4E99e7d5Eb9BB5A619E4475D1dc7B3ab9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7ADFCCFd3691A99530F632EEc3dC480419ADdd7d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7c9EB06DfBb320d9eB6cFF26c83B0573C5E38C52": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E028136AaF176B8E338581C0e62857d8b7f5ef4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E9d2Fa27745A7a61b5B433D6e413496B2Da9ee2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8074Ed7AeA09a7F371aF44daBD4De6C42839929B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x816B673Bc7cDc2afb886fA3b745bb2C02b9DC8bA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x81b9aB754fAEb6233879a942Ea6a4825504B1C92": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x821Be125973279e5ce5eACf2F9360dcaa9caD53E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x82AB77185a80A5B74C92d679a02b28B115F21962": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83B285E802D76055169B1C5e3bF21702B85b89Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x84d0F74d21a89F86b67e9a38d8559d0b4e10F12d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x887e8b6119B38C60cb03CAb204C0A704c6E0A473": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8a6EEb9b64EEBA8D3B4404bF67A7c262c555e25B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8a87448948625e7eA7822BfF2C740C5CF9723d4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x90aD55E2B24be2f6e3fcD1aF272917772A2Af79d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x912211a1eB592e005c516931c8dC00d37C2f1f22": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92ad59e397363C7B545f92Fe2ADfb2c07cCBaC65": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x932c5d4C6826857A0389ED351b56355B54CC49f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98A529e3488c2d44566881FEAB335B17B1c3b430": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9aD92F7f5EF6F4bFf83c2e10298A927f0Ad7952A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9B4C56c1C45DbbD1d8189c570a0f9cFBF4190524": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9cAb916493D31D1114a1D4F9a497aA886c1506E9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9caC3CE5D8327aa5AF54b1b4e99785F991885Bf3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9D0a96a24d9c4033C882a3c4A3c33Ced4254581b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d480D2E3A1a3E5Fe678CA8b932B4cA7d1503e2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9Ebc0B1Bccb2C2412B661510F2b2e67828347F0C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa14a711E5D6F38bCCF81d703cb8a949f9A1D3cBB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa23b353346FD3A359EeE861ADae774c2A45B480e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA4983222F6c9fc2371c4E09390BdD81AE6EF324F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA4A62f7127C644AAEf733029E0D052E411fdafb4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA529DbF959fc80F9Db66d990b47Eb33e26c416a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA6A2D935363669EA08723798284bc3Fcdc58f9Cd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7195C71AA20481fA0c093E51323F8A4D3a2F5D2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa727c0fB46970024D43c03f937d9d271943823D0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa762E2e666e70da57fB27d48DCF16b64535cB170": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7Eef766B1f3F3d31A0c7C6Ebd0B3f31e9a87634": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA8470d7e5052F64f87db7E5D40ca660cfe339531": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA909be1aC709Bc08Bd8Cd69604CEe197360b3e33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAb99C070540CE0aa4C7B978584A6edFcA5af37CE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaBBf75A59AC8838FA46bd5260501B68ab28B95f6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAcb17fC73Cf202EBe532E107cEc195d50Dee61DD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xad5Fca9974C2e8f2Ff56718a65BB6f93F3d6f6C9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAe5328c6a42B7a77fd0E3C910ee5470fE37302C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb119efDaBF71E3B38CDFA393Af50e972a1149e89": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB3bfB32977cFd6200AB9537E3703e501d8381c9B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbad30F9f758e4c533Fb9cde65FaE5154f0430148": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBAd447203D16Fe48d7c2C42032B49f392aC055f6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBaf88B32025AEAEFEE010013dA46098382475DdC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbb1bf082b1a61131D3345c1f99DA32aF592Da2fB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbfA700eDc21a6Bf09d22Cea1BBA95FC54e7b6dc5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC01BbF841048c8357c2E81Df9d08ae43DFb80942": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc12DE812ae612B6d514b52d529F97f6Acb524c8E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC14352aD978771051F46A3c8eeBd43Add56A6899": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc6302894cd030601D5E1F65c8F504C83D5361279": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7067daE9F1FEb29F2deFfA090Dc39EF4881f215": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC766545EF68b49E5C70F4E04C52a9caf27b9A9A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC817EFf12fD883b20b9Fd91dF00B029390EC1FFB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC860c978Ce407b561bCBB9121dd2668A1a229a5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCcDb3B5F90B0D5FFfDFCc5C5B47966F6b4e5ea6E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcD7d70Bb7034102Ee0C828FBB83776E0137DeA8D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcdc0b6ea0875E8d7519EdF7942625111685D6e9b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcE29cEc7552ab3c9Cf5264Ed96081c2804C3ef07": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcff8097B146Dc56f40bDf34e18e0283dd404765F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD097E117F1FaDad65aECa97c02DEEedF2bA41144": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD0FE971732E547059eA6009c79a2d6155bdb41a4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD77ee49BAD638Da26775779e830339dc3F61edE1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd8BC0F7888b26e1c71Ff43b487e8C76871D80Eb6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDaa8cb6AB1C9AffCC012A5A023EF1B79f91c6297": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDAADaf4F2D94cdd4274eecF794C3d5c27F647476": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDB0132c875eA7A00c4a6283da592ae6500205396": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdB2B9D473014d8c6A5E55dA92205199457Ba6624": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD03f927926C9aE1D06B0760535fF10576CE87e3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD9502bA6c0C012047Cf21473427a1f2A8b3A989": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe087e491aEE404c189E893c0E06f3E23A8575CCc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe29cE1eE78e2c4FBb1045A4d409F6077b21E0cDc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE5227F141575DcE74721f4A9bE2D7D636F923044": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE5656D9cF64FF41CEb7e26E819D70df8B66d1595": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE815443C879aAb2F4B6aAcAef34464D719351548": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB1b02ca1302746B9c71c845520A1b7E0ECD5777": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeD2e383243e8c6bCb65870Be017bD1104D74B8F2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd49897346840472CC0fE51a1D7E2aeeBC30284B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xee1cd2CD8906A5e03b879FD1a05E9D08e592125C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF10fb2fD902cBEB9bCCeF76Cc9f4756efF76c92C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2ba2EAD3D26C213721114a02E0C56D8631AE388": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf63bE97FF407E614f9Db7E7ECF8CE1B087b5f644": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF712aB8c4505eB4B36a2Ff9Fa746470be81E6538": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa01C614B923a3A6574719574CA4311e8A1Ae08c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa537C114EDd1D85a6019222C1c0e90707d2088d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfb7405075f2dD0A2aacA6cA2D87D56e09577D6eF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfc3267Cc1eAD34059f43A70Eda456b29D1D64214": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfE351F5Ed699fd5eA80b906F89DfdAd2f885A46C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFE3A593fB8a90185A8E31eDC8eb02E7d889D52f0": { + "1": 500, + "2": 1000, + "3": 2000 + } + }, + "PUBLIC_PHASE": { + "4": 500, + "5": 1000 + }, + "ABI_roundBalances": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "name": "roundBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "ABI_totalBalance": [ + { + "inputs": [], + "name": "totalBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "ABI_userInfo": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_user", + "type": "address" + }, + { + "internalType": "uint8", + "name": "rounds", + "type": "uint8" + } + ], + "name": "userInfo", + "outputs": [ + { + "internalType": "uint256", + "name": "_totalBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_startTime", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_lastTime", "type": "uint256" }, - { "internalType": "uint256", "name": "_lastTime", "type": "uint256" }, { "internalType": "uint256[]", "name": "_roundBalances", From 62b4dbdb9a0c2bdf1e370cce816cd764e2ee703d Mon Sep 17 00:00:00 2001 From: Shayan Date: Thu, 4 Aug 2022 22:05:21 +0430 Subject: [PATCH 025/406] Set mrc20_presale testing start time --- general/mrc20_presale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index e1b25b7..5a4aab3 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,7 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659886200 +const START_TIME = 1659547199 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 From 48f8e450ae8aaa3bd92246c632fdc03509ebcc85 Mon Sep 17 00:00:00 2001 From: Shayan Date: Fri, 5 Aug 2022 13:29:17 +0430 Subject: [PATCH 026/406] Fix mrc20_presale start time --- general/mrc20_presale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 5a4aab3..e1b25b7 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,7 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659547199 +const START_TIME = 1659886200 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 From 6e9278da201f1f46e76d3c03c33fc17d6458ab63 Mon Sep 17 00:00:00 2001 From: Shayan Date: Fri, 5 Aug 2022 14:13:25 +0430 Subject: [PATCH 027/406] mrc20_presale on mumbai --- general/mrc20_presale.constant.json | 3 ++- general/mrc20_presale.js | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index e3adab6..92ca012 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -14451,7 +14451,8 @@ "MUON_PRICE": 0.02, "chainMap": { "ETH": 4, - "BSC": 97 + "BSC": 97, + "MATIC": 80001 }, "LockType": { "ALLOCATION": "ALLOCATION", diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index e1b25b7..55dab96 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -44,8 +44,8 @@ const getDay = (time) => const MRC20Presale = { [chainMap.ETH]: '0x38451EbEDc60789D53A643f7EcA809BAa6fDbD37', - [chainMap.BSC]: '0x0A3971c81B9b68A6c65C58dff7da92857B334b41' - // [chainMap.MATIC]: '0x10b09c7EE431C477267f85b27dA7C1D230715E51' + [chainMap.BSC]: '0x0A3971c81B9b68A6c65C58dff7da92857B334b41', + [chainMap.MATIC]: '0x12F6cF9ebfC7c94E14488c7eeBa9d0D7808737B4' } module.exports = { From 778663e1e299d25c6e9ce396d5d2ed9178016473 Mon Sep 17 00:00:00 2001 From: Shayan Date: Fri, 5 Aug 2022 15:28:44 +0430 Subject: [PATCH 028/406] Update mrc20_presale WL --- general/mrc20_presale.constant.json | 545 ++++++++++++++++++++++++++++ 1 file changed, 545 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 92ca012..51e6d0a 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -14354,6 +14354,551 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0xb3D01D33Cd613a24C2890C9Cb138224f0F7727e6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x120609DA75Cf68f9aACf4d7E8b627eB9186BA27b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D84CbB9a498CFA03b6a012fF5ee30239a5689e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6774d4be0Cc524e8350c82Ae0B76414faaDF657": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1ECBBfE153c46347645f56096A214D982ac53c8b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc13c651022530C4dCc86C1bC020E08d67EC0258C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3B807021a7E6a280CfcA369e4c16c7c9E188D336": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x72b590E6D43905b9ed260E386C70650f1d205E77": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe675Fa4562D0B9071E0eff4cA2155497362dBe9A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55A77770FbB3FB0F74E16790A6d30986a40D3095": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4FE331fA48CeAb5859e863a39291832b5Be41047": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDA639fBB9EDBa66a84e20D1f431A5b32DDd4E40B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc7076A538613BD0f1F5224DEeBaE10257170B41C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5e5FB24f4810c9D00B8d65d2362c98C866819Fe7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60DC6E1E712D664Bf5EbF705F06f57a1A3dA3d8b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f399C16058cf3e0A243c2550225C9C12dEFb64E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD72c4196f98Af2dC99D588560d48381F067eb19c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0f0924A3a5111e7987A23a49Af826D2Ba431342e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x812E7d9c0bD2927565002B7dCD75A7d90Bc7E09B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb1999d8fDCCF171CCB71c3d36D1823056fdD92E1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91d5ab4c81dc76bC9999E8C50bF156ebc6eAEfFa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x272887cD58C44456950cD7e232f9036a54747f2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x89730C1655a8627090f91e6CD2ffc3034bb249F6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC71eDAcFF5C37002d7875c228271bfb6C6Dc39AC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59d05c0F50095346814Bb75CaDf6c5D51caedAe0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x868255d70a046207BFE85b4650B932c69a10eda3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD39ec0556B27beA894718C981470A15724278585": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x21eBe4b94f05C9c1C46dE911442aDCE83752aC77": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3d40Fff6eC226f9Ad0386362303B6167275bCf84": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF8EAC62d1F82e223946e76A76D859FF01b061e38": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x835a7449b33e041834f4808B488DB3dBdB848103": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A2A6d8A7E83CA6eE355A8eC9D3f34B7Ad04b461": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4f7a24Ed09D102e88fb784875E175c2E4fF2CE7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8FE2dD17fD7a965Ad976e49c4a7039924d0841e5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0A5aBC4eEF196994abb9cd34fa8FE9229Ce53e4f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x05cdb88B63e609c0FD52A6a9D346b5698FF6F711": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x35E3a5f9A59A441f5b87416eD68eb99753e59171": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD5F6812971692117f581796147D2D3a2A579737C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7E3Fe90Ac8eA3F05caCd2D603Bf7557e612c2d2B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCB004317eF3Ed46614eC6f9f2620322F6c60b002": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D86E97BaDA05D91b6C6201A4efCdf978D1807dA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6AD47da9E7f7E388A18bE66b47a1fB00bCc26385": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd7f2cE975c31Dfb2A8192ea6Bc997c3ed6ad035a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCcF5958bfB86AEA25e9Ae77598C558f37A91d2Af": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA719242e972322d8649226F9FA4f9E51B0d12994": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdB9E450Bb772F63425B9f6dF81D69f2c3b8EE832": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf647b14BE659030265a6e7069C4Ce4Abc521Be83": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x02aed212B3317Ee947Cf8e0f2f0e525D6f979b69": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf1d968251FC105da8c42945Beaa0AF7486340aF1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc591AAeec6B139b40Fd7d91e1AbcBcd940fe89B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD9f503D5e1F73fB65bdd78622C157bEB4247D758": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A251C79912a13bFB27e33CD2a49bFAD6398b603": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x80082b41484D9e6Cc3cD58671133AD390Cd7b758": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd6418502e12FF5035da103BA803b20a3DE62db3e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC9b75b00592021707fB5BEf04478c3282c642ba8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x219f11717ffc71C986341F9Af92a3E751e69963E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6E72810381f368b5cb1d295cDA523746560CE624": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92Ab42FA628395F08B8E2aB8c5f534b76925F90A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x940a96F3e399441324C46E9fD7A3d2Fcd33aA3cE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59d66B384A75433aDD7FD55B04586254F79Af94A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x663211aC27b398AE6174d680d8A98D645Ed4311d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C0D3D691F54cAfD2Eb9d791561033Fe6C88FA40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x425C003EE236f402eA423C874d158CDDCc041fb6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11A42dB923dE9bDe2b71186F832B1f890f999888": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCa3DfAd2f5b498C1777B3B37336678CD29e0918b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96B1F3b3D0ACcdac89527Cf5df1b029DeC10e6BF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x94EB7F76d293b612308cdadcc6913F84a51C1a5e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc07b99FF180D91CF16B4a9962740574cdb948255": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcDe7e2C01A6d46A693feC66Bb04155Af04f8235b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A78Ee74D3FA77Eebf56797f9bB3Bf06b6878154": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B82ee7171B8eF20dAe8A51aa928b8B782C6E2e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6523474F7d873D5B20f0c2b29741B0E324B25eb1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x624779b38aEdBB7D18A00c3CAF0e2359a5598F33": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9647712f9e87FF28b340b362aE535f1117Ad92C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4513D1a68b966a6479BC0dE4CE9c263cF41Eb2a4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7a2FF84eCA5fB343A836C51EBe07Bc2bDcEd238B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF14F8afFA6D0649a93C2b750A87C31951360403e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x781b7fA9Df1dabEa1434ECF506d7A072416bd69F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x585a9b66aB66E6caA7573Ad3c107a451B6E3EFC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x58EaE5ECA3d582FD490dA59ae7373dB7bbe3C3A0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1716824aaAb9A9b7F8fCc4bc9a66228246d8A036": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb7EE483080b3B1a82E24B3c80D94C5C1F536FDB7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2e46Bdb8523e5D7D456387672B89BB0bB2503C37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8214E4Ab4Fd9212b7e14d97cC0bbA6B9F4C37FEB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa362199187c7f56fA86A7A6d2915F00e058993a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEC627c40C46F8649D321EF164A8f690ec0ec363b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x671eC62d8654F3d553dcc92CB833C5D0231903a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaA00cFfaeE2D8875E596e384325aF4e3DA896B0B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x762b51224aca29543e7Bc921FF5aEe9972F71f68": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9bb7C31Ede9e2ca3589f259d14D04703234e38C2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1aa20365bB8A5716CA617090a0A0F03f17FcB805": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22565D4aA4e28c676ed87F338B72Ff95283F7Aa7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD65a892cF2A71383227f56886af6D0EAB38d5552": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA03a01faa16f71fba7b9a1eAbCb32bd316A9102a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x116a75FbFc55C26BB98E18Ff7d1a13F1Ad672847": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0898386F273E358A5Fe02689Dd65AE2fCB9bc944": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB842ee848dFE4786fe6272AE75E7605fACd6f4B0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x010FD814EE5845f7FAF173c313898a853b4C9b49": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc02e8a8f2C59da42d8f0cDaD9f1AFd2CDa37bd8E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd88D0dE304381c96d54af059Bea11958827Cc322": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9e2dE6c3D858309D44B8A961b16A74CD1D21a35d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08Eb0034082e7cECC9dff0CEA5d6d247F83782d2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6628dc0Fd2713542278099fCa25dB9cE53750e54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14A6e7c49A89e6e90449B8e59AD97dd8e0Ce8881": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0FcF993690A7C27Dcbd1bdc7873dEbA7b54b2ac1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51Df140F1AB1C237Ba037531715B9884C92A0f05": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4FDE4984945Eb103a448859B689CbB2593125f6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3733E56a86313c53Bc397e009Ee749bDaA64f089": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEf61EfE8dBec6575142E4600dfdD5c3E2dD0b43B": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From 7fec87cfd1092834a617db23f20ba49e864e0ede Mon Sep 17 00:00:00 2001 From: Shayan Date: Fri, 5 Aug 2022 15:29:15 +0430 Subject: [PATCH 029/406] Update mrc20_presale start time --- general/mrc20_presale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 55dab96..ec4ab44 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,7 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659886200 +const START_TIME = 1659547199 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 From 2fe0780c5f53988fae2bae84766ef0390e253747 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 5 Aug 2022 15:46:13 +0430 Subject: [PATCH 030/406] new WL --- general/mrc20_presale.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index ec4ab44..55dab96 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,7 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659547199 +const START_TIME = 1659886200 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 From 44053e3b5dc00cfa6a5d53b0e74c71db133f1052 Mon Sep 17 00:00:00 2001 From: Shayan Date: Sat, 6 Aug 2022 01:00:55 +0430 Subject: [PATCH 031/406] new mrc20_presale WL --- general/mrc20_presale.constant.json | 2075 +++++++++++++++++++++++++++ 1 file changed, 2075 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 51e6d0a..4574426 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -14899,6 +14899,2081 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x014be818a11c6ebdF861ddA9DB842d1EA19884c3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x016b24e537C7955C6fde8E3Dc0B00FFa40Ed19c8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01C81C0E0cfd968A96CF08E3dC32f395A9dC075f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x025f4d2D2a34bb022eC22609F01dBdf18Ad820e5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x02d6379C1106Cd0dF0D577235fb07a60b8B67dbc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0302B4753daBCa3002bea69C3D94B2Af202926cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0346562BCf427797CCe8E3A2Ba12808240c6d644": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x035eBde12D8696F95a6434fb2e38B913999B4597": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x037F222cF644003977bC5D77d34aF4CccB5717A6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x043f1d06806Bb1de6aCAFf98B078dA1a6Aea55E5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x04a489Bfa9812537cD87b96C17878aB1A14A111A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06355362cd8AB65f6349535D0aAC83Dd911C3d54": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06827Bac9eE04469908C445BFE65fB0937e93DFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x06c29015b9C508e113F0115C635Ede60aD7A7552": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07f3Ff063f09D05B6653226bD6434c78Cffb17F3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x09974c785a4a85c29cdd385BB3Ab93B39382a52C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0a4E2Cb1b5FD3C5BB84F3240c1ee58d1509D5a7C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0b905cbCA202E5C7fE2dB52497FB579cd8834912": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0c8c97A7a61CA505676085b5F648888Cb887aab5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0d3409eEd02927d6298ab98BC79496CbDdecf0B7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0D44dFb5EBCDbE4027fa41EaDd5d6A5d7E8960a7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0DB32190e72011f15AC925180180D3636e19b3E9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0DD39Ef166BCc021845541ABd1E9D4E704175600": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0de4348c28c4e9eF19d5Faf4024Ef6653c326ec8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0e37C8C18BeAC460d067301B35B29e02c73f3E4D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x0f480869123823AC6c4DC103c49B155dd7c4d976": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x10277bAb3F27C6BDCBA787EAa5d965f4b0631a51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x103a1F94Bc38313Af8724777Da71201e40ADeF5a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x104f3DC171f5CE1d1501A49E664bA1fc30252Dc5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x106BF19D7f44dFd1e4D41b0890E568Ad7Fb5e511": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x109CbDCf9e4F6Cb9EA56c810bc26F06f8b1F399F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11c4820c6869d43f3b49b7EB49dc6C09EeD12CaB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x122c396F4CA9c47a25a4F8E1EeA1181d54064416": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x129E8C8B812cEe326c67854813A567b26df95b35": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12fDD8f4EdD6dF194B0b974F21B1195Ceee074FD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13e992828a741c894AD19E222409E7F0c04C3450": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x14da174FaB1356466aF2dD0ecdF94204E828A732": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x175079d96B783C9e9CE35B33C2968b683531ea6B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x178efD8eB94973c098771e019f605EAC661FB877": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x182F8fF18b346128DAc807B9A9F6B42D18b085e8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x18E06d7b6f0E3fE0bdec60D1eD2eBB741b16eaCA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19799F272574079A8DD591C13F7aeD0d2f7AA011": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x199550F63D9310fB9a1c3BBEF4885bE47C57f671": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x199A6e09DF848ebFe2742D0A7593f082458F0B2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19b075506BC3Ebf77458cE859F1d0946bdc2bD42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x19c812Dfc372D5e7DE62bAfF9d7aF690CA748C3B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1a24e1894e63d5F72eF942b0831c23c3C7A86eFb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1A2B292661f0102C5961aFc42b278fE8c9169234": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1A7763db12aAD02c8205b6A6dD410b7e7323f103": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1aa275AB736A3E9e46D59bC09956d2e231cEF8AE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1b27aBff69B361bc340257D5Aa9B90D73849D69f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1B71cE88e2c44C75d934Feb34c0Dc2957bD67Efa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1C00268fa3499658124b8FE6789D371c0a22a21F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1cE3b4905ECEAc3dDEDFC54bE775B5F7A627001F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D4b8462DD9F7fAa60944ef40B59E1b1e2CF34a1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1d9A2C5086FA5f4bBBd7e684F3f16eD44d04Fa5f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Dab2Ecf63120e6984f0317753631BF61dA796bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1E0ee6df90A1c7C728941984D7b4b0a75Cb0b9f9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1e8E41977C98F0D4096161A4ea787CFACF43AA1f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1eC15619A918218d708532E2Bf2feB18a603FB4c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1F0A7C2Cb53d2fed8367fc14e4df92C6b7A2792d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1fE9eCDCc17a43Bee49F1C231a0975876211d2a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x205043ddfa3F742bcca920332bA1e6970701cfcE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x20a608d30b77773936a3aB3529d339B61dd7CD3d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x214E59A2e789f5D5881699401145ac72539aF6aB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2184d88114f300050841b82D7C344049278d5d82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22138A0CFf84952C018cbcBF5650149017d6b292": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2288ab0f0B81E6632c9154B0e8Ce0B23Fa04eabb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x22eA42Db843da3bd47bB9dB8f3d667051C5c173A": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x23e817b3982Ba0E033daB4fA1B47088418ad6B2a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24c88e9dd60f43Cf95c328a80c56A67e6652E283": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24e9A18A75fAceedd14aEeE845C0b8c66f112F91": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x25B8bE9b48ee6255ecA197701d6CE5B134B3BfDb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x261B7F2e6C6d4b334DE0c07B0d210FbD3c00bDEB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x27DcE6f08b87552FDF60e4AC7c73134Fd9158751": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2860cE83720bAB73B28E0179F64F2EAF810fD995": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A369495c5108ab93128a84f905EA26566416428": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2b552142947509F82F66B85C9fCD67f8668D276F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2d9039cBe219420ab16d31BcB7a37B395f0cE394": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2D94Dc4D69DB8eCDA720406C118702c0719b4345": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2E8fFDE281D9E57EAA0c901847cebba7620b25F5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2EeF7088F91d8052635EF19812fF15B4C65804ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2fD994BBc9F11C6850837C35E4f78cD6D1830451": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x30Bdd34bE2e07D078cfef5f2CD519aC9f6CE105b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x310D4fB2845c3e0C3C57165198D65a5327a373eA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x31aD6af7b06c0142A8580E1E45bBf181073bf861": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x31CE4AE28D04791f8dA6e3810CeA7D151C429498": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x330C17CCD25839DC9Aff158A30Ce42959D249EA6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x332df51FA1D8A2e83BCbd1069b771D9B632506E8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x33d835ba506684273A1d1D07F2F64d63de389150": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3441c49613F556c0BF62c788ef2C608eF8fB3899": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3478eE4fb7e8428C26Fa33fdB326EF292a565e7D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36C4C53bB6b0B8C59E98b35a1EABb5d43B5bC27F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x36fd602017149fd6C2161275AF8e8f2F19198e19": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3720E6888aF0C9f5e3b3197F133924232adE531B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x37832D81bc156a89E689e38b9084851A3806F828": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3823a62339C5E9A75990EFd1F91CDeFf73bDA609": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x383f554CAdc3Cf7a7a2C1f649DC947e86d995ef1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x38F87A319b1E151f8cbA032b2793336e1B675aF1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3967D78660bCBc95c625d58A40C42Ce10bd905D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3A92b4BF4F6528dD12F8b0fEb4E91768F65Be781": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3b2cBBE7fbC39846Cd15333B0e2F3FB89eEADE2b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3c0dF815F5F8B7eEa22ff813C87115E0724Ee42f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3cA99a967825891e2Ae4F5F05367AD7fA83f22a9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3cB40181ba187cE92ff54700767FaFd9E537FCa7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3d2B23962EBCc882f9f65452658BBBa9Fa72d170": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3D3a32F9C980A9187Ab451c962756E6E5E344630": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3E13Fd392d3FeB075b58F309d84C20698a54c10B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3e763998E3c70B15347D68dC93a9CA021385675d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3E7C338b289739C0b03a75b75BE452F39C5B0909": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3fCAf6660d378bcdEBB3b7202BFB5cf24D0761d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4077895A30d974D97B332fB08Fd556c8FD9c965E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x40Bb0bE4171a888dA2a6C46aC6aE505A63FB3aE9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x41a6ac7f4e4DBfFEB934f95F1Db58B68C76Dc4dF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x421A8C6b67b3296686e97234f70CE15F06E1bF7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x424608494b4b1E6e4D8332518B031C4110aD2F63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42F71eA87499A5bEA2392C67393067019F278b25": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x431DEC52A66166A70916894Aeb8066C09bC70Aa1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4325C590dd27437f08ACEd052608Fc3dB9b50cD5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43DA6D2Db9651b7042e31FfB2607a7cfa4D5d03B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x43e9cD1EF23328FB57EC4311D59f735ba3049abF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x445b15d3a66b7CF053917461aa1977487Abb4cC6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x44BAB10230a34dc0507c0EB78d6F102F85529827": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x44bD6FD314dd5AaE5100f7A9932575207fbc3bd2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x452E44cE2a663d1a2DEd60123Fd2F82813746ec9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4564d6d107a19d3AB3D734A7BaE61Eb63dC3d30f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x45f54fcAb459Dc0314E2DC624b1FAe9CeE86DE4e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46020205aBD2Cd506E135d8F36Db5C48D1C0183E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x46537463cc9764dB02f88a9B944ad8E37762f0f4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x465FE8f2122966769b3d9D1E7391Edf0ac08CB43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4668B69ec8a429597Da7530a8e328f6CFB96D71F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x47b76e31783Db38cbd07bCD18e10332eCC73e42d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x485AA53aaC176Ac4e660E543E142f21e05A81455": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x491d927Fa6c49460446346cc93e7B5E75B0B8c7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x493409704eC5e2eD28FDAd4F48638532228aC693": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x493ef65D5bAfF82ca641535D6Cd0CEca3f983B7B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x49dCd925953bF996982eD052d8596eea5d394aBf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4A8Dd3B6F747cD77870fbdde3d6965614fc468A1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b1dC13e925E3780Be3a3939d0a9D17dBd3Dce14": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4B36eA0fA1A457Fc0382830b744DFcf7Ea3232e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4b8B235c511f0c830264c7761520b1F9AD441716": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4DAd6C0A58E831d53376b0537FFaB523ccFa83c2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4FfD0A59a26cB2Aa76D403215e4cC2845C053994": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5016eD57a020c8fa74ad3B8065AB0bC6dB5BBC71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x503F3fF2D2d0E13aBDB741c01cA1919783040d40": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x508b0907701dFad406Bc80e7833Fd60E267e26BB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x510C5E29E7d7ed78D4A7D81D98BFaD8A2a67B45D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x51256EF00c2485F3A40fE1b6E4E779147BCDbb58": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x517892D11f4A74cd243486353129F8BAa8ba4D1D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x527465920dE22AD83bAE0043f0bf975D52C9C63c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x52C30d9568D307103f37b02e539465232E43Ec73": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53991Fc4222034093f8f87dC0D4D1F5589E6142D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x53eB9A6f34e1FeAD9Cf1013c7058679bcA6Acc43": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x548a22B15ca1514d8f15C38DFE94FDFeCBaC7633": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54973fA0d9D95176D906D14767F83F95bAd258ac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54bf48b227Bb531B873a4Ce734B592397aDAd6F5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54C552536cc861025004Fb353c8C161f370033eD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x55097b6303245bea487DEb3cebDC0Ac051A74080": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x568702B2cb692BC26cff0e8912af56EfC70365D2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x56b32744bb8AAE79f34E7701E581cB6E2136E0D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5897eABd827d38A5A8042051b9210bF6802e89D6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x59E0a6A980DB4EE85C5381B3bB648f23BCCFF320": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5AAaceDF5a180e084d5eBAc2E55Ea484cf0d2780": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5ac8fB76Db775A06Be1b75878B7a40C0cca4694f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5c58139C5955cb066D632296Dd215EC0A21F3FF2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C7Ab8A5f02ACC6Bb9d1F5304C588bF8472FfC86": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5CbCc0Be797C29546f07Aa6dE0656B5eb2c39800": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5D19e5B4149977f881aEC388F7F496a9273fD833": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5d9D5c46d70A0773f24d804E686b2EDff9CbF120": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5e194bdf79Fa0C07c82c18ad34827D1361B5768C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5e53Ce97fCd3AbE46F1aB45abB3e9A9C5e19F193": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5eADDA0D4C686978982a633fb06910F5a2FccfbE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5F4eCA85055ffF26dEcf454d49c0E9a1288A65Bd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x60Ac0b2f9760b24CcD0C6b03d2b9f2E19c283FF9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x61825E221C03904735470dE71F9c300Cc1Cfa37b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x623331FD48abca0AF5457BA39b8328979C7FABd0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6410c5b7f69999a873e72799248BA5318e4EECF3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6457de6e702bEC91eb98A7F3c402A2071081a52C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x66215D23B8A247C80c2D1B7beF4BefC2AB384bCE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67c4064fd8cD5693458d5efDcbF93DBF4036384F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67D145890eA91bE725C1ec5083b780FE6C323340": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6803BC6e4Bd209537eB356FeB03c66bA4A383f1C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x683F457588AB0ec7bB85bB7e3Aa072598CAf1E5d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69258d1ed30A0e5971992921cb5787b9c7a2909D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69cD1C2E13113C09a22Ff98cBd2dB3f682f716B4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69f47bb74b855Ada42237E82E65CD724764fabAa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x69FF5358fAe4bcc2ec6db6CdB30D43d129291709": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a02225eF927f8c617156B1DDF883293895B109d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6A1Dc2f320AB982637Dc4b67de1C0cFc4Ad988B1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6a9696899e5b114342882C358ffC7C4e620e88Df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Ad853CD2725B905e68a71Eb280358272Ca09031": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6B581a70f2836E33f3BC2054C15d41FbA0BEe1c9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6b6cA48DA27304eeEb1D15d355D948f68b852733": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6Bd03864eB009D8c40E1DE311571EF7d99400b9c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6CDE214dE4A7d84DF4542E1Ae0B7D4B2251B910E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e4f5c02A16391bBeA4DC1716AEac25e1E16594c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6EC7b4FEc23015ed9daA8dBf0E3573DA69e5d36E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F50142e432B0f6cb851D93430Fd5afaAfa0734a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x702c0Ca3D5F5f057671074466311C5D780413932": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x703BBaB0162d68a0c0A9378946CaacED668Ba391": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x708B1eBc569D0B4D127fFd2aC5554EFEC032f0aa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x70aBb00D2D8C91D1AF258813077f5578E36cc465": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x738FB9f770985FcaecbbA8e768Ba01e450e8d42c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x73b085ed81Cb4f15b16E47D56e4d04091FaB0af0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x742225dD6db03281b995a0bF02FFc73901b1285a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74Dc445C8E24919975E63Fabd3841D13FD0d5f9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x74Fc147dCAcdf2680c3219c80191121f2Ef2258B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x75758b00b65bd3975b312f878B4501B8028655D5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7644Fef96321e78d0158b7B432ab9C58122f319f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x765E9AF7210c2d120096cE5b5709e8060B710474": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x76937f60b76DB3B5330B2d257138F994dC160Dc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x771e326008A72af5aED672d21139F41563FCfd79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77909cE2B49F3bbA4dFD47Fd6B19367BA6c2B9Ff": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x77E2d5Da7Fb85093f91273aFa6F175A7aC102F04": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x784EEce90BF1b7d01435E5b245B48A1803f7977B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x788768A0D0E4A4001Cc0fCa94fB6FEe61aF09Ea4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x78eE7f30a9e1A2B1BE52E924c9fc7b608177D772": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x79269C79E84AD6D9Ed1B913E1fb30b26c8384629": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x798031C6b05A37C4891E6928B1C85fcF153f5D70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7A921b0365B4571beE00ba5A1DbB422B11f13F9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7B8d06547E130B3BEC4154e08446E98D9a4A2E82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7CE3E44f1c02D35e530C03fCff19De23F15Ae60C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7D13Cf5cBbCff7E486FdbaD944E07B2986B543e8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e9556F6316Bb6136105CDa4AACF3313FD126Ee2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7eAf4c40ee5040460c4A4a88a79a52354F54D823": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7f519a1051a8E091e3Bef874A1b6B50D9b8295f0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x825736E7336232CC595C345D049474226Fdd154e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8306c0f306D39c5519d5990691f905602F1D07d7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x836e71f16A53577eDd2Ea377A8aB29A90ae0cDc0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83caC5A5ecf6565d8165f5B325A918449f98e96F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8420380129d50CD6776270137159e8014A42E8a4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x842B1275c0709bC1cC0C6a91436fD41D7539Adb5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85E64a5daf11a93167f16fFCE5433B523E3287FE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x865f0788353c97F3FaB89D06391273758d54Fc28": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x869550eA9086C2b0003Cf1D173e19aFC264a5A67": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x870E3f1f5370dd773Dbc38fFCC1C8B833Fc1DB3C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x87251A5e61B626EF8B7A6086D892773Fa55b1756": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x876E6fD1961F404F9a566243FB3537BA62BfcEa0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x877c33005a9d1411D9979072a3e7E09AC484d70D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x893A5AC0Ff94C3F69Eb55951cE6df58aE48B062E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x89e1cfCC3bf93De8dA0fb43A1311898067B3A11C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8aA5C1DF5d05fD558AAe387666BFcD8809F0344f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8b3018ea2598bC46787e538283904d3D3B693EdE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D574eA53C9c01E729d8ce5F10E0456985356Abd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D7E07b1A346ac29e922ac01Fa34cb2029f536B9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8DCa2940ffb5563009B2D380e3eA66776C71872b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8e73f82BA1fd5cAd92e93eeDae12F3224e1dc9Ef": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9050c755691E9089E08aDee29462BaB6b338def0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9256af19DDC0CDfB92bEB486eFad4a40bb3aabB0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x925fA64926F79eA71fB28187b6D21B6c4EBB9701": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x92f4674D8DBC18841c6729eC4D5F5Df3551FDa8a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93DDC238fC17be740B5d7c8A8F0E75047EA06339": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x93eCeec534DC11AEFfCB86B85a615093C239e9C3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x941689a3677aE5D7547aA6b298773db1a50E2Ebc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x942c9a79866EbF5D6F24e6b308820541dA6709c6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x964807257f25B2933A494d8d8f5262A51E36992d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9745132b8E85992B01020d719a9439667b5B2Deb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x98ed1eAE1836Fa93A20FA389Fc386bA75bd07D5B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9A2ba47329Dac7Ce1Ab157953F70244A0962850f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9a499155E6D5F6A8722876a5AD0c4A47b3322C87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9abEebbe3B9eAa8b2156E9989C86aC923bA10175": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9c709C02b87072C8599c5416617FD259D334EEf2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9C9553CD0c8673651A36e5E11C4989bb629D4067": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9d2dAcf09e1312215f4d2DC55119A3a39693871f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9df56dBEdD1BC8B24dCc558ebC90d946fFcCaa01": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9f72b48ec2410586a49c75963F094B23738a0CF4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa0A8338295e07E11f118DDc8e3F604b84cDf791D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa14880293b49883F52E76391e78169281441cDD3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA152867C821C37F2D93462fF3Ed9FD212bB032CE": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa17250a26Ca7516931070E2DE563964537FBe49b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa3D15d2EFdD2A93e5A4BF07D69efE4A142A347f6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa405aB2f58ed359c0db3b5Ff93221D7D8a20F194": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA455884687F392AF0C64675700FF18Ae8c51af50": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa49736f70934fCEcA269E9Dfff3fFc03483e4295": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa502173e7ceABd3C90EDE0164325E84323987796": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa6E63F1f1305597171e093195A0e28de882da740": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA719DB5B3B6AC2a7d077c5f5286f865CA7B2E248": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa798585D3822BC39000A209dee996743E6F6F549": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA7C0E474A9F3207Db3F7ED86C994E2C8F144dbb1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa8303f676A79Fa399610cD87E1257243A97ebE72": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xa84842F23737367274B6949e61f0bA8f3239b0Bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA8E156Ec480a503410f94383ff6c01B074c10e53": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA8e3f7bCAcA24820085183d8E58a5A79843158Db": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAa98e95DD88dEFDd7753Bc8fbF39422E0d497Dd3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaaa64F8a78BbEf0b44358412c0124D5194DEE63E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xAb7A962117Ba529372D6017b24D48738B1923390": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaC1aD43de284ad73FedFD41F88332A7E7bbd8DB4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xad13FAeE4ba77ef31900Bc3A21F895cFD16fa0c7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xadaA0CBeC66C670d2598a2635C88bA55A8200E3D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaDb261cEbB20D1e13c70848D9AF6b28E408e05C7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaF1ecb33e5B49F74c020C0E5285d73504B01E051": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB02f087a30B66942e69b9477a3a1f7dD5B08404E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB06a5fAED6F7552Fd962D735057BFD5125Ff3801": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0707Ee699C79950d57a1005FFE3649707fDd63D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb0C42683B3774e8F62816c648F09AaE685bb57Ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb1028c2d61337589e515d6BdB949ed97935518b2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb18977c13f660EFe659F04c1220B801a43511667": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB1bD394C25F653b71F56F66DF4a54653dcBcacA2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb2FA978d34dc1Bce8cE1C794b319B1Cf3a6fE2BF": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb35b15694F5A9966dB6c028636D4420c3113b398": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb3A81311c3A178928cf96F5092d627a259dc5aD5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb442bc82E2fCa9a56dec1954005EF012df4106Bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb4Df44193a60586d9229Bd6307a3241D2B04CE79": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB4f53Bd6b9d976DBeA691941ea39a73c5A347995": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5AE3c648709913Ef9739e9F6eDB5a821c6Ab160": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB5e0C5A26Ed9cD9c1684Fbb1138D5952C53349F8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb5E0e55A8F30d0bCE23262a9cfca237A47979354": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb616d066fb1aB1384D47A5a70Ce00af515445A6d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb72AB3FCA16beB1b5516bcC2Fd3f52af06e2B618": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb7b570Dc117b4946925bc39166418516FB011CbB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB7c370Fba777A70017b64CaC04DF82b1bD320BAB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB7e87009D5AC8fc6Ac2205ed77BbF400572a4044": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb86b5568853c5963dD9B9836F5Ec94A15966bBC9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB89B156897cb5b2f1a5CA028600ce931073c19BB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB9328Ae4FfadFad326Eb39AA25429760Ea28d043": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb9C0aBA138B98656FfEa4309bfE2881b0b7c1d96": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbA35E0dC08639fF7761C04D65b0781736B66481b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBAE6379ACaEe0FD0d5922CABa1895292533B6FB9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbba2379F5cc9A2f248C5Cf18aD72379AE2478F42": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbCA0E9c5eb3Cb852e2239b798bB3d9D0C0E78708": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbD11f25ed4407b289bDD27D0668435A3493a4E02": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbe7DD82FACD47D3598803F44CB980078466aEBA3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBf2C7575639D16c04aE719CB5b604fB49F946223": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xBf68f1CE39Ed3BD9B20944260AA678bB934D164b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbFdd62139F97163D83Cf5CB7F940564b56c6fA5D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbFe24B4d8B1E421ca8794f6416946dB505d6dBD7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc044D5AFFaEf125b05d2Be029b9bA43e2DD987a0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC147015D3298FfA4139205072F7C7400fe4c073b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC15a40d665C37c4918dEC6a14252371d09691365": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc19eD1FA9FA3968FE12e97Aa4d511aB6bCE1320F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc231D89fe7995B4f5bE43AA5877CED34B75D24b1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC345C4d05C0ecB55A2946Ba0D2bc2e737Bc9a2ec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc38b756916676b2a91ceE9709daCb51D41fEaE39": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC3e9704B5fF6319De2c1b6acaA1039B96a22888B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc40F6f6ade14DE9AA40e5a868aA8db4ae2aB5Be4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc414D616CF71A9536Ed4AF3a703538C868E3AD9e": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC46dDdE5da037f35ba38e19EB38D2367a18A83df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc711E2978336c32f3C123A22C2060A3F7a3F1B38": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcA60CD5EeC8991494Aad07efc0aE743865df6472": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCba1A275e2D858EcffaF7a87F606f74B719a8A93": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCE5B6d4F24b06F9c93c42653695A26AB88f1B951": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcFE8cE9EecE778b1f71555b56f7FCD68B17226A4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd038b0E055829D67aae4636A2A68b631Dcc169e2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd11BCC0e7d44169a572DA39cA6297D0dFA5C17fa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd1b62dB7AD09e615a4603E89c2f25fe8AD67e596": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd1F4cF428835a775916Dd767e11553b5649EAF87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd210ae3Ea4bB169163F4e9876109A2C204Ad3a87": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd31F6bCaD59E7F4d6F00bcc9c786981d7B10abFB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD340967b0e4649dd08675E21129220b71579c36F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD4D760D3Af0FB82a8D45E6110e8b42D632bE843F": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd645e1cbF208F0A930572e0457826137089BE5c6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD6DAC4434169b1De3EB01960115D2ac29e205960": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xD7972B7f3C94BbA5d0DCF78B5edfDfB94e62E20D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd99591A00a7Ad4B5c1Bc560eDD219f7749aCf2D2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdA110C2884a74855e938Ad1be7591C913646F31a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDAc11260EA26aA7Ace35F846ab7E389bd50C75aD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDba0ED070C2962288bFbC9DA2cAB704B7aa83038": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdBfC3230Dca0b50Df050ac5D3D42BF1eCbA1b82D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xdc0D491BD92861746C745b257edfd8Cfa631470a": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDE4FD702d487F2256b79f6B8f129A5Ec5999C916": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDF2CfD226c96C23c042f2FAD5067991136F83C17": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0181a72c512dE97a75433aa67288685980FFb7E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0D01EFEe7A9740F8e702F086dd4FcaE87926Abf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe0e4Bff7ED1Cd39Dfb4310eebf078187586526C8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe13a47718B9bfD9F74008068787827af3E5931B5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe1452baeA1eFb49489CF642021C86480965C9e03": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe2A84793B1077264D104F6dB0e2FbA5e56a8b760": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2A8F676a31D59a91A8Ce1e86C43E8A577FDe478": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2AcD2865985e19E88f6F56dF75954655027a58b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe3Dc61f63C1cF6CA2Ed012C3fd0aCEc444d69Bfb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe5Fae1A033AD8cb1355E8F19811380AfD15B8bBa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe66B290105F73dd5f38b25c7d4c86d2C5E5a37be": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe70A481e935D77D869AF1bc87e98B8F9Ca88363E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE73142BB20c4750006a309500DAd20d9E86B9521": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE778Ef6CabaD3b6f8578680f5f663E8548697193": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe7a960EA8db712d8f2ff891D8D401b11348002eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe827C9485d095a82f427a4D1a54e781663DA2de0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe85FEa97723d9a67A9CB4Bc3E58FFDD6dC3a78af": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE939d186c9dA1F3640a8A53A3df9deb643021Ffe": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe9Ca31a9d07eC5707D73C58C18177613320b3dC0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEA2f509cABc86E09E8b807258D3f9A5f72F0da11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEA8d665651D7B3d429fE6bbF6F895456eE2B6B6D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEAD18130A66B1e8f35d5664A0b9f074Ca7828cB2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB0Aa0D277312Dda0260fE32a31EE3565af4BD20": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeb7846Ad58FBDaC651830d5370a94488c06F282d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEB878d6728CB326360049FE1F14E3F48B4fFAFdd": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEC3466B7bCB8558163aBb4dEe18D812Ae98BBA63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEC767A3BaAeDa8708a77BC777a0C1f1A369Aed85": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeC898Ca8A76FB722A1Db369E69CcdCf02f31f4F4": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeD5cE5D01ec70a2BD60Da6775485b571405E8A62": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeF261ba2e734f3571C7bBCBf27A7184e632B565D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF06a70b9248072f7F17492A962557447E0001152": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF0FcB5B2eC2D511C4338F59528BaAFDaa1f3ff37": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf169aD2dF638384A4304807E636777e8B334239C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF2FF1109837fe3a052c1B6130C5b8a43aC28794C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf38a9B66F90a34AE03e21d75F398E60Aa895e45B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf38b07B8ac72Ad70806E902c2ecFb7EdD36cA3f5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf3b8869C906f5C185084aB379DE0c607F23f4747": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF5216B6Feb8Ed5E9287132320ED3BD5e13e77be7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF848C171f708C45B28Ab299Cd58BD239B9836939": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf9125F17FfB2650a279730dd084235a72FD383CD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF91B7e024b16468f45f53278609f1B13eBbD5306": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf99C8873B972b4192e789F55AB954188D0d9A133": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF9D592E248693A94f87cCEa7c2E2fa12Fa4ab21d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFa887e2904bDAD1775620Bcf3936dE5593f89a64": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfaB451A3FbBA40caFE8e85138b4137C3B9424aE2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfb15339d187A76AF62698F73D700E1F8536f03BD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFb338E8643E7f6bD9aE5C96a0EB2E9E835de4F48": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFCecC24729bccB72FB3eC5d9BCb25A8051e246FB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfcfB1F49b13D2C51b2D0CB769ee06E0f42e231fC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfdA5dFBC7d508BD831B7B2d9853349bc4280BF70": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xFf41C3DaD5D6bdBF75B15f9E2f7c23C072a9455c": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfF66BDB931A3633b117490A9A660979392ca3104": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x482F3f3065EE579Fb55bdD3aA139436bEA0D6362": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x12a2E457862437746AE0cE2F1d158a5E399E1C03": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From 03e579b543400685348c5facf841902a2aab3ed6 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 6 Aug 2022 01:10:49 +0430 Subject: [PATCH 032/406] update WL --- general/mrc20_presale.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 55dab96..0322ffd 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,8 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659886200 +const START_TIME = 1659547199; +//mainnet: 1659886200 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 const PUBLIC_SALE = START_TIME * 1000 + 3 * 24 * 3600 * 1000 From e228553e2b929a860bbadc11435ff932820e14b4 Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Sat, 6 Aug 2022 09:17:12 +0430 Subject: [PATCH 033/406] lock check bug fix --- general/mrc20_presale.js | 84 ++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 34 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 0322ffd..e4bc06f 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -102,6 +102,54 @@ module.exports = { } }, + validateDeposit: async function(params) { + let { token, forAddress, amount, sign, chainId } = params + + chainId = parseInt(chainId) + + if (!token) + throw { message: 'Invalid token' } + if (!amount || parseInt(amount) === 0) + throw { message: 'Invalid deposit amount' } + if (!forAddress) + throw { message: 'Invalid sender address' } + if (!sign) + throw { message: 'Invalid signature.' } + if (!chainId || !Object.values(chainMap).includes(chainId)) + throw { message: 'Invalid chainId' } + + let typedData = { + types: { + EIP712Domain: [{ name: 'name', type: 'string' }], + Message: [{ type: 'address', name: 'forAddress' }] + }, + domain: { name: 'MRC20 Presale' }, + primaryType: 'Message', + message: { forAddress: forAddress } + } + + let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + if (signer.toLowerCase() !== forAddress.toLowerCase()) + throw { message: 'Request signature mismatch' } + + let allocationForAddress = allocation[forAddress] + let currentTime = getTimestamp() + + if (allocationForAddress === undefined && currentTime < PUBLIC_SALE) + throw { message: 'Allocation is 0 for your address.' } + const day = getDay(currentTime) + if (day <= 0) + throw { message: 'No Active Sale' } + + let tokenList = await getTokens() + if (!Object.keys(tokenList).includes(token.toLowerCase())) + throw { message: 'Invalid token.' } + + token = tokenList[token.toLowerCase()] + if (!token.chains.includes(chainId)) + throw { message: 'Token and chain is not matched.' } + }, + onArrive: async function (request) { const { method, @@ -111,6 +159,7 @@ module.exports = { case 'deposit': const { forAddress } = params let currentTime = getTimestamp() + await this.validateDeposit(params); let memory = [ { type: 'uint256', name: DEPOSIT_LOCK, value: forAddress } @@ -145,47 +194,14 @@ module.exports = { switch (method) { case 'deposit': - let { token, forAddress, amount, sign, chainId } = params + let { token, forAddress, amount, chainId } = params chainId = parseInt(chainId) - if (!token) throw { message: 'Invalid token' } - if (!amount || parseInt(amount) === 0) - throw { message: 'Invalid deposit amount' } - if (!forAddress) throw { message: 'Invalid sender address' } - if (!sign) throw { message: 'Invalid signature.' } - if (!chainId || !Object.values(chainMap).includes(chainId)) - throw { message: 'Invalid chainId' } let allocationForAddress = allocation[forAddress] let currentTime = getTimestamp() - - if (allocationForAddress === undefined && currentTime < PUBLIC_SALE) - throw { message: 'Allocation is 0 for your address.' } const day = getDay(currentTime) - if (day <= 0) throw { message: 'No Active Sale' } - let tokenList = await getTokens() - if (!Object.keys(tokenList).includes(token.toLowerCase())) - throw { message: 'Invalid token.' } - token = tokenList[token.toLowerCase()] - if (!token.chains.includes(chainId)) - throw { message: 'Token and chain is not matched.' } - - let typedData = { - types: { - EIP712Domain: [{ name: 'name', type: 'string' }], - Message: [{ type: 'address', name: 'forAddress' }] - }, - domain: { name: 'MRC20 Presale' }, - primaryType: 'Message', - message: { forAddress: forAddress } - } - - let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') - - if (signer.toLowerCase() !== forAddress.toLowerCase()) - throw { message: 'Request signature mismatch' } - let tokenPrice = toBaseUnit(token.price.toString(), 18) let baseToken = bn(10).pow(bn(token.decimals)) From 232d81389938a72c61abab7e8016fbdc0d95b6cf Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Sat, 6 Aug 2022 09:22:55 +0430 Subject: [PATCH 034/406] lock sample comment --- custom/sample.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/custom/sample.js b/custom/sample.js index 0e54ee0..133aa67 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -73,6 +73,12 @@ module.exports = { case 'lock': let {user} = params; + /** + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Do all request validations here to prevent incorrect lock. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + */ + // looking for data in memory let lock = await this.readNodeMem({"data.name": LOCK_NAME, "data.value": user}) if (lock) { From d709e16dbda2c4044d6f7aa7c56aea42a7578709 Mon Sep 17 00:00:00 2001 From: Zahra Date: Sat, 6 Aug 2022 12:51:21 +0430 Subject: [PATCH 035/406] add condition finalMaxCap --- general/mrc20_presale.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index e4bc06f..9a3d76f 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,7 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659547199; +const START_TIME = 1659547199 //mainnet: 1659886200 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 @@ -102,19 +102,16 @@ module.exports = { } }, - validateDeposit: async function(params) { + validateDeposit: async function (params) { let { token, forAddress, amount, sign, chainId } = params chainId = parseInt(chainId) - if (!token) - throw { message: 'Invalid token' } + if (!token) throw { message: 'Invalid token' } if (!amount || parseInt(amount) === 0) throw { message: 'Invalid deposit amount' } - if (!forAddress) - throw { message: 'Invalid sender address' } - if (!sign) - throw { message: 'Invalid signature.' } + if (!forAddress) throw { message: 'Invalid sender address' } + if (!sign) throw { message: 'Invalid signature.' } if (!chainId || !Object.values(chainMap).includes(chainId)) throw { message: 'Invalid chainId' } @@ -138,8 +135,7 @@ module.exports = { if (allocationForAddress === undefined && currentTime < PUBLIC_SALE) throw { message: 'Allocation is 0 for your address.' } const day = getDay(currentTime) - if (day <= 0) - throw { message: 'No Active Sale' } + if (day <= 0) throw { message: 'No Active Sale' } let tokenList = await getTokens() if (!Object.keys(tokenList).includes(token.toLowerCase())) @@ -159,7 +155,7 @@ module.exports = { case 'deposit': const { forAddress } = params let currentTime = getTimestamp() - await this.validateDeposit(params); + await this.validateDeposit(params) let memory = [ { type: 'uint256', name: DEPOSIT_LOCK, value: forAddress } @@ -300,6 +296,8 @@ module.exports = { finalMaxCap = maxCap.sub(sum).toString() } + if (finalMaxCap <= 0) throw { message: 'Final maxCap is not valid' } + const data = { token: token.address, forAddress, From d40e37772f401e1c9fe901019167504a2e6de64b Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Sat, 6 Aug 2022 14:19:01 +0430 Subject: [PATCH 036/406] mrc20_presale request validation api implemented --- custom/sample.js | 17 +++++++++++++++++ general/mrc20_presale.js | 10 +++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/custom/sample.js b/custom/sample.js index 133aa67..02a331b 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -60,6 +60,23 @@ module.exports = { onAppInit: async function (){ }, + /** + * Run on all nodes before onRequest + * on the gateway node runs before onArrive + * @param request + * @returns {Promise} + */ + validateRequest: async function(request) { + const {method} = request + switch (method) { + case "test-method": { + /** + * Do your method validation here + */ + } + } + }, + /** * Request arrival hook * Runs only on the first node diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 9a3d76f..0e3ec8e 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -146,6 +146,15 @@ module.exports = { throw { message: 'Token and chain is not matched.' } }, + validateRequest: async function(request) { + const {method} = request + switch (method) { + case "deposit": { + await this.validateDeposit(request.data.params) + } + } + }, + onArrive: async function (request) { const { method, @@ -155,7 +164,6 @@ module.exports = { case 'deposit': const { forAddress } = params let currentTime = getTimestamp() - await this.validateDeposit(params) let memory = [ { type: 'uint256', name: DEPOSIT_LOCK, value: forAddress } From a93a9793fa58e3cc18569ead00b2845b862b9648 Mon Sep 17 00:00:00 2001 From: Shayan Date: Sat, 6 Aug 2022 18:10:40 +0430 Subject: [PATCH 037/406] Mainnet configs --- general/mrc20_presale.constant.json | 10 ++++-- general/mrc20_presale.js | 55 ++++++++++++++++++++++++++--- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 4574426..78752ef 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -17070,9 +17070,13 @@ "IDO_PARTICIPANT_TOKENS": 37500000, "MUON_PRICE": 0.02, "chainMap": { - "ETH": 4, - "BSC": 97, - "MATIC": 80001 + "ETH": 1, + "BSC": 56, + "MATIC": 137, + "FTM": 250, + "AVAX": 43114, + "ARBITRUM": 42161, + "OPTIMISM": 10 }, "LockType": { "ALLOCATION": "ALLOCATION", diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 0e3ec8e..8526d66 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -16,7 +16,7 @@ const getTimestamp = () => Date.now() const bn = (num) => new BN(num) // the reason start_time is /1000 to be like contract and if it needs to read from contract other formula work correct -const START_TIME = 1659547199 +const START_TIME = 1659886200 //mainnet: 1659886200 const PUBLIC_TIME = START_TIME * 1000 + 5 * 24 * 3600 * 1000 @@ -30,12 +30,53 @@ function getTokens() { price: 1, chains: [97, 4] }, - ert: { decimals: 18, address: '0x701048911b1f1121E33834d3633227A954978d53', price: 1, chains: [80001] + }, + usdc: { + decimals: 6, + address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + price: 1, + chains: [chainMap.ETH] + }, + busd: { + decimals: 18, + address: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56', + price: 1, + chains: [chainMap.BSC] + }, + matic_usdc: { + decimals: 6, + address: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', + price: 1, + chains: [chainMap.MATIC] + }, + ftm_usdc: { + decimals: 6, + address: '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', + price: 1, + chains: [chainMap.FTM] + }, + arb_usdc: { + decimals: 6, + address: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8', + price: 1, + chains: [chainMap.ARBITRUM] + }, + avax_usdc: { + decimals: 6, + address: '0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664', + price: 1, + chains: [chainMap.AVAX] + }, + op_usdc: { + decimals: 6, + address: '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', + price: 1, + chains: [chainMap.OPTIMISM] } } } @@ -44,9 +85,13 @@ const getDay = (time) => Math.floor((time - START_TIME * 1000) / (24 * 3600 * 1000)) + 1 const MRC20Presale = { - [chainMap.ETH]: '0x38451EbEDc60789D53A643f7EcA809BAa6fDbD37', - [chainMap.BSC]: '0x0A3971c81B9b68A6c65C58dff7da92857B334b41', - [chainMap.MATIC]: '0x12F6cF9ebfC7c94E14488c7eeBa9d0D7808737B4' + [chainMap.ETH]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7', + [chainMap.BSC]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7', + [chainMap.MATIC]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7', + [chainMap.FTM]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7', + [chainMap.ARBITRUM]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7', + [chainMap.AVAX]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7', + [chainMap.OPTIMISM]: '0x671B29e20d834dc27e2af3A717F2204d89aF9Cd7' } module.exports = { From e1e6da3861fc5b21616b467ed622ecf6ef09be5f Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 7 Aug 2022 14:06:56 +0430 Subject: [PATCH 038/406] disable old apps --- general/carebig.js | 1 + general/dei_price.js | 1 + general/eth.js | 1 + general/fear_presale.js | 1 + general/gamestarter.js | 1 + general/nft_oracles_opensea.js | 1 + general/parent_oracles_v2.js | 1 + general/parent_oracles_v3.js | 1 + general/random_nft.js | 1 + general/solidly_permissionless_oracles_vwap.js | 1 + general/solidly_permissionless_oracles_vwap_fair.js | 1 + general/spirit_permissionless_oracles_vwap.js | 1 + general/sushi_permissionless_oracles_vwap.js | 1 + general/synchronizer-oracle.js | 1 + general/test_rng.js | 1 + general/tron-sample-app.js | 1 + general/uniswapv2_permissionless_oracles_vwap.js | 1 + 17 files changed, 17 insertions(+) diff --git a/general/carebig.js b/general/carebig.js index 702a003..75d56a0 100644 --- a/general/carebig.js +++ b/general/carebig.js @@ -22,6 +22,7 @@ module.exports = { APP_NAME: 'carebig', onRequest: async (request) => { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/dei_price.js b/general/dei_price.js index 5f88e6a..56b880b 100644 --- a/general/dei_price.js +++ b/general/dei_price.js @@ -96,6 +96,7 @@ module.exports = { return true }, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/eth.js b/general/eth.js index 4a9bdf8..0a563a0 100644 --- a/general/eth.js +++ b/general/eth.js @@ -5,6 +5,7 @@ module.exports = { APP_ID: 2, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let {method, data: {params}} = request; switch (method) { case 'call':{ diff --git a/general/fear_presale.js b/general/fear_presale.js index 10aeca2..1cc75bc 100644 --- a/general/fear_presale.js +++ b/general/fear_presale.js @@ -4055,6 +4055,7 @@ module.exports = { }, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/gamestarter.js b/general/gamestarter.js index e882b0e..edc99b4 100644 --- a/general/gamestarter.js +++ b/general/gamestarter.js @@ -17,6 +17,7 @@ module.exports = { APP_NAME: 'gamestarter', onRequest: async (request) => { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/nft_oracles_opensea.js b/general/nft_oracles_opensea.js index f499880..5b86295 100644 --- a/general/nft_oracles_opensea.js +++ b/general/nft_oracles_opensea.js @@ -160,6 +160,7 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/parent_oracles_v2.js b/general/parent_oracles_v2.js index e68c176..c3ce6e4 100644 --- a/general/parent_oracles_v2.js +++ b/general/parent_oracles_v2.js @@ -640,6 +640,7 @@ module.exports = { }, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/parent_oracles_v3.js b/general/parent_oracles_v3.js index f244a1b..2805448 100644 --- a/general/parent_oracles_v3.js +++ b/general/parent_oracles_v3.js @@ -626,6 +626,7 @@ module.exports = { }, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/random_nft.js b/general/random_nft.js index fa29383..8f74878 100644 --- a/general/random_nft.js +++ b/general/random_nft.js @@ -31,6 +31,7 @@ module.exports = { APP_NAME: 'random_nft', onRequest: async (request) => { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/solidly_permissionless_oracles_vwap.js b/general/solidly_permissionless_oracles_vwap.js index bb2068b..b9329f2 100644 --- a/general/solidly_permissionless_oracles_vwap.js +++ b/general/solidly_permissionless_oracles_vwap.js @@ -346,6 +346,7 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/solidly_permissionless_oracles_vwap_fair.js b/general/solidly_permissionless_oracles_vwap_fair.js index 52f2f6d..2b97759 100644 --- a/general/solidly_permissionless_oracles_vwap_fair.js +++ b/general/solidly_permissionless_oracles_vwap_fair.js @@ -350,6 +350,7 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/spirit_permissionless_oracles_vwap.js b/general/spirit_permissionless_oracles_vwap.js index 79aadbb..264b41a 100644 --- a/general/spirit_permissionless_oracles_vwap.js +++ b/general/spirit_permissionless_oracles_vwap.js @@ -446,6 +446,7 @@ module.exports = { config: APP_CONFIG, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/sushi_permissionless_oracles_vwap.js b/general/sushi_permissionless_oracles_vwap.js index 8c9078e..667000c 100644 --- a/general/sushi_permissionless_oracles_vwap.js +++ b/general/sushi_permissionless_oracles_vwap.js @@ -460,6 +460,7 @@ module.exports = { APP_ID: 22, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/synchronizer-oracle.js b/general/synchronizer-oracle.js index f6f3587..55eb009 100644 --- a/general/synchronizer-oracle.js +++ b/general/synchronizer-oracle.js @@ -28,6 +28,7 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/test_rng.js b/general/test_rng.js index a3b7e10..fd6279d 100644 --- a/general/test_rng.js +++ b/general/test_rng.js @@ -29,6 +29,7 @@ module.exports = { APP_NAME: 'test_rng', onRequest: async (request) => { + throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/tron-sample-app.js b/general/tron-sample-app.js index ecaff60..8b3ca62 100644 --- a/general/tron-sample-app.js +++ b/general/tron-sample-app.js @@ -4,6 +4,7 @@ const TssApp = { // APP_ID: '5007', onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let {method, data: {params={}}} = request; switch (method) { case 'verify_string': diff --git a/general/uniswapv2_permissionless_oracles_vwap.js b/general/uniswapv2_permissionless_oracles_vwap.js index 54d59bd..051c20d 100644 --- a/general/uniswapv2_permissionless_oracles_vwap.js +++ b/general/uniswapv2_permissionless_oracles_vwap.js @@ -440,6 +440,7 @@ module.exports = { APP_ID: 18, onRequest: async function (request) { + throw { message: `MuonApp disabled.` } let { method, data: { params } From ac99f8772ad2e9e94b8a38385204472c5c9bca96 Mon Sep 17 00:00:00 2001 From: Shayan Date: Sun, 7 Aug 2022 16:08:18 +0430 Subject: [PATCH 039/406] New mrc20_presale WL --- general/mrc20_presale.constant.json | 440 ++++++++++++++++++++++++++++ 1 file changed, 440 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 78752ef..78188e9 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -16974,6 +16974,446 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0xDC6389FE988C8aBCBE579149c77ca4081fE8162E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xe8c75658daD48a94C6FabC36DFd216Fd138c1E24": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Ff751Eb0AB9568A058f89Cdb5EcA09Ed5f5e04d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91AbF183feA991C4d7B7b3f1EF6Ef71816cE3598": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67918ba8ef203852c14D87f049378EA647516b11": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbF923438A135a99712D4c4b3DB413a0817a90f99": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11Fc39E329bBD289Cc7225aDE7872c923519Ee15": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x225516233e7601C68Dd5B586a88a52b21eB56204": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDEc2216FCBf07810D29f25C439bA6214436c4F36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x996d2565AF850490a1ab01E29c8653e4ABACEb51": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xDD7eFb05649ca2d7ea7851a0291d442Be8D9A2Eb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xc78e7731dA04aA6E6ce730cCA7aaE517523f49df": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00cD780B182b96E3025db0214Ae2c5f207E4D769": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC88FD5c84729889849dC6A43346E83a63EE1108b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8A78B02b234AB8D0CC6007A96ca3eDEc7517a927": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3b746c6C16A732cd5Ee05A2Ae141f8616fa8BBac": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEE056c6B5d5dc37785B208E80B671f5221AeD914": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF1516923A3B5BF1C36eea2FA47EbDDeB1fd6DA44": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xb1F4Baa17fD981Eeb0D35aECc0e78750b990e139": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x42280E048125eEDd8aDC22384017Dfb88Df896bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2241849269dBbE49c6e4e3880870619dF5824Fc5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf5d77E3C00597d4950D2008D7003c802A196B45f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x303c40d4E9A69Bd77076A71FE64B9636fe6B949f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x91D8fF0A1Be89f1466282F6e469b7379135EdAd6": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfd259b5b63881c62AE364acB18752c1E84b5Bd36": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x85cc8D4Be4c18E5Ada0E584F2c844446D0Ff065d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbA312F9517071cD01f33c32C077D838FB83fe9be": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEd302B14Bfa4eab84D3e6E8E4F09903E9BA8fAfa": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xE2253032FE37679ceB17Ca42f287A5dAD92EF7D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x03B79e5048545e4d9d0d44c57d7a7353f759b295": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d4AE60c6174d23A89548861075c875D3d21c068": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x386C82b52d6E0DFB636C51B577577140cc1Df4Bf": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x00000052DB644CBeEb3464170fb94526A235171B": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x54b7aCa9F67aDAe039331e69F37567B4B36348A2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5345Bd0C856D5B51a14a26563811850Efce93966": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f3064d973C08Dd9c88D43080549F474E5827d71": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xaaC99181c76c1Fbc64fd03024A849458Eb184dC8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2A18d7543D8AF274E7C10F1E307696AE07779Ad0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x071e3b54a4354F7246f048B63e5200dFe239a329": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6309Dac268FF8f19A1a073e24F4126B44Ef5B76C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6583aA641F2b11ae3b446b33462b4a11e101ef5": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x209f57200A629d0c21a01cBe6e2a3EdbBD5B7e6f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x01761adB6C5092ad4e0f3052AD8F59b47d444Dec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xd0218959D0e45C0D9397ebe9d7f26912A70c15ee": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x13705ff28915ea5b11cab1b547F1b3F6232B6A57": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2F4FB711E50c855f0cC285a6B53bB7C1C6745CBD": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcFf7B87456B92056C6953Fa4664B582265419114": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeeBd1FFC8BC4961797a6d23642C4d1B01Cec186b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7d7618E55317a3625bB3cA5052603db5C3786302": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1506bF1b4979B3cC94C979878E6661A31Af004B3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9FA7819d13B8e3fE50B1A0765203f94A82A85763": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6aA58bcFdA390C8e10622E6941E70b9D57A4A744": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xEe01C4672A7A8B6cE04371E5c0771C381e56c898": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3DF5133de45BB9fA5a995e1fB3864723474472a3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x08Cc7c08acC45bC07966e1fDB0933113b8fC0dFA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x96b08318A2a9FC18c1aF7e63404e11EE6De8CFD8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1Aa0725d08EC8bB7320B4CaADD83A84E7569D0E7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x2fa5dFbfa124b4497Af62162288487D027B6aFF0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3cb706cE57f7f0D8D0b2fBd56082D3DC6d7C3751": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x11ff5D408f6AA0366620F2833B4cD35603c08eeB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCf5702d56146120cda2D546AAdb2a5710400d5Ca": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB5B08C12e14Ed7416B3FE8b2e3c60E658CC58Bec": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7e66dc013571B49F347905431F19B12Fb0BC7133": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4210DeB9feeb59F4DdA3e7295Aeb6f39f7F4952D": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x9745C9462585263c7a354002C7dBAEE5085F979C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x068287C087313735d359ACDD7DA829d23FCB1264": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x481B2FE0972F8e9ce15E58753d07d77eA6Ad5fB8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x629f6a7335531791eBeD6E7651634285c3280334": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x67592C823Bcd2FefC6987766584e17aAb6D582C0": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1D5A76Aef07667aaA52ED772743290c62CA0eADC": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x549a9cD55961A4493d600C106a05FBfE31993188": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6F6C72d5025FcAD3f846c7FD49d8e527AAA7d759": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8A20EE393121bCA20878eC28e17C025Cd512De1b": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbF519e32aC9A9C06881e26E98b8099e978CF0A8E": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6e3cd28cd6f9e78f39229432609e923F6E489F27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x7Ff1D51f7fEA8A52b40De916CDFBC2b917cEbB63": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x3C1195a1c3B48CCBb289e4021B3Fbe6cE2804F2C": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x07a03728F025B8e1B60F089C1735207AD2f3CF39": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5C501A9F4849811F53Ff4116aAc56339faB7e1d8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xA33285321b3303949b3D1CAEf02724FBC7023a27": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x8D425941712415e4b92c2b9139F8dF887F0Fe6B2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfd31A1479E22832551169DCDd5847B9d1A284180": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x1689B1af0c1B6A9253580Fd2cc799559CCCB64a2": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xff9Cc0b137D7E9460050fBB1911Dc84152793aDA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xC4f81dC58291E34789dd94feC1279B5f534033cc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xeDDB00d08022f282A0179cb4c35697F50EF3b138": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4726f45fcc6EcD75d71243503aDa17cD2564A078": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xCC3B146F63d2A7e2f32f700e1271a9Eac726Cfc6": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From b624be5299c43b3299c5d821bd198a25c8ae0444 Mon Sep 17 00:00:00 2001 From: Shayan Date: Sun, 7 Aug 2022 18:37:50 +0430 Subject: [PATCH 040/406] New mrc20_presale WL --- general/mrc20_presale.constant.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 78188e9..a1468c7 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -17414,6 +17414,31 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x8Fe9A14b7f01F8e472959d850C40A2598A86BbEA": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf23A8DAb5DAb50Bc8276A15e73bd89Bb2327315d": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x83F640501abf5D520897F7eE6d0c1f2fBfe267Cb": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x934C80e3a3e9136eE3558950385B66Ac5e7D9bf7": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4Eed58880075c40066cdA5e7A6c7deE236cf6568": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From 7cfe3f781ee78c88fd847e0bcace06077579aa03 Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Mon, 8 Aug 2022 14:53:30 +0430 Subject: [PATCH 041/406] mrc20_presale: final lock status check, disabled --- general/mrc20_presale.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index 0e3ec8e..6b0b11e 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -318,11 +318,11 @@ module.exports = { request.data.timestamp ] } - let lock = await this.readNodeMem( - { 'data.name': DEPOSIT_LOCK, 'data.value': forAddress }, - { distinct: 'owner' } - ) - if (lock.length !== 1) throw { message: 'Atomic run failed.' } + // let lock = await this.readNodeMem( + // { 'data.name': DEPOSIT_LOCK, 'data.value': forAddress }, + // { distinct: 'owner' } + // ) + // if (lock.length !== 1) throw { message: 'Atomic run failed.' } return data From d05d4bde5b32e96c39c683e24b2baec546a13342 Mon Sep 17 00:00:00 2001 From: Shayan Date: Mon, 8 Aug 2022 16:11:59 +0430 Subject: [PATCH 042/406] New WL --- general/mrc20_presale.constant.json | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index a1468c7..85d15d5 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -17439,6 +17439,56 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x980b8ec7491C080B87F821144b261843596e98b9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x4aEE6C99a529A11fF948054C93c0f0a713c853D3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xfe67d1249E2555a051069CE6cD46021B7fd63f82": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x6f89becf6E619b666b5c814CAb23C2AeD31951d9": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF53E2c37a22F877079Fe24314Fbe1C44123c0ebB": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xf2F5dA9a4Bc63F9aA77aC67f8Ca2700E8218dEB1": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x24bd901811609c265C1b1F2F791e40d1441154bc": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xB6188E6d1cA76a443CebC5413DF9d16659c5eED8": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xF8F217AA1932AfdCdB16713cDD221880bC223D26": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0x5f5734cB35db6a4F2Ac9B1cfE81aB8dBbefD8988": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From 071b42cdfd0a464d9e1b018850cb9b473b981f6c Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 9 Aug 2022 16:08:01 +0430 Subject: [PATCH 043/406] New mrc20_presale WL --- general/mrc20_presale.constant.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/general/mrc20_presale.constant.json b/general/mrc20_presale.constant.json index 85d15d5..6c33acd 100644 --- a/general/mrc20_presale.constant.json +++ b/general/mrc20_presale.constant.json @@ -17489,6 +17489,21 @@ "1": 500, "2": 1000, "3": 2000 + }, + "0x21B0DFb202b49090Dc7DbA838b73140Fa347538f": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xcB938bBED7789EE8AAbd259a8cb789aa3500bbf3": { + "1": 500, + "2": 1000, + "3": 2000 + }, + "0xbf95ef0358AF5d15EeF43DD1EbeE92D6b47B770d": { + "1": 500, + "2": 1000, + "3": 2000 } }, "PUBLIC_PHASE": { From 2261c72ae151cd3d409b5d53c58278c6988009d6 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 10 Aug 2022 17:42:20 +0430 Subject: [PATCH 044/406] enable synchronizer --- general/synchronizer-oracle.js | 1 - 1 file changed, 1 deletion(-) diff --git a/general/synchronizer-oracle.js b/general/synchronizer-oracle.js index 55eb009..f6f3587 100644 --- a/general/synchronizer-oracle.js +++ b/general/synchronizer-oracle.js @@ -28,7 +28,6 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, onRequest: async function (request) { - throw { message: `MuonApp disabled.` } let { method, data: { params } From efafecab305d90d2df7755101b687d3ea97df83c Mon Sep 17 00:00:00 2001 From: mmd Date: Wed, 10 Aug 2022 19:17:22 +0430 Subject: [PATCH 045/406] Add action validation Fix min buy ratio check bug --- general/synchronizer-oracle.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/general/synchronizer-oracle.js b/general/synchronizer-oracle.js index f6f3587..322f6cc 100644 --- a/general/synchronizer-oracle.js +++ b/general/synchronizer-oracle.js @@ -37,6 +37,10 @@ module.exports = { case 'signature': let { tokenId, action, chain, id } = params + if (!Object.keys(ACTIONS).includes(action)) { + throw { message: "Invalid Action" } + } + const address = web3.utils.toChecksumAddress(tokenId); const priceInfo = await axios @@ -58,7 +62,7 @@ module.exports = { if (priceInfo.ratio <= MIN_RATIO) { throw { message: "invalid price range" } } - if (action == ACTIONS['buy'] && priceInfo.ratio <= MIN_BUY_RATIO) { + if (['buy', 'open'].includes(action) && priceInfo.ratio <= MIN_BUY_RATIO) { throw { message: "invalid price range for buying" } } From e3b0ec7d4ac76d0d9fa577e3bad4863e5c836bcc Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 14 Aug 2022 15:50:55 +0430 Subject: [PATCH 046/406] Add pairAddress to signature --- general/price_feed.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index 10ef4c9..8c08269 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -60,6 +60,7 @@ module.exports = { return { chain: chain, + pairAddress: pairAddress, price: price, denomerator: denomerator } @@ -77,10 +78,11 @@ module.exports = { switch (method) { case 'signature': { - let { chain, price, denomerator } = result + let { chain, pairAddress, price, denomerator } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, + { type: 'address', value: pairAddress }, { type: 'uint256', value: price }, { type: 'uint256', value: denomerator }, { type: 'uint256', value: String(CHAINS[chain]) }, From a2758cc1c0aa9b88946d82fa5053677df7753e8f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 3 Aug 2022 16:49:03 +0430 Subject: [PATCH 047/406] Implement createPrices function --- general/price_feed.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 8c08269..8ce8c93 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -32,8 +32,20 @@ module.exports = { }, - createPrices: function (syncEvents) { - + createPrices: function (seed, syncEvents) { + let prices = [seed] + blockNumber = seed.blockNumber + 1 + lastPrice = seed.price + for (const event of syncEvents) { + if (event.blockNumber != blockNumber) + [...Array(event.blockNumber - blockNumber).fill(lastPrice)].forEach((price) => prices.push({ price: price, blockNumber: blockNumber++ })) + else + blockNumber++ + + prices.push(event) + lastPrice = seed.price + } + return prices }, calculatePrice: function (prices) { @@ -55,7 +67,7 @@ module.exports = { const seed = await this.getSeed(chain, pairAddress, denomerator) const syncEvents = await this.getSyncEvents(chain, seed.blockNumber, pairAddress, denomerator) - const prices = this.createPrices(syncEvents) + const prices = this.createPrices(seed, syncEvents) const price = this.calculatePrice(prices) return { From 24665d492c95c361ea05684a0ab283c192d48249 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 3 Aug 2022 16:56:04 +0430 Subject: [PATCH 048/406] Implement calculatePrice function --- general/price_feed.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index 8ce8c93..76204b0 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -49,7 +49,8 @@ module.exports = { }, calculatePrice: function (prices) { - + const average = prices.reduce((result, event) => result.add(new BN(event.price)), new BN(0)).div(prices.length) + return average }, onRequest: async function (request) { From 65be7520c64dfeb6d2a59b04e30c0d01927d63a9 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 4 Aug 2022 18:56:39 +0430 Subject: [PATCH 049/406] Return price for each token in the same time --- general/price_feed.js | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 76204b0..056df8f 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -33,24 +33,27 @@ module.exports = { }, createPrices: function (seed, syncEvents) { - let prices = [seed] - blockNumber = seed.blockNumber + 1 - lastPrice = seed.price + let prices = [] + let blockNumber = seed.blockNumber + let lastPrice0 = seed.price0 + let lastPrice1 = seed.price1 for (const event of syncEvents) { if (event.blockNumber != blockNumber) - [...Array(event.blockNumber - blockNumber).fill(lastPrice)].forEach((price) => prices.push({ price: price, blockNumber: blockNumber++ })) + [...Array(event.blockNumber - blockNumber).fill({ price0: lastPrice0, price1: lastPrice1 })].forEach((price) => prices.push({ price0: price.price0, price1: price.price1, blockNumber: blockNumber++ })) else blockNumber++ prices.push(event) - lastPrice = seed.price + lastPrice0 = event.price0 + lastPrice1 = event.price1 } return prices }, calculatePrice: function (prices) { - const average = prices.reduce((result, event) => result.add(new BN(event.price)), new BN(0)).div(prices.length) - return average + const sumPrice = prices.reduce((result, event) => { return { price0: result.price0.add(new BN(event.price0)), price1: result.price1.add(new BN(event.price1)) } }, { price0: new BN(0), price1: new BN(0) }) + const averagePrice = { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } + return averagePrice }, onRequest: async function (request) { @@ -62,20 +65,21 @@ module.exports = { switch (method) { case 'signature': - let { chain, pairAddress, denomerator } = params + let { chain, pairAddress } = params if (!chain) throw { message: 'Invalid chain' } - if (![0, 1].includes(denomerator)) throw { message: 'Invalid denomerator' } - const seed = await this.getSeed(chain, pairAddress, denomerator) - const syncEvents = await this.getSyncEvents(chain, seed.blockNumber, pairAddress, denomerator) + const chainId = CHAINS[chain] + + const seed = await this.getSeed(chainId, pairAddress) + const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) const prices = this.createPrices(seed, syncEvents) const price = this.calculatePrice(prices) return { chain: chain, pairAddress: pairAddress, - price: price, - denomerator: denomerator + price0: price.price0.toString(), + price1: price.price1.toString() } default: @@ -91,13 +95,13 @@ module.exports = { switch (method) { case 'signature': { - let { chain, pairAddress, price, denomerator } = result + let { chain, pairAddress, price0, price1 } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: pairAddress }, - { type: 'uint256', value: price }, - { type: 'uint256', value: denomerator }, + { type: 'uint256', value: price0 }, + { type: 'uint256', value: price1 }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp } ]) From c1616d3efbc38d729c71dec1fbca842fe68227ee Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 4 Aug 2022 18:58:07 +0430 Subject: [PATCH 050/406] Implement getSeed function --- general/price_feed.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 056df8f..72265d1 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -1,10 +1,26 @@ -const { axios, soliditySha3, BN, Web3 } = MuonAppUtils +const { soliditySha3, BN, Web3 } = MuonAppUtils + +const HttpProvider = Web3.providers.HttpProvider const CHAINS = { mainnet: 1, fantom: 250, } +const networksWeb3 = { + 1: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), + 250: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), +} + +const networksBlockIn30Min = { + 1: 146, + 250: 1650 +} + +const Q112 = new BN(2).pow(new BN(112)) + +const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] + module.exports = { APP_NAME: 'price_feed', APP_ID: 26, @@ -24,7 +40,14 @@ module.exports = { return true }, - getSeed: async function (chain, pairAddress, denomerator) { + getSeed: async function (chainId, pairAddress) { + const w3 = networksWeb3[chainId] + const seedBlockNumber = (await w3.eth.getBlock("latest")).number - networksBlockIn30Min[chainId] + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) + const price0 = (new BN(_reserve1)).mul(Q112).div(new BN(_reserve0)) + const price1 = (new BN(_reserve0)).mul(Q112).div(new BN(_reserve1)) + return { price0: price0, price1: price1, blockNumber: seedBlockNumber } }, From 91053b93bd1c6bd923648e8e56964dc0b1f5d22e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 5 Aug 2022 19:09:43 +0430 Subject: [PATCH 051/406] Change function name calculate(Average)Price --- general/price_feed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 72265d1..0fdba1f 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -73,7 +73,7 @@ module.exports = { return prices }, - calculatePrice: function (prices) { + calculateAveragePrice: function (prices) { const sumPrice = prices.reduce((result, event) => { return { price0: result.price0.add(new BN(event.price0)), price1: result.price1.add(new BN(event.price1)) } }, { price0: new BN(0), price1: new BN(0) }) const averagePrice = { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } return averagePrice @@ -96,7 +96,7 @@ module.exports = { const seed = await this.getSeed(chainId, pairAddress) const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) const prices = this.createPrices(seed, syncEvents) - const price = this.calculatePrice(prices) + const price = this.calculateAveragePrice(prices) return { chain: chain, From 915121cbfa4261c7d1fa9dd92814965e3afcdbed Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 5 Aug 2022 19:11:04 +0430 Subject: [PATCH 052/406] Add chainId to createPrices function inputs --- general/price_feed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 0fdba1f..c648e03 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -55,7 +55,7 @@ module.exports = { }, - createPrices: function (seed, syncEvents) { + createPrices: function (chainId, seed, syncEvents) { let prices = [] let blockNumber = seed.blockNumber let lastPrice0 = seed.price0 @@ -95,7 +95,7 @@ module.exports = { const seed = await this.getSeed(chainId, pairAddress) const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) - const prices = this.createPrices(seed, syncEvents) + const prices = this.createPrices(chainId, seed, syncEvents) const price = this.calculateAveragePrice(prices) return { From 89d9058d8d4037195a310830aaaaa410aeed0b35 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 5 Aug 2022 19:12:15 +0430 Subject: [PATCH 053/406] Implement calculateInstantPrice function --- general/price_feed.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index c648e03..7ca67ad 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -40,13 +40,18 @@ module.exports = { return true }, + calculateInstantPrice: function (reserve0, reserve1) { + const price0 = (new BN(reserve1)).mul(Q112).div(new BN(reserve0)) + const price1 = (new BN(reserve0)).mul(Q112).div(new BN(reserve1)) + return { price0, price1 } + }, + getSeed: async function (chainId, pairAddress) { const w3 = networksWeb3[chainId] const seedBlockNumber = (await w3.eth.getBlock("latest")).number - networksBlockIn30Min[chainId] const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) - const price0 = (new BN(_reserve1)).mul(Q112).div(new BN(_reserve0)) - const price1 = (new BN(_reserve0)).mul(Q112).div(new BN(_reserve1)) + const { price0, price1 } = this.calculateInstantPrice(_reserve0, _reserve1) return { price0: price0, price1: price1, blockNumber: seedBlockNumber } }, From 3b767b9e0eebae4cc565d572322891ce9f973e33 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 5 Aug 2022 19:13:55 +0430 Subject: [PATCH 054/406] Change iteration order in createPrices function --- general/price_feed.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 7ca67ad..721deff 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -62,18 +62,18 @@ module.exports = { createPrices: function (chainId, seed, syncEvents) { let prices = [] - let blockNumber = seed.blockNumber - let lastPrice0 = seed.price0 - let lastPrice1 = seed.price1 - for (const event of syncEvents) { - if (event.blockNumber != blockNumber) - [...Array(event.blockNumber - blockNumber).fill({ price0: lastPrice0, price1: lastPrice1 })].forEach((price) => prices.push({ price0: price.price0, price1: price.price1, blockNumber: blockNumber++ })) + let blockNumber = seed.blockNumber + networksBlockIn30Min[chainId] + for (const event of syncEvents.reverse()) { + if (event.blockNumber < blockNumber || event.blockNumber == blockNumber) { + let { price0, price1 } = this.calculateInstantPrice(event.returnValues.reserve0, event.returnValues.reserve1); + [...Array(blockNumber - event.blockNumber)].forEach(() => prices.push({ price0: price0, price1: price1, blockNumber: blockNumber-- })) + prices.push({ price0: price0, price1: price1, blockNumber: event.blockNumber }) + blockNumber-- + } + else if (event.blockNumber == blockNumber + 1) + continue else - blockNumber++ - - prices.push(event) - lastPrice0 = event.price0 - lastPrice1 = event.price1 + throw { message: 'Invalid event order' } } return prices }, From 9efbb6926fae5c4fdf61a9d76db33e0d2fafe14e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 5 Aug 2022 19:15:08 +0430 Subject: [PATCH 055/406] Set price for the gap between seed and first event --- general/price_feed.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/price_feed.js b/general/price_feed.js index 721deff..f532ff3 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -75,6 +75,7 @@ module.exports = { else throw { message: 'Invalid event order' } } + [...Array(blockNumber - seed.blockNumber + 1)].forEach(() => prices.push({ price0: seed.price0, price1: seed.price1, blockNumber: blockNumber-- })) return prices }, From bfffb6e5b51ab5e86a168557ee8abcc11ee1d56d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 5 Aug 2022 19:16:00 +0430 Subject: [PATCH 056/406] Implement getSyncEvents function --- general/price_feed.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index f532ff3..4b261e0 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -56,8 +56,15 @@ module.exports = { }, - getSyncEvents: async function (chain, seedBlockNumber, pairAddress, denomerator) { - + getSyncEvents: async function (chainId, seedBlockNumber, pairAddress) { + const w3 = networksWeb3[chainId] + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const options = { + fromBlock: seedBlockNumber + 1, + toBlock: seedBlockNumber + networksBlockIn30Min[chainId] + } + const events = await pair.getPastEvents("Sync", options) + return events }, createPrices: function (chainId, seed, syncEvents) { From 060ab099477c96e94efe5e62a4c3b1e8b31014f6 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 6 Aug 2022 09:36:27 +0430 Subject: [PATCH 057/406] Check price tolerance and return first node result --- general/price_feed.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 4b261e0..47115b3 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -1,4 +1,4 @@ -const { soliditySha3, BN, Web3 } = MuonAppUtils +const { toBaseUnit, soliditySha3, BN, Web3 } = MuonAppUtils const HttpProvider = Web3.providers.HttpProvider @@ -17,6 +17,7 @@ const networksBlockIn30Min = { 250: 1650 } +const PRICE_TOLERANCE = '0.0005' const Q112 = new BN(2).pow(new BN(112)) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] @@ -133,11 +134,25 @@ module.exports = { let { chain, pairAddress, price0, price1 } = result + let priceTolerancesStatus = [] + let [expectedPrice0, expectedPrice1] = [request.data.result.price0, request.data.result.price1]; + [ + { price: price0, expectedPrice: expectedPrice0 }, + { price: price1, expectedPrice: expectedPrice1 } + ].forEach( + (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice)) + ) + if ( + priceTolerancesStatus.includes(false) + ) { + throw { message: 'Price threshold exceeded' } + } + return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: pairAddress }, - { type: 'uint256', value: price0 }, - { type: 'uint256', value: price1 }, + { type: 'uint256', value: expectedPrice0 }, + { type: 'uint256', value: expectedPrice1 }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp } ]) From c0e3c56bf75d296f5a8fe4d817847853c58cf232 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 6 Aug 2022 10:12:26 +0430 Subject: [PATCH 058/406] Write comment --- general/price_feed.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index 47115b3..7ba48c5 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -42,6 +42,8 @@ module.exports = { }, calculateInstantPrice: function (reserve0, reserve1) { + // multiply reserveA into Q112 for precision in division + // reserveA * (2 ** 112) / reserverB const price0 = (new BN(reserve1)).mul(Q112).div(new BN(reserve0)) const price1 = (new BN(reserve0)).mul(Q112).div(new BN(reserve1)) return { price0, price1 } @@ -71,18 +73,28 @@ module.exports = { createPrices: function (chainId, seed, syncEvents) { let prices = [] let blockNumber = seed.blockNumber + networksBlockIn30Min[chainId] + // loop through sync events in reverse order to ignore multiple sync events in the same block easily + // fill the prices array from blockNumber to seedBlockNumber(blocks mined in 30 mins ago) for (const event of syncEvents.reverse()) { + // push the block price after filling the gap between two sync events if (event.blockNumber < blockNumber || event.blockNumber == blockNumber) { + // calculate price in the block of event let { price0, price1 } = this.calculateInstantPrice(event.returnValues.reserve0, event.returnValues.reserve1); + // consider a price for each block between two sync events with block difference more than one + // use current event for considered price [...Array(blockNumber - event.blockNumber)].forEach(() => prices.push({ price0: price0, price1: price1, blockNumber: blockNumber-- })) + // push price in the block of event prices.push({ price0: price0, price1: price1, blockNumber: event.blockNumber }) blockNumber-- } + // ignore multiple sync events in one block else if (event.blockNumber == blockNumber + 1) continue else throw { message: 'Invalid event order' } } + // consider a price for blocks between seed and first sync event + // use seed price as considered price [...Array(blockNumber - seed.blockNumber + 1)].forEach(() => prices.push({ price0: seed.price0, price1: seed.price1, blockNumber: blockNumber-- })) return prices }, @@ -107,9 +119,13 @@ module.exports = { const chainId = CHAINS[chain] + // get price of 30 mins ago const seed = await this.getSeed(chainId, pairAddress) + // get sync events that are less than 30 mins old const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) + // create an array contains a price for each block mined 30 mins ago const prices = this.createPrices(chainId, seed, syncEvents) + // calculate the average price const price = this.calculateAveragePrice(prices) return { @@ -135,13 +151,16 @@ module.exports = { let { chain, pairAddress, price0, price1 } = result let priceTolerancesStatus = [] + // node1 result let [expectedPrice0, expectedPrice1] = [request.data.result.price0, request.data.result.price1]; + // check price difference between current node and node1 [ { price: price0, expectedPrice: expectedPrice0 }, { price: price1, expectedPrice: expectedPrice1 } ].forEach( (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice)) ) + // throw error in case of high price difference between current node and node1 if ( priceTolerancesStatus.includes(false) ) { From 20d3b23023e70b7eea99d4d0803d32283cd87b7c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 6 Aug 2022 10:13:56 +0430 Subject: [PATCH 059/406] Use <= instead of < || == --- general/price_feed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index 7ba48c5..a1fe511 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -77,7 +77,7 @@ module.exports = { // fill the prices array from blockNumber to seedBlockNumber(blocks mined in 30 mins ago) for (const event of syncEvents.reverse()) { // push the block price after filling the gap between two sync events - if (event.blockNumber < blockNumber || event.blockNumber == blockNumber) { + if (event.blockNumber <= blockNumber) { // calculate price in the block of event let { price0, price1 } = this.calculateInstantPrice(event.returnValues.reserve0, event.returnValues.reserve1); // consider a price for each block between two sync events with block difference more than one From 292d7bd500a6f45ffa8565f5994d2d859f50f988 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 9 Aug 2022 10:43:28 +0430 Subject: [PATCH 060/406] Make createPrices function implementation readable --- general/price_feed.js | 38 +++++++++++++++----------------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index a1fe511..251740b 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -71,31 +71,23 @@ module.exports = { }, createPrices: function (chainId, seed, syncEvents) { - let prices = [] - let blockNumber = seed.blockNumber + networksBlockIn30Min[chainId] - // loop through sync events in reverse order to ignore multiple sync events in the same block easily - // fill the prices array from blockNumber to seedBlockNumber(blocks mined in 30 mins ago) - for (const event of syncEvents.reverse()) { - // push the block price after filling the gap between two sync events - if (event.blockNumber <= blockNumber) { - // calculate price in the block of event - let { price0, price1 } = this.calculateInstantPrice(event.returnValues.reserve0, event.returnValues.reserve1); - // consider a price for each block between two sync events with block difference more than one - // use current event for considered price - [...Array(blockNumber - event.blockNumber)].forEach(() => prices.push({ price0: price0, price1: price1, blockNumber: blockNumber-- })) - // push price in the block of event - prices.push({ price0: price0, price1: price1, blockNumber: event.blockNumber }) - blockNumber-- + let syncEventsMap = {} + // {key: event.blockNumber => value: event} + syncEvents.forEach((event) => syncEventsMap[event.blockNumber] = event) + + let prices = [seed] + let price = seed + // fill prices and consider a price for each block between seed and current block + for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlockIn30Min[chainId]; blockNumber++) { + // use block event price if there is an event for the block + // otherwise use last event price + if (syncEventsMap[blockNumber]) { + const { reserve0, reserve1 } = syncEventsMap[blockNumber].returnValues + price = this.calculateInstantPrice(reserve0, reserve1) } - // ignore multiple sync events in one block - else if (event.blockNumber == blockNumber + 1) - continue - else - throw { message: 'Invalid event order' } + price.blockNumber = blockNumber + prices.push(price) } - // consider a price for blocks between seed and first sync event - // use seed price as considered price - [...Array(blockNumber - seed.blockNumber + 1)].forEach(() => prices.push({ price0: seed.price0, price1: seed.price1, blockNumber: blockNumber-- })) return prices }, From c1252e75ebf473f60e1ee271d077376ef312559d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 11:40:43 +0430 Subject: [PATCH 061/406] Fix change of pushed prices in createPrices function --- general/price_feed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 251740b..06a0149 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -76,7 +76,7 @@ module.exports = { syncEvents.forEach((event) => syncEventsMap[event.blockNumber] = event) let prices = [seed] - let price = seed + let price = { ...seed } // fill prices and consider a price for each block between seed and current block for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlockIn30Min[chainId]; blockNumber++) { // use block event price if there is an event for the block @@ -86,7 +86,7 @@ module.exports = { price = this.calculateInstantPrice(reserve0, reserve1) } price.blockNumber = blockNumber - prices.push(price) + prices.push({ ...price }) } return prices }, From a9c539d22fda675ff8c449010f9a47f031296a29 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 11 Aug 2022 09:50:26 +0430 Subject: [PATCH 062/406] Write top-down code for outlier detection --- general/price_feed.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index 06a0149..96db9c6 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -91,6 +91,10 @@ module.exports = { return prices }, + removeOutlier: function (prices) { + + }, + calculateAveragePrice: function (prices) { const sumPrice = prices.reduce((result, event) => { return { price0: result.price0.add(new BN(event.price0)), price1: result.price1.add(new BN(event.price1)) } }, { price0: new BN(0), price1: new BN(0) }) const averagePrice = { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } @@ -117,6 +121,8 @@ module.exports = { const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) // create an array contains a price for each block mined 30 mins ago const prices = this.createPrices(chainId, seed, syncEvents) + // remove outlier prices + prices = this.removeOutlier(prices) // calculate the average price const price = this.calculateAveragePrice(prices) From 2514ed33745685201f087d102c148ec767b872fc Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 11:29:55 +0430 Subject: [PATCH 063/406] Implement removeOutlier function --- general/price_feed.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index 96db9c6..f244ca8 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -92,7 +92,19 @@ module.exports = { }, removeOutlier: function (prices) { - + const logPrices = [] + prices.forEach((price) => logPrices.push({ price0: new BN(BigInt(Math.round(Math.log(price.price0)))), price1: new BN(BigInt(Math.round(Math.log(price.price1)))), blockNumber: price.blockNumber })) + const logPrices0 = [] + prices.forEach((price) => logPrices0.push(price.price0)) + let logOutlierRemoved = this.removeOutlierZScore(logPrices, logPrices0) + let logOutlierRemovedPrices0 = [] + logOutlierRemoved.forEach((price) => logOutlierRemovedPrices0.push(price.price0)) + logOutlierRemoved = this.removeOutlierZScore(logOutlierRemoved, logOutlierRemovedPrices0) + + const outlierRemoved = [] + prices.forEach((price, index) => logOutlierRemoved.includes(logPrices[index]) ? outlierRemoved.push(price) : {}) + + return outlierRemoved }, calculateAveragePrice: function (prices) { From e92ea7cc66053c6a9712d0b1bd336ab3552afae8 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 11:31:42 +0430 Subject: [PATCH 064/406] Implement removeOutlierZScore function --- general/price_feed.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index f244ca8..1194dbc 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -91,6 +91,18 @@ module.exports = { return prices }, + removeOutlierZScore: function (prices, prices0) { + const threshold = 2 + const mean = this.calculateAveragePrice(prices) + const std0 = this.std(prices0) + if (std0 == 0) return prices + + let result = [] + prices.forEach((price) => price.price0.sub(mean.price0).div(new BN(std0)).abs() < threshold ? result.push(price) : {}) + return result + + }, + removeOutlier: function (prices) { const logPrices = [] prices.forEach((price) => logPrices.push({ price0: new BN(BigInt(Math.round(Math.log(price.price0)))), price1: new BN(BigInt(Math.round(Math.log(price.price1)))), blockNumber: price.blockNumber })) From 53e11753338f9fb75845acfe0e4f2797a1b644c7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 11:32:47 +0430 Subject: [PATCH 065/406] Implement std function --- general/price_feed.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index 1194dbc..d3ffa8f 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -91,6 +91,18 @@ module.exports = { return prices }, + std: function (arr) { + let mean = arr.reduce((result, el) => result.add(el), new BN(0)).div(new BN(arr.length)) + + arr = arr.map((k) => k.sub(mean).pow(new BN(2))) + + let sum = arr.reduce((result, el) => result.add(el), new BN(0)) + + let variance = sum.div(new BN(arr.length)) + + return BigInt(Math.sqrt(variance)) + }, + removeOutlierZScore: function (prices, prices0) { const threshold = 2 const mean = this.calculateAveragePrice(prices) From cb8d30dc4411e3938ebf794557ac784a8dceb1ad Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 11:38:37 +0430 Subject: [PATCH 066/406] Write comment Change prices variable name after outlier detection to reliablePrices --- general/price_feed.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index d3ffa8f..8e87529 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -106,10 +106,13 @@ module.exports = { removeOutlierZScore: function (prices, prices0) { const threshold = 2 const mean = this.calculateAveragePrice(prices) + // calculate std(standard deviation) const std0 = this.std(prices0) if (std0 == 0) return prices let result = [] + // Z score = (price - mean) / std + // price is not reliable if Z score < threshold prices.forEach((price) => price.price0.sub(mean.price0).div(new BN(std0)).abs() < threshold ? result.push(price) : {}) return result @@ -121,6 +124,7 @@ module.exports = { const logPrices0 = [] prices.forEach((price) => logPrices0.push(price.price0)) let logOutlierRemoved = this.removeOutlierZScore(logPrices, logPrices0) + let logOutlierRemovedPrices0 = [] logOutlierRemoved.forEach((price) => logOutlierRemovedPrices0.push(price.price0)) logOutlierRemoved = this.removeOutlierZScore(logOutlierRemoved, logOutlierRemovedPrices0) @@ -158,9 +162,9 @@ module.exports = { // create an array contains a price for each block mined 30 mins ago const prices = this.createPrices(chainId, seed, syncEvents) // remove outlier prices - prices = this.removeOutlier(prices) + const reliablePrices = this.removeOutlier(prices) // calculate the average price - const price = this.calculateAveragePrice(prices) + const price = this.calculateAveragePrice(reliablePrices) return { chain: chain, From 89fa90f895f9fc381e13ac2a133dd7ace933591d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 12:20:36 +0430 Subject: [PATCH 067/406] Write top-down code for fuse --- general/price_feed.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index 8e87529..7a2635d 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -141,6 +141,10 @@ module.exports = { return averagePrice }, + checkLastDayPrice: function () { + + }, + onRequest: async function (request) { let { method, @@ -165,6 +169,8 @@ module.exports = { const reliablePrices = this.removeOutlier(prices) // calculate the average price const price = this.calculateAveragePrice(reliablePrices) + // check for high price change in 1D + this.checkLastDayPrice() return { chain: chain, From 36a8488dbd1cd8fc5dc325e2ee18e608e81f3599 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 12:44:55 +0430 Subject: [PATCH 068/406] Add priceTolerance to isPriceToleranceOk inputs --- general/price_feed.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 7a2635d..f3d6bf9 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -28,13 +28,13 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, - isPriceToleranceOk: function (price, expectedPrice) { + isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() if ( new BN(priceDiff) .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) + .gt(toBaseUnit(priceTolerance, '18')) ) { return false } @@ -202,7 +202,7 @@ module.exports = { { price: price0, expectedPrice: expectedPrice0 }, { price: price1, expectedPrice: expectedPrice1 } ].forEach( - (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice)) + (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice, PRICE_TOLERANCE)) ) // throw error in case of high price difference between current node and node1 if ( From d82650e06cd9d36f55e1dcc297df949d72a43a36 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 13 Aug 2022 12:46:02 +0430 Subject: [PATCH 069/406] Implement checkLastDayPrice function --- general/price_feed.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index f3d6bf9..6260f58 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -18,6 +18,7 @@ const networksBlockIn30Min = { } const PRICE_TOLERANCE = '0.0005' +const FUSE_PRICE_TOLERANCE = '0.3' const Q112 = new BN(2).pow(new BN(112)) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] @@ -141,8 +142,9 @@ module.exports = { return averagePrice }, - checkLastDayPrice: function () { - + checkLastDayPrice: function (chainId, pairAddress, price) { + const lastDayPrice = getLastDayPrice(chainId, pairAddress) + if (!this.isPriceToleranceOk(price, lastDayPrice.price0, FUSE_PRICE_TOLERANCE)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } }, onRequest: async function (request) { @@ -170,7 +172,7 @@ module.exports = { // calculate the average price const price = this.calculateAveragePrice(reliablePrices) // check for high price change in 1D - this.checkLastDayPrice() + this.checkLastDayPrice(chainId, pairAddress, price) return { chain: chain, From a80f95901659eabb87ef92e631602c136f0bfc9e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 14 Aug 2022 09:00:42 +0430 Subject: [PATCH 070/406] Add period to getSeed function inputs Use getSeed function in checkLastDayPrice function --- general/price_feed.js | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 6260f58..92aad83 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -12,9 +12,15 @@ const networksWeb3 = { 250: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), } -const networksBlockIn30Min = { - 1: 146, - 250: 1650 +const networksBlocks = { + 1: { + '30m': 135, + '1D': 6467, + }, + 250: { + '30m': 1475, + '1D': 70819, + } } const PRICE_TOLERANCE = '0.0005' @@ -50,9 +56,9 @@ module.exports = { return { price0, price1 } }, - getSeed: async function (chainId, pairAddress) { + getSeed: async function (chainId, pairAddress, period) { const w3 = networksWeb3[chainId] - const seedBlockNumber = (await w3.eth.getBlock("latest")).number - networksBlockIn30Min[chainId] + const seedBlockNumber = (await w3.eth.getBlock("latest")).number - networksBlocks[chainId][period] const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) const { price0, price1 } = this.calculateInstantPrice(_reserve0, _reserve1) @@ -65,7 +71,7 @@ module.exports = { const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const options = { fromBlock: seedBlockNumber + 1, - toBlock: seedBlockNumber + networksBlockIn30Min[chainId] + toBlock: seedBlockNumber + networksBlocks[chainId]['30m'] } const events = await pair.getPastEvents("Sync", options) return events @@ -79,7 +85,7 @@ module.exports = { let prices = [seed] let price = { ...seed } // fill prices and consider a price for each block between seed and current block - for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlockIn30Min[chainId]; blockNumber++) { + for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlocks[chainId]['30m']; blockNumber++) { // use block event price if there is an event for the block // otherwise use last event price if (syncEventsMap[blockNumber]) { @@ -143,7 +149,7 @@ module.exports = { }, checkLastDayPrice: function (chainId, pairAddress, price) { - const lastDayPrice = getLastDayPrice(chainId, pairAddress) + const lastDayPrice = this.getSeed(chainId, pairAddress, '1D') if (!this.isPriceToleranceOk(price, lastDayPrice.price0, FUSE_PRICE_TOLERANCE)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } }, @@ -162,7 +168,7 @@ module.exports = { const chainId = CHAINS[chain] // get price of 30 mins ago - const seed = await this.getSeed(chainId, pairAddress) + const seed = await this.getSeed(chainId, pairAddress, '30m') // get sync events that are less than 30 mins old const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) // create an array contains a price for each block mined 30 mins ago From 4c9e8c6c5924be2ab385f1e1f8e2cdef4c667b13 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 14 Aug 2022 09:39:20 +0430 Subject: [PATCH 071/406] Fix division precision in isPriceToleranceOk function --- general/price_feed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index 92aad83..0b049c4 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -39,7 +39,7 @@ module.exports = { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() if ( - new BN(priceDiff) + new BN(priceDiff).mul(toBaseUnit('1', '18')) .div(new BN(expectedPrice)) .gt(toBaseUnit(priceTolerance, '18')) ) { From 4a29b863f8f21b385aea8cafcc26d9d2668a28eb Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 14 Aug 2022 09:40:48 +0430 Subject: [PATCH 072/406] Make checkLastDayPrice async function --- general/price_feed.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 0b049c4..b2fe704 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -24,7 +24,7 @@ const networksBlocks = { } const PRICE_TOLERANCE = '0.0005' -const FUSE_PRICE_TOLERANCE = '0.3' +const FUSE_PRICE_TOLERANCE = '0.02' const Q112 = new BN(2).pow(new BN(112)) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] @@ -148,9 +148,9 @@ module.exports = { return averagePrice }, - checkLastDayPrice: function (chainId, pairAddress, price) { - const lastDayPrice = this.getSeed(chainId, pairAddress, '1D') - if (!this.isPriceToleranceOk(price, lastDayPrice.price0, FUSE_PRICE_TOLERANCE)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } + checkLastDayPrice: async function (chainId, pairAddress, price) { + const lastDayPrice = await this.getSeed(chainId, pairAddress, '1D') + return this.isPriceToleranceOk(price.price0, lastDayPrice.price0, FUSE_PRICE_TOLERANCE) }, onRequest: async function (request) { @@ -178,7 +178,7 @@ module.exports = { // calculate the average price const price = this.calculateAveragePrice(reliablePrices) // check for high price change in 1D - this.checkLastDayPrice(chainId, pairAddress, price) + if (!await this.checkLastDayPrice(chainId, pairAddress, price)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } return { chain: chain, From 2ec8bf430407ca907f5bafde3531b25727aa82be Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 14 Aug 2022 15:05:40 +0430 Subject: [PATCH 073/406] Add token_price_feed app file --- general/token_price_feed.js | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 general/token_price_feed.js diff --git a/general/token_price_feed.js b/general/token_price_feed.js new file mode 100644 index 0000000..feb9e98 --- /dev/null +++ b/general/token_price_feed.js @@ -0,0 +1,66 @@ +const { toBaseUnit, soliditySha3, BN } = MuonAppUtils + +const CHAINS = { + mainnet: 1, + fantom: 250, +} + +const PRICE_TOLERANCE = '0.0005' + +const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] + +module.exports = { + APP_NAME: 'token_price_feed', + APP_ID: 27, + REMOTE_CALL_TIMEOUT: 30000, + + + isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() + + if ( + new BN(priceDiff).mul(toBaseUnit('1', '18')) + .div(new BN(expectedPrice)) + .gt(toBaseUnit(priceTolerance, '18')) + ) { + return false + } + return true + }, + + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'signature': + + let { } = params + return {} + + default: + throw { message: `Unknown method ${params}` } + } + }, + + hashRequestResult: function (request, result) { + let { + method, + data: { params } + } = request + switch (method) { + case 'signature': { + + let { } = result + + return soliditySha3([]) + + } + default: + return null + } + } +} From a86c708e94bf628d6037a80d83afbe9d27a3e30e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 14 Aug 2022 15:29:44 +0430 Subject: [PATCH 074/406] Write top-down code to return token price --- general/token_price_feed.js | 39 +++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index feb9e98..2cb68b7 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -28,6 +28,13 @@ module.exports = { return true }, + getRoute: function (chainId, tokenAddress) { + + }, + + calculatePrice: async function (route, tokenAddress) { + + }, onRequest: async function (request) { let { @@ -38,8 +45,22 @@ module.exports = { switch (method) { case 'signature': - let { } = params - return {} + let { chain, tokenAddress } = params + if (!chain) throw { message: 'Invalid chain' } + + const chainId = CHAINS[chain] + + // get token route for calculating price + const route = this.getRoute(chainId, tokenAddress) + if (!route) throw { message: 'Invalid token' } + // calculate price using the given route + const price = await this.calculatePrice(route, tokenAddress) + + return { + chain: chain, + tokenAddress: tokenAddress, + price: price.toString() + } default: throw { message: `Unknown method ${params}` } @@ -54,9 +75,19 @@ module.exports = { switch (method) { case 'signature': { - let { } = result + let { chain, tokenAddress, price } = result + + const expectedPrice = request.data.result.price + + if (!this.isPriceToleranceOk(price, expectedPrice, PRICE_TOLERANCE)) throw { message: 'Price threshold exceeded' } - return soliditySha3([]) + return soliditySha3([ + { type: 'uint32', value: this.APP_ID }, + { type: 'address', value: tokenAddress }, + { type: 'uint256', value: expectedPrice }, + { type: 'uint256', value: String(CHAINS[chain]) }, + { type: 'uint256', value: request.data.timestamp } + ]) } default: From a45b7a4d711b4b55c03ef745a363a3087cf85ff1 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 15 Aug 2022 14:57:48 +0430 Subject: [PATCH 075/406] Add route to signature --- general/token_price_feed.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 2cb68b7..e69d088 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -11,7 +11,7 @@ const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserv module.exports = { APP_NAME: 'token_price_feed', - APP_ID: 27, + APP_ID: 100, REMOTE_CALL_TIMEOUT: 30000, @@ -59,6 +59,7 @@ module.exports = { return { chain: chain, tokenAddress: tokenAddress, + route: route, price: price.toString() } @@ -75,7 +76,7 @@ module.exports = { switch (method) { case 'signature': { - let { chain, tokenAddress, price } = result + let { chain, tokenAddress, route, price } = result const expectedPrice = request.data.result.price @@ -84,6 +85,7 @@ module.exports = { return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: tokenAddress }, + { type: 'address[]', value: route }, { type: 'uint256', value: expectedPrice }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp } From 844409a367cfb933fd197036fa519eeed016d7ae Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 15 Aug 2022 15:49:15 +0430 Subject: [PATCH 076/406] Implement getRoute and calculatePrice functions --- general/token_price_feed.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index e69d088..fbddb21 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -5,7 +5,17 @@ const CHAINS = { fantom: 250, } +const ROUTES = { + [CHAINS.mainnet]: { + '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984': ['0xEBFb684dD2b01E698ca6c14F10e4f289934a54D6'] + }, + [CHAINS.fantom]: { + '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44': ['0x2599Eba5fD1e49F294C76D034557948034d6C96E', '0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D'] + }, +} + const PRICE_TOLERANCE = '0.0005' +const Q112 = new BN(2).pow(new BN(112)) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] @@ -29,11 +39,19 @@ module.exports = { }, getRoute: function (chainId, tokenAddress) { - + return ROUTES[chainId][tokenAddress] }, - calculatePrice: async function (route, tokenAddress) { + }, + calculatePrice: async function (chain, route, tokenAddress) { + let price = Q112 + let tokenPairPrice = { unitToken: tokenAddress } + for (var pairAddress of route) { + tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, tokenPairPrice.token) + price = price.mul(tokenPairPrice.price).div(Q112) + } + return price }, onRequest: async function (request) { @@ -54,7 +72,7 @@ module.exports = { const route = this.getRoute(chainId, tokenAddress) if (!route) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(route, tokenAddress) + const price = await this.calculatePrice(chain, route, tokenAddress) return { chain: chain, From 1b8fee2f480b72e41afe271fb9c02667ed390a4f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 15 Aug 2022 15:50:22 +0430 Subject: [PATCH 077/406] Implement getTokenPairPrice function --- general/token_price_feed.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index fbddb21..63a5f4d 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -1,4 +1,4 @@ -const { toBaseUnit, soliditySha3, BN } = MuonAppUtils +const { toBaseUnit, soliditySha3, BN, ethCall } = MuonAppUtils const CHAINS = { mainnet: 1, @@ -17,7 +17,7 @@ const ROUTES = { const PRICE_TOLERANCE = '0.0005' const Q112 = new BN(2).pow(new BN(112)) -const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] +const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "token0", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "payable": false, "stateMutability": "view", "type": "function" }] module.exports = { APP_NAME: 'token_price_feed', @@ -42,6 +42,22 @@ module.exports = { return ROUTES[chainId][tokenAddress] }, + getTokenPairPrice: async function (chain, pairAddress, tokenAddress) { + let request = { + method: 'signature', + data: { + params: { + chain: chain, + pairAddress: pairAddress, + } + } + } + + let pairPrice = await this.invoke("price_feed", "onRequest", request) + let token0 = await ethCall(pairAddress, 'token0', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) + let token1 = await ethCall(pairAddress, 'token1', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) + if (tokenAddress == token0) return { pairPrice: new BN(pairPrice.price0), token: token1 } + return { price: new BN(pairPrice.price1), unitToken: token0 } }, calculatePrice: async function (chain, route, tokenAddress) { From febd340b7420a901e92351d601e417e496dc0dc3 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 15 Aug 2022 18:02:30 +0430 Subject: [PATCH 078/406] Apply #3 comments except https://github.com/smrm-dev/muon-apps/pull/3#discussion_r945446347 --- general/price_feed.js | 64 +++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index b2fe704..926e1dd 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -8,21 +8,22 @@ const CHAINS = { } const networksWeb3 = { - 1: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), - 250: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), + [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), + [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), } const networksBlocks = { - 1: { - '30m': 135, - '1D': 6467, + [CHAINS.mainnet]: { + 'seed': 135, + 'fuse': 6467, }, - 250: { - '30m': 1475, - '1D': 70819, + [CHAINS.fantom]: { + 'seed': 1475, + 'fuse': 70819, } } +const THRESHOLD = 2 const PRICE_TOLERANCE = '0.0005' const FUSE_PRICE_TOLERANCE = '0.02' const Q112 = new BN(2).pow(new BN(112)) @@ -38,14 +39,9 @@ module.exports = { isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - if ( - new BN(priceDiff).mul(toBaseUnit('1', '18')) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(priceTolerance, '18')) - ) { - return false - } - return true + return !new BN(priceDiff).mul(toBaseUnit('1', '18')) + .div(new BN(expectedPrice)) + .gt(toBaseUnit(priceTolerance, '18')) }, calculateInstantPrice: function (reserve0, reserve1) { @@ -71,7 +67,7 @@ module.exports = { const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const options = { fromBlock: seedBlockNumber + 1, - toBlock: seedBlockNumber + networksBlocks[chainId]['30m'] + toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] } const events = await pair.getPastEvents("Sync", options) return events @@ -85,7 +81,7 @@ module.exports = { let prices = [seed] let price = { ...seed } // fill prices and consider a price for each block between seed and current block - for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlocks[chainId]['30m']; blockNumber++) { + for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlocks[chainId]['seed']; blockNumber++) { // use block event price if there is an event for the block // otherwise use last event price if (syncEventsMap[blockNumber]) { @@ -100,18 +96,13 @@ module.exports = { std: function (arr) { let mean = arr.reduce((result, el) => result.add(el), new BN(0)).div(new BN(arr.length)) - arr = arr.map((k) => k.sub(mean).pow(new BN(2))) - let sum = arr.reduce((result, el) => result.add(el), new BN(0)) - let variance = sum.div(new BN(arr.length)) - return BigInt(Math.sqrt(variance)) }, removeOutlierZScore: function (prices, prices0) { - const threshold = 2 const mean = this.calculateAveragePrice(prices) // calculate std(standard deviation) const std0 = this.std(prices0) @@ -120,7 +111,7 @@ module.exports = { let result = [] // Z score = (price - mean) / std // price is not reliable if Z score < threshold - prices.forEach((price) => price.price0.sub(mean.price0).div(new BN(std0)).abs() < threshold ? result.push(price) : {}) + prices.forEach((price) => price.price0.sub(mean.price0).div(new BN(std0)).abs() < THRESHOLD ? result.push(price) : {}) return result }, @@ -143,14 +134,23 @@ module.exports = { }, calculateAveragePrice: function (prices) { - const sumPrice = prices.reduce((result, event) => { return { price0: result.price0.add(new BN(event.price0)), price1: result.price1.add(new BN(event.price1)) } }, { price0: new BN(0), price1: new BN(0) }) - const averagePrice = { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } + let fn = function (result, event) { + return { + price0: result.price0.add(new BN(event.price0)), + price1: result.price1.add(new BN(event.price1)) + } + } + const sumPrice = prices.reduce(fn, { price0: new BN(0), price1: new BN(0) }) + const averagePrice = { + price0: sumPrice.price0.div(new BN(prices.length)), + price1: sumPrice.price1.div(new BN(prices.length)) + } return averagePrice }, - checkLastDayPrice: async function (chainId, pairAddress, price) { - const lastDayPrice = await this.getSeed(chainId, pairAddress, '1D') - return this.isPriceToleranceOk(price.price0, lastDayPrice.price0, FUSE_PRICE_TOLERANCE) + checkFusePrice: async function (chainId, pairAddress, price) { + const fusePrice = await this.getSeed(chainId, pairAddress, 'fuse') + return this.isPriceToleranceOk(price.price0, fusePrice.price0, FUSE_PRICE_TOLERANCE) }, onRequest: async function (request) { @@ -168,7 +168,7 @@ module.exports = { const chainId = CHAINS[chain] // get price of 30 mins ago - const seed = await this.getSeed(chainId, pairAddress, '30m') + const seed = await this.getSeed(chainId, pairAddress, 'seed') // get sync events that are less than 30 mins old const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) // create an array contains a price for each block mined 30 mins ago @@ -177,8 +177,8 @@ module.exports = { const reliablePrices = this.removeOutlier(prices) // calculate the average price const price = this.calculateAveragePrice(reliablePrices) - // check for high price change in 1D - if (!await this.checkLastDayPrice(chainId, pairAddress, price)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } + // check for high price change in comparison with fuse price + if (!await this.checkFusePrice(chainId, pairAddress, price)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } return { chain: chain, From b9a45f52aed21b9bd8e2601f893ca7b1a24cbcb4 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 16 Aug 2022 18:56:43 +0430 Subject: [PATCH 079/406] Add feature to return twap price of specific block Return price difference percentage in isPriceToleranceOk function --- general/price_feed.js | 47 +++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 926e1dd..b242377 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -25,8 +25,9 @@ const networksBlocks = { const THRESHOLD = 2 const PRICE_TOLERANCE = '0.0005' -const FUSE_PRICE_TOLERANCE = '0.02' +const FUSE_PRICE_TOLERANCE = '0.1' const Q112 = new BN(2).pow(new BN(112)) +const ETH = new BN(toBaseUnit('1', '18')) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] @@ -38,10 +39,11 @@ module.exports = { isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - - return !new BN(priceDiff).mul(toBaseUnit('1', '18')) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(priceTolerance, '18')) + const priceDiffPercentage = new BN(priceDiff).mul(ETH).div(new BN(expectedPrice)) + return { + isOk: !priceDiffPercentage.gt(toBaseUnit(priceTolerance, '18')), + priceDiffPercentage: priceDiffPercentage.mul(new BN(100)).div(ETH) + } }, calculateInstantPrice: function (reserve0, reserve1) { @@ -52,9 +54,12 @@ module.exports = { return { price0, price1 } }, - getSeed: async function (chainId, pairAddress, period) { + getSeed: async function (chainId, pairAddress, period, toBlock) { const w3 = networksWeb3[chainId] - const seedBlockNumber = (await w3.eth.getBlock("latest")).number - networksBlocks[chainId][period] + const seedBlockNumber = toBlock ? + (await w3.eth.getBlock(toBlock)).number - networksBlocks[chainId][period] : + (await w3.eth.getBlock("latest")).number - networksBlocks[chainId][period] + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) const { price0, price1 } = this.calculateInstantPrice(_reserve0, _reserve1) @@ -148,9 +153,14 @@ module.exports = { return averagePrice }, - checkFusePrice: async function (chainId, pairAddress, price) { - const fusePrice = await this.getSeed(chainId, pairAddress, 'fuse') - return this.isPriceToleranceOk(price.price0, fusePrice.price0, FUSE_PRICE_TOLERANCE) + checkFusePrice: async function (chainId, pairAddress, price, toBlock) { + const fusePrice = await this.getSeed(chainId, pairAddress, 'fuse', toBlock) + const checkResult = this.isPriceToleranceOk(price.price0, fusePrice.price0, FUSE_PRICE_TOLERANCE) + return { + isOk: checkResult.isOk, + priceDiffPercentage: checkResult.priceDiffPercentage, + block: fusePrice.blockNumber + } }, onRequest: async function (request) { @@ -162,13 +172,13 @@ module.exports = { switch (method) { case 'signature': - let { chain, pairAddress } = params + let { chain, pairAddress, toBlock } = params if (!chain) throw { message: 'Invalid chain' } const chainId = CHAINS[chain] // get price of 30 mins ago - const seed = await this.getSeed(chainId, pairAddress, 'seed') + const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) // get sync events that are less than 30 mins old const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) // create an array contains a price for each block mined 30 mins ago @@ -178,13 +188,15 @@ module.exports = { // calculate the average price const price = this.calculateAveragePrice(reliablePrices) // check for high price change in comparison with fuse price - if (!await this.checkFusePrice(chainId, pairAddress, price)) throw { message: `High price gap between last day and twap price for ${pairAddress}` } + const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) + if (!fuse.isOk) throw { message: `High price gap (${fuse.priceDiffPercentage}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } return { chain: chain, pairAddress: pairAddress, price0: price.price0.toString(), - price1: price.price1.toString() + price1: price.price1.toString(), + ...(toBlock ? { toBlock: toBlock } : {}) } default: @@ -200,7 +212,7 @@ module.exports = { switch (method) { case 'signature': { - let { chain, pairAddress, price0, price1 } = result + let { chain, pairAddress, price0, price1, toBlock } = result let priceTolerancesStatus = [] // node1 result @@ -210,7 +222,7 @@ module.exports = { { price: price0, expectedPrice: expectedPrice0 }, { price: price1, expectedPrice: expectedPrice1 } ].forEach( - (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice, PRICE_TOLERANCE)) + (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice, PRICE_TOLERANCE).isOk) ) // throw error in case of high price difference between current node and node1 if ( @@ -225,7 +237,8 @@ module.exports = { { type: 'uint256', value: expectedPrice0 }, { type: 'uint256', value: expectedPrice1 }, { type: 'uint256', value: String(CHAINS[chain]) }, - { type: 'uint256', value: request.data.timestamp } + { type: 'uint256', value: request.data.timestamp }, + ...(toBlock ? [{ type: 'uint256', value: toBlock }] : []), ]) } From 4e414799dc3d365ffb665d3f0e4d5ac4e0419d13 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 21 Aug 2022 18:55:50 +0430 Subject: [PATCH 080/406] Use 1 / price0 for price1 to remove redundancy --- general/price_feed.js | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index b242377..55e5534 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -50,8 +50,7 @@ module.exports = { // multiply reserveA into Q112 for precision in division // reserveA * (2 ** 112) / reserverB const price0 = (new BN(reserve1)).mul(Q112).div(new BN(reserve0)) - const price1 = (new BN(reserve0)).mul(Q112).div(new BN(reserve1)) - return { price0, price1 } + return { price0 } }, getSeed: async function (chainId, pairAddress, period, toBlock) { @@ -62,8 +61,8 @@ module.exports = { const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) - const { price0, price1 } = this.calculateInstantPrice(_reserve0, _reserve1) - return { price0: price0, price1: price1, blockNumber: seedBlockNumber } + const { price0 } = this.calculateInstantPrice(_reserve0, _reserve1) + return { price0: price0, blockNumber: seedBlockNumber } }, @@ -123,9 +122,11 @@ module.exports = { removeOutlier: function (prices) { const logPrices = [] - prices.forEach((price) => logPrices.push({ price0: new BN(BigInt(Math.round(Math.log(price.price0)))), price1: new BN(BigInt(Math.round(Math.log(price.price1)))), blockNumber: price.blockNumber })) const logPrices0 = [] - prices.forEach((price) => logPrices0.push(price.price0)) + prices.forEach((price) => { + logPrices.push({ price0: new BN(BigInt(Math.round(Math.log(price.price0)))), blockNumber: price.blockNumber }); + logPrices0.push(price.price0); + }) let logOutlierRemoved = this.removeOutlierZScore(logPrices, logPrices0) let logOutlierRemovedPrices0 = [] @@ -141,8 +142,8 @@ module.exports = { calculateAveragePrice: function (prices) { let fn = function (result, event) { return { - price0: result.price0.add(new BN(event.price0)), - price1: result.price1.add(new BN(event.price1)) + price0: result.price0.add(event.price0), + price1: result.price1.add(Q112.mul(Q112).div(event.price0)) } } const sumPrice = prices.reduce(fn, { price0: new BN(0), price1: new BN(0) }) @@ -214,22 +215,12 @@ module.exports = { let { chain, pairAddress, price0, price1, toBlock } = result - let priceTolerancesStatus = [] // node1 result let [expectedPrice0, expectedPrice1] = [request.data.result.price0, request.data.result.price1]; // check price difference between current node and node1 - [ - { price: price0, expectedPrice: expectedPrice0 }, - { price: price1, expectedPrice: expectedPrice1 } - ].forEach( - (price) => priceTolerancesStatus.push(this.isPriceToleranceOk(price.price, price.expectedPrice, PRICE_TOLERANCE).isOk) - ) // throw error in case of high price difference between current node and node1 - if ( - priceTolerancesStatus.includes(false) - ) { + if (!this.isPriceToleranceOk(price0, expectedPrice0, PRICE_TOLERANCE).isOk) throw { message: 'Price threshold exceeded' } - } return soliditySha3([ { type: 'uint32', value: this.APP_ID }, From bbe49f365c5cbd2f8bb8b875f3bc3c6ecdfa1af4 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 23 Aug 2022 00:25:17 +0430 Subject: [PATCH 081/406] MuonV3 sample app --- general/muon_v3_sample.js | 36 +++++++++++++++++++++++++++++ general_test/muon_v3_sample_test.js | 16 +++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 general/muon_v3_sample.js create mode 100644 general_test/muon_v3_sample_test.js diff --git a/general/muon_v3_sample.js b/general/muon_v3_sample.js new file mode 100644 index 0000000..37ce4ca --- /dev/null +++ b/general/muon_v3_sample.js @@ -0,0 +1,36 @@ +const {soliditySha3} = MuonAppUtils + +module.exports = { + APP_NAME: 'muon_v3_sample', + + onRequest: async (request) => { + switch (method) { + case 'test': + return { + appId: this.APP_ID, + testParam: 100, // uint256 + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + hashRequestResult: (request, result) => { + let { method } = request + switch (method) { + case 'test': + let { testParam } = result; + return soliditySha3([ + { type: 'uint32', value: this.APP_ID }, + // request.hash is the reqId that goes to the chain + // it is deterministic and can be signed + { type: 'bytes', value: request.hash}, + { type: 'uint256', value: testParam} + ]) + + default: + break + } + } +} diff --git a/general_test/muon_v3_sample_test.js b/general_test/muon_v3_sample_test.js new file mode 100644 index 0000000..3378057 --- /dev/null +++ b/general_test/muon_v3_sample_test.js @@ -0,0 +1,16 @@ +require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +require('../../core/global') +const { onRequest } = require('../general/muon_v3_sample'); + +const test= async () => { + return onRequest({ + method:'test', + data: { + } + }).then((response) => { + console.log(response); + }) + .catch((error) => console.log(error)) +} + +test() From c477f837045263aebc1f74752ffecf5afbf40cc0 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 23 Aug 2022 00:42:32 +0430 Subject: [PATCH 082/406] bugix --- general/muon_v3_sample.js | 1 - general_test/muon_v3_sample_test.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/general/muon_v3_sample.js b/general/muon_v3_sample.js index 37ce4ca..bd42f2b 100644 --- a/general/muon_v3_sample.js +++ b/general/muon_v3_sample.js @@ -7,7 +7,6 @@ module.exports = { switch (method) { case 'test': return { - appId: this.APP_ID, testParam: 100, // uint256 } diff --git a/general_test/muon_v3_sample_test.js b/general_test/muon_v3_sample_test.js index 3378057..444018a 100644 --- a/general_test/muon_v3_sample_test.js +++ b/general_test/muon_v3_sample_test.js @@ -1,5 +1,5 @@ require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') +require('../../src/core/global') const { onRequest } = require('../general/muon_v3_sample'); const test= async () => { From 5210c63d2bd5ad46edcf035980ff7be39ec9afad Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 23 Aug 2022 00:46:59 +0430 Subject: [PATCH 083/406] bugfix --- general/muon_v3_sample.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/muon_v3_sample.js b/general/muon_v3_sample.js index bd42f2b..5292af3 100644 --- a/general/muon_v3_sample.js +++ b/general/muon_v3_sample.js @@ -4,6 +4,7 @@ module.exports = { APP_NAME: 'muon_v3_sample', onRequest: async (request) => { + let { method } = request switch (method) { case 'test': return { From 4a453348cdb07413fba093175f7899eeddd43885 Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Tue, 23 Aug 2022 04:28:29 +0430 Subject: [PATCH 084/406] change arrow function 2 regular function --- custom/sample.js | 4 ++-- general/carebig.js | 4 ++-- general/deus_oracle.js | 2 +- general/fear_game.js | 4 ++-- general/gamestarter.js | 4 ++-- general/random_nft.js | 12 ++++++------ general/test_rng.js | 10 +++++----- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/custom/sample.js b/custom/sample.js index 02a331b..99cc6b2 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -171,7 +171,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { // console.log(result) switch (request.method) { case 'test_speed': @@ -193,7 +193,7 @@ module.exports = { /** * store data on request confirm */ - onMemWrite: (req, res) => { + onMemWrite: function (req, res) { if (req.method === 'test_memory') { let { data: { diff --git a/general/carebig.js b/general/carebig.js index 75d56a0..bbbc56d 100644 --- a/general/carebig.js +++ b/general/carebig.js @@ -21,7 +21,7 @@ function getRewards(address) { module.exports = { APP_NAME: 'carebig', - onRequest: async (request) => { + onRequest: async function (request) { throw { message: `MuonApp disabled.` } let { method, @@ -48,7 +48,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { let { method } = request switch (method) { case 'claim': diff --git a/general/deus_oracle.js b/general/deus_oracle.js index 434828a..5a7e673 100644 --- a/general/deus_oracle.js +++ b/general/deus_oracle.js @@ -32,7 +32,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { switch (request.method) { case 'getPrice': return soliditySha3([ diff --git a/general/fear_game.js b/general/fear_game.js index eb09847..b3f98b2 100644 --- a/general/fear_game.js +++ b/general/fear_game.js @@ -29,7 +29,7 @@ module.exports = { APP_NAME: 'fear_game', REMOTE_CALL_TIMEOUT: 30000, - onRequest: async (request) => { + onRequest: async function (request) { let { method, data: { params } @@ -69,7 +69,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { let { method } = request switch (method) { case 'claim': diff --git a/general/gamestarter.js b/general/gamestarter.js index edc99b4..d5eb4db 100644 --- a/general/gamestarter.js +++ b/general/gamestarter.js @@ -16,7 +16,7 @@ function getBalance(address) { module.exports = { APP_NAME: 'gamestarter', - onRequest: async (request) => { + onRequest: async function (request) { throw { message: `MuonApp disabled.` } let { method, @@ -43,7 +43,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { let { method } = request switch (method) { case 'claim': diff --git a/general/random_nft.js b/general/random_nft.js index 8f74878..6242fcd 100644 --- a/general/random_nft.js +++ b/general/random_nft.js @@ -5,7 +5,7 @@ const MIN = 1; const MAX = 20; // Random seed function -// More Info: +// More Info: // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript Math.seed = function(s) { var mask = 0xffffffff; @@ -30,7 +30,7 @@ function getRandomNumber(seed, min, max){ module.exports = { APP_NAME: 'random_nft', - onRequest: async (request) => { + onRequest: async function (request) { throw { message: `MuonApp disabled.` } let { method, @@ -47,12 +47,12 @@ module.exports = { //TODO: validate that blockhash is correct and // the NFT is minted on that block - + let seed = parseInt(blockHash) + parseInt(nftId); - + // all nodes will use the same seed and the random // number will be the same on all nodes - let randomNumber = getRandomNumber(seed, + let randomNumber = getRandomNumber(seed, MIN, MAX ); @@ -67,7 +67,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { let { method } = request; switch (method) { case 'randint': diff --git a/general/test_rng.js b/general/test_rng.js index fd6279d..0da6ca8 100644 --- a/general/test_rng.js +++ b/general/test_rng.js @@ -3,7 +3,7 @@ const { axios, soliditySha3, floatToBN } = MuonAppUtils const APP_ID = 13 // Random seed function -// More Info: +// More Info: // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript Math.seed = function(s) { var mask = 0xffffffff; @@ -28,7 +28,7 @@ function getRandomNumber(seed, min, max){ module.exports = { APP_NAME: 'test_rng', - onRequest: async (request) => { + onRequest: async function (request) { throw { message: `MuonApp disabled.` } let { method, @@ -47,10 +47,10 @@ module.exports = { */ let seed = request.data.timestamp; - + // all nodes will use the same seed and the random // number will be the same on all nodes - let randomNumber = getRandomNumber(seed, + let randomNumber = getRandomNumber(seed, parseInt(min), parseInt(max) ); @@ -65,7 +65,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function (request, result) { let { method } = request; switch (method) { case 'randint': From ad42c5c96658bc61791667495bfff76a9e19282f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 23 Aug 2022 10:12:51 +0430 Subject: [PATCH 085/406] Remove blockNumber from price object --- general/price_feed.js | 59 ++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 55e5534..8156032 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -50,7 +50,7 @@ module.exports = { // multiply reserveA into Q112 for precision in division // reserveA * (2 ** 112) / reserverB const price0 = (new BN(reserve1)).mul(Q112).div(new BN(reserve0)) - return { price0 } + return price0 }, getSeed: async function (chainId, pairAddress, period, toBlock) { @@ -61,7 +61,7 @@ module.exports = { const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) - const { price0 } = this.calculateInstantPrice(_reserve0, _reserve1) + const price0 = this.calculateInstantPrice(_reserve0, _reserve1) return { price0: price0, blockNumber: seedBlockNumber } }, @@ -73,17 +73,17 @@ module.exports = { fromBlock: seedBlockNumber + 1, toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] } - const events = await pair.getPastEvents("Sync", options) - return events - }, - - createPrices: function (chainId, seed, syncEvents) { + const syncEvents = await pair.getPastEvents("Sync", options) let syncEventsMap = {} // {key: event.blockNumber => value: event} syncEvents.forEach((event) => syncEventsMap[event.blockNumber] = event) + return syncEventsMap + }, - let prices = [seed] - let price = { ...seed } + createPrices: function (chainId, seed, syncEventsMap) { + + let prices = [seed.price0] + let price = seed.price0 // fill prices and consider a price for each block between seed and current block for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlocks[chainId]['seed']; blockNumber++) { // use block event price if there is an event for the block @@ -92,8 +92,7 @@ module.exports = { const { reserve0, reserve1 } = syncEventsMap[blockNumber].returnValues price = this.calculateInstantPrice(reserve0, reserve1) } - price.blockNumber = blockNumber - prices.push({ ...price }) + prices.push(price) } return prices }, @@ -106,32 +105,28 @@ module.exports = { return BigInt(Math.sqrt(variance)) }, - removeOutlierZScore: function (prices, prices0) { + removeOutlierZScore: function (prices) { const mean = this.calculateAveragePrice(prices) // calculate std(standard deviation) - const std0 = this.std(prices0) + const std0 = this.std(prices) if (std0 == 0) return prices let result = [] // Z score = (price - mean) / std // price is not reliable if Z score < threshold - prices.forEach((price) => price.price0.sub(mean.price0).div(new BN(std0)).abs() < THRESHOLD ? result.push(price) : {}) + prices.forEach((price) => price.sub(mean).div(new BN(std0)).abs() < THRESHOLD ? result.push(price) : {}) return result }, removeOutlier: function (prices) { const logPrices = [] - const logPrices0 = [] prices.forEach((price) => { - logPrices.push({ price0: new BN(BigInt(Math.round(Math.log(price.price0)))), blockNumber: price.blockNumber }); - logPrices0.push(price.price0); + logPrices.push(new BN(BigInt(Math.round(Math.log(price))))); }) - let logOutlierRemoved = this.removeOutlierZScore(logPrices, logPrices0) + let logOutlierRemoved = this.removeOutlierZScore(logPrices) - let logOutlierRemovedPrices0 = [] - logOutlierRemoved.forEach((price) => logOutlierRemovedPrices0.push(price.price0)) - logOutlierRemoved = this.removeOutlierZScore(logOutlierRemoved, logOutlierRemovedPrices0) + logOutlierRemoved = this.removeOutlierZScore(logOutlierRemoved) const outlierRemoved = [] prices.forEach((price, index) => logOutlierRemoved.includes(logPrices[index]) ? outlierRemoved.push(price) : {}) @@ -139,18 +134,12 @@ module.exports = { return outlierRemoved }, - calculateAveragePrice: function (prices) { - let fn = function (result, event) { - return { - price0: result.price0.add(event.price0), - price1: result.price1.add(Q112.mul(Q112).div(event.price0)) - } - } - const sumPrice = prices.reduce(fn, { price0: new BN(0), price1: new BN(0) }) - const averagePrice = { - price0: sumPrice.price0.div(new BN(prices.length)), - price1: sumPrice.price1.div(new BN(prices.length)) + calculateAveragePrice: function (prices, returnReverse) { + let fn = function (result, el) { + return returnReverse ? { price0: result.price0.add(el), price1: result.price1.add(Q112.mul(Q112).div(el)) } : result.add(el) } + const sumPrice = prices.reduce(fn, returnReverse ? { price0: new BN(0), price1: new BN(0) } : new BN(0)) + const averagePrice = returnReverse ? { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } : sumPrice.div(new BN(prices.length)) return averagePrice }, @@ -181,13 +170,13 @@ module.exports = { // get price of 30 mins ago const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) // get sync events that are less than 30 mins old - const syncEvents = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) + const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) // create an array contains a price for each block mined 30 mins ago - const prices = this.createPrices(chainId, seed, syncEvents) + const prices = this.createPrices(chainId, seed, syncEventsMap) // remove outlier prices const reliablePrices = this.removeOutlier(prices) // calculate the average price - const price = this.calculateAveragePrice(reliablePrices) + const price = this.calculateAveragePrice(reliablePrices, true) // check for high price change in comparison with fuse price const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) if (!fuse.isOk) throw { message: `High price gap (${fuse.priceDiffPercentage}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } From 526a13b9e506b7d4472da6a0f3e3da372fcca488 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 23 Aug 2022 10:26:29 +0430 Subject: [PATCH 086/406] Fix the bug in the names of the `getTokenPairPrice` return values --- general/token_price_feed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 63a5f4d..5da5062 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -56,7 +56,7 @@ module.exports = { let pairPrice = await this.invoke("price_feed", "onRequest", request) let token0 = await ethCall(pairAddress, 'token0', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) let token1 = await ethCall(pairAddress, 'token1', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) - if (tokenAddress == token0) return { pairPrice: new BN(pairPrice.price0), token: token1 } + if (tokenAddress == token0) return { price: new BN(pairPrice.price0), token: token1 } return { price: new BN(pairPrice.price1), unitToken: token0 } }, @@ -64,7 +64,7 @@ module.exports = { let price = Q112 let tokenPairPrice = { unitToken: tokenAddress } for (var pairAddress of route) { - tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, tokenPairPrice.token) + tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, tokenPairPrice.unitToken) price = price.mul(tokenPairPrice.price).div(Q112) } return price From 84b049183af08888965881abe54d8789a143b3d4 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 23 Aug 2022 10:46:09 +0430 Subject: [PATCH 087/406] bugfix --- general/muon_v3_sample.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/muon_v3_sample.js b/general/muon_v3_sample.js index 5292af3..ca5df9c 100644 --- a/general/muon_v3_sample.js +++ b/general/muon_v3_sample.js @@ -16,7 +16,7 @@ module.exports = { } }, - hashRequestResult: (request, result) => { + hashRequestResult: function(request, result){ let { method } = request switch (method) { case 'test': From 09b7be8e206d120b93c85c3a5d3c1272513454a1 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 23 Aug 2022 10:55:19 +0430 Subject: [PATCH 088/406] Assign `currentBlockNumber` to `toBlock` if it is `undefined` --- general/price_feed.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 8156032..328ea0e 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -55,9 +55,7 @@ module.exports = { getSeed: async function (chainId, pairAddress, period, toBlock) { const w3 = networksWeb3[chainId] - const seedBlockNumber = toBlock ? - (await w3.eth.getBlock(toBlock)).number - networksBlocks[chainId][period] : - (await w3.eth.getBlock("latest")).number - networksBlocks[chainId][period] + const seedBlockNumber = toBlock - networksBlocks[chainId][period] const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) @@ -166,6 +164,10 @@ module.exports = { if (!chain) throw { message: 'Invalid chain' } const chainId = CHAINS[chain] + const w3 = networksWeb3[chainId] + const currentBlockNumber = await w3.eth.getBlockNumber() + if (!toBlock) toBlock = currentBlockNumber + else if (toBlock > currentBlockNumber) throw { message: 'Invalid Block Number' } // get price of 30 mins ago const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) @@ -186,7 +188,7 @@ module.exports = { pairAddress: pairAddress, price0: price.price0.toString(), price1: price.price1.toString(), - ...(toBlock ? { toBlock: toBlock } : {}) + toBlock: toBlock, } default: @@ -218,7 +220,7 @@ module.exports = { { type: 'uint256', value: expectedPrice1 }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp }, - ...(toBlock ? [{ type: 'uint256', value: toBlock }] : []), + { type: 'uint256', value: toBlock }, ]) } From bfe0c8de2b097d5d50f128c54e763d1c402c189a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 23 Aug 2022 10:59:29 +0430 Subject: [PATCH 089/406] Fix comments --- general/price_feed.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 328ea0e..a4be5ff 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -169,11 +169,11 @@ module.exports = { if (!toBlock) toBlock = currentBlockNumber else if (toBlock > currentBlockNumber) throw { message: 'Invalid Block Number' } - // get price of 30 mins ago + // get seed price const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) - // get sync events that are less than 30 mins old + // get sync events that are emitted after seed block const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) - // create an array contains a price for each block mined 30 mins ago + // create an array contains a price for each block mined after seed block const prices = this.createPrices(chainId, seed, syncEventsMap) // remove outlier prices const reliablePrices = this.removeOutlier(prices) From 8c2148c672252d9d13542a6d3768b41665453164 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 23 Aug 2022 13:54:53 +0430 Subject: [PATCH 090/406] Use `toBlock` of first node in signature --- general/price_feed.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index a4be5ff..2da5f8a 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -220,7 +220,8 @@ module.exports = { { type: 'uint256', value: expectedPrice1 }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp }, - { type: 'uint256', value: toBlock }, + //TODO: consider about difference in toBlock value of nodes results + { type: 'uint256', value: request.data.result.toBlock }, ]) } From 5aac85aafe154ca21b9aa93edeef7dbc3392927b Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 24 Aug 2022 11:59:13 +0430 Subject: [PATCH 091/406] v3 sample --- general/muon_v3_sample.js | 46 +++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/general/muon_v3_sample.js b/general/muon_v3_sample.js index ca5df9c..dd3d366 100644 --- a/general/muon_v3_sample.js +++ b/general/muon_v3_sample.js @@ -3,12 +3,12 @@ const {soliditySha3} = MuonAppUtils module.exports = { APP_NAME: 'muon_v3_sample', - onRequest: async (request) => { + onRequest: async function(request){ let { method } = request switch (method) { case 'test': return { - testParam: 100, // uint256 + testParam: "100", // uint256 } default: @@ -16,19 +16,41 @@ module.exports = { } }, - hashRequestResult: function(request, result){ - let { method } = request + // Deprecated in favor of signParams + + // hashRequestResult: function(request, result){ + // let { method } = request + // switch (method) { + // case 'test': + // let { testParam } = result; + // console.log(this.APP_ID, request.hash, testParam) + // return soliditySha3([ + // { type: 'uint32', value: this.APP_ID }, + // // request.hash is the reqId that goes to the chain + // // it is deterministic and can be signed + // { type: 'bytes', value: request.hash}, + // { type: 'uint256', value: testParam} + // ]) + + // default: + // break + // } + // } + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function(request, result){ + let { method } = request; + let { testParam } = result; switch (method) { case 'test': - let { testParam } = result; - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - // request.hash is the reqId that goes to the chain - // it is deterministic and can be signed - { type: 'bytes', value: request.hash}, + return [ { type: 'uint256', value: testParam} - ]) - + ] default: break } From 4d9d81d4c05a2ffc97382eb4d5949e49cc35080e Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Wed, 24 Aug 2022 14:11:21 +0430 Subject: [PATCH 092/406] update sample to v3 --- custom/sample.js | 9 ++++----- custom/tss-test.js | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/custom/sample.js b/custom/sample.js index 99cc6b2..777f78c 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -171,20 +171,19 @@ module.exports = { } }, - hashRequestResult: function (request, result) { + signParams: function (request, result) { // console.log(result) switch (request.method) { case 'test_speed': case 'test_redis': case 'test_memory': case 'lock': - return soliditySha3([{type: 'string', value: result}]) + return [{type: 'string', value: result}] case 'btc_price': - let hash = soliditySha3([ + return [ { type: 'uint256', value: request.data.result.time }, { type: 'uint256', value: result.price } - ]) - return hash + ] default: throw { message: `Unknown method: ${request.method}` } } diff --git a/custom/tss-test.js b/custom/tss-test.js index 7b9db07..f7101f4 100644 --- a/custom/tss-test.js +++ b/custom/tss-test.js @@ -15,15 +15,15 @@ const TssApp = { } }, - hashRequestResult: function (request, result){ + signParams: function (request, result) { switch (request.method) { case 'test': case 'data-change': - return soliditySha3([{type: 'string', value: result.toString()}]); + return [{type: 'string', value: result.toString()}] default: throw { message: `Unknown method: ${request.method}` } } - }, + } } module.exports = TssApp From 1c301ee1e5893f6e5a0c88cdc717e00b9ae10717 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 27 Aug 2022 15:50:14 +0430 Subject: [PATCH 093/406] Muon PVRB app --- general/muon_pvrb.js | 54 ++++++++++++++++++++++++++++++++++ general_test/muon_pvrb_test.js | 19 ++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 general/muon_pvrb.js create mode 100644 general_test/muon_pvrb_test.js diff --git a/general/muon_pvrb.js b/general/muon_pvrb.js new file mode 100644 index 0000000..0303989 --- /dev/null +++ b/general/muon_pvrb.js @@ -0,0 +1,54 @@ +const { axios, soliditySha3, floatToBN } = MuonAppUtils + +/** + * PVRB(Publicly Verifiable Random Beacon) using Muon + * + * 1- The app gets a message from the client or load it + * from a trusted public source + * + * 2- Calculates the TSS signature + * + * 3- The signature is random and verifiable and could be + * considered as the random seed by the client + */ + +module.exports = { + APP_NAME: 'muon_pvrb', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + switch (method) { + case 'pvrb': + let { message } = params; + + /* + * 'message' could be loaded from another source. + * For example on smart contracts, the message could + * be the previous random number that is saved on the chain. + */ + + return { + message: message + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + signParams: function(request, result){ + let { method } = request; + let { message } = result; + switch (method) { + case 'pvrb': + return [ + { type: 'string', value: message} + ] + default: + break + } + } +} diff --git a/general_test/muon_pvrb_test.js b/general_test/muon_pvrb_test.js new file mode 100644 index 0000000..e750bf7 --- /dev/null +++ b/general_test/muon_pvrb_test.js @@ -0,0 +1,19 @@ +require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +require('../../src/core/global') +const { onRequest } = require('../general/muon_pvrb'); + +const test= async () => { + return onRequest({ + method:'pvrb', + data: { + params: { + message: "hello every body" + } + } + }).then((response) => { + console.log(response); + }) + .catch((error) => console.log(error)) +} + +test() From ba987099395a70575e87d7397e3d430189d5e4c0 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 27 Aug 2022 15:55:37 +0430 Subject: [PATCH 094/406] Work with ```Number``` type in ```removeOutlier``` function --- general/price_feed.js | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 2da5f8a..ffe4b6b 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -61,7 +61,6 @@ module.exports = { const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) const price0 = this.calculateInstantPrice(_reserve0, _reserve1) return { price0: price0, blockNumber: seedBlockNumber } - }, getSyncEvents: async function (chainId, seedBlockNumber, pairAddress) { @@ -96,11 +95,11 @@ module.exports = { }, std: function (arr) { - let mean = arr.reduce((result, el) => result.add(el), new BN(0)).div(new BN(arr.length)) - arr = arr.map((k) => k.sub(mean).pow(new BN(2))) - let sum = arr.reduce((result, el) => result.add(el), new BN(0)) - let variance = sum.div(new BN(arr.length)) - return BigInt(Math.sqrt(variance)) + let mean = arr.reduce((result, el) => result + el, 0) / arr.length + arr = arr.map((k) => (k - mean) ** 2) + let sum = arr.reduce((result, el) => result + el, 0) + let variance = sum / arr.length + return Math.sqrt(variance) }, removeOutlierZScore: function (prices) { @@ -112,7 +111,7 @@ module.exports = { let result = [] // Z score = (price - mean) / std // price is not reliable if Z score < threshold - prices.forEach((price) => price.sub(mean).div(new BN(std0)).abs() < THRESHOLD ? result.push(price) : {}) + prices.forEach((price) => Math.abs(price - mean) / std0 < THRESHOLD ? result.push(price) : {}) return result }, @@ -120,7 +119,7 @@ module.exports = { removeOutlier: function (prices) { const logPrices = [] prices.forEach((price) => { - logPrices.push(new BN(BigInt(Math.round(Math.log(price))))); + logPrices.push(Number(Math.log(price).toFixed(3))); }) let logOutlierRemoved = this.removeOutlierZScore(logPrices) @@ -134,10 +133,10 @@ module.exports = { calculateAveragePrice: function (prices, returnReverse) { let fn = function (result, el) { - return returnReverse ? { price0: result.price0.add(el), price1: result.price1.add(Q112.mul(Q112).div(el)) } : result.add(el) + return returnReverse ? { price0: result.price0.add(el), price1: result.price1.add(Q112.mul(Q112).div(el)) } : result + el } - const sumPrice = prices.reduce(fn, returnReverse ? { price0: new BN(0), price1: new BN(0) } : new BN(0)) - const averagePrice = returnReverse ? { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } : sumPrice.div(new BN(prices.length)) + const sumPrice = prices.reduce(fn, returnReverse ? { price0: new BN(0), price1: new BN(0) } : 0) + const averagePrice = returnReverse ? { price0: sumPrice.price0.div(new BN(prices.length)), price1: sumPrice.price1.div(new BN(prices.length)) } : sumPrice / prices.length return averagePrice }, From 61c41363ae67d1f9e6b77eee6d1e0590814a431b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 27 Aug 2022 15:58:11 +0430 Subject: [PATCH 095/406] Return prices removed as outlier --- general/price_feed.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index ffe4b6b..61e8502 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -126,9 +126,10 @@ module.exports = { logOutlierRemoved = this.removeOutlierZScore(logOutlierRemoved) const outlierRemoved = [] - prices.forEach((price, index) => logOutlierRemoved.includes(logPrices[index]) ? outlierRemoved.push(price) : {}) + const removed = [] + prices.forEach((price, index) => logOutlierRemoved.includes(logPrices[index]) ? outlierRemoved.push(price) : removed.push(price.toString())) - return outlierRemoved + return { outlierRemoved, removed } }, calculateAveragePrice: function (prices, returnReverse) { @@ -175,9 +176,9 @@ module.exports = { // create an array contains a price for each block mined after seed block const prices = this.createPrices(chainId, seed, syncEventsMap) // remove outlier prices - const reliablePrices = this.removeOutlier(prices) + const { outlierRemoved, removed } = this.removeOutlier(prices) // calculate the average price - const price = this.calculateAveragePrice(reliablePrices, true) + const price = this.calculateAveragePrice(outlierRemoved, true) // check for high price change in comparison with fuse price const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) if (!fuse.isOk) throw { message: `High price gap (${fuse.priceDiffPercentage}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } @@ -187,6 +188,7 @@ module.exports = { pairAddress: pairAddress, price0: price.price0.toString(), price1: price.price1.toString(), + removedOutliers: removed, toBlock: toBlock, } From e4df87f0354fd840272685d005bbc0cbb7af5cfe Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 27 Aug 2022 16:00:36 +0430 Subject: [PATCH 096/406] Use twap price instead of instant price for fuse price --- general/price_feed.js | 70 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 6 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 61e8502..726cb45 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -29,7 +29,7 @@ const FUSE_PRICE_TOLERANCE = '0.1' const Q112 = new BN(2).pow(new BN(112)) const ETH = new BN(toBaseUnit('1', '18')) -const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }] +const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] module.exports = { APP_NAME: 'price_feed', @@ -141,12 +141,70 @@ module.exports = { return averagePrice }, + makeBatchRequest: function (w3, calls) { + let batch = new w3.BatchRequest(); + + let promises = calls.map(call => { + return new Promise((res, rej) => { + let req = call.req.request(call.block, (err, data) => { + if (err) rej(err); + else res(data) + }); + batch.add(req) + }) + }) + batch.execute() + + return Promise.all(promises) + }, + + getFusePrice: async function (chainId, pairAddress, toBlock) { + const w3 = networksWeb3[chainId] + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const seedBlockNumber = toBlock - networksBlocks[chainId]['fuse'] + let [ + price0CumulativeLast, + price1CumulativeLast, + to, + seedPrice0CumulativeLast, + seedPrice1CumulativeLast, + seed, + ] = await this.makeBatchRequest(w3, [ + // reqs to get priceCumulativeLast of toBlock + { req: pair.methods.price0CumulativeLast().call, block: toBlock }, + { req: pair.methods.price1CumulativeLast().call, block: toBlock }, + { req: w3.eth.getBlock, block: toBlock }, + // reqs to get priceCumulativeLast of seedBlock + { req: pair.methods.price0CumulativeLast().call, block: seedBlockNumber }, + { req: pair.methods.price1CumulativeLast().call, block: seedBlockNumber }, + { req: w3.eth.getBlock, block: seedBlockNumber }, + ]) + + const period = new BN(to.timestamp).sub(new BN(seed.timestamp)).abs() + + return { + price0: new BN(price0CumulativeLast).sub(new BN(seedPrice0CumulativeLast)).div(period), + price1: new BN(price1CumulativeLast).sub(new BN(seedPrice1CumulativeLast)).div(period), + } + }, + checkFusePrice: async function (chainId, pairAddress, price, toBlock) { - const fusePrice = await this.getSeed(chainId, pairAddress, 'fuse', toBlock) - const checkResult = this.isPriceToleranceOk(price.price0, fusePrice.price0, FUSE_PRICE_TOLERANCE) + const fusePrice = await this.getFusePrice(chainId, pairAddress, toBlock) + if (fusePrice.price0.eq(new BN(0))) + return { + isOk0: true, + isOk1: true, + priceDiffPercentage0: new BN(0), + priceDiffPercentage1: new BN(0), + block: fusePrice.blockNumber + } + const checkResult0 = this.isPriceToleranceOk(price.price0, fusePrice.price0, FUSE_PRICE_TOLERANCE) + const checkResult1 = this.isPriceToleranceOk(price.price1, Q112.mul(Q112).div(fusePrice.price0), FUSE_PRICE_TOLERANCE) return { - isOk: checkResult.isOk, - priceDiffPercentage: checkResult.priceDiffPercentage, + isOk0: checkResult0.isOk, + isOk1: checkResult0.isOk, + priceDiffPercentage0: checkResult0.priceDiffPercentage, + priceDiffPercentage1: checkResult1.priceDiffPercentage, block: fusePrice.blockNumber } }, @@ -181,7 +239,7 @@ module.exports = { const price = this.calculateAveragePrice(outlierRemoved, true) // check for high price change in comparison with fuse price const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) - if (!fuse.isOk) throw { message: `High price gap (${fuse.priceDiffPercentage}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } + if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } return { chain: chain, From 5b13039088e4359bdcff30b4cca309b1d0e800d1 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 28 Aug 2022 10:49:57 +0430 Subject: [PATCH 097/406] Add price_feed test file --- general_test/price_feed_test.js | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 general_test/price_feed_test.js diff --git a/general_test/price_feed_test.js b/general_test/price_feed_test.js new file mode 100644 index 0000000..04db182 --- /dev/null +++ b/general_test/price_feed_test.js @@ -0,0 +1,3 @@ +require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +require('../../core/global') +const { } = require('../general/price_feed') \ No newline at end of file From d2dff075659b345ff2f1852246394e2c41baec46 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 28 Aug 2022 10:51:52 +0430 Subject: [PATCH 098/406] Write some always failed tests for price_feed functions --- general_test/price_feed_test.js | 68 ++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/general_test/price_feed_test.js b/general_test/price_feed_test.js index 04db182..17880c6 100644 --- a/general_test/price_feed_test.js +++ b/general_test/price_feed_test.js @@ -1,3 +1,67 @@ require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { } = require('../general/price_feed') \ No newline at end of file +require('../../src/core/global') +const { } = require('../general/price_feed') + +const Red = "\x1b[31m" +const Green = "\x1b[32m" +const Blue = "\x1b[34m" +const Reset = "\x1b[0m" + + +const testGetSeed = async () => { + throw 'error' +} + +const testGetSyncEvents = async() => { + throw 'error' +} + +const testCreatePrice = async() => { + throw 'error' +} + +const testStd = async() => { + throw 'error' +} + +const testCalculateAveragePrice = async() => { + throw 'error' +} + +const testRemoveOutlierZScore = async() => { + throw 'error' +} + +const testRemoveOutlier = async() => { + throw 'error' +} + +const testGetFusePrice = async() => { + throw 'error' +} + +const testCheckFusePrice = async() => { + throw 'error' +} + + +const tests = [ + testGetSeed, + testGetSyncEvents, + testCreatePrice, + testStd, + testCalculateAveragePrice, + testRemoveOutlierZScore, + testRemoveOutlier, + testGetFusePrice, + testCheckFusePrice, +] + +tests.forEach((test) => { + test() + .then(() => console.log(`${Green}Passed ${Blue}${test.name}`)) + .catch((error) => { + console.log(`${Red}Failed ${Blue}${test.name}${Reset}`) + // console.log('\t', error) + }) +}) \ No newline at end of file From b65758a42d08228e0a4a4dfbe99913ec4c070aa7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 28 Aug 2022 12:39:47 +0430 Subject: [PATCH 099/406] Export constants to use in tests --- general/price_feed.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index 726cb45..a3e3652 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -32,6 +32,19 @@ const ETH = new BN(toBaseUnit('1', '18')) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] module.exports = { + CHAINS, + networksWeb3, + networksBlocks, + THRESHOLD, + PRICE_TOLERANCE, + FUSE_PRICE_TOLERANCE, + Q112, + ETH, + UNISWAPV2_PAIR_ABI, + BN, + toBaseUnit, + + APP_NAME: 'price_feed', APP_ID: 26, REMOTE_CALL_TIMEOUT: 30000, From c30a1cfae43b34ea35a943981ffd2c03b03ce984 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 29 Aug 2022 12:36:35 +0430 Subject: [PATCH 100/406] Import constants from app --- general_test/price_feed_test.js | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/general_test/price_feed_test.js b/general_test/price_feed_test.js index 17880c6..8341a61 100644 --- a/general_test/price_feed_test.js +++ b/general_test/price_feed_test.js @@ -1,12 +1,31 @@ require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) require('../../src/core/global') -const { } = require('../general/price_feed') +const assert = require('assert') +const { dynamicExtend } = require('../../src/core/utils') +const PriceFeedApp = dynamicExtend( + class { }, + require('../general/price_feed') +) const Red = "\x1b[31m" const Green = "\x1b[32m" const Blue = "\x1b[34m" const Reset = "\x1b[0m" +const app = new PriceFeedApp() +const { + CHAINS, + networksWeb3, + networksBlocks, + THRESHOLD, + PRICE_TOLERANCE, + FUSE_PRICE_TOLERANCE, + Q112, + ETH, + UNISWAPV2_PAIR_ABI, + BN, + toBaseUnit, +} = app const testGetSeed = async () => { throw 'error' @@ -58,10 +77,10 @@ const tests = [ ] tests.forEach((test) => { - test() - .then(() => console.log(`${Green}Passed ${Blue}${test.name}`)) - .catch((error) => { - console.log(`${Red}Failed ${Blue}${test.name}${Reset}`) - // console.log('\t', error) - }) + test() + .then(() => console.log(`${Green}Passed ${Blue}${test.name}`)) + .catch((error) => { + console.log(`${Red}Failed ${Blue}${test.name}${Reset}`) + console.log('\t', error.message) + }) }) \ No newline at end of file From a3599a91e33b781fec5b56ebe5b2f795e9331740 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 29 Aug 2022 12:39:43 +0430 Subject: [PATCH 101/406] Implement ```testGetSyncEvents``` --- general_test/price_feed_test.js | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/general_test/price_feed_test.js b/general_test/price_feed_test.js index 8341a61..4515413 100644 --- a/general_test/price_feed_test.js +++ b/general_test/price_feed_test.js @@ -31,8 +31,35 @@ const testGetSeed = async () => { throw 'error' } -const testGetSyncEvents = async() => { - throw 'error' +const testGetSyncEvents = async () => { + const chainId = 1 + const seedBlockNumber = 14506359 + const pairAddress = '0x328dfd0139e26cb0fef7b0742b49b0fe4325f821' + + const w3 = networksWeb3[chainId] + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const options = { + fromBlock: seedBlockNumber + 1, + toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] + } + const syncEvents = await pair.getPastEvents("Sync", options) + + const syncEventsMap = await app.getSyncEvents(chainId, seedBlockNumber, pairAddress) + const numberOfEvents = Object.keys(syncEventsMap).length + + let lastEvent = { + blockNumber: 0 + } + let counter = 0 + syncEvents.reverse().forEach((event) => { + if (lastEvent.blockNumber != event.blockNumber) { + assert(syncEventsMap[event.blockNumber].transactionHash == event.transactionHash, `transactionIndex ${event.transactionHash}, ${syncEventsMap[event.blockNumber].transactionHash}`) + assert(syncEventsMap[event.blockNumber].logIndex == event.logIndex, `logIndex ${event.logIndex}, ${syncEventsMap[event.blockNumber].logIndex}, ${event.blockNumber}`) + lastEvent = event + counter++ + } + }) + assert(counter == numberOfEvents, `Difference in number of events ${counter} ${numberOfEvents}`) } const testCreatePrice = async() => { From f8c9753d0358dcc5532c0805dcfd6f1f7e2fdd27 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 29 Aug 2022 12:40:16 +0430 Subject: [PATCH 102/406] Implement testCreatePrices --- general_test/price_feed_test.js | 35 ++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/general_test/price_feed_test.js b/general_test/price_feed_test.js index 4515413..1d59cb9 100644 --- a/general_test/price_feed_test.js +++ b/general_test/price_feed_test.js @@ -62,8 +62,37 @@ const testGetSyncEvents = async () => { assert(counter == numberOfEvents, `Difference in number of events ${counter} ${numberOfEvents}`) } -const testCreatePrice = async() => { - throw 'error' +const testCreatePrices = async () => { + const chainId = 250 + const seed = { + price0: new BN('553937927341650325448601038471856'), + blockNumber: 14506224 + } + const syncEventsMap = { + '14506230': { + returnValues: { + reserve0: '399657354506030558473', + reserve1: '50540763706853586504', + } + }, + + '14506280': { + returnValues: { + reserve0: '407073280527237345605', + reserve1: '49622740867094652888', + } + } + } + + const prices = app.createPrices(chainId, seed, syncEventsMap) + + assert(prices.length == networksBlocks[chainId]['seed'] + 1, `prices array has invalid length [${prices.length},${networksBlocks[chainId]['seed'] + 1}]`) + assert(prices[0] == seed.price0) + for (var i = 0; i < prices.length; i++) { + if (i < 14506230 - 14506224) assert(prices[i].eq(seed.price0), `gap1: ${prices[i]}, ${seed.price0}`) + else if (i < 14506280 - 14506224) assert(prices[i].eq(app.calculateInstantPrice('399657354506030558473', '50540763706853586504')), `gap2: ${prices[i]}, ${app.calculateInstantPrice('399657354506030558473', '50540763706853586504')}`) + else assert(prices[i].eq(app.calculateInstantPrice('407073280527237345605', '49622740867094652888')), `gap3: ${prices[i]}, ${app.calculateInstantPrice('407073280527237345605', '49622740867094652888')}`) + } } const testStd = async() => { @@ -94,7 +123,7 @@ const testCheckFusePrice = async() => { const tests = [ testGetSeed, testGetSyncEvents, - testCreatePrice, + testCreatePrices, testStd, testCalculateAveragePrice, testRemoveOutlierZScore, From 9f6e821b719edab56f46b7c37aabb6c65a5fc59b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 30 Aug 2022 17:26:39 +0430 Subject: [PATCH 103/406] Add new test file for price_feed using jest structure --- general_test/price_feed.test.js | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 general_test/price_feed.test.js diff --git a/general_test/price_feed.test.js b/general_test/price_feed.test.js new file mode 100644 index 0000000..202336d --- /dev/null +++ b/general_test/price_feed.test.js @@ -0,0 +1,36 @@ + +require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +require('../../src/core/global') + +const { dynamicExtend } = require('../../src/core/utils') +const PriceFeedApp = dynamicExtend( + class { }, + require('../general/price_feed') +) +const app = new PriceFeedApp() +const { + CHAINS, + networksWeb3, + networksBlocks, + THRESHOLD, + PRICE_TOLERANCE, + FUSE_PRICE_TOLERANCE, + Q112, + ETH, + UNISWAPV2_PAIR_ABI, + BN, + toBaseUnit, +} = app + + +describe('Price Feed app unit test', () => { + it('Test getSyncEvents', async () => { + expect(false).toBe(true) + }) + it('Test createPrices', async () => { + expect(false).toBe(true) + }) + it('Test removeOutlierZScore', async () => { + expect(false).toBe(true) + }) +}) From 3283845e9965def2645d9c965a2c4274ac02129f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 31 Aug 2022 10:48:33 +0430 Subject: [PATCH 104/406] Paste ```testGetSyncEvents``` implementation in the new test file --- general_test/price_feed.test.js | 57 +++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/general_test/price_feed.test.js b/general_test/price_feed.test.js index 202336d..d05cae6 100644 --- a/general_test/price_feed.test.js +++ b/general_test/price_feed.test.js @@ -1,6 +1,6 @@ - require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) require('../../src/core/global') +const assert = require('assert') const { dynamicExtend } = require('../../src/core/utils') const PriceFeedApp = dynamicExtend( @@ -22,10 +22,63 @@ const { toBaseUnit, } = app +const RED = "\x1b[31m" +const GREEN = "\x1b[32m" +const BLUE = "\x1b[34m" +const CYAN = "\x1b[36m" +const RESET = "\x1b[0m" +function injectColor(color, text) { + return color + text +} + describe('Price Feed app unit test', () => { it('Test getSyncEvents', async () => { - expect(false).toBe(true) + const chainId = 1 + const seedBlockNumber = 14506359 + const pairAddress = '0x328dfd0139e26cb0fef7b0742b49b0fe4325f821' + + const w3 = networksWeb3[chainId] + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const options = { + fromBlock: seedBlockNumber + 1, + toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] + } + const syncEvents = await pair.getPastEvents("Sync", options) + + const syncEventsMap = await app.getSyncEvents(chainId, seedBlockNumber, pairAddress) + const numberOfEvents = Object.keys(syncEventsMap).length + + let lastEvent = { + blockNumber: 0 + } + let counter = 0 + syncEvents.reverse().forEach((event) => { + if (lastEvent.blockNumber != event.blockNumber) { + const result = syncEventsMap[event.blockNumber] + assert( + result.transactionHash == event.transactionHash, + `${injectColor(BLUE, 'Transaction hash must be the same')} + Expected: ${injectColor(GREEN, event.transactionHash)} + Received: ${injectColor(RED, result.transactionHash)}` + ) + assert( + result.logIndex == event.logIndex, + `${injectColor(BLUE, 'Log index must be the same')} + Expected: ${injectColor(GREEN, event.logIndex)} + Received: ${injectColor(RED, result.logIndex)} + BlockNumber: ${injectColor(CYAN, event.blockNumber)}` + ) + lastEvent = event + counter++ + } + }) + assert( + counter == numberOfEvents, + `${injectColor(BLUE, 'Number of events must be the same')} + Expected: ${injectColor(GREEN, counter)} + Received: ${injectColor(RED, numberOfEvents)} ` + ) }) it('Test createPrices', async () => { expect(false).toBe(true) From 38cf870c9165cc318215100b3052a1873bf3e657 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 31 Aug 2022 15:39:37 +0430 Subject: [PATCH 105/406] Implement createPrices test in the new test file Delete old test file --- general_test/price_feed.test.js | 70 +++++++++++++++- general_test/price_feed_test.js | 142 -------------------------------- 2 files changed, 69 insertions(+), 143 deletions(-) delete mode 100644 general_test/price_feed_test.js diff --git a/general_test/price_feed.test.js b/general_test/price_feed.test.js index d05cae6..8534cbc 100644 --- a/general_test/price_feed.test.js +++ b/general_test/price_feed.test.js @@ -80,9 +80,77 @@ describe('Price Feed app unit test', () => { Received: ${injectColor(RED, numberOfEvents)} ` ) }) + it('Test createPrices', async () => { - expect(false).toBe(true) + const chainId = 250 + const seed = { + price0: new BN('553937927341650325448601038471856'), + blockNumber: 14506224 + } + const blocksWithEvent = { + 1: '14506230', + 2: '14506280' + } + const syncEventsMap = { + [blocksWithEvent[1]]: { + returnValues: { + reserve0: '399657354506030558473', + reserve1: '50540763706853586504', + } + }, + + [blocksWithEvent[2]]: { + returnValues: { + reserve0: '407073280527237345605', + reserve1: '49622740867094652888', + } + } + } + + const prices = app.createPrices(chainId, seed, syncEventsMap) + + assert( + prices.length == networksBlocks[chainId]['seed'] + 1, + `${injectColor(BLUE, 'Prices array has invalid length')} + Expected: ${injectColor(GREEN, networksBlocks[chainId]['seed'] + 1)} + Received: ${injectColor(RED, prices.length)}` + ) + assert( + prices[0].eq(seed.price0), + `${injectColor(BLUE, 'Zero index must be seed price')} + Expected: ${injectColor(GREEN, seed.price0)} + Received: ${injectColor(RED, prices[0])} + ` + ) + let gaps = [] + // calculate gaps between blocks with sync event + Object.values(blocksWithEvent).forEach((block, index) => gaps[index] = block - seed.blockNumber) + // check if for each gap the correct price has been set + let result + let lastGap = 0 + let expectedPrice = seed.price0 + gaps.forEach((gap, j) => { + // create a set of prices for each gap + result = new Set(prices.slice(lastGap, gap)) + // check if each gap has one price + assert( + result.size == 1, + `${injectColor(BLUE, 'Multiple price for a gap')}` + ) + // check if gap price is correct + assert( + [...result][0].eq(expectedPrice), + `${injectColor(BLUE, 'Wrong price set for block')} + Expected: ${injectColor(GREEN, expectedPrice)} + Received: ${injectColor(RED, [...result][0])})` + ) + + const { reserve0, reserve1 } = syncEventsMap[blocksWithEvent[j + 1]].returnValues + expectedPrice = app.calculateInstantPrice(reserve0, reserve1) + lastGap = gap + }) }) + it('Test removeOutlierZScore', async () => { expect(false).toBe(true) }) diff --git a/general_test/price_feed_test.js b/general_test/price_feed_test.js deleted file mode 100644 index 1d59cb9..0000000 --- a/general_test/price_feed_test.js +++ /dev/null @@ -1,142 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../src/core/global') -const assert = require('assert') -const { dynamicExtend } = require('../../src/core/utils') -const PriceFeedApp = dynamicExtend( - class { }, - require('../general/price_feed') -) - -const Red = "\x1b[31m" -const Green = "\x1b[32m" -const Blue = "\x1b[34m" -const Reset = "\x1b[0m" - -const app = new PriceFeedApp() -const { - CHAINS, - networksWeb3, - networksBlocks, - THRESHOLD, - PRICE_TOLERANCE, - FUSE_PRICE_TOLERANCE, - Q112, - ETH, - UNISWAPV2_PAIR_ABI, - BN, - toBaseUnit, -} = app - -const testGetSeed = async () => { - throw 'error' -} - -const testGetSyncEvents = async () => { - const chainId = 1 - const seedBlockNumber = 14506359 - const pairAddress = '0x328dfd0139e26cb0fef7b0742b49b0fe4325f821' - - const w3 = networksWeb3[chainId] - const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) - const options = { - fromBlock: seedBlockNumber + 1, - toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] - } - const syncEvents = await pair.getPastEvents("Sync", options) - - const syncEventsMap = await app.getSyncEvents(chainId, seedBlockNumber, pairAddress) - const numberOfEvents = Object.keys(syncEventsMap).length - - let lastEvent = { - blockNumber: 0 - } - let counter = 0 - syncEvents.reverse().forEach((event) => { - if (lastEvent.blockNumber != event.blockNumber) { - assert(syncEventsMap[event.blockNumber].transactionHash == event.transactionHash, `transactionIndex ${event.transactionHash}, ${syncEventsMap[event.blockNumber].transactionHash}`) - assert(syncEventsMap[event.blockNumber].logIndex == event.logIndex, `logIndex ${event.logIndex}, ${syncEventsMap[event.blockNumber].logIndex}, ${event.blockNumber}`) - lastEvent = event - counter++ - } - }) - assert(counter == numberOfEvents, `Difference in number of events ${counter} ${numberOfEvents}`) -} - -const testCreatePrices = async () => { - const chainId = 250 - const seed = { - price0: new BN('553937927341650325448601038471856'), - blockNumber: 14506224 - } - const syncEventsMap = { - '14506230': { - returnValues: { - reserve0: '399657354506030558473', - reserve1: '50540763706853586504', - } - }, - - '14506280': { - returnValues: { - reserve0: '407073280527237345605', - reserve1: '49622740867094652888', - } - } - } - - const prices = app.createPrices(chainId, seed, syncEventsMap) - - assert(prices.length == networksBlocks[chainId]['seed'] + 1, `prices array has invalid length [${prices.length},${networksBlocks[chainId]['seed'] + 1}]`) - assert(prices[0] == seed.price0) - for (var i = 0; i < prices.length; i++) { - if (i < 14506230 - 14506224) assert(prices[i].eq(seed.price0), `gap1: ${prices[i]}, ${seed.price0}`) - else if (i < 14506280 - 14506224) assert(prices[i].eq(app.calculateInstantPrice('399657354506030558473', '50540763706853586504')), `gap2: ${prices[i]}, ${app.calculateInstantPrice('399657354506030558473', '50540763706853586504')}`) - else assert(prices[i].eq(app.calculateInstantPrice('407073280527237345605', '49622740867094652888')), `gap3: ${prices[i]}, ${app.calculateInstantPrice('407073280527237345605', '49622740867094652888')}`) - } -} - -const testStd = async() => { - throw 'error' -} - -const testCalculateAveragePrice = async() => { - throw 'error' -} - -const testRemoveOutlierZScore = async() => { - throw 'error' -} - -const testRemoveOutlier = async() => { - throw 'error' -} - -const testGetFusePrice = async() => { - throw 'error' -} - -const testCheckFusePrice = async() => { - throw 'error' -} - - -const tests = [ - testGetSeed, - testGetSyncEvents, - testCreatePrices, - testStd, - testCalculateAveragePrice, - testRemoveOutlierZScore, - testRemoveOutlier, - testGetFusePrice, - testCheckFusePrice, -] - -tests.forEach((test) => { - test() - .then(() => console.log(`${Green}Passed ${Blue}${test.name}`)) - .catch((error) => { - console.log(`${Red}Failed ${Blue}${test.name}${Reset}`) - console.log('\t', error.message) - }) -}) \ No newline at end of file From bda1d069272ee67f6f325e9f8dc13b4d9da4a258 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 31 Aug 2022 16:08:59 +0430 Subject: [PATCH 106/406] Implement `removeOutlier` test --- general_test/price_feed.test.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/general_test/price_feed.test.js b/general_test/price_feed.test.js index 8534cbc..ac2b7d7 100644 --- a/general_test/price_feed.test.js +++ b/general_test/price_feed.test.js @@ -151,7 +151,24 @@ describe('Price Feed app unit test', () => { }) }) - it('Test removeOutlierZScore', async () => { - expect(false).toBe(true) + it('Test removeOutlier', async () => { + const numberOfOutliers = 5 + const numberOfPrices = 100 + const low = 50 + const high = 60 + const Q112 = new BN(2).pow(new BN(112)) + const outlier = new BN(1e7).mul(Q112) + let prices = [...new Array(numberOfPrices - numberOfOutliers)] + prices.forEach((el, index) => { + prices[index] = new BN(low + (high - low) * Math.random()).mul(Q112) + }); + [...new Array(numberOfOutliers)].forEach(() => prices.push(outlier)) + + const { outlierRemoved, removed } = app.removeOutlier(prices) + + assert( + !outlierRemoved.includes(outlier) && removed.includes(outlier.toString()), + `${injectColor(BLUE, 'Outlier hasn\'t been removed')}` + ) }) }) From ef6a247a4d1eb8b3cd2e2458ed63d26586639d2c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 3 Sep 2022 11:37:45 +0430 Subject: [PATCH 107/406] Use `isPriceToleranceOk` function of `price_feed` app Change `tokenAddress` into `token` --- general/token_price_feed.js | 45 +++++++++++++------------------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 5da5062..2a9c7a8 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -1,4 +1,5 @@ const { toBaseUnit, soliditySha3, BN, ethCall } = MuonAppUtils +const { isPriceToleranceOk } = require('./price_feed') const CHAINS = { mainnet: 1, @@ -25,44 +26,28 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, - isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - - if ( - new BN(priceDiff).mul(toBaseUnit('1', '18')) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(priceTolerance, '18')) - ) { - return false - } - return true - }, - - getRoute: function (chainId, tokenAddress) { - return ROUTES[chainId][tokenAddress] + getRoute: function (chainId, token) { + return ROUTES[chainId][token] }, - getTokenPairPrice: async function (chain, pairAddress, tokenAddress) { + getTokenPairPrice: async function (chain, pairAddress, token) { let request = { method: 'signature', data: { - params: { - chain: chain, - pairAddress: pairAddress, - } + params: { chain, pairAddress } } } let pairPrice = await this.invoke("price_feed", "onRequest", request) let token0 = await ethCall(pairAddress, 'token0', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) let token1 = await ethCall(pairAddress, 'token1', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) - if (tokenAddress == token0) return { price: new BN(pairPrice.price0), token: token1 } + if (token == token0) return { price: new BN(pairPrice.price0), token: token1 } return { price: new BN(pairPrice.price1), unitToken: token0 } }, - calculatePrice: async function (chain, route, tokenAddress) { + calculatePrice: async function (chain, route, token) { let price = Q112 - let tokenPairPrice = { unitToken: tokenAddress } + let tokenPairPrice = { unitToken: token } for (var pairAddress of route) { tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, tokenPairPrice.unitToken) price = price.mul(tokenPairPrice.price).div(Q112) @@ -79,20 +64,20 @@ module.exports = { switch (method) { case 'signature': - let { chain, tokenAddress } = params + let { chain, token } = params if (!chain) throw { message: 'Invalid chain' } const chainId = CHAINS[chain] // get token route for calculating price - const route = this.getRoute(chainId, tokenAddress) + const route = this.getRoute(chainId, token) if (!route) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(chain, route, tokenAddress) + const price = await this.calculatePrice(chain, route, token) return { chain: chain, - tokenAddress: tokenAddress, + token: token, route: route, price: price.toString() } @@ -110,15 +95,15 @@ module.exports = { switch (method) { case 'signature': { - let { chain, tokenAddress, route, price } = result + let { chain, token, route, price } = result const expectedPrice = request.data.result.price - if (!this.isPriceToleranceOk(price, expectedPrice, PRICE_TOLERANCE)) throw { message: 'Price threshold exceeded' } + if (!isPriceToleranceOk(price, expectedPrice, PRICE_TOLERANCE).isOk) throw { message: 'Price threshold exceeded' } return soliditySha3([ { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: tokenAddress }, + { type: 'address', value: token }, { type: 'address[]', value: route }, { type: 'uint256', value: expectedPrice }, { type: 'uint256', value: String(CHAINS[chain]) }, From 819037480f85d3a7604dbaa851621ae2fe1e994c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 4 Sep 2022 15:01:22 +0430 Subject: [PATCH 108/406] Add unitToken to `ROUTES` --- general/token_price_feed.js | 38 ++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 2a9c7a8..e1847ae 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -1,4 +1,4 @@ -const { toBaseUnit, soliditySha3, BN, ethCall } = MuonAppUtils +const { soliditySha3, BN } = MuonAppUtils const { isPriceToleranceOk } = require('./price_feed') const CHAINS = { @@ -8,17 +8,22 @@ const CHAINS = { const ROUTES = { [CHAINS.mainnet]: { - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984': ['0xEBFb684dD2b01E698ca6c14F10e4f289934a54D6'] + '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984': { + route: ['0xEBFb684dD2b01E698ca6c14F10e4f289934a54D6'], + reversed: [0] + } }, [CHAINS.fantom]: { - '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44': ['0x2599Eba5fD1e49F294C76D034557948034d6C96E', '0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D'] - }, + '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44': { + route: ['0x2599Eba5fD1e49F294C76D034557948034d6C96E', '0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D'], + reversed: [1, 1] + }, + } } const PRICE_TOLERANCE = '0.0005' const Q112 = new BN(2).pow(new BN(112)) -const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "token0", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "token1", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "payable": false, "stateMutability": "view", "type": "function" }] module.exports = { APP_NAME: 'token_price_feed', @@ -30,7 +35,7 @@ module.exports = { return ROUTES[chainId][token] }, - getTokenPairPrice: async function (chain, pairAddress, token) { + getTokenPairPrice: async function (chain, pairAddress, reversed) { let request = { method: 'signature', data: { @@ -39,18 +44,17 @@ module.exports = { } let pairPrice = await this.invoke("price_feed", "onRequest", request) - let token0 = await ethCall(pairAddress, 'token0', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) - let token1 = await ethCall(pairAddress, 'token1', [], UNISWAPV2_PAIR_ABI, CHAINS[chain]) - if (token == token0) return { price: new BN(pairPrice.price0), token: token1 } - return { price: new BN(pairPrice.price1), unitToken: token0 } + return new BN(reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) }, - calculatePrice: async function (chain, route, token) { + calculatePrice: async function (chain, route) { let price = Q112 - let tokenPairPrice = { unitToken: token } - for (var pairAddress of route) { - tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, tokenPairPrice.unitToken) - price = price.mul(tokenPairPrice.price).div(Q112) + let tokenPairPrice + var zip = (a, b) => a.map((x, i) => [x, b[i]]); + + for (let [pairAddress, reversed] of zip(route.route, route.reversed)) { + tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, reversed) + price = price.mul(tokenPairPrice).div(Q112) } return price }, @@ -73,12 +77,12 @@ module.exports = { const route = this.getRoute(chainId, token) if (!route) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(chain, route, token) + const price = await this.calculatePrice(chain, route) return { chain: chain, token: token, - route: route, + route: route.route, price: price.toString() } From 008179f9ec4d9f5fbcfd87cbda176f6adcdb1c9c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 4 Sep 2022 16:33:59 +0430 Subject: [PATCH 109/406] Move app body to a seperate function to be callable in other apps --- general/price_feed.js | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index a3e3652..be98bca 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -222,6 +222,28 @@ module.exports = { } }, + calculatePairPrice: async function (chainId, pairAddress, toBlock) { + // get seed price + const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) + // get sync events that are emitted after seed block + const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) + // create an array contains a price for each block mined after seed block + const prices = this.createPrices(chainId, seed, syncEventsMap) + // remove outlier prices + const { outlierRemoved, removed } = this.removeOutlier(prices) + // calculate the average price + const price = this.calculateAveragePrice(outlierRemoved, true) + // check for high price change in comparison with fuse price + const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) + if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } + + return { + price0: price.price0, + price1: price.price1, + removed + } + }, + onRequest: async function (request) { let { method, @@ -240,25 +262,13 @@ module.exports = { if (!toBlock) toBlock = currentBlockNumber else if (toBlock > currentBlockNumber) throw { message: 'Invalid Block Number' } - // get seed price - const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) - // get sync events that are emitted after seed block - const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) - // create an array contains a price for each block mined after seed block - const prices = this.createPrices(chainId, seed, syncEventsMap) - // remove outlier prices - const { outlierRemoved, removed } = this.removeOutlier(prices) - // calculate the average price - const price = this.calculateAveragePrice(outlierRemoved, true) - // check for high price change in comparison with fuse price - const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) - if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } + const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairAddress, toBlock) return { chain: chain, pairAddress: pairAddress, - price0: price.price0.toString(), - price1: price.price1.toString(), + price0: price0.toString(), + price1: price1.toString(), removedOutliers: removed, toBlock: toBlock, } From 86a74c4f18d98d0488a2cf629e69a827d945debe Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 4 Sep 2022 17:54:57 +0430 Subject: [PATCH 110/406] Use node1 toBlock for other nodes price calculation --- general/price_feed.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index be98bca..b491832 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -257,10 +257,13 @@ module.exports = { if (!chain) throw { message: 'Invalid chain' } const chainId = CHAINS[chain] - const w3 = networksWeb3[chainId] - const currentBlockNumber = await w3.eth.getBlockNumber() - if (!toBlock) toBlock = currentBlockNumber - else if (toBlock > currentBlockNumber) throw { message: 'Invalid Block Number' } + if (!request.data.result) { + const w3 = networksWeb3[chainId] + const currentBlockNumber = await w3.eth.getBlockNumber() + if (!toBlock) toBlock = currentBlockNumber + else if (toBlock > currentBlockNumber) throw { message: 'Invalid Block Number' } + } + else toBlock = request.data.result.toBlock const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairAddress, toBlock) @@ -288,22 +291,14 @@ module.exports = { let { chain, pairAddress, price0, price1, toBlock } = result - // node1 result - let [expectedPrice0, expectedPrice1] = [request.data.result.price0, request.data.result.price1]; - // check price difference between current node and node1 - // throw error in case of high price difference between current node and node1 - if (!this.isPriceToleranceOk(price0, expectedPrice0, PRICE_TOLERANCE).isOk) - throw { message: 'Price threshold exceeded' } - return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: pairAddress }, - { type: 'uint256', value: expectedPrice0 }, - { type: 'uint256', value: expectedPrice1 }, + { type: 'uint256', value: price0 }, + { type: 'uint256', value: price1 }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp }, - //TODO: consider about difference in toBlock value of nodes results - { type: 'uint256', value: request.data.result.toBlock }, + { type: 'uint256', value: toBlock }, ]) } From 93065bb9817f945a26d2598e4de308efa466e02a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 4 Sep 2022 18:30:48 +0430 Subject: [PATCH 111/406] Extend `token_price_feed` app with `price_feed` app Use `caculatePrice` instead of `invoke` Remove `isPriceToleranceOk` --- general/token_price_feed.js | 46 ++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index e1847ae..865c5e2 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -1,10 +1,11 @@ const { soliditySha3, BN } = MuonAppUtils -const { isPriceToleranceOk } = require('./price_feed') +const PriceFeed = require('./price_feed') -const CHAINS = { - mainnet: 1, - fantom: 250, -} +const { + CHAINS, + networksWeb3, + Q112 +} = PriceFeed const ROUTES = { [CHAINS.mainnet]: { @@ -21,11 +22,10 @@ const ROUTES = { } } -const PRICE_TOLERANCE = '0.0005' -const Q112 = new BN(2).pow(new BN(112)) - module.exports = { + ...PriceFeed, + APP_NAME: 'token_price_feed', APP_ID: 100, REMOTE_CALL_TIMEOUT: 30000, @@ -35,25 +35,18 @@ module.exports = { return ROUTES[chainId][token] }, - getTokenPairPrice: async function (chain, pairAddress, reversed) { - let request = { - method: 'signature', - data: { - params: { chain, pairAddress } - } - } - - let pairPrice = await this.invoke("price_feed", "onRequest", request) + getTokenPairPrice: async function (chainId, pairAddress, reversed, toBlock) { + let pairPrice = await this.calculatePairPrice(chainId, pairAddress, toBlock) return new BN(reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) }, - calculatePrice: async function (chain, route) { + calculatePrice: async function (chainId, route, toBlock) { let price = Q112 let tokenPairPrice var zip = (a, b) => a.map((x, i) => [x, b[i]]); for (let [pairAddress, reversed] of zip(route.route, route.reversed)) { - tokenPairPrice = await this.getTokenPairPrice(chain, pairAddress, reversed) + tokenPairPrice = await this.getTokenPairPrice(chainId, pairAddress, reversed, toBlock) price = price.mul(tokenPairPrice).div(Q112) } return price @@ -72,18 +65,23 @@ module.exports = { if (!chain) throw { message: 'Invalid chain' } const chainId = CHAINS[chain] + const w3 = networksWeb3[chainId] + let toBlock + if (!request.data.result) toBlock = await w3.eth.getBlockNumber() + else toBlock = request.data.result.toBlock // get token route for calculating price const route = this.getRoute(chainId, token) if (!route) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(chain, route) + const price = await this.calculatePrice(chainId, route, toBlock) return { chain: chain, token: token, route: route.route, - price: price.toString() + price: price.toString(), + toBlock: toBlock } default: @@ -101,15 +99,11 @@ module.exports = { let { chain, token, route, price } = result - const expectedPrice = request.data.result.price - - if (!isPriceToleranceOk(price, expectedPrice, PRICE_TOLERANCE).isOk) throw { message: 'Price threshold exceeded' } - return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: token }, { type: 'address[]', value: route }, - { type: 'uint256', value: expectedPrice }, + { type: 'uint256', value: price }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp } ]) From ef8ce9ecac8880145f11225ebb9c2e38316ca80e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Sep 2022 15:42:29 +0430 Subject: [PATCH 112/406] Use correct checkResult & Delete unused variable --- general/price_feed.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index b491832..de08ad7 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -24,7 +24,6 @@ const networksBlocks = { } const THRESHOLD = 2 -const PRICE_TOLERANCE = '0.0005' const FUSE_PRICE_TOLERANCE = '0.1' const Q112 = new BN(2).pow(new BN(112)) const ETH = new BN(toBaseUnit('1', '18')) @@ -36,7 +35,6 @@ module.exports = { networksWeb3, networksBlocks, THRESHOLD, - PRICE_TOLERANCE, FUSE_PRICE_TOLERANCE, Q112, ETH, @@ -198,6 +196,7 @@ module.exports = { return { price0: new BN(price0CumulativeLast).sub(new BN(seedPrice0CumulativeLast)).div(period), price1: new BN(price1CumulativeLast).sub(new BN(seedPrice1CumulativeLast)).div(period), + blockNumber: seedBlockNumber } }, @@ -215,7 +214,7 @@ module.exports = { const checkResult1 = this.isPriceToleranceOk(price.price1, Q112.mul(Q112).div(fusePrice.price0), FUSE_PRICE_TOLERANCE) return { isOk0: checkResult0.isOk, - isOk1: checkResult0.isOk, + isOk1: checkResult1.isOk, priceDiffPercentage0: checkResult0.priceDiffPercentage, priceDiffPercentage1: checkResult1.priceDiffPercentage, block: fusePrice.blockNumber From a9f60a8d3a7afa7ce79b501340452bb89be0d83f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Sep 2022 11:48:02 +0430 Subject: [PATCH 113/406] Get routes from blockchain --- general/token_price_feed.js | 62 ++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 865c5e2..b858a79 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -7,21 +7,12 @@ const { Q112 } = PriceFeed -const ROUTES = { - [CHAINS.mainnet]: { - '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984': { - route: ['0xEBFb684dD2b01E698ca6c14F10e4f289934a54D6'], - reversed: [0] - } - }, - [CHAINS.fantom]: { - '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44': { - route: ['0x2599Eba5fD1e49F294C76D034557948034d6C96E', '0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D'], - reversed: [1, 1] - }, - } +const CONFIG_ADDRESSES = { + [CHAINS.mainnet]: '', + [CHAINS.fantom]: '', } +const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Route[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" },] module.exports = { ...PriceFeed, @@ -31,8 +22,18 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, - getRoute: function (chainId, token) { - return ROUTES[chainId][token] + getRoute: async function (chainId, token) { + const w3 = networksWeb3[chainId] + const config = new w3.eth.Contract(CONFIG_ABI, CONFIG_ADDRESSES[chainId]) + const routes = await config.methods.getRoutes(token, true).call() + return routes.map((route) => { + return { + dex: route.dex, + path: route.path, + reversed: route.reversed, + weight: route.weight + } + }) }, getTokenPairPrice: async function (chainId, pairAddress, reversed, toBlock) { @@ -40,16 +41,22 @@ module.exports = { return new BN(reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) }, - calculatePrice: async function (chainId, route, toBlock) { - let price = Q112 - let tokenPairPrice + calculatePrice: async function (chainId, routes, toBlock) { var zip = (a, b) => a.map((x, i) => [x, b[i]]); + let tokenPairPrice - for (let [pairAddress, reversed] of zip(route.route, route.reversed)) { - tokenPairPrice = await this.getTokenPairPrice(chainId, pairAddress, reversed, toBlock) - price = price.mul(tokenPairPrice).div(Q112) + let sumTokenPrice = new BN(0) + let sumWeights = new BN(0) + for (let route of routes) { + let price = Q112 + for (let [pairAddress, reversed] of zip(route.path, route.reversed)) { + tokenPairPrice = await this.getTokenPairPrice(chainId, pairAddress, reversed, toBlock) + price = price.mul(tokenPairPrice).div(Q112) + } + sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) + sumWeights = sumWeights.add(new BN(route.weight)) } - return price + return sumTokenPrice.div(sumWeights) }, onRequest: async function (request) { @@ -71,15 +78,15 @@ module.exports = { else toBlock = request.data.result.toBlock // get token route for calculating price - const route = this.getRoute(chainId, token) - if (!route) throw { message: 'Invalid token' } + const routes = await this.getRoute(chainId, token) + if (!routes) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(chainId, route, toBlock) + const price = await this.calculatePrice(chainId, routes, toBlock) return { chain: chain, token: token, - route: route.route, + routes: routes, price: price.toString(), toBlock: toBlock } @@ -97,12 +104,11 @@ module.exports = { switch (method) { case 'signature': { - let { chain, token, route, price } = result + let { chain, token, price } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: token }, - { type: 'address[]', value: route }, { type: 'uint256', value: price }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp } From 9dc4d9289bb0044001ab134c5d529aab8be8dbcf Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Sep 2022 17:35:55 +0430 Subject: [PATCH 114/406] Check price gap between different routes --- general/token_price_feed.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index b858a79..3124658 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -13,6 +13,7 @@ const CONFIG_ADDRESSES = { } const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Route[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" },] +const PRICE_GAP = toBaseUnit('0.01', 18) module.exports = { ...PriceFeed, @@ -47,6 +48,7 @@ module.exports = { let sumTokenPrice = new BN(0) let sumWeights = new BN(0) + let prices = [] for (let route of routes) { let price = Q112 for (let [pairAddress, reversed] of zip(route.path, route.reversed)) { @@ -55,7 +57,11 @@ module.exports = { } sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) sumWeights = sumWeights.add(new BN(route.weight)) + prices.push(price) } + let [minPrice, maxPrice] = [BN.min(...prices), BN.max(...prices)] + if (maxPrice.sub(minPrice).mul(Q112).div(minPrice).gt(PRICE_GAP)) + throw { message: `High price gap between route prices` } return sumTokenPrice.div(sumWeights) }, From b43d8e6d87482466cca361cad09eaf8048d9240c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Sep 2022 18:58:00 +0430 Subject: [PATCH 115/406] Add v3-oracle app file --- general/v3_oracle.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 general/v3_oracle.js diff --git a/general/v3_oracle.js b/general/v3_oracle.js new file mode 100644 index 0000000..a4729e3 --- /dev/null +++ b/general/v3_oracle.js @@ -0,0 +1,37 @@ +const { soliditySha3 } = MuonAppUtils + +module.exports = { + APP_NAME: 'v3_oracle', + + onRequest: async function (request) { + let { method } = request + switch (method) { + case 'signature': + return { + testParam: "100", // uint256 + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + let { testParam } = result; + switch (method) { + case 'signature': + return [ + { type: 'uint256', value: testParam } + ] + default: + break + } + } +} \ No newline at end of file From ee5a20835662baed9d129d3cb874d1782afba053 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Sep 2022 20:27:48 +0430 Subject: [PATCH 116/406] Return mock data --- general/v3_oracle.js | 45 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index a4729e3..d4fa8f9 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,14 +1,35 @@ -const { soliditySha3 } = MuonAppUtils +const { BN, soliditySha3, toBaseUnit } = MuonAppUtils + +const CHAINS = { + mainnet: 1, + fantom: 250, +} + +const ETH = new BN(toBaseUnit('1', '18')) module.exports = { APP_NAME: 'v3_oracle', + APP_ID: 300, onRequest: async function (request) { - let { method } = request + let { + method, + data: { params } + } = request switch (method) { case 'signature': + let { chain } = params + const chainId = CHAINS[chain] + const marketPrices = [ + { + marketId: 1, + bidPrice: ETH, + askPrice: ETH, + }, + ] return { - testParam: "100", // uint256 + chainId, // uint256 + marketPrices, } default: @@ -24,11 +45,25 @@ module.exports = { */ signParams: function (request, result) { let { method } = request; - let { testParam } = result; switch (method) { case 'signature': + let { chainId, marketPrices } = result; + let marketIds = [] + let bidPrices = [] + let askPrices = [] + marketPrices.forEach((marketPrice) => { + marketIds.push(marketPrice.marketId) + bidPrices.push(marketPrice.bidPrice) + askPrices.push(marketPrice.askPrice) + }) + return [ - { type: 'uint256', value: testParam } + { type: 'uint32', value: this.APP_ID }, + { type: 'uint256', value: chainId }, + { type: 'uint256[]', value: marketIds }, + { type: 'uint256[]', value: bidPrices }, + { type: 'uint256[]', value: askPrices }, + { type: 'uint256', value: request.data.timestamp }, ] default: break From 3f6fd145b33cb4f3e5336c63b9c0b909bc530683 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 8 Sep 2022 15:22:48 +0430 Subject: [PATCH 117/406] fear_price app --- general/fear_price.js | 54 +++++++++++++++++++++++++++++++++ general_test/fear_price_test.js | 20 ++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 general/fear_price.js create mode 100644 general_test/fear_price_test.js diff --git a/general/fear_price.js b/general/fear_price.js new file mode 100644 index 0000000..996ddfd --- /dev/null +++ b/general/fear_price.js @@ -0,0 +1,54 @@ +const { axios, soliditySha3, floatToBN } = MuonAppUtils + +function getPrice() { + return axios + .get( + 'https://api.fear.io/api/cp' + ) + .then(({ data }) => data) + .catch((err) => { + return err?.response?.data + }) +} + +module.exports = { + APP_NAME: 'fear_price', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request; + switch (method) { + case 'get_price': + let result = await getPrice(); + + if (!result || result == 0) { + throw { message: 'invalid price' } + } + + return { + price: floatToBN(result, 18).toString() + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + hashRequestResult: function (request, result) { + let { method } = request + switch (method) { + case 'get_price': + let { price } = result + return soliditySha3([ + { type: 'uint256', value: this.APP_ID }, + { type: 'uint256', value: request.data.result.price }, + { type: 'uint256', value: request.data.timestamp} + ]) + + default: + break + } + } +} diff --git a/general_test/fear_price_test.js b/general_test/fear_price_test.js new file mode 100644 index 0000000..dcf887d --- /dev/null +++ b/general_test/fear_price_test.js @@ -0,0 +1,20 @@ +require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +require('../../src/core/global') +const { onRequest } = require('../general/fear_price'); + + +const testGetPrice = async () => { + let method = 'get_price' + + return onRequest({ + method, + data: {} + }) + .then((x) => { + console.log(x) + }) + .catch((error) => console.log(error)) +} + +testGetPrice() + From db9f2ec6b35f851a8fafdfc0a54530d8f22cdd40 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 11 Sep 2022 11:41:46 +0430 Subject: [PATCH 118/406] enable oracles --- general/parent_oracles_v2.js | 2 +- general/solidly_permissionless_oracles_vwap.js | 2 +- general_test/aggregate_oracles_dei_test.js | 9 +++++++-- general_test/aggregate_oracles_test.js | 4 ++-- general_test/solidly_permissionless_oracles_vwap_test.js | 2 +- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/general/parent_oracles_v2.js b/general/parent_oracles_v2.js index c3ce6e4..c8144de 100644 --- a/general/parent_oracles_v2.js +++ b/general/parent_oracles_v2.js @@ -640,7 +640,7 @@ module.exports = { }, onRequest: async function (request) { - throw { message: `MuonApp disabled.` } + // throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general/solidly_permissionless_oracles_vwap.js b/general/solidly_permissionless_oracles_vwap.js index b9329f2..e649814 100644 --- a/general/solidly_permissionless_oracles_vwap.js +++ b/general/solidly_permissionless_oracles_vwap.js @@ -346,7 +346,7 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, onRequest: async function (request) { - throw { message: `MuonApp disabled.` } + //throw { message: `MuonApp disabled.` } let { method, data: { params } diff --git a/general_test/aggregate_oracles_dei_test.js b/general_test/aggregate_oracles_dei_test.js index 3678000..d9ed46a 100644 --- a/general_test/aggregate_oracles_dei_test.js +++ b/general_test/aggregate_oracles_dei_test.js @@ -1,6 +1,11 @@ +// require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +// require('../../core/global') + require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') +require('../../src/core/global') +// const { onRequest } = require('../general/muon_pvrb'); + +const { dynamicExtend } = require('../../src/core/utils') const AggregateOracles = dynamicExtend( class {}, require('../general/aggregate_oracles_dei') diff --git a/general_test/aggregate_oracles_test.js b/general_test/aggregate_oracles_test.js index b43837d..4daf062 100644 --- a/general_test/aggregate_oracles_test.js +++ b/general_test/aggregate_oracles_test.js @@ -1,6 +1,6 @@ require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') +require('../../src/core/global') +const { dynamicExtend } = require('../../src/core/utils') const AggregateOracles = dynamicExtend( class {}, require('../general/aggregate_oracles') diff --git a/general_test/solidly_permissionless_oracles_vwap_test.js b/general_test/solidly_permissionless_oracles_vwap_test.js index ef7c022..e75fb69 100644 --- a/general_test/solidly_permissionless_oracles_vwap_test.js +++ b/general_test/solidly_permissionless_oracles_vwap_test.js @@ -1,5 +1,5 @@ require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') +require('../../src/core/global') const { onRequest } = require('../general/solidly_permissionless_oracles_vwap') const testLP = async () => { From 7c8a80b1cbba4c12e4a8eee6348f81cdbaca5469 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 12 Sep 2022 03:10:14 +0430 Subject: [PATCH 119/406] fear_price updates --- general/fear_price.js | 61 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 53 insertions(+), 8 deletions(-) diff --git a/general/fear_price.js b/general/fear_price.js index 996ddfd..7e27ec7 100644 --- a/general/fear_price.js +++ b/general/fear_price.js @@ -1,9 +1,11 @@ const { axios, soliditySha3, floatToBN } = MuonAppUtils -function getPrice() { +const PRICE_TOLERANCE = '0.05'; + +async function callAPI(method) { return axios .get( - 'https://api.fear.io/api/cp' + `https://api.fear.io/api/${method}` ) .then(({ data }) => data) .catch((err) => { @@ -21,14 +23,22 @@ module.exports = { } = request; switch (method) { case 'get_price': - let result = await getPrice(); + let [fearPrice, ethPrice] = await Promise.all([ + callAPI('cpg'), + callAPI('cpge') + ]); + + if (!fearPrice || fearPrice == 0 || isNaN(fearPrice)) { + throw { message: 'invalid fear price' } + } - if (!result || result == 0) { - throw { message: 'invalid price' } + if (!ethPrice || ethPrice == 0 || isNaN(ethPrice)) { + throw { message: 'invalid eth price' } } return { - price: floatToBN(result, 18).toString() + fearPrice: floatToBN(fearPrice, 18).toString(), + ethPrice: floatToBN(ethPrice, 18).toString() } default: @@ -40,15 +50,50 @@ module.exports = { let { method } = request switch (method) { case 'get_price': - let { price } = result + let { fearPrice, ethPrice } = result; + if ( + !this.isPriceToleranceOk( + fearPrice, + request.data.result.fearPrice + ) + ) { + throw { message: 'fearPrice difference is not acceptable.' } + } + + if ( + !this.isPriceToleranceOk( + ethPrice, + request.data.result.ethPrice + ) + ) { + throw { message: 'ethPrice difference is not acceptable.' } + } + return soliditySha3([ { type: 'uint256', value: this.APP_ID }, - { type: 'uint256', value: request.data.result.price }, + { type: 'uint256', value: request.data.result.fearPrice }, + { type: 'uint256', value: request.data.result.ethPrice }, { type: 'uint256', value: request.data.timestamp} ]) default: break } + }, + + // price: calculated price on the current node + // expectedPrice: this price came from the gateway node + // and the current node wants to sign it + isPriceToleranceOk: function (price, expectedPrice) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() + + if ( + new BN(priceDiff) + .div(new BN(expectedPrice)) + .gt(toBaseUnit(PRICE_TOLERANCE, '18')) + ) { + return false + } + return true } } From 17826c560aca7a229baaa2181eebf7d48ebe1fbc Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 12 Sep 2022 03:21:01 +0430 Subject: [PATCH 120/406] bugfix --- general/fear_price.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/fear_price.js b/general/fear_price.js index 7e27ec7..a6beb48 100644 --- a/general/fear_price.js +++ b/general/fear_price.js @@ -1,4 +1,4 @@ -const { axios, soliditySha3, floatToBN } = MuonAppUtils +const { axios, soliditySha3, floatToBN, BN } = MuonAppUtils const PRICE_TOLERANCE = '0.05'; From f30b8ae39d6337263aed527a666e3f81902e48e9 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 12 Sep 2022 03:28:36 +0430 Subject: [PATCH 121/406] bugfix --- general/fear_price.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/fear_price.js b/general/fear_price.js index a6beb48..8c326f8 100644 --- a/general/fear_price.js +++ b/general/fear_price.js @@ -90,7 +90,7 @@ module.exports = { if ( new BN(priceDiff) .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) + .gt(floatToBN(PRICE_TOLERANCE, 18)) ) { return false } From b84a173d95ca6e9aa911d0ddc9cf71f09da885a7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 25 Sep 2022 13:10:53 +0330 Subject: [PATCH 122/406] Read `validPriceGap` and `fusePriceTolerance` from `Config` contract --- general/price_feed.js | 14 +++++------ general/token_price_feed.js | 46 ++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index de08ad7..f725143 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -52,7 +52,7 @@ module.exports = { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() const priceDiffPercentage = new BN(priceDiff).mul(ETH).div(new BN(expectedPrice)) return { - isOk: !priceDiffPercentage.gt(toBaseUnit(priceTolerance, '18')), + isOk: !priceDiffPercentage.gt(new BN(priceTolerance)), priceDiffPercentage: priceDiffPercentage.mul(new BN(100)).div(ETH) } }, @@ -200,7 +200,7 @@ module.exports = { } }, - checkFusePrice: async function (chainId, pairAddress, price, toBlock) { + checkFusePrice: async function (chainId, pairAddress, price, fusePriceTolerance, toBlock) { const fusePrice = await this.getFusePrice(chainId, pairAddress, toBlock) if (fusePrice.price0.eq(new BN(0))) return { @@ -210,8 +210,8 @@ module.exports = { priceDiffPercentage1: new BN(0), block: fusePrice.blockNumber } - const checkResult0 = this.isPriceToleranceOk(price.price0, fusePrice.price0, FUSE_PRICE_TOLERANCE) - const checkResult1 = this.isPriceToleranceOk(price.price1, Q112.mul(Q112).div(fusePrice.price0), FUSE_PRICE_TOLERANCE) + const checkResult0 = this.isPriceToleranceOk(price.price0, fusePrice.price0, fusePriceTolerance) + const checkResult1 = this.isPriceToleranceOk(price.price1, Q112.mul(Q112).div(fusePrice.price0), fusePriceTolerance) return { isOk0: checkResult0.isOk, isOk1: checkResult1.isOk, @@ -221,7 +221,7 @@ module.exports = { } }, - calculatePairPrice: async function (chainId, pairAddress, toBlock) { + calculatePairPrice: async function (chainId, pairAddress, fusePriceTolerance, toBlock) { // get seed price const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) // get sync events that are emitted after seed block @@ -233,7 +233,7 @@ module.exports = { // calculate the average price const price = this.calculateAveragePrice(outlierRemoved, true) // check for high price change in comparison with fuse price - const fuse = await this.checkFusePrice(chainId, pairAddress, price, toBlock) + const fuse = await this.checkFusePrice(chainId, pairAddress, price, fusePriceTolerance, toBlock) if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } return { @@ -264,7 +264,7 @@ module.exports = { } else toBlock = request.data.result.toBlock - const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairAddress, toBlock) + const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairAddress, FUSE_PRICE_TOLERANCE, toBlock) return { chain: chain, diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 3124658..4162bc4 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -4,7 +4,8 @@ const PriceFeed = require('./price_feed') const { CHAINS, networksWeb3, - Q112 + Q112, + ETH } = PriceFeed const CONFIG_ADDRESSES = { @@ -12,8 +13,7 @@ const CONFIG_ADDRESSES = { [CHAINS.fantom]: '', } -const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Route[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" },] -const PRICE_GAP = toBaseUnit('0.01', 18) +const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Route[]", "name": "routes", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] module.exports = { ...PriceFeed, @@ -26,24 +26,28 @@ module.exports = { getRoute: async function (chainId, token) { const w3 = networksWeb3[chainId] const config = new w3.eth.Contract(CONFIG_ABI, CONFIG_ADDRESSES[chainId]) - const routes = await config.methods.getRoutes(token, true).call() - return routes.map((route) => { - return { - dex: route.dex, - path: route.path, - reversed: route.reversed, - weight: route.weight - } - }) + const routes = await config.methods.getRoutes(token, true).call(); + return { + validPriceGap: routes.validPriceGap, + routes: routes.routes.map((route) => { + return { + dex: route.dex, + path: route.path, + reversed: route.reversed, + fusePriceTolerance: route.fusePriceTolerance, + weight: route.weight + } + }) + } }, - getTokenPairPrice: async function (chainId, pairAddress, reversed, toBlock) { - let pairPrice = await this.calculatePairPrice(chainId, pairAddress, toBlock) + getTokenPairPrice: async function (chainId, pairAddress, reversed, fusePriceTolerance, toBlock) { + let pairPrice = await this.calculatePairPrice(chainId, pairAddress, fusePriceTolerance, toBlock) return new BN(reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) }, - calculatePrice: async function (chainId, routes, toBlock) { - var zip = (a, b) => a.map((x, i) => [x, b[i]]); + calculatePrice: async function (chainId, validPriceGap, routes, toBlock) { + var zip = (a, b, c) => a.map((x, i) => [x, b[i], c[i]]); let tokenPairPrice let sumTokenPrice = new BN(0) @@ -51,8 +55,8 @@ module.exports = { let prices = [] for (let route of routes) { let price = Q112 - for (let [pairAddress, reversed] of zip(route.path, route.reversed)) { - tokenPairPrice = await this.getTokenPairPrice(chainId, pairAddress, reversed, toBlock) + for (let [pairAddress, reversed, fusePriceTolerance] of zip(route.path, route.reversed, route.fusePriceTolerance)) { + tokenPairPrice = await this.getTokenPairPrice(chainId, pairAddress, reversed, fusePriceTolerance, toBlock) price = price.mul(tokenPairPrice).div(Q112) } sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) @@ -60,8 +64,8 @@ module.exports = { prices.push(price) } let [minPrice, maxPrice] = [BN.min(...prices), BN.max(...prices)] - if (maxPrice.sub(minPrice).mul(Q112).div(minPrice).gt(PRICE_GAP)) - throw { message: `High price gap between route prices` } + if (maxPrice.sub(minPrice).mul(ETH).div(minPrice).gt(new BN(validPriceGap))) + throw { message: `High price gap between route prices (${minPrice}, ${maxPrice})` } return sumTokenPrice.div(sumWeights) }, @@ -87,7 +91,7 @@ module.exports = { const routes = await this.getRoute(chainId, token) if (!routes) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(chainId, routes, toBlock) + const price = await this.calculatePrice(chainId, routes.validPriceGap, routes.routes, toBlock) return { chain: chain, From 544b3286ae01f0d8fcff32ae713c03b2d7125b8c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 25 Sep 2022 13:38:31 +0330 Subject: [PATCH 123/406] Ignore `priceGap` check while there is one route --- general/token_price_feed.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 4162bc4..b5ef179 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -63,9 +63,11 @@ module.exports = { sumWeights = sumWeights.add(new BN(route.weight)) prices.push(price) } - let [minPrice, maxPrice] = [BN.min(...prices), BN.max(...prices)] - if (maxPrice.sub(minPrice).mul(ETH).div(minPrice).gt(new BN(validPriceGap))) - throw { message: `High price gap between route prices (${minPrice}, ${maxPrice})` } + if (prices.length > 1) { + let [minPrice, maxPrice] = [BN.min(...prices), BN.max(...prices)] + if (!this.isPriceToleranceOk(maxPrice, minPrice, validPriceGap).isOk) + throw { message: `High price gap between route prices (${minPrice}, ${maxPrice})` } + } return sumTokenPrice.div(sumWeights) }, From e54f953048034c2b3c68ffad65e40b99911e5b1d Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 1 Oct 2022 23:12:50 +0330 Subject: [PATCH 124/406] mmac mainnet --- general/mmac_bridge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/mmac_bridge.js b/general/mmac_bridge.js index f3c53b9..fa9b98f 100644 --- a/general/mmac_bridge.js +++ b/general/mmac_bridge.js @@ -43,7 +43,7 @@ module.exports = { //TODO: check chain if (!contractAddress) throw { message: 'Invalid contarct address' } if (!txId) throw { message: 'Invalid deposit Tx Id' } - const network = 80001 + const network = 137 let result = await ethCall( contractAddress, 'txs', From a4c506f4fc17378f7058cbe1ab3ca7770a801aea Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 8 Oct 2022 12:34:41 +0330 Subject: [PATCH 125/406] Read `minutesToSeed` & `minutesToFuse` from `Config` contract --- general/price_feed.js | 45 +++++++++++++++++-------------------- general/token_price_feed.js | 29 ++++++++++++++---------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index f725143..9a8e78e 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -12,15 +12,9 @@ const networksWeb3 = { [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), } -const networksBlocks = { - [CHAINS.mainnet]: { - 'seed': 135, - 'fuse': 6467, - }, - [CHAINS.fantom]: { - 'seed': 1475, - 'fuse': 70819, - } +const networksBlocksPerMinute = { + [CHAINS.mainnet]: 5, + [CHAINS.fantom]: 52, } const THRESHOLD = 2 @@ -33,7 +27,6 @@ const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserv module.exports = { CHAINS, networksWeb3, - networksBlocks, THRESHOLD, FUSE_PRICE_TOLERANCE, Q112, @@ -64,9 +57,9 @@ module.exports = { return price0 }, - getSeed: async function (chainId, pairAddress, period, toBlock) { + getSeed: async function (chainId, pairAddress, blocksToSeed, toBlock) { const w3 = networksWeb3[chainId] - const seedBlockNumber = toBlock - networksBlocks[chainId][period] + const seedBlockNumber = toBlock - blocksToSeed const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) @@ -74,12 +67,12 @@ module.exports = { return { price0: price0, blockNumber: seedBlockNumber } }, - getSyncEvents: async function (chainId, seedBlockNumber, pairAddress) { + getSyncEvents: async function (chainId, seedBlockNumber, pairAddress, blocksToSeed) { const w3 = networksWeb3[chainId] const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const options = { fromBlock: seedBlockNumber + 1, - toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] + toBlock: seedBlockNumber + blocksToSeed } const syncEvents = await pair.getPastEvents("Sync", options) let syncEventsMap = {} @@ -88,12 +81,12 @@ module.exports = { return syncEventsMap }, - createPrices: function (chainId, seed, syncEventsMap) { + createPrices: function (chainId, seed, syncEventsMap, blocksToSeed) { let prices = [seed.price0] let price = seed.price0 // fill prices and consider a price for each block between seed and current block - for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + networksBlocks[chainId]['seed']; blockNumber++) { + for (let blockNumber = seed.blockNumber + 1; blockNumber <= seed.blockNumber + blocksToSeed; blockNumber++) { // use block event price if there is an event for the block // otherwise use last event price if (syncEventsMap[blockNumber]) { @@ -169,10 +162,10 @@ module.exports = { return Promise.all(promises) }, - getFusePrice: async function (chainId, pairAddress, toBlock) { + getFusePrice: async function (chainId, pairAddress, toBlock, blocksToFuse) { const w3 = networksWeb3[chainId] const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) - const seedBlockNumber = toBlock - networksBlocks[chainId]['fuse'] + const seedBlockNumber = toBlock - blocksToFuse let [ price0CumulativeLast, price1CumulativeLast, @@ -200,8 +193,8 @@ module.exports = { } }, - checkFusePrice: async function (chainId, pairAddress, price, fusePriceTolerance, toBlock) { - const fusePrice = await this.getFusePrice(chainId, pairAddress, toBlock) + checkFusePrice: async function (chainId, pairAddress, price, fusePriceTolerance, blocksToFuse, toBlock) { + const fusePrice = await this.getFusePrice(chainId, pairAddress, toBlock, blocksToFuse) if (fusePrice.price0.eq(new BN(0))) return { isOk0: true, @@ -221,11 +214,13 @@ module.exports = { } }, - calculatePairPrice: async function (chainId, pairAddress, fusePriceTolerance, toBlock) { + calculatePairPrice: async function (chainId, pair, toBlock) { + const blocksToSeed = networksBlocksPerMinute[chainId] * pair.minutesToSeed + const blocksToFuse = networksBlocksPerMinute[chainId] * pair.minutesToFuse // get seed price - const seed = await this.getSeed(chainId, pairAddress, 'seed', toBlock) + const seed = await this.getSeed(chainId, pair.address, blocksToSeed, toBlock) // get sync events that are emitted after seed block - const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pairAddress) + const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pair.address, blocksToSeed) // create an array contains a price for each block mined after seed block const prices = this.createPrices(chainId, seed, syncEventsMap) // remove outlier prices @@ -233,8 +228,8 @@ module.exports = { // calculate the average price const price = this.calculateAveragePrice(outlierRemoved, true) // check for high price change in comparison with fuse price - const fuse = await this.checkFusePrice(chainId, pairAddress, price, fusePriceTolerance, toBlock) - if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pairAddress} in block range ${fuse.block} - ${seed.blockNumber + networksBlocks[chainId]['seed']}` } + const fuse = await this.checkFusePrice(chainId, pair.address, price, pair.fusePriceTolerance, blocksToFuse, toBlock) + if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pair.address} in block range ${fuse.block} - ${seed.blockNumber + blocksToFuse}` } return { price0: price.price0, diff --git a/general/token_price_feed.js b/general/token_price_feed.js index b5ef179..014a949 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -13,7 +13,7 @@ const CONFIG_ADDRESSES = { [CHAINS.fantom]: '', } -const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Route[]", "name": "routes", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Config", "name": "config", "type": "tuple" }], "internalType": "struct IOracleAggregator.Route[]", "name": "routes", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] module.exports = { ...PriceFeed, @@ -32,31 +32,36 @@ module.exports = { routes: routes.routes.map((route) => { return { dex: route.dex, - path: route.path, - reversed: route.reversed, - fusePriceTolerance: route.fusePriceTolerance, - weight: route.weight + path: route.path.map((address, i) => { + return { + address: address, + reversed: route.config.reversed[i], + fusePriceTolerance: route.config.fusePriceTolerance[i], + minutesToSeed: route.config.minutesToSeed[i], + minutesToFuse: route.config.minutesToFuse[i] + } + }), + weight: route.config.weight } }) } }, - getTokenPairPrice: async function (chainId, pairAddress, reversed, fusePriceTolerance, toBlock) { - let pairPrice = await this.calculatePairPrice(chainId, pairAddress, fusePriceTolerance, toBlock) - return new BN(reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) + getTokenPairPrice: async function (chainId, pair, toBlock) { + let pairPrice = await this.calculatePairPrice(chainId, pair, toBlock) + return new BN(pair.reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) }, calculatePrice: async function (chainId, validPriceGap, routes, toBlock) { - var zip = (a, b, c) => a.map((x, i) => [x, b[i], c[i]]); let tokenPairPrice - let sumTokenPrice = new BN(0) let sumWeights = new BN(0) let prices = [] + for (let route of routes) { let price = Q112 - for (let [pairAddress, reversed, fusePriceTolerance] of zip(route.path, route.reversed, route.fusePriceTolerance)) { - tokenPairPrice = await this.getTokenPairPrice(chainId, pairAddress, reversed, fusePriceTolerance, toBlock) + for (let pair of route.path) { + tokenPairPrice = await this.getTokenPairPrice(chainId, pair, toBlock) price = price.mul(tokenPairPrice).div(Q112) } sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) From b28d547faa70bf9fb8686932c932a789a24e460b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 8 Oct 2022 16:58:40 +0330 Subject: [PATCH 126/406] Add `toBlock` to signature Use earlier block instead of `currentBlock` for `toBlock` Clean code --- general/price_feed.js | 11 ++++------- general/token_price_feed.js | 10 ++++++++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 9a8e78e..b6b845b 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -109,21 +109,18 @@ module.exports = { removeOutlierZScore: function (prices) { const mean = this.calculateAveragePrice(prices) // calculate std(standard deviation) - const std0 = this.std(prices) - if (std0 == 0) return prices + const std = this.std(prices) + if (std == 0) return prices - let result = [] // Z score = (price - mean) / std // price is not reliable if Z score < threshold - prices.forEach((price) => Math.abs(price - mean) / std0 < THRESHOLD ? result.push(price) : {}) - return result - + return prices.filter((price) => Math.abs(price - mean) / std < THRESHOLD) }, removeOutlier: function (prices) { const logPrices = [] prices.forEach((price) => { - logPrices.push(Number(Math.log(price).toFixed(3))); + logPrices.push(Math.log(price)); }) let logOutlierRemoved = this.removeOutlierZScore(logPrices) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 014a949..9b5e4a2 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -13,6 +13,11 @@ const CONFIG_ADDRESSES = { [CHAINS.fantom]: '', } +const confirmationBlocks = { + [CHAINS.mainnet]: 12, + [CHAINS.fantom]: 1, +} + const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Config", "name": "config", "type": "tuple" }], "internalType": "struct IOracleAggregator.Route[]", "name": "routes", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] module.exports = { @@ -91,7 +96,7 @@ module.exports = { const chainId = CHAINS[chain] const w3 = networksWeb3[chainId] let toBlock - if (!request.data.result) toBlock = await w3.eth.getBlockNumber() + if (!request.data.result) toBlock = await w3.eth.getBlockNumber() - confirmationBlocks[chainId] else toBlock = request.data.result.toBlock // get token route for calculating price @@ -121,13 +126,14 @@ module.exports = { switch (method) { case 'signature': { - let { chain, token, price } = result + let { chain, token, price, toBlock } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, { type: 'address', value: token }, { type: 'uint256', value: price }, { type: 'uint256', value: String(CHAINS[chain]) }, + { type: 'uint256', value: toBlock }, { type: 'uint256', value: request.data.timestamp } ]) From aa74602bc8492f26dce31af238dd3faf67486542 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 9 Oct 2022 10:42:21 +0330 Subject: [PATCH 127/406] Implement oracle body in a top-down manner --- general/v3_oracle.js | 86 +++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 33 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index d4fa8f9..30b7ff2 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,39 +1,68 @@ -const { BN, soliditySha3, toBaseUnit } = MuonAppUtils +const { json } = require('body-parser'); -const CHAINS = { - mainnet: 1, - fantom: 250, -} +const { BN, toBaseUnit } = MuonAppUtils; +const MetaApi = require('metaapi.cloud-sdk').default; + +const token = process.env.TOKEN; +const accountId = process.env.ACCOUNT_ID; + +const api = new MetaApi(token); -const ETH = new BN(toBaseUnit('1', '18')) module.exports = { APP_NAME: 'v3_oracle', APP_ID: 300, + getSymbols: async function (positionIds) { + + }, + + getConnection: async function () { + + }, + + getSymbolPrice: async function (connection, symbol) { + + }, + + getPrices: async function (connection, symbols) { + + }, + onRequest: async function (request) { let { method, data: { params } - } = request + } = request; switch (method) { case 'signature': - let { chain } = params - const chainId = CHAINS[chain] - const marketPrices = [ - { - marketId: 1, - bidPrice: ETH, - askPrice: ETH, - }, - ] + let { positionIds } = params; + + positionIds = JSON.parse(positionIds); + positionIds.forEach((id) => { + if (!Number.isInteger(id)) throw { message: `Invalid positionId` }; + }); + + const { positions, symbols } = await this.getSymbols(positionIds); + const connection = await this.getConnection(); + const prices = await this.getPrices(connection, symbols); + + let bidPrices = []; + let askPrices = []; + positions.forEach((position) => { + const price = prices[position.symbol]; + bidPrices.push(price.bid); + askPrices.push(price.ask); + }); + return { - chainId, // uint256 - marketPrices, - } + positionIds, + bidPrices, + askPrices + }; default: - throw { message: `Unknown method ${params}` } + throw { message: `Unknown method ${params}` }; } }, @@ -47,26 +76,17 @@ module.exports = { let { method } = request; switch (method) { case 'signature': - let { chainId, marketPrices } = result; - let marketIds = [] - let bidPrices = [] - let askPrices = [] - marketPrices.forEach((marketPrice) => { - marketIds.push(marketPrice.marketId) - bidPrices.push(marketPrice.bidPrice) - askPrices.push(marketPrice.askPrice) - }) + let { positionIds, bidPrices, askPrices } = request.data.result; return [ { type: 'uint32', value: this.APP_ID }, - { type: 'uint256', value: chainId }, - { type: 'uint256[]', value: marketIds }, + { type: 'uint256[]', value: positionIds }, { type: 'uint256[]', value: bidPrices }, { type: 'uint256[]', value: askPrices }, { type: 'uint256', value: request.data.timestamp }, - ] + ]; default: - break + break; } } } \ No newline at end of file From c742fead6f2a4dfe12a68bc3b66e7359e3eb4b07 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 9 Oct 2022 11:08:28 +0330 Subject: [PATCH 128/406] Implement `getConnection` function --- general/v3_oracle.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 30b7ff2..645de70 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -18,7 +18,12 @@ module.exports = { }, getConnection: async function () { + let account = await api.metatraderAccountApi.getAccount(accountId); + const connection = account.getRPCConnection(); + await connection.connect(); + await connection.waitSynchronized(); + return connection; }, getSymbolPrice: async function (connection, symbol) { From 2fa64aa1e128b4e4b622b4b50745ae6a52328225 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 9 Oct 2022 13:58:57 +0330 Subject: [PATCH 129/406] Implement `getPrices` function --- general/v3_oracle.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 645de70..e69a8a7 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -27,11 +27,29 @@ module.exports = { }, getSymbolPrice: async function (connection, symbol) { - + const price = await connection.getTick(symbol); + return price; }, getPrices: async function (connection, symbols) { + let prices = {}; + const promises = []; + + symbols.forEach((symbol) => { + promises.push(this.getSymbolPrice(connection, symbol)); + }); + + const result = await Promise.all(promises); + + result.forEach((tick) => { + prices[tick.symbol] = { + bid: toBaseUnit(String(tick.bid), '18').toString(), + ask: toBaseUnit(String(tick.ask), '18').toString(), + // last: toBaseUnit(String(tick.last), '18').toString(), + }; + }); + return prices; }, onRequest: async function (request) { From 5edfbb7deac400dbc9c8e6d43b564ef310b78da0 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 9 Oct 2022 16:02:21 +0330 Subject: [PATCH 130/406] Add `toBlockTimestamp` to signature --- general/token_price_feed.js | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 9b5e4a2..30866f3 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -96,8 +96,17 @@ module.exports = { const chainId = CHAINS[chain] const w3 = networksWeb3[chainId] let toBlock - if (!request.data.result) toBlock = await w3.eth.getBlockNumber() - confirmationBlocks[chainId] - else toBlock = request.data.result.toBlock + let toBlockTimestamp + if (!request.data.result) { + const latestBlock = await w3.eth.getBlockNumber() + const earlierBlock = await w3.eth.getBlock(latestBlock - confirmationBlocks[chainId]) + toBlock = earlierBlock.number + toBlockTimestamp = earlierBlock.timestamp + } + else { + toBlock = request.data.result.toBlock + toBlockTimestamp = request.data.result.timestamp + } // get token route for calculating price const routes = await this.getRoute(chainId, token) @@ -110,7 +119,8 @@ module.exports = { token: token, routes: routes, price: price.toString(), - toBlock: toBlock + toBlock: toBlock, + timestamp: toBlockTimestamp } default: @@ -126,7 +136,7 @@ module.exports = { switch (method) { case 'signature': { - let { chain, token, price, toBlock } = result + let { chain, token, price, toBlock, timestamp } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, @@ -134,7 +144,7 @@ module.exports = { { type: 'uint256', value: price }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: toBlock }, - { type: 'uint256', value: request.data.timestamp } + { type: 'uint256', value: timestamp } ]) } From 154936700929451cf7ede453b027c917eea6b9d8 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 9 Oct 2022 15:47:01 +0330 Subject: [PATCH 131/406] Remove `appId` from `signParams` return values --- general/v3_oracle.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index e69a8a7..9fed54b 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -11,7 +11,6 @@ const api = new MetaApi(token); module.exports = { APP_NAME: 'v3_oracle', - APP_ID: 300, getSymbols: async function (positionIds) { @@ -102,7 +101,6 @@ module.exports = { let { positionIds, bidPrices, askPrices } = request.data.result; return [ - { type: 'uint32', value: this.APP_ID }, { type: 'uint256[]', value: positionIds }, { type: 'uint256[]', value: bidPrices }, { type: 'uint256[]', value: askPrices }, From 220f60897a2254715ca42918c201640c458fadaa Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 12 Oct 2022 11:51:28 +0330 Subject: [PATCH 132/406] Implement `getSymbols` function --- general/v3_oracle.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 9fed54b..c9a0cd0 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,6 +1,6 @@ const { json } = require('body-parser'); -const { BN, toBaseUnit } = MuonAppUtils; +const { BN, toBaseUnit, ethCall } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; const token = process.env.TOKEN; @@ -8,12 +8,29 @@ const accountId = process.env.ACCOUNT_ID; const api = new MetaApi(token); +const ABI = [{ "inputs": [{ "internalType": "uint256", "name": "positionId", "type": "uint256" }], "name": "getMarketFromPositionId", "outputs": [{ "components": [{ "internalType": "uint256", "name": "_marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "enum TradingSession", "name": "tradingSession", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }], "internalType": "struct Market", "name": "market", "type": "tuple" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "_marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "enum TradingSession", "name": "tradingSession", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const ADDRESS = '0xE7f6e42e3b9ea3B082B4595D0363Cb58a9D1AE84'; + +const CHAINS = { + fantom: 250, +}; + module.exports = { APP_NAME: 'v3_oracle', getSymbols: async function (positionIds) { - + const markets = await ethCall(ADDRESS, 'getMarketsFromPositionIds', [positionIds], ABI, CHAINS.fantom); + const positions = []; + const symbols = new Set(); + markets.forEach((market, i) => { + positions.push({ + positionId: positionIds[i], + symbol: market.symbol + }); + symbols.add(market.symbol); + }); + return { positions, symbols }; }, getConnection: async function () { From 60059b564d4e3442598352ba5b36ed98e779ad9f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 12 Oct 2022 13:54:58 +0330 Subject: [PATCH 133/406] Fix signature --- general/v3_oracle.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index c9a0cd0..b62059e 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -117,10 +117,22 @@ module.exports = { case 'signature': let { positionIds, bidPrices, askPrices } = request.data.result; + let res; + if (positionIds.length > 1) + res = [ + { type: 'uint256[]', value: positionIds }, + { type: 'uint256[]', value: bidPrices }, + { type: 'uint256[]', value: askPrices } + ]; + else + res = [ + { type: 'uint256', value: positionIds[0] }, + { type: 'uint256', value: bidPrices[0] }, + { type: 'uint256', value: askPrices[0] } + ]; + return [ - { type: 'uint256[]', value: positionIds }, - { type: 'uint256[]', value: bidPrices }, - { type: 'uint256[]', value: askPrices }, + ...res, { type: 'uint256', value: request.data.timestamp }, ]; default: From b2283e3d724f573c4ad3123a9c99cb7c9a14755e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 11:42:29 +0330 Subject: [PATCH 134/406] Calculate price based on a single config --- general/token_price_feed.js | 65 ++++++++++++++----------------------- 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 30866f3..01f666c 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -8,17 +8,12 @@ const { ETH } = PriceFeed -const CONFIG_ADDRESSES = { - [CHAINS.mainnet]: '', - [CHAINS.fantom]: '', -} - const confirmationBlocks = { [CHAINS.mainnet]: 12, [CHAINS.fantom]: 1, } -const CONFIG_ABI = [{ "inputs": [{ "internalType": "address", "name": "token", "type": "address" }, { "internalType": "bool", "name": "dynamicWeight", "type": "bool" }], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IOracleAggregator.Config", "name": "config", "type": "tuple" }], "internalType": "struct IOracleAggregator.Route[]", "name": "routes", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] module.exports = { ...PriceFeed, @@ -28,14 +23,15 @@ module.exports = { REMOTE_CALL_TIMEOUT: 30000, - getRoute: async function (chainId, token) { - const w3 = networksWeb3[chainId] - const config = new w3.eth.Contract(CONFIG_ABI, CONFIG_ADDRESSES[chainId]) - const routes = await config.methods.getRoutes(token, true).call(); + getRoute: async function (config) { + const w3 = networksWeb3[CHAINS.fantom] + const configContract = new w3.eth.Contract(CONFIG_ABI, config) + let routes = await configContract.methods.getRoutes().call(); return { - validPriceGap: routes.validPriceGap, - routes: routes.routes.map((route) => { + validPriceGap: routes.validPriceGap_, + routes: routes.routes_.map((route) => { return { + chainId: route.config.chainId, dex: route.dex, path: route.path.map((address, i) => { return { @@ -57,7 +53,7 @@ module.exports = { return new BN(pair.reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) }, - calculatePrice: async function (chainId, validPriceGap, routes, toBlock) { + calculatePrice: async function (validPriceGap, routes, toBlocks) { let tokenPairPrice let sumTokenPrice = new BN(0) let sumWeights = new BN(0) @@ -66,7 +62,7 @@ module.exports = { for (let route of routes) { let price = Q112 for (let pair of route.path) { - tokenPairPrice = await this.getTokenPairPrice(chainId, pair, toBlock) + tokenPairPrice = await this.getTokenPairPrice(route.chainId, pair, toBlocks[route.chainId]) price = price.mul(tokenPairPrice).div(Q112) } sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) @@ -81,6 +77,11 @@ module.exports = { return sumTokenPrice.div(sumWeights) }, + + getEarliestBlockTimestamp: async function (toBlocks) { + + }, + onRequest: async function (request) { let { method, @@ -90,37 +91,23 @@ module.exports = { switch (method) { case 'signature': - let { chain, token } = params - if (!chain) throw { message: 'Invalid chain' } - - const chainId = CHAINS[chain] - const w3 = networksWeb3[chainId] - let toBlock - let toBlockTimestamp - if (!request.data.result) { - const latestBlock = await w3.eth.getBlockNumber() - const earlierBlock = await w3.eth.getBlock(latestBlock - confirmationBlocks[chainId]) - toBlock = earlierBlock.number - toBlockTimestamp = earlierBlock.timestamp - } - else { - toBlock = request.data.result.toBlock - toBlockTimestamp = request.data.result.timestamp - } + let { config, toBlocks } = params // get token route for calculating price const routes = await this.getRoute(chainId, token) if (!routes) throw { message: 'Invalid token' } // calculate price using the given route - const price = await this.calculatePrice(chainId, routes.validPriceGap, routes.routes, toBlock) + const price = await this.calculatePrice(routes.validPriceGap, routes.routes, toBlocks) + + // get earliest block timestamp + const timestamp = await this.getEarliestBlockTimestamp(toBlocks) return { - chain: chain, - token: token, + config: config, routes: routes, price: price.toString(), - toBlock: toBlock, - timestamp: toBlockTimestamp + toBlocks: toBlocks, + timestamp: timestamp } default: @@ -136,14 +123,12 @@ module.exports = { switch (method) { case 'signature': { - let { chain, token, price, toBlock, timestamp } = result + let { config, price, timestamp } = result return soliditySha3([ { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, + { type: 'address', value: config }, { type: 'uint256', value: price }, - { type: 'uint256', value: String(CHAINS[chain]) }, - { type: 'uint256', value: toBlock }, { type: 'uint256', value: timestamp } ]) From 21e74b649bc1cd93865528b57e932908a9e825a7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 13:00:33 +0330 Subject: [PATCH 135/406] Create `toBlocks` if it is `undefined` --- general/token_price_feed.js | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 01f666c..b475abd 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -27,9 +27,11 @@ module.exports = { const w3 = networksWeb3[CHAINS.fantom] const configContract = new w3.eth.Contract(CONFIG_ABI, config) let routes = await configContract.methods.getRoutes().call(); - return { + const chainIds = new Set() + routes = { validPriceGap: routes.validPriceGap_, routes: routes.routes_.map((route) => { + chainIds.add(route.config.chainId) return { chainId: route.config.chainId, dex: route.dex, @@ -46,6 +48,8 @@ module.exports = { } }) } + + return { routes, chainIds } }, getTokenPairPrice: async function (chainId, pair, toBlock) { @@ -77,6 +81,21 @@ module.exports = { return sumTokenPrice.div(sumWeights) }, + getReliableBlock: async function (chainId) { + const w3 = networksWeb3[chainId] + const latestBlock = await w3.eth.getBlockNumber() + const earlierBlock = latestBlock - confirmationBlocks[chainId] + return earlierBlock + }, + + prepareToBlocks: async function (chainIds) { + const toBlocks = {} + for (let chainId of chainIds) { + toBlocks[chainId] = await this.getReliableBlock(chainId) + } + + return toBlocks + }, getEarliestBlockTimestamp: async function (toBlocks) { @@ -94,13 +113,22 @@ module.exports = { let { config, toBlocks } = params // get token route for calculating price - const routes = await this.getRoute(chainId, token) - if (!routes) throw { message: 'Invalid token' } + const { routes, chainIds } = await this.getRoute(config) + if (!routes) throw { message: 'Invalid config' } + + // prepare toBlocks + if (!toBlocks) { + if (!request.data.result) + toBlocks = await this.prepareToBlocks(chainIds) + else + toBlocks = request.data.result.toBlocks + } + // calculate price using the given route const price = await this.calculatePrice(routes.validPriceGap, routes.routes, toBlocks) // get earliest block timestamp - const timestamp = await this.getEarliestBlockTimestamp(toBlocks) + const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) return { config: config, From a362e6719b960b2f8628a230a73e4dde8c9e8af8 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 13:01:16 +0330 Subject: [PATCH 136/406] Implement `getEarliestBlockTimestamp` function --- general/token_price_feed.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index b475abd..9fb5efe 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -97,8 +97,19 @@ module.exports = { return toBlocks }, - getEarliestBlockTimestamp: async function (toBlocks) { + getEarliestBlockTimestamp: async function (chainIds, toBlocks) { + const promises = [] + for (const chainId of chainIds) { + const w3 = networksWeb3[chainId] + promises.push(w3.eth.getBlock(toBlocks[chainId])) + } + const blocks = await Promise.all(promises) + const timestamps = [] + blocks.forEach((block) => { + timestamps.push(block.timestamp) + }) + return Math.min(...timestamps) }, onRequest: async function (request) { From 07e38e5e38b3442ed08049fe846fe5cc67dfe2c9 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 15:25:19 +0330 Subject: [PATCH 137/406] Change apps structure to MuonV03 --- general/price_feed.js | 25 ++++++++++++------------- general/token_price_feed.js | 25 ++++++++++++------------- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index b6b845b..2f15dac 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -1,4 +1,4 @@ -const { toBaseUnit, soliditySha3, BN, Web3 } = MuonAppUtils +const { toBaseUnit, BN, Web3 } = MuonAppUtils const HttpProvider = Web3.providers.HttpProvider @@ -37,9 +37,6 @@ module.exports = { APP_NAME: 'price_feed', - APP_ID: 26, - REMOTE_CALL_TIMEOUT: 30000, - isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() @@ -272,29 +269,31 @@ module.exports = { } }, - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request switch (method) { case 'signature': { let { chain, pairAddress, price0, price1, toBlock } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, + return [ { type: 'address', value: pairAddress }, { type: 'uint256', value: price0 }, { type: 'uint256', value: price1 }, { type: 'uint256', value: String(CHAINS[chain]) }, { type: 'uint256', value: request.data.timestamp }, { type: 'uint256', value: toBlock }, - ]) + ] } default: - return null + break } } } diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 9fb5efe..7db3174 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -1,4 +1,4 @@ -const { soliditySha3, BN } = MuonAppUtils +const { BN } = MuonAppUtils const PriceFeed = require('./price_feed') const { @@ -19,9 +19,6 @@ module.exports = { ...PriceFeed, APP_NAME: 'token_price_feed', - APP_ID: 100, - REMOTE_CALL_TIMEOUT: 30000, - getRoute: async function (config) { const w3 = networksWeb3[CHAINS.fantom] @@ -154,26 +151,28 @@ module.exports = { } }, - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request switch (method) { case 'signature': { let { config, price, timestamp } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, + return [ { type: 'address', value: config }, { type: 'uint256', value: price }, { type: 'uint256', value: timestamp } - ]) + ] } default: - return null + break } } } From d8b39b43241a5614ede24494d96908e09e840cf4 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 16:28:57 +0330 Subject: [PATCH 138/406] Use Muon builtin functions for web3 calls --- general/token_price_feed.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 7db3174..aae46c7 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -1,11 +1,9 @@ -const { BN } = MuonAppUtils +const { ethCall, ethGetBlock, ethGetBlockNumber, BN } = MuonAppUtils const PriceFeed = require('./price_feed') const { CHAINS, - networksWeb3, Q112, - ETH } = PriceFeed const confirmationBlocks = { @@ -21,9 +19,7 @@ module.exports = { APP_NAME: 'token_price_feed', getRoute: async function (config) { - const w3 = networksWeb3[CHAINS.fantom] - const configContract = new w3.eth.Contract(CONFIG_ABI, config) - let routes = await configContract.methods.getRoutes().call(); + let routes = await ethCall(config, 'getRoutes', [], CONFIG_ABI, CHAINS.fantom) const chainIds = new Set() routes = { validPriceGap: routes.validPriceGap_, @@ -79,8 +75,7 @@ module.exports = { }, getReliableBlock: async function (chainId) { - const w3 = networksWeb3[chainId] - const latestBlock = await w3.eth.getBlockNumber() + const latestBlock = await ethGetBlockNumber(chainId) const earlierBlock = latestBlock - confirmationBlocks[chainId] return earlierBlock }, @@ -97,8 +92,7 @@ module.exports = { getEarliestBlockTimestamp: async function (chainIds, toBlocks) { const promises = [] for (const chainId of chainIds) { - const w3 = networksWeb3[chainId] - promises.push(w3.eth.getBlock(toBlocks[chainId])) + promises.push(ethGetBlock(chainId, toBlocks[chainId])) } const blocks = await Promise.all(promises) From 30191401b046dfcb408fc65cf77385494f95fd7e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 16:37:33 +0330 Subject: [PATCH 139/406] Fix number of blocks ignored to avoid reorg & rename their constant --- general/token_price_feed.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index aae46c7..6b7cdbd 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -6,9 +6,9 @@ const { Q112, } = PriceFeed -const confirmationBlocks = { - [CHAINS.mainnet]: 12, - [CHAINS.fantom]: 1, +const blocksToAvoidReorg = { + [CHAINS.mainnet]: 3, + [CHAINS.fantom]: 26, } const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] @@ -76,7 +76,7 @@ module.exports = { getReliableBlock: async function (chainId) { const latestBlock = await ethGetBlockNumber(chainId) - const earlierBlock = latestBlock - confirmationBlocks[chainId] + const earlierBlock = latestBlock - blocksToAvoidReorg[chainId] return earlierBlock }, From 8e7293faccfd1e3531c81b0afa23b449ab2c1ef0 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 16:38:09 +0330 Subject: [PATCH 140/406] Add polygon to supported chains --- general/price_feed.js | 3 +++ general/token_price_feed.js | 1 + 2 files changed, 4 insertions(+) diff --git a/general/price_feed.js b/general/price_feed.js index 2f15dac..aa2a0ee 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -5,16 +5,19 @@ const HttpProvider = Web3.providers.HttpProvider const CHAINS = { mainnet: 1, fantom: 250, + polygon: 137, } const networksWeb3 = { [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), + [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON)), } const networksBlocksPerMinute = { [CHAINS.mainnet]: 5, [CHAINS.fantom]: 52, + [CHAINS.polygon]: 29, } const THRESHOLD = 2 diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 6b7cdbd..e682c98 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -9,6 +9,7 @@ const { const blocksToAvoidReorg = { [CHAINS.mainnet]: 3, [CHAINS.fantom]: 26, + [CHAINS.polygon]: 15, } const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] From 7c54478a5ef4017d605aceeadf4bc8e92d095732 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 17:00:28 +0330 Subject: [PATCH 141/406] Put some comments & clean code --- general/token_price_feed.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index e682c98..21be801 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -77,13 +77,14 @@ module.exports = { getReliableBlock: async function (chainId) { const latestBlock = await ethGetBlockNumber(chainId) - const earlierBlock = latestBlock - blocksToAvoidReorg[chainId] - return earlierBlock + const reliableBlock = latestBlock - blocksToAvoidReorg[chainId] + return reliableBlock }, prepareToBlocks: async function (chainIds) { const toBlocks = {} for (let chainId of chainIds) { + // consider a few blocks before the current block as toBlock to avoid reorg toBlocks[chainId] = await this.getReliableBlock(chainId) } From bcef925bf4e0d5ff889d84d4a5b431b7da06877c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 19:53:56 +0330 Subject: [PATCH 142/406] Get desired result in input --- general/v3_oracle.js | 51 +++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index d4fa8f9..e1e54c9 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,15 +1,7 @@ -const { BN, soliditySha3, toBaseUnit } = MuonAppUtils - -const CHAINS = { - mainnet: 1, - fantom: 250, -} - -const ETH = new BN(toBaseUnit('1', '18')) +const { BN, toBaseUnit } = MuonAppUtils module.exports = { APP_NAME: 'v3_oracle', - APP_ID: 300, onRequest: async function (request) { let { @@ -18,18 +10,18 @@ module.exports = { } = request switch (method) { case 'signature': - let { chain } = params - const chainId = CHAINS[chain] - const marketPrices = [ - { - marketId: 1, - bidPrice: ETH, - askPrice: ETH, - }, - ] + let { positionIds, bidPrices, askPrices, hashTimestamp } = params + + positionIds = JSON.parse(positionIds) + bidPrices = JSON.parse(bidPrices) + askPrices = JSON.parse(askPrices) + if (hashTimestamp) hashTimestamp = JSON.parse(hashTimestamp) + return { - chainId, // uint256 - marketPrices, + positionIds, + bidPrices, + askPrices, + hashTimestamp, } default: @@ -47,23 +39,14 @@ module.exports = { let { method } = request; switch (method) { case 'signature': - let { chainId, marketPrices } = result; - let marketIds = [] - let bidPrices = [] - let askPrices = [] - marketPrices.forEach((marketPrice) => { - marketIds.push(marketPrice.marketId) - bidPrices.push(marketPrice.bidPrice) - askPrices.push(marketPrice.askPrice) - }) - + let { positionIds, bidPrices, askPrices, hashTimestamp } = result; return [ - { type: 'uint32', value: this.APP_ID }, - { type: 'uint256', value: chainId }, - { type: 'uint256[]', value: marketIds }, + { type: 'uint256[]', value: positionIds }, { type: 'uint256[]', value: bidPrices }, { type: 'uint256[]', value: askPrices }, - { type: 'uint256', value: request.data.timestamp }, + ...(hashTimestamp == undefined || hashTimestamp == true + ? [{ type: 'uint256', value: request.data.timestamp }] + : []) ] default: break From 656d83575a7a9ff2d329d8501034581617561ca8 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 16 Oct 2022 19:56:35 +0330 Subject: [PATCH 143/406] Fix `APP_NAME` --- general/{v3_oracle.js => v3_oracle_test.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename general/{v3_oracle.js => v3_oracle_test.js} (98%) diff --git a/general/v3_oracle.js b/general/v3_oracle_test.js similarity index 98% rename from general/v3_oracle.js rename to general/v3_oracle_test.js index e1e54c9..8af0cc2 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle_test.js @@ -1,7 +1,7 @@ const { BN, toBaseUnit } = MuonAppUtils module.exports = { - APP_NAME: 'v3_oracle', + APP_NAME: 'v3_oracle_test', onRequest: async function (request) { let { From be0ec93529143eddb869e9243b083ec75804404a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 17 Oct 2022 12:36:01 +0330 Subject: [PATCH 144/406] Fix bug in error message --- general/price_feed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/price_feed.js b/general/price_feed.js index aa2a0ee..942bcd7 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -226,7 +226,7 @@ module.exports = { const price = this.calculateAveragePrice(outlierRemoved, true) // check for high price change in comparison with fuse price const fuse = await this.checkFusePrice(chainId, pair.address, price, pair.fusePriceTolerance, blocksToFuse, toBlock) - if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pair.address} in block range ${fuse.block} - ${seed.blockNumber + blocksToFuse}` } + if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pair.address} in block range ${fuse.block} - ${toBlock}` } return { price0: price.price0, From 128f3f186c5c183771b36c49583615467b349057 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 17 Oct 2022 21:09:41 +0330 Subject: [PATCH 145/406] Update priceCumulativeLasts --- general/price_feed.js | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 942bcd7..72654ee 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -53,7 +53,7 @@ module.exports = { calculateInstantPrice: function (reserve0, reserve1) { // multiply reserveA into Q112 for precision in division // reserveA * (2 ** 112) / reserverB - const price0 = (new BN(reserve1)).mul(Q112).div(new BN(reserve0)) + const price0 = new BN(reserve1).mul(Q112).div(new BN(reserve0)) return price0 }, @@ -159,28 +159,46 @@ module.exports = { return Promise.all(promises) }, + updatePriceCumulativeLasts: function (_price0CumulativeLast, _price1CumulativeLast, toBlockReserves, toBlockTimestamp) { + const timestampLast = toBlockTimestamp % 2 ** 32 + if (timestampLast != toBlockReserves._blockTimestampLast) { + const period = new BN(timestampLast - toBlockReserves._blockTimestampLast) + const price0CumulativeLast = new BN(_price0CumulativeLast).add(this.calculateInstantPrice(toBlockReserves._reserve0, toBlockReserves._reserve1).mul(period)) + const price1CumulativeLast = new BN(_price1CumulativeLast).add(this.calculateInstantPrice(toBlockReserves._reserve1, toBlockReserves._reserve0).mul(period)) + return { price0CumulativeLast, price1CumulativeLast } + } + else return { price0CumulativeLast: _price0CumulativeLast, price1CumulativeLast: _price1CumulativeLast } + }, + getFusePrice: async function (chainId, pairAddress, toBlock, blocksToFuse) { const w3 = networksWeb3[chainId] const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const seedBlockNumber = toBlock - blocksToFuse let [ - price0CumulativeLast, - price1CumulativeLast, + _price0CumulativeLast, + _price1CumulativeLast, + toReserves, to, - seedPrice0CumulativeLast, - seedPrice1CumulativeLast, + _seedPrice0CumulativeLast, + _seedPrice1CumulativeLast, + seedReserves, seed, ] = await this.makeBatchRequest(w3, [ // reqs to get priceCumulativeLast of toBlock { req: pair.methods.price0CumulativeLast().call, block: toBlock }, { req: pair.methods.price1CumulativeLast().call, block: toBlock }, + { req: pair.methods.getReserves().call, block: toBlock }, { req: w3.eth.getBlock, block: toBlock }, // reqs to get priceCumulativeLast of seedBlock { req: pair.methods.price0CumulativeLast().call, block: seedBlockNumber }, { req: pair.methods.price1CumulativeLast().call, block: seedBlockNumber }, + { req: pair.methods.getReserves().call, block: seedBlockNumber }, { req: w3.eth.getBlock, block: seedBlockNumber }, ]) + const { price0CumulativeLast, price1CumulativeLast } = this.updatePriceCumulativeLasts(_price0CumulativeLast, _price1CumulativeLast, toReserves, to.timestamp) + const { price0CumulativeLast: seedPrice0CumulativeLast, price1CumulativeLast: seedPrice1CumulativeLast } = this.updatePriceCumulativeLasts(_seedPrice0CumulativeLast, _seedPrice1CumulativeLast, seedReserves, seed.timestamp) + const period = new BN(to.timestamp).sub(new BN(seed.timestamp)).abs() return { From 44e41da47d1762d39a307346ffa6dae1909151fe Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 17 Oct 2022 21:28:05 +0330 Subject: [PATCH 146/406] Parse `toBlocks` if provided --- general/token_price_feed.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 21be801..0812321 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -127,6 +127,7 @@ module.exports = { else toBlocks = request.data.result.toBlocks } + else toBlocks = JSON.parse(toBlocks) // calculate price using the given route const price = await this.calculatePrice(routes.validPriceGap, routes.routes, toBlocks) From 837fc8ccf04c99abc1ad593059d9563a7b94aba0 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 18 Oct 2022 18:41:29 +0330 Subject: [PATCH 147/406] Fix `price_feed` app --- general/price_feed.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 72654ee..6f9920c 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -21,7 +21,7 @@ const networksBlocksPerMinute = { } const THRESHOLD = 2 -const FUSE_PRICE_TOLERANCE = '0.1' +const FUSE_PRICE_TOLERANCE = BigInt(0.3e18) const Q112 = new BN(2).pow(new BN(112)) const ETH = new BN(toBaseUnit('1', '18')) @@ -274,7 +274,14 @@ module.exports = { } else toBlock = request.data.result.toBlock - const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairAddress, FUSE_PRICE_TOLERANCE, toBlock) + const pairConfig = { + address: pairAddress, + fusePriceTolerance: FUSE_PRICE_TOLERANCE, + minutesToSeed: 30, + minutesToFuse: 1440, + } + + const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairConfig, toBlock) return { chain: chain, From 2f62d556ae19caace7f332d54061729ddeb3c4ea Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 18 Oct 2022 18:42:04 +0330 Subject: [PATCH 148/406] Return removed prices in result --- general/token_price_feed.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 0812321..db82e20 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -47,32 +47,35 @@ module.exports = { }, getTokenPairPrice: async function (chainId, pair, toBlock) { - let pairPrice = await this.calculatePairPrice(chainId, pair, toBlock) - return new BN(pair.reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)) + const pairPrice = await this.calculatePairPrice(chainId, pair, toBlock) + return { tokenPairPrice: new BN(pair.reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)), removed: pairPrice.removed } }, calculatePrice: async function (validPriceGap, routes, toBlocks) { - let tokenPairPrice let sumTokenPrice = new BN(0) let sumWeights = new BN(0) let prices = [] + const removedPrices = [] - for (let route of routes) { + for (let [i, route] of routes.entries()) { let price = Q112 + const routeRemovedPrices = [] for (let pair of route.path) { - tokenPairPrice = await this.getTokenPairPrice(route.chainId, pair, toBlocks[route.chainId]) + const { tokenPairPrice, removed: pairRemovedPrices } = await this.getTokenPairPrice(route.chainId, pair, toBlocks[route.chainId]) price = price.mul(tokenPairPrice).div(Q112) + routeRemovedPrices.push(pairRemovedPrices) } sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) sumWeights = sumWeights.add(new BN(route.weight)) prices.push(price) + removedPrices.push(routeRemovedPrices) } if (prices.length > 1) { let [minPrice, maxPrice] = [BN.min(...prices), BN.max(...prices)] if (!this.isPriceToleranceOk(maxPrice, minPrice, validPriceGap).isOk) throw { message: `High price gap between route prices (${minPrice}, ${maxPrice})` } } - return sumTokenPrice.div(sumWeights) + return { price: sumTokenPrice.div(sumWeights), removedPrices } }, getReliableBlock: async function (chainId) { @@ -130,17 +133,18 @@ module.exports = { else toBlocks = JSON.parse(toBlocks) // calculate price using the given route - const price = await this.calculatePrice(routes.validPriceGap, routes.routes, toBlocks) + const { price, removedPrices } = await this.calculatePrice(routes.validPriceGap, routes.routes, toBlocks) // get earliest block timestamp const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) return { - config: config, - routes: routes, + config, + routes, price: price.toString(), - toBlocks: toBlocks, - timestamp: timestamp + removedPrices, + toBlocks, + timestamp } default: From a7fe52d0f445c11d80b31b319db2b23b7ec92d56 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 24 Oct 2022 16:00:20 +0330 Subject: [PATCH 149/406] tss-typescript: first sample in TS --- general/tss-typescript.js | 64 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 general/tss-typescript.js diff --git a/general/tss-typescript.js b/general/tss-typescript.js new file mode 100644 index 0000000..6676545 --- /dev/null +++ b/general/tss-typescript.js @@ -0,0 +1,64 @@ +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var TssApp = { + APP_NAME: 'tss-typescript', + useTss: true, + onRequest: function (request) { + return __awaiter(this, void 0, void 0, function () { + var method, _a, params; + return __generator(this, function (_b) { + method = request.method, _a = request.data.params, params = _a === void 0 ? {} : _a; + switch (method) { + case 'test': + return [2 /*return*/, params.message || 'done']; + default: + throw { message: "invalid method ".concat(method) }; + } + return [2 /*return*/]; + }); + }); + }, + signParams: function (request, result) { + switch (request.method) { + case 'test': + return [{ type: 'string', value: result.toString() }]; + default: + throw { message: "Unknown method: ".concat(request.method) }; + } + } +}; +module.exports = TssApp; From a0d21dc994b440d84c554339f7f21add4f78f97d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 25 Oct 2022 15:42:19 +0330 Subject: [PATCH 150/406] Calculate `fusePrice` based on `abiStyle` --- general/price_feed.js | 123 +++++++++++++++++++++++------------- general/token_price_feed.js | 12 ++-- 2 files changed, 86 insertions(+), 49 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 6f9920c..3b20bb2 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -26,6 +26,7 @@ const Q112 = new BN(2).pow(new BN(112)) const ETH = new BN(toBaseUnit('1', '18')) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const SOLIDLY_PAIR_ABI = [{ "inputs": [], "name": "observationLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" }], "name": "sample", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [{ "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" }], "stateMutability": "view", "type": "function" }] module.exports = { CHAINS, @@ -81,8 +82,7 @@ module.exports = { return syncEventsMap }, - createPrices: function (chainId, seed, syncEventsMap, blocksToSeed) { - + createPrices: function (seed, syncEventsMap, blocksToSeed) { let prices = [seed.price0] let price = seed.price0 // fill prices and consider a price for each block between seed and current block @@ -170,46 +170,82 @@ module.exports = { else return { price0CumulativeLast: _price0CumulativeLast, price1CumulativeLast: _price1CumulativeLast } }, - getFusePrice: async function (chainId, pairAddress, toBlock, blocksToFuse) { - const w3 = networksWeb3[chainId] - const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) - const seedBlockNumber = toBlock - blocksToFuse - let [ - _price0CumulativeLast, - _price1CumulativeLast, - toReserves, - to, - _seedPrice0CumulativeLast, - _seedPrice1CumulativeLast, - seedReserves, - seed, - ] = await this.makeBatchRequest(w3, [ - // reqs to get priceCumulativeLast of toBlock - { req: pair.methods.price0CumulativeLast().call, block: toBlock }, - { req: pair.methods.price1CumulativeLast().call, block: toBlock }, - { req: pair.methods.getReserves().call, block: toBlock }, - { req: w3.eth.getBlock, block: toBlock }, - // reqs to get priceCumulativeLast of seedBlock - { req: pair.methods.price0CumulativeLast().call, block: seedBlockNumber }, - { req: pair.methods.price1CumulativeLast().call, block: seedBlockNumber }, - { req: pair.methods.getReserves().call, block: seedBlockNumber }, - { req: w3.eth.getBlock, block: seedBlockNumber }, - ]) - - const { price0CumulativeLast, price1CumulativeLast } = this.updatePriceCumulativeLasts(_price0CumulativeLast, _price1CumulativeLast, toReserves, to.timestamp) - const { price0CumulativeLast: seedPrice0CumulativeLast, price1CumulativeLast: seedPrice1CumulativeLast } = this.updatePriceCumulativeLasts(_seedPrice0CumulativeLast, _seedPrice1CumulativeLast, seedReserves, seed.timestamp) - - const period = new BN(to.timestamp).sub(new BN(seed.timestamp)).abs() + getFusePrice: async function (w3, pairAddress, toBlock, seedBlock, abiStyle) { + const getFusePriceUniV2 = async (w3, pairAddress, toBlock, seedBlock) => { + const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + let [ + _price0CumulativeLast, + _price1CumulativeLast, + toReserves, + to, + _seedPrice0CumulativeLast, + _seedPrice1CumulativeLast, + seedReserves, + seed, + ] = await this.makeBatchRequest(w3, [ + // reqs to get priceCumulativeLast of toBlock + { req: pair.methods.price0CumulativeLast().call, block: toBlock }, + { req: pair.methods.price1CumulativeLast().call, block: toBlock }, + { req: pair.methods.getReserves().call, block: toBlock }, + { req: w3.eth.getBlock, block: toBlock }, + // reqs to get priceCumulativeLast of seedBlock + { req: pair.methods.price0CumulativeLast().call, block: seedBlock }, + { req: pair.methods.price1CumulativeLast().call, block: seedBlock }, + { req: pair.methods.getReserves().call, block: seedBlock }, + { req: w3.eth.getBlock, block: seedBlock }, + ]) + + const { price0CumulativeLast, price1CumulativeLast } = this.updatePriceCumulativeLasts(_price0CumulativeLast, _price1CumulativeLast, toReserves, to.timestamp) + const { price0CumulativeLast: seedPrice0CumulativeLast, price1CumulativeLast: seedPrice1CumulativeLast } = this.updatePriceCumulativeLasts(_seedPrice0CumulativeLast, _seedPrice1CumulativeLast, seedReserves, seed.timestamp) + + const period = new BN(to.timestamp).sub(new BN(seed.timestamp)).abs() - return { - price0: new BN(price0CumulativeLast).sub(new BN(seedPrice0CumulativeLast)).div(period), - price1: new BN(price1CumulativeLast).sub(new BN(seedPrice1CumulativeLast)).div(period), - blockNumber: seedBlockNumber + return { + price0: new BN(price0CumulativeLast).sub(new BN(seedPrice0CumulativeLast)).div(period), + price1: new BN(price1CumulativeLast).sub(new BN(seedPrice1CumulativeLast)).div(period), + blockNumber: seedBlock + } } + const getFusePriceSolidly = async (w3, pairAddress, toBlock, seedBlock) => { + const pair = new w3.eth.Contract(SOLIDLY_PAIR_ABI, pairAddress) + let [ + metadata, + observationLength, + seedObservationLength, + ] = await this.makeBatchRequest(w3, [ + { req: pair.methods.metadata().call, block: toBlock }, + // reqs to get observationLength of toBlock + { req: pair.methods.observationLength().call, block: toBlock }, + // reqs to get observationLength of seedBlock + { req: pair.methods.observationLength().call, block: seedBlock }, + ]) + + const window = observationLength - seedObservationLength + + let [price0, price1] = await this.makeBatchRequest(w3, [ + { req: pair.methods.sample(metadata.t0, metadata.dec0, 1, window).call, block: toBlock }, + { req: pair.methods.sample(metadata.t1, metadata.dec1, 1, window).call, block: toBlock }, + ]) + + return { + price0: new BN(price0[0]).mul(Q112).div(new BN(metadata.dec0)), + price1: new BN(price1[0]).mul(Q112).div(new BN(metadata.dec1)), + blockNumber: seedBlock + } + } + const GET_FUSE_PRICE_FUNCTIONS = { + UniV2: getFusePriceUniV2, + Solidly: getFusePriceSolidly, + } + + return GET_FUSE_PRICE_FUNCTIONS[abiStyle](w3, pairAddress, toBlock, seedBlock) }, - checkFusePrice: async function (chainId, pairAddress, price, fusePriceTolerance, blocksToFuse, toBlock) { - const fusePrice = await this.getFusePrice(chainId, pairAddress, toBlock, blocksToFuse) + checkFusePrice: async function (chainId, pairAddress, price, fusePriceTolerance, blocksToFuse, toBlock, abiStyle) { + const w3 = networksWeb3[chainId] + const seedBlock = toBlock - blocksToFuse + + const fusePrice = await this.getFusePrice(w3, pairAddress, toBlock, seedBlock, abiStyle) if (fusePrice.price0.eq(new BN(0))) return { isOk0: true, @@ -220,6 +256,7 @@ module.exports = { } const checkResult0 = this.isPriceToleranceOk(price.price0, fusePrice.price0, fusePriceTolerance) const checkResult1 = this.isPriceToleranceOk(price.price1, Q112.mul(Q112).div(fusePrice.price0), fusePriceTolerance) + return { isOk0: checkResult0.isOk, isOk1: checkResult1.isOk, @@ -229,7 +266,7 @@ module.exports = { } }, - calculatePairPrice: async function (chainId, pair, toBlock) { + calculatePairPrice: async function (chainId, abiStyle, pair, toBlock) { const blocksToSeed = networksBlocksPerMinute[chainId] * pair.minutesToSeed const blocksToFuse = networksBlocksPerMinute[chainId] * pair.minutesToFuse // get seed price @@ -237,13 +274,13 @@ module.exports = { // get sync events that are emitted after seed block const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pair.address, blocksToSeed) // create an array contains a price for each block mined after seed block - const prices = this.createPrices(chainId, seed, syncEventsMap) + const prices = this.createPrices(seed, syncEventsMap, blocksToSeed) // remove outlier prices const { outlierRemoved, removed } = this.removeOutlier(prices) // calculate the average price const price = this.calculateAveragePrice(outlierRemoved, true) // check for high price change in comparison with fuse price - const fuse = await this.checkFusePrice(chainId, pair.address, price, pair.fusePriceTolerance, blocksToFuse, toBlock) + const fuse = await this.checkFusePrice(chainId, pair.address, price, pair.fusePriceTolerance, blocksToFuse, toBlock, abiStyle) if (!(fuse.isOk0 && fuse.isOk1)) throw { message: `High price gap 0(${fuse.priceDiffPercentage0}%) 1(${fuse.priceDiffPercentage1}%) between fuse and twap price for ${pair.address} in block range ${fuse.block} - ${toBlock}` } return { @@ -262,7 +299,7 @@ module.exports = { switch (method) { case 'signature': - let { chain, pairAddress, toBlock } = params + let { chain, pairAddress, toBlock, abiStyle } = params if (!chain) throw { message: 'Invalid chain' } const chainId = CHAINS[chain] @@ -281,7 +318,7 @@ module.exports = { minutesToFuse: 1440, } - const { price0, price1, removed } = await this.calculatePairPrice(chainId, pairConfig, toBlock) + const { price0, price1, removed } = await this.calculatePairPrice(chainId, abiStyle, pairConfig, toBlock) return { chain: chain, diff --git a/general/token_price_feed.js b/general/token_price_feed.js index db82e20..5a9e9a2 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -12,7 +12,7 @@ const blocksToAvoidReorg = { [CHAINS.polygon]: 15, } -const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] module.exports = { ...PriceFeed, @@ -28,7 +28,7 @@ module.exports = { chainIds.add(route.config.chainId) return { chainId: route.config.chainId, - dex: route.dex, + abiStyle: route.config.abiStyle, path: route.path.map((address, i) => { return { address: address, @@ -46,8 +46,8 @@ module.exports = { return { routes, chainIds } }, - getTokenPairPrice: async function (chainId, pair, toBlock) { - const pairPrice = await this.calculatePairPrice(chainId, pair, toBlock) + getTokenPairPrice: async function (chainId, abiStyle, pair, toBlock) { + const pairPrice = await this.calculatePairPrice(chainId, abiStyle, pair, toBlock) return { tokenPairPrice: new BN(pair.reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)), removed: pairPrice.removed } }, @@ -57,11 +57,11 @@ module.exports = { let prices = [] const removedPrices = [] - for (let [i, route] of routes.entries()) { + for (let route of routes) { let price = Q112 const routeRemovedPrices = [] for (let pair of route.path) { - const { tokenPairPrice, removed: pairRemovedPrices } = await this.getTokenPairPrice(route.chainId, pair, toBlocks[route.chainId]) + const { tokenPairPrice, removed: pairRemovedPrices } = await this.getTokenPairPrice(route.chainId, route.abiStyle, pair, toBlocks[route.chainId]) price = price.mul(tokenPairPrice).div(Q112) routeRemovedPrices.push(pairRemovedPrices) } From 2ae92439ae8076772ddefd9abe9641b9e0cbc361 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 27 Oct 2022 14:41:58 +0330 Subject: [PATCH 151/406] Reduce response time by using `Promise.all` --- general/token_price_feed.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 5a9e9a2..c008048 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -57,19 +57,30 @@ module.exports = { let prices = [] const removedPrices = [] + const promises = [] + for (let [i, route] of routes.entries()) { + for (let pair of route.path) { + promises.push(this.getTokenPairPrice(route.chainId, route.abiStyle, pair, toBlocks[route.chainId])) + } + } + + let result = await Promise.all(promises) + for (let route of routes) { let price = Q112 const routeRemovedPrices = [] for (let pair of route.path) { - const { tokenPairPrice, removed: pairRemovedPrices } = await this.getTokenPairPrice(route.chainId, route.abiStyle, pair, toBlocks[route.chainId]) - price = price.mul(tokenPairPrice).div(Q112) - routeRemovedPrices.push(pairRemovedPrices) + price = price.mul(result[0].tokenPairPrice).div(Q112) + routeRemovedPrices.push(result[0].removed) + result = result.slice(1) } + sumTokenPrice = sumTokenPrice.add(price.mul(new BN(route.weight))) sumWeights = sumWeights.add(new BN(route.weight)) prices.push(price) removedPrices.push(routeRemovedPrices) } + if (prices.length > 1) { let [minPrice, maxPrice] = [BN.min(...prices), BN.max(...prices)] if (!this.isPriceToleranceOk(maxPrice, minPrice, validPriceGap).isOk) From 4911765d6eed025ca62ebeeb5e6f346130ce221f Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 28 Oct 2022 13:41:53 +0330 Subject: [PATCH 152/406] webpack-test app --- general/webpack-test.js | 958 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 958 insertions(+) create mode 100644 general/webpack-test.js diff --git a/general/webpack-test.js b/general/webpack-test.js new file mode 100644 index 0000000..d3d1693 --- /dev/null +++ b/general/webpack-test.js @@ -0,0 +1,958 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(global, () => { +return /******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 577: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const axios = __webpack_require__(167) +const Web3 = __webpack_require__(519) +const tron = __webpack_require__(623) +const { flatten, groupBy } = __webpack_require__(517) +const { BigNumber } = __webpack_require__(215) + +const { toBaseUnit } = __webpack_require__(144) +const { timeout, floatToBN } = __webpack_require__(528) +const util = __webpack_require__(567) +const ws = __webpack_require__(352) +const ethSigUtil = __webpack_require__(685) +const { + getBlock: ethGetBlock, + getBlockNumber: ethGetBlockNumber, + getPastEvents: ethGetPastEvents, + read: ethRead, + call: ethCall, + getTokenInfo: ethGetTokenInfo, + getNftInfo: ethGetNftInfo, + hashCallOutput: ethHashCallOutput +} = __webpack_require__(775) + +const soliditySha3 = __webpack_require__(108); + +const { multiCall } = __webpack_require__(834) +const { BNSqrt } = __webpack_require__(196) + +module.exports = { + axios, + Web3, + flatten, + groupBy, + tron, + ws, + timeout, + BN: Web3.utils.BN, + BigNumber, + toBN: Web3.utils.toBN, + floatToBN, + multiCall, + ethGetBlock, + ethGetBlockNumber, + ethGetPastEvents, + ethRead, + ethCall, + ethGetTokenInfo, + ethGetNftInfo, + ethHashCallOutput, + toBaseUnit, + soliditySha3, + ecRecover: util.ecrecover, + recoverTypedSignature: ethSigUtil.recoverTypedSignature, + recoverTypedMessage: ethSigUtil.recoverTypedMessage, + BNSqrt: BNSqrt +} + + +/***/ }), + +/***/ 196: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const Web3 = __webpack_require__(519) + +const BNSqrt = (num) => { + const BN = Web3.utils.BN + if(num.lt(new BN(0))) { + throw { message: "Sqrt only works on non-negtiave inputs" } + } + if(num.lt(new BN(2))) { + return num + } + + const smallCand = BNSqrt(num.shrn(2)).shln(1) + const largeCand = smallCand.add(new BN(1)) + + if (largeCand.mul(largeCand).gt(num)) { + return smallCand + } else { + return largeCand + } +} + +module.exports = { BNSqrt } + +/***/ }), + +/***/ 144: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const ethers = __webpack_require__(982) +const Web3 = __webpack_require__(519) +const {hashCallOutput} = __webpack_require__(775) +const BN = Web3.utils.BN +const web3 = new Web3(); + +// const PRIVATE_KEY = process.env.SIGN_WALLET_PRIVATE_KEY +// const account = web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY) +// web3.eth.accounts.wallet.add(account) + +function soliditySha3(params){ + return web3.utils.soliditySha3(...params); +} + +function sign(hash) { + let sig = web3.eth.accounts.sign(hash, PRIVATE_KEY) + return sig.signature; +} + +function recover(hash, signature){ + let signer = web3.eth.accounts.recover(hash, signature) + return signer; +} + +function toFixedHex(bigNum){ + return ethers.utils.hexZeroPad('0x' + bigNum.toString(16), 32); +} + +function isString(s) { + return (typeof s === 'string' || s instanceof String) +} + +function toBaseUnit(value, decimals) { + if (!isString(value)) { + throw new Error('Pass strings to prevent floating point precision issues.') + } + const ten = new BN(10); + const base = ten.pow(new BN(decimals)); + + // Is it negative? + let negative = (value.substring(0, 1) === '-'); + if (negative) { + value = value.substring(1); + } + + if (value === '.') { + throw new Error( + `Invalid value ${value} cannot be converted to` + + ` base unit with ${decimals} decimals.`); + } + + // Split it into a whole and fractional part + let comps = value.split('.'); + if (comps.length > 2) { throw new Error('Too many decimal points'); } + + let whole = comps[0], fraction = comps[1]; + + if (!whole) { whole = '0'; } + if (!fraction) { fraction = '0'; } + if (fraction.length > decimals) { + throw new Error('Too many decimal places'); + } + + while (fraction.length < decimals) { + fraction += '0'; + } + + whole = new BN(whole); + fraction = new BN(fraction); + let wei = (whole.mul(base)).add(fraction); + + if (negative) { + wei = wei.neg(); + } + + return new BN(wei.toString(10), 10); +} + +module.exports = { + hashCallOutput, + toFixedHex, + soliditySha3, + sign, + recover, + toBaseUnit, +} + + +/***/ }), + +/***/ 775: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const Web3 = __webpack_require__(519) +const EventEmbitter = __webpack_require__(239) +const HttpProvider = Web3.providers.HttpProvider +const WebsocketProvider = Web3.providers.WebsocketProvider +const { sortObject, getTimestamp } = __webpack_require__(528) +const crypto = __webpack_require__(144) +const ERC20_ABI = __webpack_require__(920) +const ERC721_ABI = __webpack_require__(329) + +const _generalWeb3Instance = new Web3() +const soliditySha3 = _generalWeb3Instance.utils.soliditySha3 + +const _networksWeb3 = { + ganache: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_GANACHE)), + // ethereum mani net + 1: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), + 3: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ROPSTEN)), + 4: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_RINKEBY)), + 56: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC)), + 97: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSCTEST)), + 250: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), + 4002: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTMTEST)), + 100: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_XDAI_MAINNET || 'https://rpc.xdaichain.com/')), + 77: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_XDAI_SOKOL_TESTNET || 'https://sokol.poa.network')), + 137: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON)), + 80001: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_MUMBAI)), + 43113: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVALANCHE_FUJI_TESTNET || 'https://api.avax-test.network/ext/bc/C/rpc')), + 43114: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVALANCHE_MAINNET || 'https://api.avax.network/ext/bc/C/rpc')), + 421611: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ARBITRUM_TESTNET || 'https://rinkeby.arbitrum.io/rpc')), + 42161: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ARBITRUM_MAINNET || 'https://arb1.arbitrum.io/rpc')), + 1088: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_METIS || 'https://andromeda.metis.io/?owner=1088')), + 10: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_OPTIMISM || 'https://rpc.ankr.com/optimism')), + 420: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_OPTIMISM_TESTNET || 'https://rpc.ankr.com/optimism_testnet')), +} + +const nameToChainIdMap = { + local: 'ganache', + eth: 1, // Ethereum mainnet + ropsten: 3, // Ethereum ropsten testnet + rinkeby: 4, // Ethereum rinkeby testnet + bsc: 56, // Binance Smart Chain mainnet + bsctest: 97, // Binance Smart Chain testnet + ftm: 250, // Fantom mainnet + ftmtest: 4002, // Fantom testnet + xdai: 100, // Xdai mainnet + sokol: 77, // Xdai testnet + polygon: 137, // polygon mainnet + mumbai: 80001, // Polygon mumbai testnet + fuji: 43113, // Avalanche Fuji Testnet + avax: 43114, // Avalanche Mainnet + arbitrumTestnet: 421611, //Arbitrum Testnet + arbitrum: 42161, // Arbitrum + metis: 1088, // Metis + optimism: 10, // Optimism + optimismTestnet: 420, // Optimism Testnet +} + +function getWeb3(network) { + if (_networksWeb3[network]) return Promise.resolve(_networksWeb3[network]) + else if (_networksWeb3[nameToChainIdMap[network]]) + return Promise.resolve(_networksWeb3[nameToChainIdMap[network]]) + else return Promise.reject({ message: `invalid network "${network}"` }) +} + +function getWeb3Sync(network) { + if (_networksWeb3[network]) return _networksWeb3[network] + else if (_networksWeb3[nameToChainIdMap[network]]) + return _networksWeb3[nameToChainIdMap[network]] + else throw { message: `invalid network "${network}"` } +} + +function hashCallOutput( + address, + method, + abi, + result, + outputFilter = [], + extraParams = [] +) { + let methodAbi = abi.find( + ({ name, type }) => name === method && type === 'function' + ) + if (!methodAbi) { + throw { message: `Abi of method (${method}) not found` } + } + let abiOutputs = methodAbi.outputs + if (!!outputFilter && outputFilter.length > 0) { + abiOutputs = outputFilter.map((key) => { + return methodAbi.outputs.find(({ name }) => name === key) + }) + } + // console.log('signing:',abiOutputs) + let params = abiOutputs.map(({ name, type }) => ({ + type, + value: !name || typeof result === 'string' ? result : result[name] + })) + params = [{ type: 'address', value: address }, ...params, ...extraParams] + let hash = _generalWeb3Instance.utils.soliditySha3(...params) + return hash +} + +function getTokenInfo(address, network) { + return getWeb3(network).then(async (web3) => { + let contract = new web3.eth.Contract(ERC20_ABI, address) + return { + symbol: await contract.methods.symbol().call(), + name: await contract.methods.name().call(), + decimals: await contract.methods.decimals().call() + } + }) +} +function getNftInfo(address, network) { + return getWeb3(network).then(async (web3) => { + let contract = new web3.eth.Contract(ERC721_ABI, address) + return { + symbol: await contract.methods.symbol().call(), + name: await contract.methods.name().call() + } + }) +} + +function getTransaction(txHash, network) { + return getWeb3(network).then((web3) => web3.eth.getTransaction(txHash)) +} + +function getTransactionReceipt(txHash, network) { + return getWeb3(network).then((web3) => web3.eth.getTransactionReceipt(txHash)) +} + +function call(contractAddress, methodName, params, abi, network) { + return getWeb3(network).then((web3) => { + let contract = new web3.eth.Contract(abi, contractAddress) + return contract.methods[methodName](...params).call() + }) +} + +function read(contractAddress, property, params, abi, network) { + return getWeb3(network).then((web3) => { + let contract = new web3.eth.Contract(abi, contractAddress) + return contract.methods[property].call(...params) + }) +} + +function getBlock(network, blockHashOrBlockNumber) { + return getWeb3(network).then((web3) => { + return web3.eth.getBlock(blockHashOrBlockNumber) + }) +} + +function getBlockNumber(network) { + return getWeb3(network).then((web3) => { + return web3.eth.getBlockNumber() + }) +} + +function getPastEvents(network, contractAddress, abi, event, options) { + return getWeb3(network).then((web3) => { + let contract = new web3.eth.Contract(abi, contractAddress) + return contract.getPastEvents(event, options) + }) +} + +const subscribeLogEvent = ( + network, + contractAddress, + contractAbi, + eventName, + interval = 5000 +) => { + let subscribe = new Subscribe( + network, + contractAddress, + contractAbi, + eventName, + interval + ) + return subscribe +} + +class Subscribe extends EventEmbitter { + constructor(network, contractAddress, abi, eventName, interval = 15000) { + super() + let web3 = getWeb3Sync(network) + let contract = new web3.eth.Contract(abi, contractAddress) + + this.web3 = web3 + this.network = network + this.interval = interval + this.contract = contract + this.lastBlock = -1 + this.eventName = eventName + this._handler = this._handler.bind(this) + + this.timeout = setTimeout(this._handler, interval) + } + + async _handler() { + if (this.lastBlock < 0) { + let lastBlock = (await this.web3.eth.getBlockNumber()) - 9000 + console.log( + `watch ${this.network}:${this.contract._address} (${this.eventName}) from block ${lastBlock}` + ) + this.lastBlock = lastBlock + } + + let { contract, eventName, lastBlock, network } = this + contract.getPastEvents( + eventName, + { + // filter: {id: id}, + fromBlock: lastBlock, + toBlock: 'latest' + }, + (error, result) => { + if (!error) { + let txs = [] + if (result.length > 0) { + let lastBlock = Math.max( + ...result.map(({ blockNumber }) => blockNumber) + ) + this.lastBlock = lastBlock + 1 + txs = result.map( + ({ transactionHash, returnValues, blockNumber }) => ({ + blockNumber, + transactionHash, + returnValues + }) + ) + this.emit('event', txs, network, contract._address) + } + } else { + this.emit('error', error, network, contract._address) + } + } + ) + setTimeout(this._handler, this.interval) + } +} + +module.exports = { + getWeb3, + getBlock, + getBlockNumber, + getPastEvents, + getWeb3Sync, + hashCallOutput, + soliditySha3, + getTransaction, + getTransactionReceipt, + call, + read, + subscribeLogEvent, + getTokenInfo, + getNftInfo +} + + +/***/ }), + +/***/ 528: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const BigNumber = __webpack_require__(215); +BigNumber.set({DECIMAL_PLACES: 26}) +const toBN = (__webpack_require__(519).utils.toBN); + +module.exports.timeout = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +module.exports.getTimestamp = () => Math.floor(Date.now() / 1000); +module.exports.newCallId = () => { + return Date.now().toString(32) + Math.floor(Math.random()*999999999).toString(32); +} +module.exports.sortObject = o => Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {}) +module.exports.floatToBN = (num, decimals) => { + let n0 = new BigNumber(num).multipliedBy(`1e${decimals}`); + let n1 = n0.decimalPlaces(decimals).integerValue(); + return toBN(`0x${n1.toString(16)}`); +} +module.exports.parseBool = v => { + if(typeof v === 'string') + v = v.toLowerCase(); + return v === '1' || v==='true' || v === true || v === 1; +} + +const flattenObject = (obj, prefix="") => { + let result = {} + if(Array.isArray(obj)){ + for(let i=0 ; i (typeof fn === 'function') && !/^(?:(?:\/\*[^(?:\*\/)]*\*\/\s*)|(?:\/\/[^\r\n]*))*\s*(?:(?:(?:async\s(?:(?:\/\*[^(?:\*\/)]*\*\/\s*)|(?:\/\/[^\r\n]*))*\s*)?function|class)(?:\s|(?:(?:\/\*[^(?:\*\/)]*\*\/\s*)|(?:\/\/[^\r\n]*))*)|(?:[_$\w][\w0-9_$]*\s*(?:\/\*[^(?:\*\/)]*\*\/\s*)*\s*\()|(?:\[\s*(?:\/\*[^(?:\*\/)]*\*\/\s*)*\s*(?:(?:['][^']+['])|(?:["][^"]+["]))\s*(?:\/\*[^(?:\*\/)]*\*\/\s*)*\s*\]\())/.test(fn.toString()); + +module.exports.deepFreeze = function deepFreeze (object) { + // Retrieve the property names defined on object + const propNames = Object.getOwnPropertyNames(object); + + // Freeze properties before freezing self + + for (const name of propNames) { + const value = object[name]; + + if (value && typeof value === "object") { + deepFreeze(value); + } + } + + return Object.freeze(object); +} + +module.exports.stackTrace = function() { + let err = new Error(); + return err.stack; +} + + +/***/ }), + +/***/ 834: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const { Multicall } = __webpack_require__(317) +const { getWeb3 } = __webpack_require__(775) + +async function multiCall(chainId, contractCallContext, tryAggregate = false) { + try { + const web3 = await getWeb3(chainId) + const multicall = new Multicall({ web3Instance: web3, tryAggregate }) + let { results } = await multicall.call(contractCallContext) + results = contractCallContext.map((item) => ({ + reference: item.reference, + contractAddress: item.contractAddress, + context: item.context, + callsReturnContext: results[item.reference]['callsReturnContext'].map( + (callReturn) => ({ + ...callReturn, + returnValues: callReturn['returnValues'].map((value) => { + if (typeof value === 'object' && 'hex' in value) + return web3.utils.hexToNumberString(value.hex) + else return value + }) + }) + ) + })) + return results + } catch (error) { + throw { + message: `MULTICALL_ERROR. ${error.message}`, + error: error.message + } + } +} + +module.exports = { multiCall } + +// Example + +// const contractCallContext = [ +// { +// reference: 'BloodToken', +// contractAddress: '0xc3b99c2a46b8DC82C96B8b61ED3A4c5E271164D7', +// abi: [ +// { +// inputs: [ +// { internalType: 'address', name: 'account', type: 'address' } +// ], +// name: 'balanceOf', +// outputs: [ +// { internalType: 'uint256', name: '', type: 'uint256' } +// ], +// stateMutability: 'view', +// type: 'function' +// } +// ], +// calls: [ +// { +// reference: 'bloodTokenBalance', +// methodName: 'balanceOf', +// methodParameters: [account] +// } +// ] +// }, +// { +// reference: 'MuonSwapPair', +// contractAddress: '0xC233Cce22a0E7a5697D01Dcc6be93DA14BfB3761', +// abi: [ +// { +// inputs: [ +// { internalType: 'address', name: 'account', type: 'address' } +// ], +// name: 'balanceOf', +// outputs: [ +// { internalType: 'uint256', name: '', type: 'uint256' } +// ], +// stateMutability: 'view', +// type: 'function' +// }, +// { +// inputs: [], +// name: 'symbol', +// outputs: [{ internalType: 'string', name: '', type: 'string' }], +// stateMutability: 'view', +// type: 'function' +// } +// ], +// calls: [ +// { +// reference: 'muonSwapBalance', +// methodName: 'balanceOf', +// methodParameters: [account] +// }, +// { +// reference: 'muonSwapSymbol', +// methodName: 'symbol' +// } +// ] +// } +// ] + + +/***/ }), + +/***/ 108: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +const Web3 = __webpack_require__(519) +const web3Instance = new Web3() + +module.exports = function soliditySha3(params) { + return web3Instance.utils.soliditySha3(...params) +} + + +/***/ }), + +/***/ 623: +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +//It is recommended to use ethers4.0.47 version +var ethers = __webpack_require__(982) +const TronWeb = __webpack_require__(643) +const Web3 = __webpack_require__(519); + +// console.log(TronWeb.utils) + +const AbiCoder = ethers.utils.AbiCoder; +const ADDRESS_PREFIX_REGEX = /^(41)/; +const ADDRESS_PREFIX = "41"; + +function encodeParams(inputs){ + let typesValues = inputs + let parameters = '' + + if (typesValues.length == 0) + return parameters + const abiCoder = new AbiCoder(); + let types = []; + const values = []; + + for (let i = 0; i < typesValues.length; i++) { + let {type, value} = typesValues[i]; + if (type == 'address') + value = value.replace(ADDRESS_PREFIX_REGEX, '0x'); + else if (type == 'address[]') + value = value.map(v => toHex(v).replace(ADDRESS_PREFIX_REGEX, '0x')); + types.push(type); + values.push(value); + } + + // console.log(types, values) + try { + parameters = abiCoder.encode(types, values).replace(/^(0x)/, ''); + } catch (ex) { + console.log(ex); + } + return parameters + +} + +/** + types:Parameter type list, if the function has multiple return values, the order of the types in the list should conform to the defined order + output: Data before decoding + ignoreMethodHash:Decode the function return value, fill falseMethodHash with false, if decode the data field in the gettransactionbyid result, fill ignoreMethodHash with true + + Sample: await decodeParams(['address', 'uint256'], data, true) + */ + +async function decodeParams(types, output, ignoreMethodHash) { + + if (!output || typeof output === 'boolean') { + ignoreMethodHash = output; + output = types; + } + + if (ignoreMethodHash && output.replace(/^0x/, '').length % 64 === 8) + output = '0x' + output.replace(/^0x/, '').substring(8); + + const abiCoder = new AbiCoder(); + + if (output.replace(/^0x/, '').length % 64) + throw new Error('The encoded string is not valid. Its length must be a multiple of 64.'); + return abiCoder.decode(types, output).reduce((obj, arg, index) => { + if (types[index] == 'address') + arg = ADDRESS_PREFIX + arg.substr(2).toLowerCase(); + obj.push(arg); + return obj; + }, []); +} + +function encodeSignature(signature, owner, nonce) { + return "0x" + encodeParams([ + {type: "uint256", value: signature}, + {type: "uint256", value: owner}, + {type: "address", value: nonce}, + ]) +} + +function toEthAddress(address) { + if(Web3.utils.isAddress(address)) + return address; + if(!TronWeb.utils.crypto.isAddressValid(address)) + throw {message: `Invalid tron or eth address ${address}`} + if(!TronWeb.utils.isHex(address)) + return Web3.utils.toChecksumAddress("0x" + TronWeb.address.toHex(address).substr(2, 40)); + else + return address; +} + +function soliditySha3(inputs) { + inputs = inputs.map(({type, value}) => { + if(type === 'address') + return {type, value: toEthAddress(value)} + else + return {type, value} + }) + return Web3.utils.soliditySha3(...inputs) +} + +module.exports = { + TronWeb, + soliditySha3, + encodeParams, + toEthAddress, + decodeParams, + encodeSignature, +}; + + +/***/ }), + +/***/ 492: +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +global.MuonAppUtils = __webpack_require__(577); +const { axios, soliditySha3, floatToBN } = global.MuonAppUtils; +exports["default"] = { + APP_NAME: "webpack-test", + onRequest: function (request) { + return __awaiter(this, void 0, void 0, function* () { + let { method, data: { params }, } = request; + let message = params.message; + switch (method) { + case "echo": + // to test axios + let json = yield axios.get("http://echo.jsontest.com/key/" + message); + let value = json.data.key; + return { value }; + default: + throw { message: `Unknown method ${params}` }; + } + }); + }, + signParams: function (request, result) { + switch (request.method) { + case "echo": + let { value } = result; + return [{ type: "string", value: value }]; + default: + throw { message: "Nothing to sign" }; + } + }, +}; + + +/***/ }), + +/***/ 167: +/***/ ((module) => { + +"use strict"; +module.exports = require("axios"); + +/***/ }), + +/***/ 215: +/***/ ((module) => { + +"use strict"; +module.exports = require("bignumber.js"); + +/***/ }), + +/***/ 685: +/***/ ((module) => { + +"use strict"; +module.exports = require("eth-sig-util"); + +/***/ }), + +/***/ 317: +/***/ ((module) => { + +"use strict"; +module.exports = require("ethereum-multicall"); + +/***/ }), + +/***/ 567: +/***/ ((module) => { + +"use strict"; +module.exports = require("ethereumjs-util"); + +/***/ }), + +/***/ 982: +/***/ ((module) => { + +"use strict"; +module.exports = require("ethers"); + +/***/ }), + +/***/ 239: +/***/ ((module) => { + +"use strict"; +module.exports = require("events"); + +/***/ }), + +/***/ 517: +/***/ ((module) => { + +"use strict"; +module.exports = require("lodash"); + +/***/ }), + +/***/ 643: +/***/ ((module) => { + +"use strict"; +module.exports = require("tronweb"); + +/***/ }), + +/***/ 519: +/***/ ((module) => { + +"use strict"; +module.exports = require("web3"); + +/***/ }), + +/***/ 352: +/***/ ((module) => { + +"use strict"; +module.exports = require("ws"); + +/***/ }), + +/***/ 920: +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]'); + +/***/ }), + +/***/ 329: +/***/ ((module) => { + +"use strict"; +module.exports = JSON.parse('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]'); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module is referenced by other modules so it can't be inlined +/******/ var __webpack_exports__ = __webpack_require__(492); +/******/ __webpack_exports__ = __webpack_exports__["default"]; +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file From 6c72b80b5559f5e43fac21b518f44bd0120fbdd6 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 3 Nov 2022 11:34:57 +0330 Subject: [PATCH 153/406] disable deus bridge --- general/deus_bridge.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/deus_bridge.js b/general/deus_bridge.js index 38941e8..54bd5ef 100644 --- a/general/deus_bridge.js +++ b/general/deus_bridge.js @@ -39,6 +39,7 @@ module.exports = { APP_ID: 7, onRequest: async function (request) { + throw { message: 'MuonApp is disabled.' }; let { method, data: { params } From 2f71bd96ebecaf023713cacac0d5aac25feddc3b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 4 Nov 2022 18:19:18 +0330 Subject: [PATCH 154/406] Add `dibs` app file --- general/dibs.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 general/dibs.js diff --git a/general/dibs.js b/general/dibs.js new file mode 100644 index 0000000..839731e --- /dev/null +++ b/general/dibs.js @@ -0,0 +1,36 @@ +const { BN, toBaseUnit } = MuonAppUtils + +module.exports = { + APP_NAME: 'dibs', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + switch (method) { + case '': + + return {} + + default: + throw { message: `Unknown method ${params}` } + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + case '': + return [] + default: + break + } + } +} \ No newline at end of file From c1c17943fe2080818a98ccb53b8168fc30806497 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 5 Nov 2022 13:44:37 +0330 Subject: [PATCH 155/406] Implement `claim` & `randInt` method --- general/dibs.js | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 839731e..2758c83 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,17 +1,44 @@ -const { BN, toBaseUnit } = MuonAppUtils +const { axios, BN, toBaseUnit } = MuonAppUtils module.exports = { APP_NAME: 'dibs', + getUserBalance: async function (user, token) { + const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' + const query = `{ + userBalance: accumulativeTokenBalances(where: {user: "${user}", token: "${token}"}) { + id + user + token + amount + } + }` + + const { + data: { data } + } = await axios.post(subgraphUrl, { + query: query + }) + + return data.userBalance[0].amount + + }, + onRequest: async function (request) { let { method, data: { params } } = request switch (method) { - case '': + case 'claim': + let { user, token } = request + const balance = await this.getUserBalance(user, token) + return { + user, token, balance + } - return {} + case 'randInt': + return { randInt: new BN(BigInt(Math.floor(Math.random() * 2 ** 256))).toString() } default: throw { message: `Unknown method ${params}` } @@ -27,8 +54,20 @@ module.exports = { signParams: function (request, result) { let { method } = request; switch (method) { - case '': - return [] + case 'claim': + let { user, token, balance } = result + return [ + { type: 'address', value: user }, + { type: 'address', value: token }, + { type: 'uint256', value: balance }, + { type: 'uint256', value: request.data.timestamp } + ] + + case 'randInt': + return [ + { type: 'uint256', value: request.data.result.randInt } + ] + default: break } From caf7eaf8312a0f6527a84505bb7c072e26dd1d63 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 13 Nov 2022 16:22:48 +0330 Subject: [PATCH 156/406] Calculate lp price using given configs --- general/token_price_feed.js | 68 +++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index c008048..d16cc88 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -126,7 +126,7 @@ module.exports = { } = request switch (method) { - case 'signature': + case 'price': let { config, toBlocks } = params @@ -158,6 +158,57 @@ module.exports = { timestamp } + case 'lp_price': { + let { pair, config0, config1, toBlocks, chain } = params + + const { K, totalSupply } = await this.getLpTotalSupply(pair, chain) + + // get routes for each config + let + [ + { routes: routes0, chainIds: chainIds0 }, + { routes: routes1, chainIds: chainIds1 } + ] + = await Promise.all([this.getRoute(config0), this.getRoute(config1)]) + + if (!routes0.routes || !routes1.routes) throw { message: 'Invalid config' } + + const chainIds = new Set([...chainIds0, ...chainIds1]) + + // prepare toBlocks + if (!toBlocks) { + if (!request.data.result) + toBlocks = await this.prepareToBlocks(chainIds) + else + toBlocks = request.data.result.toBlocks + } + else toBlocks = JSON.parse(toBlocks) + + // prepare promises for calculating each config price + const promises = [ + this.calculatePrice(routes0.validPriceGap, routes0.routes, toBlocks), + this.calculatePrice(routes1.validPriceGap, routes1.routes, toBlocks) + ] + + let [price0, price1] = await Promise.all(promises) + + // calculate lp token price based on price0 & price1 & K & totalSupply + const price = await this.calculateLpPrice(price0.price, price1.price, K, totalSupply) + + // get earliest block timestamp + const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) + + return { + chainId: CHAINS[chain], + pair, + price: price.toString(), + config0, + config1, + toBlocks, + timestamp + } + } + default: throw { message: `Unknown method ${params}` } } @@ -172,7 +223,7 @@ module.exports = { signParams: function (request, result) { let { method } = request switch (method) { - case 'signature': { + case 'price': { let { config, price, timestamp } = result @@ -181,8 +232,21 @@ module.exports = { { type: 'uint256', value: price }, { type: 'uint256', value: timestamp } ] + } + case 'lp_price': { + let { chainId, pair, price, config0, config1, timestamp } = result + + return [ + { type: 'uint256', value: chainId }, + { type: 'address', value: pair }, + { type: 'uint256', value: price }, + { type: 'address', value: config0 }, + { type: 'address', value: config1 }, + { type: 'uint256', value: timestamp } + ] } + default: break } From 8c494dbcb3d5c60aea2b21c3729035753e2acb82 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 14 Nov 2022 14:40:58 +0330 Subject: [PATCH 157/406] Implement `getLpTotalSupply` & `calculateLpPrice` functions --- general/price_feed.js | 4 ++-- general/token_price_feed.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/general/price_feed.js b/general/price_feed.js index 3b20bb2..55720f4 100644 --- a/general/price_feed.js +++ b/general/price_feed.js @@ -25,8 +25,8 @@ const FUSE_PRICE_TOLERANCE = BigInt(0.3e18) const Q112 = new BN(2).pow(new BN(112)) const ETH = new BN(toBaseUnit('1', '18')) -const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] -const SOLIDLY_PAIR_ABI = [{ "inputs": [], "name": "observationLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" }], "name": "sample", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [{ "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" }], "stateMutability": "view", "type": "function" }] +const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const SOLIDLY_PAIR_ABI = [{ "inputs": [], "name": "observationLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" }], "name": "sample", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [{ "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] module.exports = { CHAINS, diff --git a/general/token_price_feed.js b/general/token_price_feed.js index d16cc88..2bdf7d9 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -119,6 +119,21 @@ module.exports = { return Math.min(...timestamps) }, + getLpTotalSupply: async function (pair, chain) { + const [reserves, totalSupply] = await Promise.all([ + ethCall(pair, 'getReserves', [], this.UNISWAPV2_PAIR_ABI, CHAINS[chain]), + ethCall(pair, 'totalSupply', [], this.UNISWAPV2_PAIR_ABI, CHAINS[chain]), + ]) + + const K = new BN(reserves._reserve0).mul(new BN(reserves._reserve1)) + return { K, totalSupply: new BN(totalSupply) } + }, + + calculateLpPrice: async function (price0, price1, K, totalSupply) { + const numerator = new BN(2).mul(new BN(BigInt(Math.sqrt(price0.mul(price1).mul(K))))) + return numerator.div(totalSupply) + }, + onRequest: async function (request) { let { method, From 81a0ae27a74057d690d4d774b0f9141b887dd3f2 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 15 Nov 2022 18:27:53 +0330 Subject: [PATCH 158/406] Get Lp token config from `LpConfig` contract --- general/token_price_feed.js | 72 +++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 2bdf7d9..099ba4d 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -13,18 +13,18 @@ const blocksToAvoidReorg = { } const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const LP_CONFIG_ABI = [{ "inputs": [], "name": "getMetaData", "outputs": [{ "components": [{ "internalType": "address", "name": "pair", "type": "address" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config0", "type": "tuple" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config1", "type": "tuple" }], "internalType": "struct LpConfig.LpMetaData", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] module.exports = { ...PriceFeed, APP_NAME: 'token_price_feed', - getRoute: async function (config) { - let routes = await ethCall(config, 'getRoutes', [], CONFIG_ABI, CHAINS.fantom) + formatRoutes: function (metaData) { const chainIds = new Set() - routes = { - validPriceGap: routes.validPriceGap_, - routes: routes.routes_.map((route) => { + const routes = { + validPriceGap: metaData.validPriceGap_, + routes: metaData.routes_.map((route) => { chainIds.add(route.config.chainId) return { chainId: route.config.chainId, @@ -46,12 +46,20 @@ module.exports = { return { routes, chainIds } }, + getRoutes: async function (config) { + let configMetaData = await ethCall(config, 'getRoutes', [], CONFIG_ABI, CHAINS.fantom) + return this.formatRoutes(configMetaData) + }, + getTokenPairPrice: async function (chainId, abiStyle, pair, toBlock) { const pairPrice = await this.calculatePairPrice(chainId, abiStyle, pair, toBlock) return { tokenPairPrice: new BN(pair.reversed ? new BN(pairPrice.price1) : new BN(pairPrice.price0)), removed: pairPrice.removed } }, calculatePrice: async function (validPriceGap, routes, toBlocks) { + if (routes.length == 0) + return { price: Q112, removedPrices: [] } + let sumTokenPrice = new BN(0) let sumWeights = new BN(0) let prices = [] @@ -119,16 +127,23 @@ module.exports = { return Math.min(...timestamps) }, - getLpTotalSupply: async function (pair, chain) { - const [reserves, totalSupply] = await Promise.all([ - ethCall(pair, 'getReserves', [], this.UNISWAPV2_PAIR_ABI, CHAINS[chain]), - ethCall(pair, 'totalSupply', [], this.UNISWAPV2_PAIR_ABI, CHAINS[chain]), + getLpTotalSupply: async function (pairAddress, chain, toBlock) { + const w3 = this.networksWeb3[CHAINS[chain]] + const pair = new w3.eth.Contract(this.UNISWAPV2_PAIR_ABI, pairAddress) + const [reserves, totalSupply] = await this.makeBatchRequest(w3, [ + { req: pair.methods.getReserves().call, block: toBlock }, + { req: pair.methods.totalSupply().call, block: toBlock }, ]) const K = new BN(reserves._reserve0).mul(new BN(reserves._reserve1)) return { K, totalSupply: new BN(totalSupply) } }, + getLpMetaData: async function (config, chain) { + const { pair, config0, config1 } = await ethCall(config, 'getMetaData', [], LP_CONFIG_ABI, CHAINS[chain]) + return { pair, config0, config1 } + }, + calculateLpPrice: async function (price0, price1, K, totalSupply) { const numerator = new BN(2).mul(new BN(BigInt(Math.sqrt(price0.mul(price1).mul(K))))) return numerator.div(totalSupply) @@ -146,7 +161,7 @@ module.exports = { let { config, toBlocks } = params // get token route for calculating price - const { routes, chainIds } = await this.getRoute(config) + const { routes, chainIds } = await this.getRoutes(config) if (!routes) throw { message: 'Invalid config' } // prepare toBlocks @@ -174,19 +189,12 @@ module.exports = { } case 'lp_price': { - let { pair, config0, config1, toBlocks, chain } = params + let { config, toBlocks, chain } = params - const { K, totalSupply } = await this.getLpTotalSupply(pair, chain) + let { pair, config0, config1 } = await this.getLpMetaData(config, chain) - // get routes for each config - let - [ - { routes: routes0, chainIds: chainIds0 }, - { routes: routes1, chainIds: chainIds1 } - ] - = await Promise.all([this.getRoute(config0), this.getRoute(config1)]) - - if (!routes0.routes || !routes1.routes) throw { message: 'Invalid config' } + let { routes: routes0, chainIds: chainIds0 } = this.formatRoutes(config0) + let { routes: routes1, chainIds: chainIds1 } = this.formatRoutes(config1) const chainIds = new Set([...chainIds0, ...chainIds1]) @@ -206,6 +214,7 @@ module.exports = { ] let [price0, price1] = await Promise.all(promises) + const { K, totalSupply } = await this.getLpTotalSupply(pair, chain, toBlocks[CHAINS[chain]]) // calculate lp token price based on price0 & price1 & K & totalSupply const price = await this.calculateLpPrice(price0.price, price1.price, K, totalSupply) @@ -214,11 +223,8 @@ module.exports = { const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) return { - chainId: CHAINS[chain], - pair, price: price.toString(), - config0, - config1, + config, toBlocks, timestamp } @@ -238,7 +244,8 @@ module.exports = { signParams: function (request, result) { let { method } = request switch (method) { - case 'price': { + case 'price': + case 'lp_price': { let { config, price, timestamp } = result @@ -249,19 +256,6 @@ module.exports = { ] } - case 'lp_price': { - let { chainId, pair, price, config0, config1, timestamp } = result - - return [ - { type: 'uint256', value: chainId }, - { type: 'address', value: pair }, - { type: 'uint256', value: price }, - { type: 'address', value: config0 }, - { type: 'address', value: config1 }, - { type: 'uint256', value: timestamp } - ] - } - default: break } From 3446c09b0adf09476cb14686c407b8957f213bfb Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 16 Nov 2022 19:09:25 +0330 Subject: [PATCH 159/406] Get `chainId` from lp config contract --- general/token_price_feed.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index 099ba4d..b58c6f8 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -13,7 +13,7 @@ const blocksToAvoidReorg = { } const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const LP_CONFIG_ABI = [{ "inputs": [], "name": "getMetaData", "outputs": [{ "components": [{ "internalType": "address", "name": "pair", "type": "address" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config0", "type": "tuple" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config1", "type": "tuple" }], "internalType": "struct LpConfig.LpMetaData", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] +const LP_CONFIG_ABI = [{ "inputs": [], "name": "getMetaData", "outputs": [{ "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "pair", "type": "address" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config0", "type": "tuple" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config1", "type": "tuple" }], "internalType": "struct LpConfig.LpMetaData", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] module.exports = { ...PriceFeed, @@ -127,8 +127,8 @@ module.exports = { return Math.min(...timestamps) }, - getLpTotalSupply: async function (pairAddress, chain, toBlock) { - const w3 = this.networksWeb3[CHAINS[chain]] + getLpTotalSupply: async function (pairAddress, chainId, toBlock) { + const w3 = this.networksWeb3[chainId] const pair = new w3.eth.Contract(this.UNISWAPV2_PAIR_ABI, pairAddress) const [reserves, totalSupply] = await this.makeBatchRequest(w3, [ { req: pair.methods.getReserves().call, block: toBlock }, @@ -139,9 +139,9 @@ module.exports = { return { K, totalSupply: new BN(totalSupply) } }, - getLpMetaData: async function (config, chain) { - const { pair, config0, config1 } = await ethCall(config, 'getMetaData', [], LP_CONFIG_ABI, CHAINS[chain]) - return { pair, config0, config1 } + getLpMetaData: async function (config) { + const { chainId, pair, config0, config1 } = await ethCall(config, 'getMetaData', [], LP_CONFIG_ABI, CHAINS.fantom) + return { chainId, pair, config0, config1 } }, calculateLpPrice: async function (price0, price1, K, totalSupply) { @@ -189,9 +189,9 @@ module.exports = { } case 'lp_price': { - let { config, toBlocks, chain } = params + let { config, toBlocks } = params - let { pair, config0, config1 } = await this.getLpMetaData(config, chain) + let { chainId, pair, config0, config1 } = await this.getLpMetaData(config) let { routes: routes0, chainIds: chainIds0 } = this.formatRoutes(config0) let { routes: routes1, chainIds: chainIds1 } = this.formatRoutes(config1) @@ -214,7 +214,7 @@ module.exports = { ] let [price0, price1] = await Promise.all(promises) - const { K, totalSupply } = await this.getLpTotalSupply(pair, chain, toBlocks[CHAINS[chain]]) + const { K, totalSupply } = await this.getLpTotalSupply(pair, chainId, toBlocks[chainId]) // calculate lp token price based on price0 & price1 & K & totalSupply const price = await this.calculateLpPrice(price0.price, price1.price, K, totalSupply) @@ -223,8 +223,8 @@ module.exports = { const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) return { - price: price.toString(), config, + price: price.toString(), toBlocks, timestamp } From d17d261e4ea90d95f84409d976fa1f3edf57a4a7 Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Sun, 20 Nov 2022 16:23:14 +0330 Subject: [PATCH 160/406] update app memory write sample --- custom/sample.js | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/custom/sample.js b/custom/sample.js index 777f78c..03c796c 100644 --- a/custom/sample.js +++ b/custom/sample.js @@ -87,7 +87,7 @@ module.exports = { onArrive: async function (request) { let {method, data: {params}} = request; switch (method) { - case 'lock': + case 'lock-1': let {user} = params; /** @@ -97,16 +97,13 @@ module.exports = { */ // looking for data in memory - let lock = await this.readNodeMem({"data.name": LOCK_NAME, "data.value": user}) + let lock = await this.readNodeMem(`user-lock-${user}`) if (lock) { throw {message: `User [${user}] locked for a moment`} } // Write to memory - let memory = [ - {type: 'uint256', name: LOCK_NAME, value: user} - ] - await this.writeNodeMem(memory, 120); + await this.writeNodeMem(`user-lock-${user}`, [{type: 'bool', value: true}], 120); // wait for memory write confirmation await timeout(1000); @@ -137,17 +134,17 @@ module.exports = { return `Data stored in memory for user: ${user}` } - case 'lock': { + case 'lock-1': { let {user} = params + return 'lock done.' + } - // You can check for atomic run of the lock method - let lock = await this.readNodeMem({"data.name": LOCK_NAME, "data.value": user}, {distinct: "owner"}) - if (lock.length === 0) { - throw {message: 'Memory write not confirmed.'} - } else if (lock.length > 1) { - throw {message: 'Atomic run failed.'} - } - + case 'lock-2': { + let {user} = params + /** Atomic locally read and write */ + const alreadyLocked = await this.writeLocalMem(`lock-${user}`, [{type: "bool", value: true}], 120, {getset: true}) + if(alreadyLocked) + throw `user locked`; return 'lock done.' } @@ -177,7 +174,8 @@ module.exports = { case 'test_speed': case 'test_redis': case 'test_memory': - case 'lock': + case 'lock-1': + case 'lock-2': return [{type: 'string', value: result}] case 'btc_price': return [ @@ -200,6 +198,7 @@ module.exports = { } } = req return { + key: "sample-key", ttl: 10, data: [{ name: 'lock', type: 'string', value: user }] } From 0eeb0cc0bb4464cb86c7e7bcb69d8a33ad8d30cc Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 22 Nov 2022 12:29:26 +0330 Subject: [PATCH 161/406] Fix `price_feed` app test script --- general_test/price_feed.test.js | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/general_test/price_feed.test.js b/general_test/price_feed.test.js index ac2b7d7..829c399 100644 --- a/general_test/price_feed.test.js +++ b/general_test/price_feed.test.js @@ -9,24 +9,15 @@ const PriceFeedApp = dynamicExtend( ) const app = new PriceFeedApp() const { - CHAINS, networksWeb3, - networksBlocks, - THRESHOLD, - PRICE_TOLERANCE, - FUSE_PRICE_TOLERANCE, - Q112, - ETH, UNISWAPV2_PAIR_ABI, BN, - toBaseUnit, } = app const RED = "\x1b[31m" const GREEN = "\x1b[32m" const BLUE = "\x1b[34m" const CYAN = "\x1b[36m" -const RESET = "\x1b[0m" function injectColor(color, text) { return color + text } @@ -42,11 +33,11 @@ describe('Price Feed app unit test', () => { const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) const options = { fromBlock: seedBlockNumber + 1, - toBlock: seedBlockNumber + networksBlocks[chainId]['seed'] + toBlock: seedBlockNumber + 1000 } const syncEvents = await pair.getPastEvents("Sync", options) - const syncEventsMap = await app.getSyncEvents(chainId, seedBlockNumber, pairAddress) + const syncEventsMap = await app.getSyncEvents(chainId, seedBlockNumber, pairAddress, 1000) const numberOfEvents = Object.keys(syncEventsMap).length let lastEvent = { @@ -82,7 +73,6 @@ describe('Price Feed app unit test', () => { }) it('Test createPrices', async () => { - const chainId = 250 const seed = { price0: new BN('553937927341650325448601038471856'), blockNumber: 14506224 @@ -107,12 +97,13 @@ describe('Price Feed app unit test', () => { } } - const prices = app.createPrices(chainId, seed, syncEventsMap) + const blocksToSeed = 1000 + const prices = app.createPrices(seed, syncEventsMap, blocksToSeed) assert( - prices.length == networksBlocks[chainId]['seed'] + 1, + prices.length == blocksToSeed + 1, `${injectColor(BLUE, 'Prices array has invalid length')} - Expected: ${injectColor(GREEN, networksBlocks[chainId]['seed'] + 1)} + Expected: ${injectColor(GREEN, blocksToSeed + 1)} Received: ${injectColor(RED, prices.length)}` ) assert( From 0f43800f62fae8debb4ede6ea94ed1571883490b Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Wed, 23 Nov 2022 09:44:07 +0330 Subject: [PATCH 162/406] simple-oracle app --- general/simple_oracle.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 general/simple_oracle.js diff --git a/general/simple_oracle.js b/general/simple_oracle.js new file mode 100644 index 0000000..0222d78 --- /dev/null +++ b/general/simple_oracle.js @@ -0,0 +1,33 @@ +const { axios, soliditySha3 } = MuonAppUtils + +module.exports = { + APP_NAME: 'simple_oracle', + + onRequest: async function(request){ + let { method } = request + switch (method) { + case 'eth-price': + const data = await axios.get('https://api.coinbase.com/v2/exchange-rates?currency=ETH') + return { + price: data['rates']['USD'], + } + + default: + throw { message: `Unknown method ${method}` } + } + }, + + signParams: function(request, result){ + let { method } = request; + let { price } = result; + switch (method) { + case 'test': + return [ + { type: 'uint256', value: price } + ] + default: + break + } + } +} + From 23e4d097235286dceab12724b1379c0c24efbe6d Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Wed, 23 Nov 2022 14:25:53 +0330 Subject: [PATCH 163/406] simple_oracle bug fix --- general/simple_oracle.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/general/simple_oracle.js b/general/simple_oracle.js index 0222d78..cd5955f 100644 --- a/general/simple_oracle.js +++ b/general/simple_oracle.js @@ -1,4 +1,4 @@ -const { axios, soliditySha3 } = MuonAppUtils +const { axios, floatToBN } = MuonAppUtils module.exports = { APP_NAME: 'simple_oracle', @@ -7,9 +7,13 @@ module.exports = { let { method } = request switch (method) { case 'eth-price': - const data = await axios.get('https://api.coinbase.com/v2/exchange-rates?currency=ETH') + const response = await axios + .get('https://api.coinbase.com/v2/exchange-rates?currency=ETH') + .then(({data}) => data) + if(!response?.data?.rates?.USD) + throw `USD rate not found` return { - price: data['rates']['USD'], + price: response.data.rates.USD, } default: @@ -21,13 +25,15 @@ module.exports = { let { method } = request; let { price } = result; switch (method) { - case 'test': + case 'eth-price': return [ - { type: 'uint256', value: price } + { type: 'uint256', value: String(floatToBN(price, 18)) } ] + default: - break + throw `Unknown method '${method}'` } } } + From 0f700276a655019e95bd2bcb5fea3b041b2ad7ed Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 24 Nov 2022 09:42:42 +0330 Subject: [PATCH 164/406] Add `token_price_feed` app test script --- general_test/token_price_feed.test.js | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 general_test/token_price_feed.test.js diff --git a/general_test/token_price_feed.test.js b/general_test/token_price_feed.test.js new file mode 100644 index 0000000..ab7ad37 --- /dev/null +++ b/general_test/token_price_feed.test.js @@ -0,0 +1,61 @@ +require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) +require('../../src/core/global') +const assert = require('assert') + +const { ethGetBlockNumber } = MuonAppUtils + +const { dynamicExtend } = require('../../src/core/utils') +const TokenPriceFeedApp = dynamicExtend( + class { }, + require('../general/token_price_feed') +) +const app = new TokenPriceFeedApp() + +const RED = "\x1b[31m" +const GREEN = "\x1b[32m" +const BLUE = "\x1b[34m" +const CYAN = "\x1b[36m" +function injectColor(color, text) { + return color + text +} + +const deusWftmSpirit = "0x2599Eba5fD1e49F294C76D034557948034d6C96E" +const wftmUsdcSpirit = "0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D" +const fusePriceTolerance = BigInt(0.3e18) +const halfHourMinutes = 30 +const dayMinutes = 1440 + +const deusSpiritRoute = { + dex: "Spirit", // dex + path: [ + { + address: deusWftmSpirit, + reversed: true, + minutesToSeed: halfHourMinutes, + minutesToFuse: dayMinutes, + fusePriceTolerance: fusePriceTolerance, + }, + { + address: wftmUsdcSpirit, + reversed: true, + minutesToSeed: halfHourMinutes, + minutesToFuse: dayMinutes, + fusePriceTolerance: fusePriceTolerance, + }, + ], // path + chainId: 250, + abiStyle: "UniV2", + weight: 1, +} + +describe('Token Price Feed app test', () => { + it('Test calculatePrice', async () => { + const validPriceGap = BigInt(0.05e18) + const routes = [deusSpiritRoute] + const toBlocks = { + 250: await ethGetBlockNumber(250) + } + + const { price, removedPrices } = await app.calculatePrice(validPriceGap, routes, toBlocks) + }) +}) \ No newline at end of file From bebf7326a5412ffae821275f251702366500af1e Mon Sep 17 00:00:00 2001 From: Sadegh Teymouri Date: Thu, 24 Nov 2022 12:26:22 +0330 Subject: [PATCH 165/406] simplify sample app simple_oracle --- general/simple_oracle.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/general/simple_oracle.js b/general/simple_oracle.js index cd5955f..c4904ea 100644 --- a/general/simple_oracle.js +++ b/general/simple_oracle.js @@ -1,4 +1,4 @@ -const { axios, floatToBN } = MuonAppUtils +const { axios } = MuonAppUtils module.exports = { APP_NAME: 'simple_oracle', @@ -9,15 +9,11 @@ module.exports = { case 'eth-price': const response = await axios .get('https://api.coinbase.com/v2/exchange-rates?currency=ETH') - .then(({data}) => data) - if(!response?.data?.rates?.USD) - throw `USD rate not found` - return { - price: response.data.rates.USD, - } + const price = parseInt(response.data.data.rates.USD) + return { price } default: - throw { message: `Unknown method ${method}` } + throw `Unknown method ${method}` } }, @@ -27,7 +23,7 @@ module.exports = { switch (method) { case 'eth-price': return [ - { type: 'uint256', value: String(floatToBN(price, 18)) } + { type: 'uint32', value: price } ] default: @@ -36,4 +32,3 @@ module.exports = { } } - From e3c15863f4c3c9d596c287cb852e08ada636f619 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 27 Nov 2022 14:34:56 +0330 Subject: [PATCH 166/406] Move getting token prices logic to `calculateLpPrice` --- general/token_price_feed.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/general/token_price_feed.js b/general/token_price_feed.js index b58c6f8..1c09ce1 100644 --- a/general/token_price_feed.js +++ b/general/token_price_feed.js @@ -144,9 +144,20 @@ module.exports = { return { chainId, pair, config0, config1 } }, - calculateLpPrice: async function (price0, price1, K, totalSupply) { - const numerator = new BN(2).mul(new BN(BigInt(Math.sqrt(price0.mul(price1).mul(K))))) - return numerator.div(totalSupply) + calculateLpPrice: async function (chainId, pair, routes0, routes1, toBlocks) { + // prepare promises for calculating each config price + const promises = [ + this.calculatePrice(routes0.validPriceGap, routes0.routes, toBlocks), + this.calculatePrice(routes1.validPriceGap, routes1.routes, toBlocks) + ] + + let [price0, price1] = await Promise.all(promises) + const { K, totalSupply } = await this.getLpTotalSupply(pair, chainId, toBlocks[chainId]) + + // calculate lp token price based on price0 & price1 & K & totalSupply + const numerator = new BN(2).mul(new BN(BigInt(Math.sqrt(price0.price.mul(price1.price).mul(K))))) + const price = numerator.div(totalSupply) + return price }, onRequest: async function (request) { @@ -207,17 +218,7 @@ module.exports = { } else toBlocks = JSON.parse(toBlocks) - // prepare promises for calculating each config price - const promises = [ - this.calculatePrice(routes0.validPriceGap, routes0.routes, toBlocks), - this.calculatePrice(routes1.validPriceGap, routes1.routes, toBlocks) - ] - - let [price0, price1] = await Promise.all(promises) - const { K, totalSupply } = await this.getLpTotalSupply(pair, chainId, toBlocks[chainId]) - - // calculate lp token price based on price0 & price1 & K & totalSupply - const price = await this.calculateLpPrice(price0.price, price1.price, K, totalSupply) + const price = await this.calculateLpPrice(chainId, pair, routes0, routes1, toBlocks) // get earliest block timestamp const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) From 450f1caa7ec05d15ca4867b893bc1ca1c27457f7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 3 Dec 2022 14:19:20 +0330 Subject: [PATCH 167/406] Change `token_price_feed` -> `twaper` Change `price_feed` -> `pair` --- general/{price_feed.js => pair.js} | 75 ---------------------- general/{token_price_feed.js => twaper.js} | 8 +-- 2 files changed, 4 insertions(+), 79 deletions(-) rename general/{price_feed.js => pair.js} (85%) rename general/{token_price_feed.js => twaper.js} (99%) diff --git a/general/price_feed.js b/general/pair.js similarity index 85% rename from general/price_feed.js rename to general/pair.js index 55720f4..31ed830 100644 --- a/general/price_feed.js +++ b/general/pair.js @@ -39,9 +39,6 @@ module.exports = { BN, toBaseUnit, - - APP_NAME: 'price_feed', - isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() const priceDiffPercentage = new BN(priceDiff).mul(ETH).div(new BN(expectedPrice)) @@ -289,76 +286,4 @@ module.exports = { removed } }, - - onRequest: async function (request) { - let { - method, - data: { params } - } = request - - switch (method) { - case 'signature': - - let { chain, pairAddress, toBlock, abiStyle } = params - if (!chain) throw { message: 'Invalid chain' } - - const chainId = CHAINS[chain] - if (!request.data.result) { - const w3 = networksWeb3[chainId] - const currentBlockNumber = await w3.eth.getBlockNumber() - if (!toBlock) toBlock = currentBlockNumber - else if (toBlock > currentBlockNumber) throw { message: 'Invalid Block Number' } - } - else toBlock = request.data.result.toBlock - - const pairConfig = { - address: pairAddress, - fusePriceTolerance: FUSE_PRICE_TOLERANCE, - minutesToSeed: 30, - minutesToFuse: 1440, - } - - const { price0, price1, removed } = await this.calculatePairPrice(chainId, abiStyle, pairConfig, toBlock) - - return { - chain: chain, - pairAddress: pairAddress, - price0: price0.toString(), - price1: price1.toString(), - removedOutliers: removed, - toBlock: toBlock, - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - /** - * List of the parameters that need to be signed. - * APP_ID, reqId will be added by the - * Muon Core and [APP_ID, reqId, … signParams] - * should be verified on chain. - */ - signParams: function (request, result) { - let { method } = request - switch (method) { - case 'signature': { - - let { chain, pairAddress, price0, price1, toBlock } = result - - return [ - { type: 'address', value: pairAddress }, - { type: 'uint256', value: price0 }, - { type: 'uint256', value: price1 }, - { type: 'uint256', value: String(CHAINS[chain]) }, - { type: 'uint256', value: request.data.timestamp }, - { type: 'uint256', value: toBlock }, - ] - - } - default: - break - } - } } diff --git a/general/token_price_feed.js b/general/twaper.js similarity index 99% rename from general/token_price_feed.js rename to general/twaper.js index 1c09ce1..5271902 100644 --- a/general/token_price_feed.js +++ b/general/twaper.js @@ -1,10 +1,10 @@ const { ethCall, ethGetBlock, ethGetBlockNumber, BN } = MuonAppUtils -const PriceFeed = require('./price_feed') +const Pair = require('./pair') const { CHAINS, Q112, -} = PriceFeed +} = Pair const blocksToAvoidReorg = { [CHAINS.mainnet]: 3, @@ -16,9 +16,9 @@ const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internal const LP_CONFIG_ABI = [{ "inputs": [], "name": "getMetaData", "outputs": [{ "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "pair", "type": "address" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config0", "type": "tuple" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config1", "type": "tuple" }], "internalType": "struct LpConfig.LpMetaData", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] module.exports = { - ...PriceFeed, + ...Pair, - APP_NAME: 'token_price_feed', + APP_NAME: 'twaper', formatRoutes: function (metaData) { const chainIds = new Set() From c0b9a3edc1777afe100b255d0d342da8a98176df Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 3 Dec 2022 15:09:29 +0330 Subject: [PATCH 168/406] Fix test scripts --- general_test/{price_feed.test.js => pair.test.js} | 8 ++++---- general_test/{token_price_feed.test.js => twaper.test.js} | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) rename general_test/{price_feed.test.js => pair.test.js} (97%) rename general_test/{token_price_feed.test.js => twaper.test.js} (92%) diff --git a/general_test/price_feed.test.js b/general_test/pair.test.js similarity index 97% rename from general_test/price_feed.test.js rename to general_test/pair.test.js index 829c399..580d716 100644 --- a/general_test/price_feed.test.js +++ b/general_test/pair.test.js @@ -3,11 +3,11 @@ require('../../src/core/global') const assert = require('assert') const { dynamicExtend } = require('../../src/core/utils') -const PriceFeedApp = dynamicExtend( +const Pair = dynamicExtend( class { }, - require('../general/price_feed') + require('../general/pair') ) -const app = new PriceFeedApp() +const app = new Pair() const { networksWeb3, UNISWAPV2_PAIR_ABI, @@ -23,7 +23,7 @@ function injectColor(color, text) { } -describe('Price Feed app unit test', () => { +describe('Pair unit test', () => { it('Test getSyncEvents', async () => { const chainId = 1 const seedBlockNumber = 14506359 diff --git a/general_test/token_price_feed.test.js b/general_test/twaper.test.js similarity index 92% rename from general_test/token_price_feed.test.js rename to general_test/twaper.test.js index ab7ad37..6e481a3 100644 --- a/general_test/token_price_feed.test.js +++ b/general_test/twaper.test.js @@ -5,11 +5,11 @@ const assert = require('assert') const { ethGetBlockNumber } = MuonAppUtils const { dynamicExtend } = require('../../src/core/utils') -const TokenPriceFeedApp = dynamicExtend( +const Twaper = dynamicExtend( class { }, - require('../general/token_price_feed') + require('../general/twaper') ) -const app = new TokenPriceFeedApp() +const app = new Twaper() const RED = "\x1b[31m" const GREEN = "\x1b[32m" From 7cd0d12ede3da1cf08c5be30c92ea92cfc4b1116 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Dec 2022 13:01:10 +0330 Subject: [PATCH 169/406] Remove `randInt` method --- general/dibs.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 2758c83..4c0b1e7 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -37,9 +37,6 @@ module.exports = { user, token, balance } - case 'randInt': - return { randInt: new BN(BigInt(Math.floor(Math.random() * 2 ** 256))).toString() } - default: throw { message: `Unknown method ${params}` } } @@ -63,11 +60,6 @@ module.exports = { { type: 'uint256', value: request.data.timestamp } ] - case 'randInt': - return [ - { type: 'uint256', value: request.data.result.randInt } - ] - default: break } From 0a7b88f11cdab2625613f115bc353a91e0ff1f58 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Dec 2022 13:01:41 +0330 Subject: [PATCH 170/406] Implement `winner` method --- general/dibs.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index 4c0b1e7..5bbd3a5 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -31,12 +31,20 @@ module.exports = { } = request switch (method) { case 'claim': - let { user, token } = request + let { user, token } = params const balance = await this.getUserBalance(user, token) return { user, token, balance } + case 'winner': + let { roundId } = params + const seed = await this.getSeed(roundId) + const wallets = await this.getRoundWallets(roundId) + const winner = await this.whoIsWinner(seed, wallets) + + return { roundId, winner } + default: throw { message: `Unknown method ${params}` } } @@ -60,6 +68,13 @@ module.exports = { { type: 'uint256', value: request.data.timestamp } ] + case 'winner': + let { roundId, winner } = result + return [ + { type: 'uint256', value: roundId }, + { type: 'address', value: winner }, + ] + default: break } From 4174e6cf17e92339d859876ec9e2fca1be3a72b2 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Dec 2022 15:37:15 +0330 Subject: [PATCH 171/406] Implement `getRoundWallets` & `whoIsWinner` --- general/dibs.js | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 5bbd3a5..ce3fa14 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,10 +1,21 @@ const { axios, BN, toBaseUnit } = MuonAppUtils +const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' + module.exports = { APP_NAME: 'dibs', + postQuery: async function (query) { + const { + data: { data } + } = await axios.post(subgraphUrl, { + query: query + }) + + return data + }, + getUserBalance: async function (user, token) { - const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' const query = `{ userBalance: accumulativeTokenBalances(where: {user: "${user}", token: "${token}"}) { id @@ -14,14 +25,34 @@ module.exports = { } }` - const { - data: { data } - } = await axios.post(subgraphUrl, { - query: query - }) + const data = await this.postQuery(query) return data.userBalance[0].amount + }, + + getRoundWallets: async function (roundId) { + const query = `{ + userLotteries ( + where: {roundId: ${roundId}} + orderBy: user + ) { + id + user, + round, + tickets + } + }` + + let wallets = [] + await this.postQuery(query).userLotteries.forEach((el) => wallets.push(...Array(el.tickets).fill(el.user))) + if (wallets.length == 0) throw { message: `No Wallet` } + return wallets + + }, + whoIsWinner: async function (seed, wallets) { + const winnerTicket = seed % wallets.length + return wallets[winnerTicket] }, onRequest: async function (request) { From 184e8fb896436419dc9ea858a88e72ec2aeb68c9 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 6 Dec 2022 16:51:48 +0330 Subject: [PATCH 172/406] Throw error in case of no existing `userBalance` --- general/dibs.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index ce3fa14..26fe193 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -27,7 +27,10 @@ module.exports = { const data = await this.postQuery(query) - return data.userBalance[0].amount + const userBalance = data.userBalance[0] + if (userBalance == undefined) throw { message: `Zero balance for this token` } + + return userBalance.amount }, getRoundWallets: async function (roundId) { From 237f1cc50f9a043dcb27a8815d527fd1b4de2940 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 7 Dec 2022 17:04:49 +0330 Subject: [PATCH 173/406] Clone wallets as much as related weights --- general/dibs.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 26fe193..7de5aa8 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -36,7 +36,7 @@ module.exports = { getRoundWallets: async function (roundId) { const query = `{ userLotteries ( - where: {roundId: ${roundId}} + where: {round: "${roundId}"} orderBy: user ) { id @@ -46,11 +46,12 @@ module.exports = { } }` - let wallets = [] - await this.postQuery(query).userLotteries.forEach((el) => wallets.push(...Array(el.tickets).fill(el.user))) - if (wallets.length == 0) throw { message: `No Wallet` } - return wallets + const data = await this.postQuery(query) + if (data.userLotteries.length == 0) throw { message: `No Wallet` } + let wallets = []; + data.userLotteries.forEach((el) => wallets.push(...Array(el.tickets).fill(el.user))) + return wallets }, whoIsWinner: async function (seed, wallets) { From eb7a1627f7b9f359ec8024aaaab7f9ce064396d5 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 7 Dec 2022 17:05:28 +0330 Subject: [PATCH 174/406] Implement `getSeed` --- general/dibs.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index 7de5aa8..ea9e8ba 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,6 +1,8 @@ -const { axios, BN, toBaseUnit } = MuonAppUtils +const { axios, ethCall } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' +const DibsRandomSeedGenerator = "0x57ec1c88B493C168048D42d5E96b28C1EAd6eEd9" +const ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", "type": "uint32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] module.exports = { APP_NAME: 'dibs', @@ -33,6 +35,12 @@ module.exports = { return userBalance.amount }, + getSeed: async function (roundId) { + const { fulfilled, seed } = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], ABI, 56) + if (!fulfilled || seed == 0) throw { message: `No seed` } + return seed + }, + getRoundWallets: async function (roundId) { const query = `{ userLotteries ( From 4ba2855065a840b8c87a7fd992e6246fe6443ecc Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 7 Dec 2022 17:05:41 +0330 Subject: [PATCH 175/406] Fix signature --- general/dibs.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index ea9e8ba..e5fee35 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -108,13 +108,12 @@ module.exports = { { type: 'address', value: user }, { type: 'address', value: token }, { type: 'uint256', value: balance }, - { type: 'uint256', value: request.data.timestamp } ] case 'winner': let { roundId, winner } = result return [ - { type: 'uint256', value: roundId }, + { type: 'uint32', value: roundId }, { type: 'address', value: winner }, ] From 3401be4c12631afd89fdaa0b12eaf4aa91e666b8 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 8 Dec 2022 00:06:18 +0330 Subject: [PATCH 176/406] test immutable app --- general/immutable_app_sample.js | 36 +++++++++++++++++++++++ general_test/immutable_app_sample_test.js | 16 ++++++++++ 2 files changed, 52 insertions(+) create mode 100644 general/immutable_app_sample.js create mode 100644 general_test/immutable_app_sample_test.js diff --git a/general/immutable_app_sample.js b/general/immutable_app_sample.js new file mode 100644 index 0000000..51f40b4 --- /dev/null +++ b/general/immutable_app_sample.js @@ -0,0 +1,36 @@ +const { soliditySha3 } = MuonAppUtils; + +module.exports = { + APP_NAME: "immutable_app_sample", + + onRequest: async function(request) { + let { method } = request; + switch (method) { + case "test": + return { + testParam: "100", // uint256 + + // CID of the app file + // Immutable apps should use it + appCID: await this.APP_CID + }; + + default: + throw { message: `Unknown method ${params}` }; + } + }, + + signParams: function(request, result) { + let { method } = request; + let { testParam, appCID } = result; + switch (method) { + case "test": + return [ + { type: "string", value: appCID }, + { type: "uint256", value: testParam } + ]; + default: + break; + } + }, +}; diff --git a/general_test/immutable_app_sample_test.js b/general_test/immutable_app_sample_test.js new file mode 100644 index 0000000..438624c --- /dev/null +++ b/general_test/immutable_app_sample_test.js @@ -0,0 +1,16 @@ +require("dotenv").config({ path: "./dev-chain/dev-node-1.env" }); +require("../../src/core/global"); +const { onRequest } = require("../general/immutable_app_sample"); + +const test = async () => { + return onRequest({ + method: "test", + data: {}, + }) + .then((response) => { + console.log(response); + }) + .catch((error) => console.log(error)); +}; + +test(); From 1c9b6d993e0839c6217c8370fff5c07ed4008370 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 9 Dec 2022 00:10:55 +0330 Subject: [PATCH 177/406] immutable apps --- general/immutable_app_sample.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/immutable_app_sample.js b/general/immutable_app_sample.js index 51f40b4..0886fd9 100644 --- a/general/immutable_app_sample.js +++ b/general/immutable_app_sample.js @@ -26,7 +26,7 @@ module.exports = { switch (method) { case "test": return [ - { type: "string", value: appCID }, + { type: "bytes", value: appCID }, { type: "uint256", value: testParam } ]; default: From 8bcf6f24370be6ed5defd320ee498c4f0c4a0190 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 9 Dec 2022 21:59:38 +0330 Subject: [PATCH 178/406] Use `BN` for blockchain return values --- general/dibs.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index e5fee35..2a91ed6 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,4 +1,4 @@ -const { axios, ethCall } = MuonAppUtils +const { axios, ethCall, BN } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' const DibsRandomSeedGenerator = "0x57ec1c88B493C168048D42d5E96b28C1EAd6eEd9" @@ -38,7 +38,7 @@ module.exports = { getSeed: async function (roundId) { const { fulfilled, seed } = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], ABI, 56) if (!fulfilled || seed == 0) throw { message: `No seed` } - return seed + return new BN(seed) }, getRoundWallets: async function (roundId) { @@ -63,7 +63,7 @@ module.exports = { }, whoIsWinner: async function (seed, wallets) { - const winnerTicket = seed % wallets.length + const winnerTicket = seed.mod(wallets.length) return wallets[winnerTicket] }, From 979f03f0a323c94ac49ce3d2d3d8f1fb176e583f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 10 Dec 2022 14:42:03 +0330 Subject: [PATCH 179/406] Fix `BN` usage --- general/dibs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 2a91ed6..b19b42d 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -37,7 +37,7 @@ module.exports = { getSeed: async function (roundId) { const { fulfilled, seed } = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], ABI, 56) - if (!fulfilled || seed == 0) throw { message: `No seed` } + if (!fulfilled || new BN(seed).eq(new BN(0))) throw { message: `No seed` } return new BN(seed) }, @@ -63,7 +63,7 @@ module.exports = { }, whoIsWinner: async function (seed, wallets) { - const winnerTicket = seed.mod(wallets.length) + const winnerTicket = seed.mod(new BN(wallets.length)) return wallets[winnerTicket] }, From 22faa6ebcb188b8c078c0db9604df93a8d8abdd6 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 13 Dec 2022 15:47:36 +0330 Subject: [PATCH 180/406] Check if user is active in `claim` method --- general/dibs.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index b19b42d..a87070f 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -2,7 +2,9 @@ const { axios, ethCall, BN } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' const DibsRandomSeedGenerator = "0x57ec1c88B493C168048D42d5E96b28C1EAd6eEd9" -const ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", "type": "uint32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const DRSG_ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", "type": "uint32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const Dibs = "0x04874d4087E3f611aC555d4Bc1F5BED7bd8B45a0" +const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] module.exports = { APP_NAME: 'dibs', @@ -36,7 +38,7 @@ module.exports = { }, getSeed: async function (roundId) { - const { fulfilled, seed } = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], ABI, 56) + const { fulfilled, seed } = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], DRSG_ABI, 56) if (!fulfilled || new BN(seed).eq(new BN(0))) throw { message: `No seed` } return new BN(seed) }, @@ -67,6 +69,12 @@ module.exports = { return wallets[winnerTicket] }, + isValidUser: async function (user) { + const code = await ethCall(Dibs, 'addressToCode', [user], DIBS_ABI, 56) + if (code == '0x0000000000000000000000000000000000000000000000000000000000000000') return false + return true + }, + onRequest: async function (request) { let { method, @@ -74,8 +82,12 @@ module.exports = { } = request switch (method) { case 'claim': - let { user, token } = params + let { user, token, time, sign } = params + + if (!await this.isValidUser(user)) throw { message: 'Not an active user' } + const balance = await this.getUserBalance(user, token) + return { user, token, balance } From 2d2f0c1e0ab76446c66924bcf872772384f115dd Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 13 Dec 2022 18:51:17 +0330 Subject: [PATCH 181/406] Validate user signature --- general/dibs.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index a87070f..b7500af 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,4 +1,4 @@ -const { axios, ethCall, BN } = MuonAppUtils +const { axios, ethCall, BN, recoverTypedMessage } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' const DibsRandomSeedGenerator = "0x57ec1c88B493C168048D42d5E96b28C1EAd6eEd9" @@ -69,6 +69,24 @@ module.exports = { return wallets[winnerTicket] }, + isValidSignature: function (forAddress, time, sign) { + let typedData = { + types: { + EIP712Domain: [{ name: 'name', type: 'string' }], + Message: [ + { type: 'uint256', name: 'time' }, + { type: 'address', name: 'forAddress' } + ] + }, + domain: { name: 'Dibs' }, + primaryType: 'Message', + message: { user: forAddress, timestamp: time } + } + let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + + return signer.toLowerCase() === forAddress.toLowerCase() + }, + isValidUser: async function (user) { const code = await ethCall(Dibs, 'addressToCode', [user], DIBS_ABI, 56) if (code == '0x0000000000000000000000000000000000000000000000000000000000000000') return false @@ -86,6 +104,9 @@ module.exports = { if (!await this.isValidUser(user)) throw { message: 'Not an active user' } + if (!sign) throw { message: 'Request signature undefined' } + if (!this.isValidSignature(user, time, sign)) throw { message: 'Request signature mismatch' } + const balance = await this.getUserBalance(user, token) return { From ca03a04750a4f4fd4e9b6e1dbcf97a89ef52b492 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 14 Dec 2022 14:08:19 +0330 Subject: [PATCH 182/406] Validate signature before user validation --- general/dibs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index b7500af..6aa7c8d 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -102,11 +102,11 @@ module.exports = { case 'claim': let { user, token, time, sign } = params - if (!await this.isValidUser(user)) throw { message: 'Not an active user' } - if (!sign) throw { message: 'Request signature undefined' } if (!this.isValidSignature(user, time, sign)) throw { message: 'Request signature mismatch' } + if (!await this.isValidUser(user)) throw { message: 'Not an active user' } + const balance = await this.getUserBalance(user, token) return { From 3184ad57c11b2271306345e5c97971d45c387f8e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 15 Dec 2022 16:21:02 +0330 Subject: [PATCH 183/406] Keep list of symbols per priceFeed --- general/v3_oracle.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index b62059e..5086aae 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,5 +1,3 @@ -const { json } = require('body-parser'); - const { BN, toBaseUnit, ethCall } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; @@ -8,29 +6,36 @@ const accountId = process.env.ACCOUNT_ID; const api = new MetaApi(token); -const ABI = [{ "inputs": [{ "internalType": "uint256", "name": "positionId", "type": "uint256" }], "name": "getMarketFromPositionId", "outputs": [{ "components": [{ "internalType": "uint256", "name": "_marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "enum TradingSession", "name": "tradingSession", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }], "internalType": "struct Market", "name": "market", "type": "tuple" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "_marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "enum TradingSession", "name": "tradingSession", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const ADDRESS = '0xE7f6e42e3b9ea3B082B4595D0363Cb58a9D1AE84'; +const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes32", "name": "muonPriceFeedId", "type": "bytes32" }, { "internalType": "bytes32", "name": "fundingRateId", "type": "bytes32" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const ADDRESS = '0x2650b195C900d782D84Ffeb7a8B5e150aFB5a8bF'; const CHAINS = { fantom: 250, + arbitrum: 42161, }; - module.exports = { APP_NAME: 'v3_oracle', getSymbols: async function (positionIds) { - const markets = await ethCall(ADDRESS, 'getMarketsFromPositionIds', [positionIds], ABI, CHAINS.fantom); + const markets = await ethCall(ADDRESS, 'getMarketsFromPositionIds', [positionIds], ABI, CHAINS.arbitrum); const positions = []; - const symbols = new Set(); + const symbolsPerPriceFeed = {}; + markets.forEach((market, i) => { positions.push({ positionId: positionIds[i], - symbol: market.symbol + symbol: market.symbol, + priceFeedId: market.muonPriceFeedId }); - symbols.add(market.symbol); + + if (!symbolsPerPriceFeed[market.muonPriceFeedId]) + symbolsPerPriceFeed[market.muonPriceFeedId] = new Set([market.symbol]); + else + symbolsPerPriceFeed[market.muonPriceFeedId].add(market.symbol); }); - return { positions, symbols }; + + return { positions, symbolsPerPriceFeed }; }, getConnection: async function () { From 5cf15640e60e7d7fb83a82083b94daa49d61e8f7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 15 Dec 2022 16:26:49 +0330 Subject: [PATCH 184/406] Handle multiple priceFeeds --- general/v3_oracle.js | 54 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 5086aae..f76bf98 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -47,17 +47,21 @@ module.exports = { return connection; }, - getSymbolPrice: async function (connection, symbol) { + getSymbolPrice: async function (symbol) { + const connection = await this.getConnection(); const price = await connection.getTick(symbol); return price; }, - getPrices: async function (connection, symbols) { - let prices = {}; - const promises = []; + fetchPricesFromFinnhub: async function (symbols) { + }, + + fetchPricesFromMetaAPI: async function (symbols) { + const prices = {} + const promises = [] symbols.forEach((symbol) => { - promises.push(this.getSymbolPrice(connection, symbol)); + promises.push(this.getSymbolPrice(symbol)); }); const result = await Promise.all(promises); @@ -73,6 +77,39 @@ module.exports = { return prices; }, + fetchPricesFromPriceFeed: async function (symbols, priceFeedId) { + switch (priceFeedId) { + case 'metaAPI': { + return await this.fetchPricesFromMetaAPI(symbols); + } + + case 'finnhub': { + return await this.fetchPricesFromFinnhub(symbols); + } + + default: { + return await this.fetchPricesFromMetaAPI(symbols); + } + } + }, + + getPrices: async function (symbolsPerMarket) { + let prices = {}; + const promises = []; + const priceFeeds = [] + + for (let [priceFeedId, symbols] of Object.entries(symbolsPerMarket)) { + promises.push(this.fetchPricesFromPriceFeed(symbols, priceFeedId)) + priceFeeds.push(priceFeedId) + } + + const result = await Promise.all(promises); + + priceFeeds.forEach((id, index) => prices[id] = result[index]) + + return prices; + }, + onRequest: async function (request) { let { method, @@ -87,14 +124,13 @@ module.exports = { if (!Number.isInteger(id)) throw { message: `Invalid positionId` }; }); - const { positions, symbols } = await this.getSymbols(positionIds); - const connection = await this.getConnection(); - const prices = await this.getPrices(connection, symbols); + const { positions, symbolsPerPriceFeed } = await this.getSymbols(positionIds); + const prices = await this.getPrices(symbolsPerPriceFeed); let bidPrices = []; let askPrices = []; positions.forEach((position) => { - const price = prices[position.symbol]; + const price = prices[position.priceFeedId][position.symbol]; bidPrices.push(price.bid); askPrices.push(price.ask); }); From 35ed531e7e3cf43797b82fd583a4d0d36d4af925 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 15 Dec 2022 16:36:05 +0330 Subject: [PATCH 185/406] Add `appCID` to signature --- general/v3_oracle.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index f76bf98..f392573 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -138,7 +138,8 @@ module.exports = { return { positionIds, bidPrices, - askPrices + askPrices, + appCID: await this.APP_CID }; default: @@ -156,17 +157,19 @@ module.exports = { let { method } = request; switch (method) { case 'signature': - let { positionIds, bidPrices, askPrices } = request.data.result; + let { positionIds, bidPrices, askPrices, appCID } = request.data.result; let res; if (positionIds.length > 1) res = [ + { type: "bytes", value: appCID }, { type: 'uint256[]', value: positionIds }, { type: 'uint256[]', value: bidPrices }, { type: 'uint256[]', value: askPrices } ]; else res = [ + { type: "bytes", value: appCID }, { type: 'uint256', value: positionIds[0] }, { type: 'uint256', value: bidPrices[0] }, { type: 'uint256', value: askPrices[0] } From f3bd9d818934da5b22cc1b19b7a37d746ca744b3 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 15 Dec 2022 16:55:45 +0330 Subject: [PATCH 186/406] Check priceTolerance before signing results --- general/v3_oracle.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index f392573..51bca93 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -4,6 +4,9 @@ const MetaApi = require('metaapi.cloud-sdk').default; const token = process.env.TOKEN; const accountId = process.env.ACCOUNT_ID; +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) +const TOLERANCE = scaleUp('0.001') +const ETH = scaleUp(1); const api = new MetaApi(token); const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes32", "name": "muonPriceFeedId", "type": "bytes32" }, { "internalType": "bytes32", "name": "fundingRateId", "type": "bytes32" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] @@ -17,12 +20,22 @@ const CHAINS = { module.exports = { APP_NAME: 'v3_oracle', + isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() + const priceDiffPercentage = new BN(priceDiff).mul(ETH).div(new BN(expectedPrice)) + return { + isOk: !priceDiffPercentage.gt(new BN(priceTolerance)), + priceDiffPercentage: priceDiffPercentage.mul(new BN(100)).div(ETH) + } + }, + getSymbols: async function (positionIds) { const markets = await ethCall(ADDRESS, 'getMarketsFromPositionIds', [positionIds], ABI, CHAINS.arbitrum); const positions = []; const symbolsPerPriceFeed = {}; markets.forEach((market, i) => { + if (market.symbol == '') throw { message: 'Invalid PositionId' } positions.push({ positionId: positionIds[i], symbol: market.symbol, @@ -159,6 +172,14 @@ module.exports = { case 'signature': let { positionIds, bidPrices, askPrices, appCID } = request.data.result; + for (let i = 0; i < positionIds.length; i++) { + if (!this.isPriceToleranceOk(bidPrices[i], request.data.result.bidPrices[i], TOLERANCE).isOk) + throw { message: `Price Tolerance Error` } + + if (!this.isPriceToleranceOk(askPrices[i], request.data.result.askPrices[i], TOLERANCE).isOk) + throw { message: `Price Tolerance Error` } + } + let res; if (positionIds.length > 1) res = [ From c6c7c4807ef13a1a1a7dfd1eadf7f1e505e09fbf Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 17 Dec 2022 17:24:54 +0330 Subject: [PATCH 187/406] Fix names difference in signature validation --- general/dibs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 6aa7c8d..4f9d1bb 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -74,8 +74,8 @@ module.exports = { types: { EIP712Domain: [{ name: 'name', type: 'string' }], Message: [ - { type: 'uint256', name: 'time' }, - { type: 'address', name: 'forAddress' } + { type: 'address', name: 'user' }, + { type: 'uint256', name: 'timestamp' } ] }, domain: { name: 'Dibs' }, From f24fcde41f4fbcde53752d9e54971fefd690eb77 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 19 Dec 2022 15:37:13 +0330 Subject: [PATCH 188/406] Fix `priceFeedId` check Use `getSymbolPrice` instead of `getTick` --- general/v3_oracle.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 51bca93..d7d3315 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,4 +1,4 @@ -const { BN, toBaseUnit, ethCall } = MuonAppUtils; +const { BN, toBaseUnit, ethCall, Web3 } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; const token = process.env.TOKEN; @@ -10,7 +10,7 @@ const ETH = scaleUp(1); const api = new MetaApi(token); const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes32", "name": "muonPriceFeedId", "type": "bytes32" }, { "internalType": "bytes32", "name": "fundingRateId", "type": "bytes32" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const ADDRESS = '0x2650b195C900d782D84Ffeb7a8B5e150aFB5a8bF'; +const ADDRESS = '0x212e1A33350a85c4bdB2607C47E041a65bD14361'; const CHAINS = { fantom: 250, @@ -62,7 +62,7 @@ module.exports = { getSymbolPrice: async function (symbol) { const connection = await this.getConnection(); - const price = await connection.getTick(symbol); + const price = await connection.getSymbolPrice(symbol); return price; }, @@ -92,16 +92,16 @@ module.exports = { fetchPricesFromPriceFeed: async function (symbols, priceFeedId) { switch (priceFeedId) { - case 'metaAPI': { + case Web3.utils.fromAscii('metaAPI') + '00000000000000000000000000000000000000000000000000': { return await this.fetchPricesFromMetaAPI(symbols); } - case 'finnhub': { + case Web3.utils.fromAscii('finnhub'): { return await this.fetchPricesFromFinnhub(symbols); } default: { - return await this.fetchPricesFromMetaAPI(symbols); + throw { message: 'Invalid PriceFeed' } } } }, From e2973dafaeaab852d50c4a74c07e29788904be1d Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 23 Dec 2022 14:34:47 +0330 Subject: [PATCH 189/406] changed env var names --- general/v3_oracle.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index d7d3315..8822d37 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,8 +1,8 @@ const { BN, toBaseUnit, ethCall, Web3 } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; -const token = process.env.TOKEN; -const accountId = process.env.ACCOUNT_ID; +const token = process.env.METAAPI_TOKEN; +const accountId = process.env.METAAPI_ACCOUNT_ID; const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) const TOLERANCE = scaleUp('0.001') From 27d64a3047db8420b51ba6650ab57431fb2dfabb Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 23 Dec 2022 14:52:22 +0330 Subject: [PATCH 190/406] changed env var names --- general/v3_oracle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 8822d37..e712ee3 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -2,7 +2,7 @@ const { BN, toBaseUnit, ethCall, Web3 } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; const token = process.env.METAAPI_TOKEN; -const accountId = process.env.METAAPI_ACCOUNT_ID; +const accountId = process.env.META_API_ACCOUNT_ID; const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) const TOLERANCE = scaleUp('0.001') From 151d79a0c764bd6ea1760a2c34c1a877250776d3 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 25 Dec 2022 11:32:27 +0330 Subject: [PATCH 191/406] bugfix --- general/v3_oracle.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index e712ee3..ab76124 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,8 +1,8 @@ const { BN, toBaseUnit, ethCall, Web3 } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; -const token = process.env.METAAPI_TOKEN; -const accountId = process.env.META_API_ACCOUNT_ID; +const token = process.env.META_API_TOKEN; +const accountId = process.env.METAAPI_ACCOUNT_ID; const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) const TOLERANCE = scaleUp('0.001') From e8b2a4a042055cd9991f2e01ef1d9d1b5eee9ef8 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 2 Jan 2023 11:33:47 +0330 Subject: [PATCH 192/406] Update contract addr Fix price tolerance check --- general/v3_oracle.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index d7d3315..555fa2c 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -1,8 +1,8 @@ const { BN, toBaseUnit, ethCall, Web3 } = MuonAppUtils; const MetaApi = require('metaapi.cloud-sdk').default; -const token = process.env.TOKEN; -const accountId = process.env.ACCOUNT_ID; +const token = process.env.META_API_TOKEN; +const accountId = process.env.METAAPI_ACCOUNT_ID; const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) const TOLERANCE = scaleUp('0.001') @@ -10,7 +10,7 @@ const ETH = scaleUp(1); const api = new MetaApi(token); const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes32", "name": "muonPriceFeedId", "type": "bytes32" }, { "internalType": "bytes32", "name": "fundingRateId", "type": "bytes32" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const ADDRESS = '0x212e1A33350a85c4bdB2607C47E041a65bD14361'; +const ADDRESS = '0xfe2a4643a8DE03f7706980AA18B0f298B1561497'; const CHAINS = { fantom: 250, @@ -170,7 +170,7 @@ module.exports = { let { method } = request; switch (method) { case 'signature': - let { positionIds, bidPrices, askPrices, appCID } = request.data.result; + let { positionIds, bidPrices, askPrices } = result; for (let i = 0; i < positionIds.length; i++) { if (!this.isPriceToleranceOk(bidPrices[i], request.data.result.bidPrices[i], TOLERANCE).isOk) @@ -183,17 +183,17 @@ module.exports = { let res; if (positionIds.length > 1) res = [ - { type: "bytes", value: appCID }, - { type: 'uint256[]', value: positionIds }, - { type: 'uint256[]', value: bidPrices }, - { type: 'uint256[]', value: askPrices } + { type: "bytes", value: request.data.result.appCID }, + { type: 'uint256[]', value: request.data.result.positionIds }, + { type: 'uint256[]', value: request.data.result.bidPrices }, + { type: 'uint256[]', value: request.data.result.askPrices } ]; else res = [ - { type: "bytes", value: appCID }, - { type: 'uint256', value: positionIds[0] }, - { type: 'uint256', value: bidPrices[0] }, - { type: 'uint256', value: askPrices[0] } + { type: "bytes", value: request.data.result.appCID }, + { type: 'uint256', value: request.data.result.positionIds[0] }, + { type: 'uint256', value: request.data.result.bidPrices[0] }, + { type: 'uint256', value: request.data.result.askPrices[0] } ]; return [ From cecff9c4681d9a609dda12b058fac2aa9521e4e4 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 11 Jan 2023 20:02:25 +0330 Subject: [PATCH 193/406] fear updates --- general/fear_price.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/fear_price.js b/general/fear_price.js index 8c326f8..f5cb038 100644 --- a/general/fear_price.js +++ b/general/fear_price.js @@ -46,7 +46,7 @@ module.exports = { } }, - hashRequestResult: function (request, result) { + signParams: function (request, result) { let { method } = request switch (method) { case 'get_price': @@ -69,12 +69,12 @@ module.exports = { throw { message: 'ethPrice difference is not acceptable.' } } - return soliditySha3([ + return [ { type: 'uint256', value: this.APP_ID }, { type: 'uint256', value: request.data.result.fearPrice }, { type: 'uint256', value: request.data.result.ethPrice }, { type: 'uint256', value: request.data.timestamp} - ]) + ] default: break From 2dc00d3c813e1ab33e160d4b808c05312de12dc0 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 11 Jan 2023 22:27:04 +0330 Subject: [PATCH 194/406] fear price updates --- general/fear_price.js | 1 - 1 file changed, 1 deletion(-) diff --git a/general/fear_price.js b/general/fear_price.js index f5cb038..a3deecb 100644 --- a/general/fear_price.js +++ b/general/fear_price.js @@ -70,7 +70,6 @@ module.exports = { } return [ - { type: 'uint256', value: this.APP_ID }, { type: 'uint256', value: request.data.result.fearPrice }, { type: 'uint256', value: request.data.result.ethPrice }, { type: 'uint256', value: request.data.timestamp} From d884f372c473b1007d5208ac8a4169062858e5e7 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 13 Jan 2023 00:48:22 +0330 Subject: [PATCH 195/406] Fix contract address --- general/v3_oracle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/v3_oracle.js b/general/v3_oracle.js index 555fa2c..afd8c65 100644 --- a/general/v3_oracle.js +++ b/general/v3_oracle.js @@ -10,7 +10,7 @@ const ETH = scaleUp(1); const api = new MetaApi(token); const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" }], "name": "getMarketsFromPositionIds", "outputs": [{ "components": [{ "internalType": "uint256", "name": "marketId", "type": "uint256" }, { "internalType": "string", "name": "identifier", "type": "string" }, { "internalType": "enum MarketType", "name": "marketType", "type": "uint8" }, { "internalType": "bool", "name": "active", "type": "bool" }, { "internalType": "string", "name": "baseCurrency", "type": "string" }, { "internalType": "string", "name": "quoteCurrency", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bytes32", "name": "muonPriceFeedId", "type": "bytes32" }, { "internalType": "bytes32", "name": "fundingRateId", "type": "bytes32" }], "internalType": "struct Market[]", "name": "markets", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const ADDRESS = '0xfe2a4643a8DE03f7706980AA18B0f298B1561497'; +const ADDRESS = '0x1570E893853897d806697F252300e32d99218fC2'; const CHAINS = { fantom: 250, From f57746cf457a03521a10f43cd5c3610202864a15 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 15 Jan 2023 12:56:37 +0330 Subject: [PATCH 196/406] Add app file --- general/crypto_v3.js | 259 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 general/crypto_v3.js diff --git a/general/crypto_v3.js b/general/crypto_v3.js new file mode 100644 index 0000000..3adcaf9 --- /dev/null +++ b/general/crypto_v3.js @@ -0,0 +1,259 @@ +const { axios, BN, toBaseUnit, ethCall } = MuonAppUtils +const ETH = new BN(toBaseUnit('1', 18)) +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) + +const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "quoteIds", "type": "uint256[]" }], "name": "symbolNameByQuoteId", "outputs": [{ "internalType": "string[]", "name": "", "type": "string[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], "name": "nonceOfPartyA", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }], "name": "nonceOfPartyB", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], "name": "partyAPositionsCount", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }], "name": "partyBPositionsCount", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "getPartyAOpenPositions", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedOpenLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "openSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "closeSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "lockedValues", "type": "tuple" }, { "internalType": "uint256", "name": "maxInterestRate", "type": "uint256" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedCloseLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, { "internalType": "uint256", "name": "parentId", "type": "uint256" }, { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "modifyTimestamp", "type": "uint256" }], "internalType": "struct Quote[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "getPartyBOpenPositions", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedOpenLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "openSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "closeSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "lockedValues", "type": "tuple" }, { "internalType": "uint256", "name": "maxInterestRate", "type": "uint256" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedCloseLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, { "internalType": "uint256", "name": "parentId", "type": "uint256" }, { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "modifyTimestamp", "type": "uint256" }], "internalType": "struct Quote[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const v3Contract = "0xd966Dd36DdCE09F09f7141E93B78C8edb3a3c3CB" +const UPNL_TOLERANCE = scaleUp('0.001') +const PRICE_TOLERANCE = scaleUp('0.001') +const minusOne = new BN(-1) + +module.exports = { + APP_NAME: 'crypto_v3', + + isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() + const priceDiffPercentage = new BN(priceDiff).mul(ETH).div(new BN(expectedPrice)) + return { + isOk: !priceDiffPercentage.gt(new BN(priceTolerance)), + priceDiffPercentage: priceDiffPercentage.mul(new BN(100)).div(ETH) + } + }, + + isUpnlToleranceOk: function (uPnl, expectedUpnl, notionalValueSum, uPnlTolerance) { + let uPnlDiff = new BN(uPnl).sub(new BN(expectedUpnl)).abs() + const uPnlDiffInNotionalValue = uPnlDiff.mul(ETH).div(new BN(notionalValueSum)) + return { + isOk: !uPnlDiffInNotionalValue.gt(new BN(uPnlTolerance)), + uPnlDiffInNotionalValue: uPnlDiffInNotionalValue.mul(new BN(100)).div(ETH) + } + }, + + getSymbols: async function (quoteIds, chainId) { + const symbols = await ethCall(v3Contract, 'symbolNameByQuoteId', [quoteIds], ABI, chainId) + if (symbols.includes('')) throw { message: 'Invalid quoteId' } + return symbols + }, + + getPrices: async function (symbols) { + const binanceUrl = 'https://fapi.binance.com/fapi/v1/premiumIndex' + const { data } = await axios.get(binanceUrl) + const pricesMap = {} + data.forEach((el) => { + if (symbols.includes(el.symbol)) + pricesMap[el.symbol] = scaleUp(el.markPrice).toString() + }) + return pricesMap + }, + + fetchPrices: async function (quoteIds, chainId) { + const symbols = await this.getSymbols(quoteIds, chainId) + const pricesMap = await this.getPrices(symbols) + const prices = this.createPricesList(symbols, pricesMap) + return { prices, pricesMap } + }, + + createPricesList: function (symbols, pricesMap) { + const prices = [] + symbols.forEach((symbol) => prices.push(pricesMap[symbol].toString())) + return prices + }, + + calculateUpnl: async function (openPositions, prices) { + let uPnl = new BN(0) + let notionalValueSum = new BN(0) + for (let [i, position] of openPositions.entries()) { + const openedPrice = new BN(position.openedPrice) + const priceDiff = new BN(prices[i]).sub(openedPrice) + const amount = new BN(position.quantity).sub(new BN(position.closedAmount)) + const longPositionUpnl = amount.mul(priceDiff) + const positionUpnl = position.positionType == '0' ? longPositionUpnl : minusOne.mul(longPositionUpnl) + uPnl = uPnl.add(positionUpnl.div(ETH)) + const positionNotionalValue = amount.mul(openedPrice).div(ETH) + notionalValueSum = notionalValueSum.add(positionNotionalValue) + } + return { uPnl, notionalValueSum } + }, + + getPositionsCount: async function (parties, side, chainId) { + if (side == 'A') return await ethCall(v3Contract, 'partyAPositionsCount', [parties.partyA], ABI, chainId) + else if (side == 'B') return await ethCall(v3Contract, 'partyBPositionsCount', [parties.partyB, parties.partyA], ABI, chainId) + }, + + getOpenPositions: async function (parties, side, start, size, chainId) { + if (side == 'A') return await ethCall(v3Contract, 'getPartyAOpenPositions', [parties.partyA, start, size], ABI, chainId) + else if (side == 'B') return await ethCall(v3Contract, 'getPartyBOpenPositions', [parties.partyB, parties.partyA, start, size], ABI, chainId) + }, + + fetchOpenPositions: async function (parties, side, chainId) { + const positionsCount = new BN(await this.getPositionsCount(parties, side, chainId)) + if (positionsCount.eq(new BN(0))) throw { message: 'No open postions' } + + const size = 50 + const getsCount = parseInt(positionsCount.div(new BN(size))) + 1 + + const openPositions = [] + for (let i = 0; i < getsCount; i++) { + const start = i * size + openPositions.push(...await this.getOpenPositions(parties, side, start, size, chainId)) + } + + let quoteIds = [] + openPositions.forEach((position) => quoteIds.push(position.id)) + + return { openPositions, quoteIds } + }, + + uPnlPartyA: async function (partyA, chainId) { + const { openPositions, quoteIds } = await this.fetchOpenPositions({ partyA }, 'A', chainId) + const { prices, pricesMap } = await this.fetchPrices(quoteIds, chainId) + const { uPnl, notionalValueSum } = await this.calculateUpnl(openPositions, prices) + const nonce = await ethCall(v3Contract, 'nonceOfPartyA', [partyA], ABI, chainId) + + return { uPnl: uPnl.toString(), notionalValueSum: notionalValueSum.toString(), nonce, pricesMap, prices, quoteIds } + }, + + uPnlPartyB: async function (partyB, partyA, chainId) { + const { openPositions, quoteIds } = await this.fetchOpenPositions({ partyB, partyA }, 'B', chainId) + const { prices, pricesMap } = await this.fetchPrices(quoteIds, chainId) + const { uPnl, notionalValueSum } = await this.calculateUpnl(openPositions, prices) + const nonce = await ethCall(v3Contract, 'nonceOfPartyB', [partyB, partyA], ABI, chainId) + + return { uPnl: minusOne.mul(uPnl).toString(), notionalValueSum: notionalValueSum.toString(), nonce, pricesMap, prices, quoteIds } + }, + + uPnlPartyB_FetchedPrices: async function (partyB, partyA, chainId, pricesMap) { + const { openPositions, quoteIds } = await this.fetchOpenPositions({ partyB, partyA }, 'B', chainId) + const symbols = await this.getSymbols(quoteIds, chainId) + const prices = this.createPricesList(symbols, pricesMap) + const { uPnl, notionalValueSum } = await this.calculateUpnl(openPositions, prices) + const nonce = await ethCall(v3Contract, 'nonceOfPartyB', [partyB, partyA], ABI, chainId) + + return { uPnl, notionalValueSum, nonce, prices, quoteIds } + }, + + uPnlParties: async function (partyB, partyA, chainId) { + const { uPnl: uPnlA, nonce: nonceA, notionalValueSum: notionalValueSumA, pricesMap, prices: pricesA, quoteIds: quoteIdsA } = await this.uPnlPartyA(partyA, chainId) + const { uPnl: uPnlB, nonce: nonceB, notionalValueSum: notionalValueSumB, prices: pricesB, quoteIds: quoteIdsB } = await this.uPnlPartyB_FetchedPrices(partyB, partyA, chainId, pricesMap) + + return { uPnlB: minusOne.mul(uPnlB).toString(), uPnlA, notionalValueSumB: notionalValueSumB.toString(), notionalValueSumA, nonceB, nonceA, pricesMap, pricesB, pricesA, quoteIdsB, quoteIdsA } + }, + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + switch (method) { + case 'uPnl_A': { + let { partyA, chainId } = params + const result = await this.uPnlPartyA(partyA, chainId) + return Object.assign({}, { chainId, partyA }, result) + } + + case 'uPnl_B': { + let { partyB, partyA, chainId } = params + const result = await this.uPnlPartyB(partyB, partyA, chainId) + return Object.assign({}, { chainId, partyB, partyA }, result) + } + + case 'uPnl': { + let { partyB, partyA, chainId } = params + const result = await this.uPnlParties(partyB, partyA, chainId) + return Object.assign({}, { chainId, partyB, partyA }, result) + } + + case 'price': { + let { quoteIds, chainId } = params + + quoteIds = JSON.parse(quoteIds) + const result = await this.fetchPrices(quoteIds, chainId) + return Object.assign({}, { chainId, quoteIds }, result) + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + case 'uPnl_A': { + let { partyA, uPnl, notionalValueSum, nonce, chainId } = result + + if (!this.isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + + return [ + { type: 'address', value: partyA }, + { type: 'uint256', value: nonce }, + { type: 'int256', value: request.data.result.uPnl }, + { type: 'uint256', value: request.data.timestamp }, + { type: 'uint256', value: chainId }, + ] + } + + case 'uPnl_B': { + let { partyB, partyA, uPnl, notionalValueSum, nonce, chainId } = result + + if (!this.isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + + return [ + { type: 'address', value: partyB }, + { type: 'address', value: partyA }, + { type: 'uint256', value: nonce }, + { type: 'int256', value: request.data.result.uPnl }, + { type: 'uint256', value: request.data.timestamp }, + { type: 'uint256', value: chainId }, + ] + } + + case 'uPnl': { + let { partyB, partyA, uPnlB, uPnlA, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId } = result + + if (!this.isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + if (!this.isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + + return [ + { type: 'address', value: partyB }, + { type: 'address', value: partyA }, + { type: 'uint256', value: nonceB }, + { type: 'uint256', value: nonceA }, + { type: 'int256', value: request.data.result.uPnlB }, + { type: 'int256', value: request.data.result.uPnlA }, + { type: 'uint256', value: request.data.timestamp }, + { type: 'uint256', value: chainId }, + ] + } + + case 'price': { + let { quoteIds, prices, chainId } = result + + for (let [i, price] of prices.entries()) { + if (!this.isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) + throw { message: `Price Tolerance Error` } + } + + return [ + { type: 'uint256[]', value: quoteIds }, + { type: 'uint256[]', value: request.data.result.prices }, + { type: 'uint256', value: request.data.timestamp }, + { type: 'uint256', value: chainId }, + ] + } + + default: + break + } + } +} \ No newline at end of file From e893968ab72d1abf2264f6577f9dcc2785d14d4a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 2 Feb 2023 10:53:17 +0330 Subject: [PATCH 197/406] Define `determineWinners` to have multiple winners --- general/dibs.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 4f9d1bb..6861500 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,10 +1,12 @@ const { axios, ethCall, BN, recoverTypedMessage } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' -const DibsRandomSeedGenerator = "0x57ec1c88B493C168048D42d5E96b28C1EAd6eEd9" +const DibsRandomSeedGenerator = "0xfa200781a931c9F0ef3306092cd4e547772110Ae" const DRSG_ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", "type": "uint32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] -const Dibs = "0x04874d4087E3f611aC555d4Bc1F5BED7bd8B45a0" +const Dibs = "0x664cE330511653cB2744b8eD50DbA31C6c4C08ca" const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] +const DibsLottery = "0x287ed50e4c158dac38e1b7e16c50cd1b2551a300" +const DIBS_LOTTERY_ABI = [] module.exports = { APP_NAME: 'dibs', @@ -64,7 +66,7 @@ module.exports = { return wallets }, - whoIsWinner: async function (seed, wallets) { + whoIsWinner: function (seed, wallets) { const winnerTicket = seed.mod(new BN(wallets.length)) return wallets[winnerTicket] }, @@ -117,9 +119,9 @@ module.exports = { let { roundId } = params const seed = await this.getSeed(roundId) const wallets = await this.getRoundWallets(roundId) - const winner = await this.whoIsWinner(seed, wallets) + const winners = this.determineWinners(winnersPerRound, wallets, seed) - return { roundId, winner } + return { roundId, winners } default: throw { message: `Unknown method ${params}` } @@ -144,10 +146,10 @@ module.exports = { ] case 'winner': - let { roundId, winner } = result + let { roundId, winners } = result return [ { type: 'uint32', value: roundId }, - { type: 'address', value: winner }, + { type: 'address[]', value: winners }, ] default: From d4068190072a458ac3c2c773e0dd9ea8c39d4d9d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 2 Feb 2023 13:16:00 +0330 Subject: [PATCH 198/406] Handle error in getting seed --- general/dibs.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index 6861500..2fcfd72 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -40,7 +40,14 @@ module.exports = { }, getSeed: async function (roundId) { - const { fulfilled, seed } = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], DRSG_ABI, 56) + let data + try { + data = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], DRSG_ABI, 56) + } + catch (e) { + throw { message: 'FAILED_TO_FETCH_SEED', detail: e.message } + } + const { fulfilled, seed } = data if (!fulfilled || new BN(seed).eq(new BN(0))) throw { message: `No seed` } return new BN(seed) }, From 483a1e782e0fe202367801c2362cc2aab7847811 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 2 Feb 2023 13:17:02 +0330 Subject: [PATCH 199/406] Return wallets count in `getRoundsWallets` --- general/dibs.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 2fcfd72..a464cff 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -68,9 +68,9 @@ module.exports = { const data = await this.postQuery(query) if (data.userLotteries.length == 0) throw { message: `No Wallet` } - let wallets = []; - data.userLotteries.forEach((el) => wallets.push(...Array(el.tickets).fill(el.user))) - return wallets + let tickets = []; + data.userLotteries.forEach((el) => tickets.push(...Array(el.tickets).fill(el.user))) + return { tickets, walletsCount: data.userLotteries.length } }, whoIsWinner: function (seed, wallets) { @@ -125,8 +125,8 @@ module.exports = { case 'winner': let { roundId } = params const seed = await this.getSeed(roundId) - const wallets = await this.getRoundWallets(roundId) - const winners = this.determineWinners(winnersPerRound, wallets, seed) + const { tickets, walletsCount } = await this.getRoundWallets(roundId) + const winners = this.determineWinners(winnersPerRound, tickets, walletsCount, seed) return { roundId, winners } From fec9684d82325d5cf2aa850c190050ed5009c44c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 8 Feb 2023 17:17:00 +0330 Subject: [PATCH 200/406] Fix error messages --- general/dibs.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index a464cff..b3f8ca9 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -48,7 +48,7 @@ module.exports = { throw { message: 'FAILED_TO_FETCH_SEED', detail: e.message } } const { fulfilled, seed } = data - if (!fulfilled || new BN(seed).eq(new BN(0))) throw { message: `No seed` } + if (!fulfilled || new BN(seed).eq(new BN(0))) throw { message: `NO_SEED` } return new BN(seed) }, @@ -66,10 +66,11 @@ module.exports = { }` const data = await this.postQuery(query) - if (data.userLotteries.length == 0) throw { message: `No Wallet` } + if (data.userLotteries.length == 0) throw { message: `NO_WALLETS` } let tickets = []; - data.userLotteries.forEach((el) => tickets.push(...Array(el.tickets).fill(el.user))) + data.userLotteries.forEach((el) => tickets.push(...Array(parseInt(el.tickets)).fill(el.user))) + if (tickets.length == 0) throw { message: 'NO_TICKETS' } return { tickets, walletsCount: data.userLotteries.length } }, From e67514e12b869d70b192f87eb2e940e968e2ff92 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 8 Feb 2023 17:17:46 +0330 Subject: [PATCH 201/406] Get `winnersPerRound` from contract --- general/dibs.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index b3f8ca9..18a14e2 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -6,7 +6,7 @@ const DRSG_ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", " const Dibs = "0x664cE330511653cB2744b8eD50DbA31C6c4C08ca" const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] const DibsLottery = "0x287ed50e4c158dac38e1b7e16c50cd1b2551a300" -const DIBS_LOTTERY_ABI = [] +const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] module.exports = { APP_NAME: 'dibs', @@ -127,6 +127,7 @@ module.exports = { let { roundId } = params const seed = await this.getSeed(roundId) const { tickets, walletsCount } = await this.getRoundWallets(roundId) + const winnersPerRound = await ethCall(DibsLottery, 'winnersPerRound', [], DIBS_LOTTERY_ABI, 56) const winners = this.determineWinners(winnersPerRound, tickets, walletsCount, seed) return { roundId, winners } From f5c57968820cea55cbe8c11763e5d1d8e6375461 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 8 Feb 2023 17:18:04 +0330 Subject: [PATCH 202/406] Implement `determineWinners` --- general/dibs.js | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 18a14e2..f981193 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -74,9 +74,21 @@ module.exports = { return { tickets, walletsCount: data.userLotteries.length } }, - whoIsWinner: function (seed, wallets) { - const winnerTicket = seed.mod(new BN(wallets.length)) - return wallets[winnerTicket] + whoIsWinner: function (seed, tickets) { + const winnerTicket = seed.mod(new BN(tickets.length)) + return tickets[winnerTicket] + }, + + determineWinners: function (winnersPerRound, tickets, walletsCount, seed) { + if (walletsCount <= winnersPerRound) return [...new Set(tickets)] + let winners = [] + for (let i = 0; i < winnersPerRound; i++) { + const winner = this.whoIsWinner(seed, tickets) + winners.push(winner) + tickets = tickets.filter((value) => { return value != winner }) + } + + return winners }, isValidSignature: function (forAddress, time, sign) { From 06d4c5e17921347cf99c60b49c0fb2588fc8072b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 12 Feb 2023 16:07:24 +0330 Subject: [PATCH 203/406] Add `rank` method --- general/dibs.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/general/dibs.js b/general/dibs.js index f981193..5484a22 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -144,6 +144,17 @@ module.exports = { return { roundId, winners } + case 'rank': { + let { user, time, sign } = params + + if (!sign) throw { message: 'Request signature undefined' } + if (!this.isValidSignature(user, time, sign)) throw { message: 'Request signature mismatch' } + + const rank = await fetchUserRank(user) + + return { user, rank } + } + default: throw { message: `Unknown method ${params}` } } @@ -173,6 +184,15 @@ module.exports = { { type: 'address[]', value: winners }, ] + case 'rank': { + let { user, rank } = result + return [ + { type: 'address', value: user }, + { type: 'uint256', value: rank }, + ] + + } + default: break } From df07eea065b8051037f4092f8b4d69ba5c31f26b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 12 Feb 2023 16:12:50 +0330 Subject: [PATCH 204/406] Change `rank` method into `top10` --- general/dibs.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 5484a22..ea35e33 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -115,6 +115,10 @@ module.exports = { return true }, + getTop10: async function (day) { + + }, + onRequest: async function (request) { let { method, @@ -144,16 +148,13 @@ module.exports = { return { roundId, winners } - case 'rank': { - let { user, time, sign } = params + case 'top10': + let { day } = params - if (!sign) throw { message: 'Request signature undefined' } - if (!this.isValidSignature(user, time, sign)) throw { message: 'Request signature mismatch' } + const top10 = await this.getTop10(day) - const rank = await fetchUserRank(user) + return { day, top10 } - return { user, rank } - } default: throw { message: `Unknown method ${params}` } @@ -184,11 +185,11 @@ module.exports = { { type: 'address[]', value: winners }, ] - case 'rank': { - let { user, rank } = result + case 'top10': { + let { day, top10 } = result return [ - { type: 'address', value: user }, - { type: 'uint256', value: rank }, + { type: 'uint256', value: day }, + { type: 'address[]', value: top10 }, ] } From dc113fb96632ebf2ea61c265f7625d3c9052c7dc Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 13 Feb 2023 20:29:43 +0330 Subject: [PATCH 205/406] Implement `getTop10` --- general/dibs.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/general/dibs.js b/general/dibs.js index ea35e33..32f8106 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -116,6 +116,21 @@ module.exports = { }, getTop10: async function (day) { + const query = `{ + top10: dailyGeneratedVolumes(first: 10, where: {day: "${day}"}, orderBy: amountAsReferrer, orderDirection: desc) { + id + user + amountAsReferrer + day + } + }` + + const data = await this.postQuery(query) + + let top10 = [] + data.top10.forEach((el) => top10.push(el.user)) + + return top10 }, From f9430fe271db4a06402879df957b36273c912f60 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 14 Feb 2023 10:14:37 +0330 Subject: [PATCH 206/406] Return `topN` instead of `top10` --- general/dibs.js | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 32f8106..e9f0403 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -115,9 +115,9 @@ module.exports = { return true }, - getTop10: async function (day) { + getTopN: async function (n, day) { const query = `{ - top10: dailyGeneratedVolumes(first: 10, where: {day: "${day}"}, orderBy: amountAsReferrer, orderDirection: desc) { + top10: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer @@ -127,10 +127,10 @@ module.exports = { const data = await this.postQuery(query) - let top10 = [] - data.top10.forEach((el) => top10.push(el.user)) + let topN = [] + data.top10.forEach((el) => topN.push(el.user)) - return top10 + return topN }, @@ -163,13 +163,12 @@ module.exports = { return { roundId, winners } - case 'top10': - let { day } = params + case 'topN': + let { n, day } = params - const top10 = await this.getTop10(day) - - return { day, top10 } + const topN = await this.getTopN(n, day) + return { n, day, topN } default: throw { message: `Unknown method ${params}` } @@ -200,11 +199,12 @@ module.exports = { { type: 'address[]', value: winners }, ] - case 'top10': { - let { day, top10 } = result + case 'topN': { + let { n, day, topN } = result return [ + { type: 'uint256', value: n }, { type: 'uint256', value: day }, - { type: 'address[]', value: top10 }, + { type: 'address[]', value: topN }, ] } From 9bc26d12d1134877d2822421dd8ca4d532d62720 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 20 Feb 2023 09:13:16 +0330 Subject: [PATCH 207/406] Fix methods names --- general/dibs.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index e9f0403..a759b99 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -154,7 +154,7 @@ module.exports = { user, token, balance } - case 'winner': + case 'lotteryWinner': let { roundId } = params const seed = await this.getSeed(roundId) const { tickets, walletsCount } = await this.getRoundWallets(roundId) @@ -163,12 +163,12 @@ module.exports = { return { roundId, winners } - case 'topN': + case 'topLeaderBoardN': let { n, day } = params - const topN = await this.getTopN(n, day) + const topLeaderBoardN = await this.getTopN(n, day) - return { n, day, topN } + return { n, day, topLeaderBoardN } default: throw { message: `Unknown method ${params}` } @@ -192,19 +192,19 @@ module.exports = { { type: 'uint256', value: balance }, ] - case 'winner': + case 'lotteryWinner': let { roundId, winners } = result return [ { type: 'uint32', value: roundId }, { type: 'address[]', value: winners }, ] - case 'topN': { - let { n, day, topN } = result + case 'topLeaderBoardN': { + let { n, day, topLeaderBoardN } = result return [ { type: 'uint256', value: n }, { type: 'uint256', value: day }, - { type: 'address[]', value: topN }, + { type: 'address[]', value: topLeaderBoardN }, ] } From d2c941d2398ab6c4b4205e4a6a1874b52098c90a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 20 Feb 2023 09:20:23 +0330 Subject: [PATCH 208/406] Exclude dibs from winners & topLeaderBoardN --- general/dibs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index a759b99..3d95caa 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -55,7 +55,7 @@ module.exports = { getRoundWallets: async function (roundId) { const query = `{ userLotteries ( - where: {round: "${roundId}"} + where: {round: "${roundId}", user_not: ${Dibs}} orderBy: user ) { id @@ -117,7 +117,7 @@ module.exports = { getTopN: async function (n, day) { const query = `{ - top10: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}}, orderBy: amountAsReferrer, orderDirection: desc) { + top10: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: ${Dibs}}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer From 16d8ace037907d4ffd976d391cf7089c22c48786 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 20 Feb 2023 09:25:38 +0330 Subject: [PATCH 209/406] Change `getTopN` into `getTopLeaderBoardN` --- general/dibs.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 3d95caa..a5eff64 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -115,9 +115,9 @@ module.exports = { return true }, - getTopN: async function (n, day) { + getTopLeaderBoardN: async function (n, day) { const query = `{ - top10: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: ${Dibs}}, orderBy: amountAsReferrer, orderDirection: desc) { + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: ${Dibs}}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer @@ -127,10 +127,10 @@ module.exports = { const data = await this.postQuery(query) - let topN = [] - data.top10.forEach((el) => topN.push(el.user)) + let topLeaderBoardN = [] + data.topLeaderBoardN.forEach((el) => topLeaderBoardN.push(el.user)) - return topN + return topLeaderBoardN }, @@ -166,7 +166,7 @@ module.exports = { case 'topLeaderBoardN': let { n, day } = params - const topLeaderBoardN = await this.getTopN(n, day) + const topLeaderBoardN = await this.getTopLeaderBoardN(n, day) return { n, day, topLeaderBoardN } From 8b7f56ad99613f78ee228b5ffdd2dd008a99535e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 20 Feb 2023 09:33:05 +0330 Subject: [PATCH 210/406] Fix queries --- general/dibs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index a5eff64..9250478 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -55,7 +55,7 @@ module.exports = { getRoundWallets: async function (roundId) { const query = `{ userLotteries ( - where: {round: "${roundId}", user_not: ${Dibs}} + where: {round: "${roundId}", user_not: "${Dibs}"} orderBy: user ) { id @@ -117,7 +117,7 @@ module.exports = { getTopLeaderBoardN: async function (n, day) { const query = `{ - topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: ${Dibs}}, orderBy: amountAsReferrer, orderDirection: desc) { + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer From 42fd9df14883db32bb5bff14c1c7a3406a030ea8 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 25 Feb 2023 11:56:57 +0330 Subject: [PATCH 211/406] test app --- general/tss-test2.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 general/tss-test2.js diff --git a/general/tss-test2.js b/general/tss-test2.js new file mode 100644 index 0000000..4bc2083 --- /dev/null +++ b/general/tss-test2.js @@ -0,0 +1,29 @@ +const {soliditySha3} = MuonAppUtils +const TssApp2 = { + APP_NAME: 'tss2', + useTss: true, + + onRequest: async function (request) { + let {method, data: {params={}}} = request; + switch (method) { + case 'test': + return params.message || 'done'; + case 'data-change': + return Math.random() + default: + throw {message: `invalid method ${method}`} + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'test': + case 'data-change': + return [{type: 'string', value: result.toString()}] + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = TssApp2 From 687ad1a0c6b70e6bf77d9db92387da2df4ea46b8 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 25 Feb 2023 20:44:40 +0330 Subject: [PATCH 212/406] test app --- general/tss-test3.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 general/tss-test3.js diff --git a/general/tss-test3.js b/general/tss-test3.js new file mode 100644 index 0000000..5df84c7 --- /dev/null +++ b/general/tss-test3.js @@ -0,0 +1,29 @@ +const {soliditySha3} = MuonAppUtils +const TssApp3 = { + APP_NAME: 'tss3', + useTss: true, + + onRequest: async function (request) { + let {method, data: {params={}}} = request; + switch (method) { + case 'test': + return params.message || 'done'; + case 'data-change': + return Math.random() + default: + throw {message: `invalid method ${method}`} + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'test': + case 'data-change': + return [{type: 'string', value: result.toString()}] + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = TssApp3 From a57f9839f001287990a9b21a2a1e9490b78c55f5 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 1 Mar 2023 14:40:18 +0330 Subject: [PATCH 213/406] Remove users with zero tickets from query response --- general/dibs.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 9250478..743da04 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -55,12 +55,10 @@ module.exports = { getRoundWallets: async function (roundId) { const query = `{ userLotteries ( - where: {round: "${roundId}", user_not: "${Dibs}"} + where: {round: "${roundId}", user_not: "${Dibs}", ticket_gt: "0"} orderBy: user ) { - id user, - round, tickets } }` From 9e728afc52700857cd7abf4fce8c4b27baa2cc34 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 1 Mar 2023 14:56:25 +0330 Subject: [PATCH 214/406] Handle more than 1000 wallets --- general/dibs.js | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 743da04..af62ae1 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -52,10 +52,10 @@ module.exports = { return new BN(seed) }, - getRoundWallets: async function (roundId) { + createTicketsQuery: function (roundId, lastUser) { const query = `{ userLotteries ( - where: {round: "${roundId}", user_not: "${Dibs}", ticket_gt: "0"} + first: 1000, where: { round: "${roundId}", user_not: "${Dibs}", user_gt: "${lastUser}", tickets_gt: "0"} orderBy: user ) { user, @@ -63,13 +63,26 @@ module.exports = { } }` - const data = await this.postQuery(query) - if (data.userLotteries.length == 0) throw { message: `NO_WALLETS` } + return query + }, + + getRoundWallets: async function (roundId) { + let lastUser = '0x0000000000000000000000000000000000000000' + let tickets = [] + let walletsCount = 0 + + do { + const query = this.createTicketsQuery(roundId, lastUser) + const data = await this.postQuery(query) + if (data.userLotteries.length == 0) break + data.userLotteries.forEach((el) => tickets.push(...Array(parseInt(el.tickets)).fill(el.user))) + lastUser = tickets.at(-1) + walletsCount += data.userLotteries.length + } while (walletsCount % 1000 == 0) - let tickets = []; - data.userLotteries.forEach((el) => tickets.push(...Array(parseInt(el.tickets)).fill(el.user))) if (tickets.length == 0) throw { message: 'NO_TICKETS' } - return { tickets, walletsCount: data.userLotteries.length } + + return { tickets, walletsCount } }, whoIsWinner: function (seed, tickets) { From f5a9118863a95c83936dbd1d75a8c1843c5fc374 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 1 Mar 2023 15:26:52 +0330 Subject: [PATCH 215/406] Change `getRoundWallets` to `getRoundTickets` --- general/dibs.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index af62ae1..8f7dfe8 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -66,7 +66,7 @@ module.exports = { return query }, - getRoundWallets: async function (roundId) { + getRoundTickets: async function (roundId) { let lastUser = '0x0000000000000000000000000000000000000000' let tickets = [] let walletsCount = 0 @@ -168,7 +168,7 @@ module.exports = { case 'lotteryWinner': let { roundId } = params const seed = await this.getSeed(roundId) - const { tickets, walletsCount } = await this.getRoundWallets(roundId) + const { tickets, walletsCount } = await this.getRoundTickets(roundId) const winnersPerRound = await ethCall(DibsLottery, 'winnersPerRound', [], DIBS_LOTTERY_ABI, 56) const winners = this.determineWinners(winnersPerRound, tickets, walletsCount, seed) From d949af16e41ef43d7f95bdda7b80efec78cb01ec Mon Sep 17 00:00:00 2001 From: "farazfo@yahoo.com" <11iloveu005> Date: Wed, 1 Mar 2023 18:42:01 +0330 Subject: [PATCH 216/406] test app price --- general/price-test.js | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 general/price-test.js diff --git a/general/price-test.js b/general/price-test.js new file mode 100644 index 0000000..5bf7948 --- /dev/null +++ b/general/price-test.js @@ -0,0 +1,37 @@ +const {axios} = MuonAppUtils; + +module.exports = { + APP_NAME: 'price_test', + + onRequest: async function (request) { + let {method, data: {params}} = request; + switch (method) { + case 'get_price': + const currencyName = params.currency; + const response = await axios + .get(`https://api.coingecko.com/api/v3/simple/price?ids=${currencyName}&vs_currencies=usd`); + let price = response.data; + if (price[currencyName]) + price = parseInt(price[currencyName]["usd"] * 1000000); + else + throw `get price failed`; + return {price}; + + default: + throw `Unknown method ${method}` + } + }, + + signParams: function (request, result) { + let {method} = request; + let {price} = result; + switch (method) { + case 'get_price': + return [ + {type: 'uint32', value: price} + ]; + default: + throw `Unknown method '${method}'` + } + } +}; \ No newline at end of file From 6a031614a5c18c1f2239287785b8c30ca88a94ea Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 2 Mar 2023 19:12:51 +0330 Subject: [PATCH 217/406] Update crypto_v3 --- general/crypto_v3.js | 131 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 113 insertions(+), 18 deletions(-) diff --git a/general/crypto_v3.js b/general/crypto_v3.js index 3adcaf9..d896afa 100644 --- a/general/crypto_v3.js +++ b/general/crypto_v3.js @@ -1,31 +1,38 @@ const { axios, BN, toBaseUnit, ethCall } = MuonAppUtils -const ETH = new BN(toBaseUnit('1', 18)) +const HttpsProxyAgent = require('https-proxy-agent'); +const scale = new BN(toBaseUnit('1', 18)) +const ZERO = new BN(0) const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) -const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "quoteIds", "type": "uint256[]" }], "name": "symbolNameByQuoteId", "outputs": [{ "internalType": "string[]", "name": "", "type": "string[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], "name": "nonceOfPartyA", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }], "name": "nonceOfPartyB", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], "name": "partyAPositionsCount", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }], "name": "partyBPositionsCount", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "getPartyAOpenPositions", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedOpenLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "openSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "closeSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "lockedValues", "type": "tuple" }, { "internalType": "uint256", "name": "maxInterestRate", "type": "uint256" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedCloseLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, { "internalType": "uint256", "name": "parentId", "type": "uint256" }, { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "modifyTimestamp", "type": "uint256" }], "internalType": "struct Quote[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "getPartyBOpenPositions", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedOpenLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "openSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "closeSlippage", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "lockedValues", "type": "tuple" }, { "internalType": "uint256", "name": "maxInterestRate", "type": "uint256" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedCloseLimitPrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, { "internalType": "uint256", "name": "parentId", "type": "uint256" }, { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "modifyTimestamp", "type": "uint256" }], "internalType": "struct Quote[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const v3Contract = "0xd966Dd36DdCE09F09f7141E93B78C8edb3a3c3CB" +const ABI = [{ "inputs": [{ "internalType": "uint256[]", "name": "quoteIds", "type": "uint256[]" }], "name": "symbolNameByQuoteId", "outputs": [{ "internalType": "string[]", "name": "", "type": "string[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], "name": "nonceOfPartyA", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }], "name": "nonceOfPartyB", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], "name": "partyAPositionsCount", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }], "name": "partyBPositionsCount", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "getPartyAOpenPositions", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, { "internalType": "enum OrderType", "name": "orderType", "type": "uint8" }, { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedOpenPrice", "type": "uint256" }, { "internalType": "uint256", "name": "marketPrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "initialLockedValues", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "lockedValues", "type": "tuple" }, { "internalType": "uint256", "name": "maxInterestRate", "type": "uint256" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedClosePrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, { "internalType": "uint256", "name": "parentId", "type": "uint256" }, { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "modifyTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }], "internalType": "struct Quote[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "getPartyBOpenPositions", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, { "internalType": "enum OrderType", "name": "orderType", "type": "uint8" }, { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedOpenPrice", "type": "uint256" }, { "internalType": "uint256", "name": "marketPrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "initialLockedValues", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "cva", "type": "uint256" }, { "internalType": "uint256", "name": "mm", "type": "uint256" }, { "internalType": "uint256", "name": "lf", "type": "uint256" }], "internalType": "struct LockedValues", "name": "lockedValues", "type": "tuple" }, { "internalType": "uint256", "name": "maxInterestRate", "type": "uint256" }, { "internalType": "address", "name": "partyA", "type": "address" }, { "internalType": "address", "name": "partyB", "type": "address" }, { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, { "internalType": "uint256", "name": "requestedClosePrice", "type": "uint256" }, { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, { "internalType": "uint256", "name": "parentId", "type": "uint256" }, { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "modifyTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }], "internalType": "struct Quote[]", "name": "", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const v3Contract = "0x21DD2e60C0701A1eB13fb7d5d6dbF5b2A70A6b74" const UPNL_TOLERANCE = scaleUp('0.001') const PRICE_TOLERANCE = scaleUp('0.001') const minusOne = new BN(-1) +const proxy = process.env.PROXY + module.exports = { APP_NAME: 'crypto_v3', isPriceToleranceOk: function (price, expectedPrice, priceTolerance) { let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - const priceDiffPercentage = new BN(priceDiff).mul(ETH).div(new BN(expectedPrice)) + const priceDiffPercentage = new BN(priceDiff).mul(scale).div(new BN(expectedPrice)) return { isOk: !priceDiffPercentage.gt(new BN(priceTolerance)), - priceDiffPercentage: priceDiffPercentage.mul(new BN(100)).div(ETH) + priceDiffPercentage: priceDiffPercentage.mul(new BN(100)).div(scale) } }, isUpnlToleranceOk: function (uPnl, expectedUpnl, notionalValueSum, uPnlTolerance) { + if (new BN(notionalValueSum).eq(ZERO)) + return { isOk: new BN(expectedUpnl).eq(ZERO) } + let uPnlDiff = new BN(uPnl).sub(new BN(expectedUpnl)).abs() - const uPnlDiffInNotionalValue = uPnlDiff.mul(ETH).div(new BN(notionalValueSum)) + const uPnlDiffInNotionalValue = uPnlDiff.mul(scale).div(new BN(notionalValueSum)) return { isOk: !uPnlDiffInNotionalValue.gt(new BN(uPnlTolerance)), - uPnlDiffInNotionalValue: uPnlDiffInNotionalValue.mul(new BN(100)).div(ETH) + uPnlDiffInNotionalValue: uPnlDiffInNotionalValue.mul(new BN(100)).div(scale) } }, @@ -37,7 +44,10 @@ module.exports = { getPrices: async function (symbols) { const binanceUrl = 'https://fapi.binance.com/fapi/v1/premiumIndex' - const { data } = await axios.get(binanceUrl) + const { data } = await axios.get(binanceUrl, { + proxy: false, + httpsAgent: new HttpsProxyAgent.HttpsProxyAgent(proxy) + }) const pricesMap = {} data.forEach((el) => { if (symbols.includes(el.symbol)) @@ -68,8 +78,8 @@ module.exports = { const amount = new BN(position.quantity).sub(new BN(position.closedAmount)) const longPositionUpnl = amount.mul(priceDiff) const positionUpnl = position.positionType == '0' ? longPositionUpnl : minusOne.mul(longPositionUpnl) - uPnl = uPnl.add(positionUpnl.div(ETH)) - const positionNotionalValue = amount.mul(openedPrice).div(ETH) + uPnl = uPnl.add(positionUpnl.div(scale)) + const positionNotionalValue = amount.mul(openedPrice).div(scale) notionalValueSum = notionalValueSum.add(positionNotionalValue) } return { uPnl, notionalValueSum } @@ -104,13 +114,25 @@ module.exports = { return { openPositions, quoteIds } }, + filterPositions: function (partyB, mixedOpenPositions) { + let quoteIds = [] + let openPositions = [] + mixedOpenPositions.forEach((position) => { + if (position.partyB == partyB) { + openPositions.push(position) + quoteIds.push(position.id) + } + }) + return { openPositions, quoteIds } + }, + uPnlPartyA: async function (partyA, chainId) { const { openPositions, quoteIds } = await this.fetchOpenPositions({ partyA }, 'A', chainId) const { prices, pricesMap } = await this.fetchPrices(quoteIds, chainId) const { uPnl, notionalValueSum } = await this.calculateUpnl(openPositions, prices) const nonce = await ethCall(v3Contract, 'nonceOfPartyA', [partyA], ABI, chainId) - return { uPnl: uPnl.toString(), notionalValueSum: notionalValueSum.toString(), nonce, pricesMap, prices, quoteIds } + return { uPnl: uPnl.toString(), notionalValueSum: notionalValueSum.toString(), nonce, pricesMap, prices, quoteIds, openPositions } }, uPnlPartyB: async function (partyB, partyA, chainId) { @@ -122,19 +144,30 @@ module.exports = { return { uPnl: minusOne.mul(uPnl).toString(), notionalValueSum: notionalValueSum.toString(), nonce, pricesMap, prices, quoteIds } }, - uPnlPartyB_FetchedPrices: async function (partyB, partyA, chainId, pricesMap) { - const { openPositions, quoteIds } = await this.fetchOpenPositions({ partyB, partyA }, 'B', chainId) - const symbols = await this.getSymbols(quoteIds, chainId) - const prices = this.createPricesList(symbols, pricesMap) - const { uPnl, notionalValueSum } = await this.calculateUpnl(openPositions, prices) + uPnlPartyB_FetchedData: async function (partyB, partyA, chainId, pricesMap, mixedOpenPositions) { + const { openPositions, quoteIds } = this.filterPositions(partyB, mixedOpenPositions) + let uPnl, notionalValueSum, prices + if (openPositions.length > 0) { + const symbols = await this.getSymbols(quoteIds, chainId) + prices = this.createPricesList(symbols, pricesMap) + const result = await this.calculateUpnl(openPositions, prices) + uPnl = result.uPnl + notionalValueSum = result.notionalValueSum + } + else { + uPnl = notionalValueSum = new BN(0) + prices = [] + } + const nonce = await ethCall(v3Contract, 'nonceOfPartyB', [partyB, partyA], ABI, chainId) return { uPnl, notionalValueSum, nonce, prices, quoteIds } }, uPnlParties: async function (partyB, partyA, chainId) { - const { uPnl: uPnlA, nonce: nonceA, notionalValueSum: notionalValueSumA, pricesMap, prices: pricesA, quoteIds: quoteIdsA } = await this.uPnlPartyA(partyA, chainId) - const { uPnl: uPnlB, nonce: nonceB, notionalValueSum: notionalValueSumB, prices: pricesB, quoteIds: quoteIdsB } = await this.uPnlPartyB_FetchedPrices(partyB, partyA, chainId, pricesMap) + if (partyB == partyA) throw { message: 'Identical Parties Error' } + const { uPnl: uPnlA, nonce: nonceA, notionalValueSum: notionalValueSumA, pricesMap, prices: pricesA, quoteIds: quoteIdsA, openPositions } = await this.uPnlPartyA(partyA, chainId) + const { uPnl: uPnlB, nonce: nonceB, notionalValueSum: notionalValueSumB, prices: pricesB, quoteIds: quoteIdsB } = await this.uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, openPositions) return { uPnlB: minusOne.mul(uPnlB).toString(), uPnlA, notionalValueSumB: notionalValueSumB.toString(), notionalValueSumA, nonceB, nonceA, pricesMap, pricesB, pricesA, quoteIdsB, quoteIdsA } }, @@ -148,9 +181,20 @@ module.exports = { case 'uPnl_A': { let { partyA, chainId } = params const result = await this.uPnlPartyA(partyA, chainId) + delete result.openPositions return Object.assign({}, { chainId, partyA }, result) } + case 'uPnl_A_withPrice': { + let { partyA, chainId, quoteId } = params + const result = await this.uPnlPartyA(partyA, chainId) + let price = result.prices[result.quoteIds.indexOf(quoteId)] + if (price == undefined) throw { message: 'Invalid quoteId' } + delete result.openPositions + return Object.assign({}, { chainId, partyA, quoteId, price }, result) + + } + case 'uPnl_B': { let { partyB, partyA, chainId } = params const result = await this.uPnlPartyB(partyB, partyA, chainId) @@ -163,6 +207,14 @@ module.exports = { return Object.assign({}, { chainId, partyB, partyA }, result) } + case 'uPnlWithPrice': { + let { partyB, partyA, chainId, quoteId } = params + const result = await this.uPnlParties(partyB, partyA, chainId) + let price = result.pricesA[result.quoteIdsA.indexOf(quoteId)] + if (price == undefined) throw { message: 'Invalid quoteId' } + return Object.assign({}, { chainId, partyB, partyA, quoteId, price }, result) + } + case 'price': { let { quoteIds, chainId } = params @@ -200,6 +252,25 @@ module.exports = { ] } + case 'uPnl_A_withPrice': { + let { partyA, uPnl, quoteId, price, notionalValueSum, nonce, chainId } = result + + if (!this.isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + if (!this.isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) + throw { message: `Price Tolerance Error` } + + return [ + { type: 'address', value: partyA }, + { type: 'uint256', value: nonce }, + { type: 'int256', value: request.data.result.uPnl }, + { type: 'uint256', value: quoteId }, + { type: 'uint256', value: request.data.result.price }, + { type: 'uint256', value: request.data.timestamp }, + { type: 'uint256', value: chainId }, + ] + } + case 'uPnl_B': { let { partyB, partyA, uPnl, notionalValueSum, nonce, chainId } = result @@ -236,6 +307,30 @@ module.exports = { ] } + case 'uPnlWithPrice': { + let { partyB, partyA, uPnlB, uPnlA, quoteId, price, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId } = result + + if (!this.isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + if (!this.isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw { message: 'uPnl Tolerance Error' } + if (!this.isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) + throw { message: `Price Tolerance Error` } + + return [ + { type: 'address', value: partyB }, + { type: 'address', value: partyA }, + { type: 'uint256', value: nonceB }, + { type: 'uint256', value: nonceA }, + { type: 'int256', value: request.data.result.uPnlB }, + { type: 'int256', value: request.data.result.uPnlA }, + { type: 'uint256', value: quoteId }, + { type: 'uint256', value: request.data.result.price }, + { type: 'uint256', value: request.data.timestamp }, + { type: 'uint256', value: chainId }, + ] + } + case 'price': { let { quoteIds, prices, chainId } = result From 3e89a65c435155800ac82316bdc0ef1f8a3788bf Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 4 Mar 2023 10:09:49 +0330 Subject: [PATCH 218/406] cleaned up old apps --- general/aggregate_oracles.js | 125 - general/aggregate_oracles_dei.js | 94 - .../beetsfi_permissionless_oracles_vwap_v3.js | 1300 ----- general/carebig.js | 66 - general/dei_price.js | 179 - general/deus_bridge.js | 106 - general/deus_oracle.js | 50 - general/deus_twap.js | 175 - general/dex_oracle_constants.js | 486 -- general/eth.js | 59 - general/fear_presale.js | 4211 ----------------- general/gamestarter.js | 61 - general/mmac_bridge.js | 83 - general/muon-bridge.js | 155 - general/nft_oracles_opensea.js | 271 -- general/parent_oracles.constant.json | 586 --- general/parent_oracles_v2.js | 794 ---- general/parent_oracles_v3.js | 785 --- general/permissionless_oracles_vwap_v2.js | 36 - general/permissionless_oracles_vwap_v3.js | 13 - general/random_nft.js | 85 - general/redeem-oracle.js | 94 - .../solidly_permissionless_oracles_vwap.js | 469 -- ...olidly_permissionless_oracles_vwap_fair.js | 473 -- ...dly_permissionless_oracles_vwap_fair_v2.js | 8 - .../solidly_permissionless_oracles_vwap_v2.js | 15 - general/spirit_permissionless_oracles_vwap.js | 568 --- .../spirit_permissionless_oracles_vwap_v2.js | 13 - .../spirit_permissionless_oracles_vwap_v3.js | 13 - general/spooky_permissionless_oracles_vwap.js | 16 - .../spooky_permissionless_oracles_vwap_v2.js | 15 - general/sushi_permissionless_oracles_vwap.js | 591 --- .../sushi_permissionless_oracles_vwap_v2.js | 26 - general/synchronizer-oracle.js | 105 - general/test_rng.js | 83 - .../traderjoe_permissionless_oracles_vwap.js | 15 - ...raderjoe_permissionless_oracles_vwap_v2.js | 14 - general/tron-sample-app.js | 60 - .../uniswapv2_permissionless_oracles_vwap.js | 559 --- ...niswapv2_permissionless_oracles_vwap_v2.js | 14 - general/webpack-test.js | 958 ---- general_test/aggregate_oracles_dei_test.js | 31 - general_test/aggregate_oracles_test.js | 256 - general_test/deus_twap_test.js | 20 - general_test/nft_oracles_opensea_test.js | 42 - .../permissionless_oracles_vwap_v2_test.js | 221 - .../permissionless_oracles_vwap_v3_test.js | 220 - ...y_permissionless_oracles_vwap_fair_test.js | 45 - ...ermissionless_oracles_vwap_fair_v2_test.js | 81 - ...olidly_permissionless_oracles_vwap_test.js | 45 - ...dly_permissionless_oracles_vwap_v2_test.js | 80 - ...spirit_permissionless_oracles_vwap_test.js | 52 - ...rit_permissionless_oracles_vwap_v2_test.js | 80 - ...rit_permissionless_oracles_vwap_v3_test.js | 80 - ...spooky_permissionless_oracles_vwap_test.js | 43 - ...oky_permissionless_oracles_vwap_v2_test.js | 64 - ...shi_permissionless_oracles_vwap_v2_test.js | 65 - ...pv2_permissionless_oracles_vwap_v2_test.js | 64 - 58 files changed, 15318 deletions(-) delete mode 100644 general/aggregate_oracles.js delete mode 100644 general/aggregate_oracles_dei.js delete mode 100644 general/beetsfi_permissionless_oracles_vwap_v3.js delete mode 100644 general/carebig.js delete mode 100644 general/dei_price.js delete mode 100644 general/deus_bridge.js delete mode 100644 general/deus_oracle.js delete mode 100644 general/deus_twap.js delete mode 100644 general/dex_oracle_constants.js delete mode 100644 general/eth.js delete mode 100644 general/fear_presale.js delete mode 100644 general/gamestarter.js delete mode 100644 general/mmac_bridge.js delete mode 100644 general/muon-bridge.js delete mode 100644 general/nft_oracles_opensea.js delete mode 100644 general/parent_oracles.constant.json delete mode 100644 general/parent_oracles_v2.js delete mode 100644 general/parent_oracles_v3.js delete mode 100644 general/permissionless_oracles_vwap_v2.js delete mode 100644 general/permissionless_oracles_vwap_v3.js delete mode 100644 general/random_nft.js delete mode 100644 general/redeem-oracle.js delete mode 100644 general/solidly_permissionless_oracles_vwap.js delete mode 100644 general/solidly_permissionless_oracles_vwap_fair.js delete mode 100644 general/solidly_permissionless_oracles_vwap_fair_v2.js delete mode 100644 general/solidly_permissionless_oracles_vwap_v2.js delete mode 100644 general/spirit_permissionless_oracles_vwap.js delete mode 100644 general/spirit_permissionless_oracles_vwap_v2.js delete mode 100644 general/spirit_permissionless_oracles_vwap_v3.js delete mode 100644 general/spooky_permissionless_oracles_vwap.js delete mode 100644 general/spooky_permissionless_oracles_vwap_v2.js delete mode 100644 general/sushi_permissionless_oracles_vwap.js delete mode 100644 general/sushi_permissionless_oracles_vwap_v2.js delete mode 100644 general/synchronizer-oracle.js delete mode 100644 general/test_rng.js delete mode 100644 general/traderjoe_permissionless_oracles_vwap.js delete mode 100644 general/traderjoe_permissionless_oracles_vwap_v2.js delete mode 100644 general/tron-sample-app.js delete mode 100644 general/uniswapv2_permissionless_oracles_vwap.js delete mode 100644 general/uniswapv2_permissionless_oracles_vwap_v2.js delete mode 100644 general/webpack-test.js delete mode 100644 general_test/aggregate_oracles_dei_test.js delete mode 100644 general_test/aggregate_oracles_test.js delete mode 100644 general_test/deus_twap_test.js delete mode 100644 general_test/nft_oracles_opensea_test.js delete mode 100644 general_test/permissionless_oracles_vwap_v2_test.js delete mode 100644 general_test/permissionless_oracles_vwap_v3_test.js delete mode 100644 general_test/solidly_permissionless_oracles_vwap_fair_test.js delete mode 100644 general_test/solidly_permissionless_oracles_vwap_fair_v2_test.js delete mode 100644 general_test/solidly_permissionless_oracles_vwap_test.js delete mode 100644 general_test/solidly_permissionless_oracles_vwap_v2_test.js delete mode 100644 general_test/spirit_permissionless_oracles_vwap_test.js delete mode 100644 general_test/spirit_permissionless_oracles_vwap_v2_test.js delete mode 100644 general_test/spirit_permissionless_oracles_vwap_v3_test.js delete mode 100644 general_test/spooky_permissionless_oracles_vwap_test.js delete mode 100644 general_test/spooky_permissionless_oracles_vwap_v2_test.js delete mode 100644 general_test/sushi_permissionless_oracles_vwap_v2_test.js delete mode 100644 general_test/uniswapv2_permissionless_oracles_vwap_v2_test.js diff --git a/general/aggregate_oracles.js b/general/aggregate_oracles.js deleted file mode 100644 index 12f30aa..0000000 --- a/general/aggregate_oracles.js +++ /dev/null @@ -1,125 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall, flatten, groupBy } = - MuonAppUtils -const ParentOraclesV2 = require('./parent_oracles_v2') -const { - Info_ABI, - STABLE_EXCHANGES, - GRAPH_URL, - GRAPH_DEPLOYMENT_ID -} = require('./parent_oracles.constant.json') -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'aggregate_oracles', - APP_ID: 30, - config: APP_CONFIG, - - makeCallContextInfo: function (pairs, prefix) { - let calls = [] - let pairCache = [] - - pairs.forEach((pair, index) => { - pair.forEach((item) => { - if (!pairCache.includes(item.address)) { - pairCache.push(item.address) - const stableCall = STABLE_EXCHANGES.includes(item.exchange) - ? [ - { - reference: prefix + ':' + item.address, - methodName: 'stable' - } - ] - : [] - calls.push({ - reference: prefix + '_' + item.exchange + ':' + item.address, - contractAddress: item.address, - abi: Info_ABI, - calls: [ - { - reference: prefix + ':' + item.address, - methodName: 'getReserves' - }, - { - reference: prefix + ':' + item.address, - methodName: 'token0' - }, - { - reference: prefix + ':' + item.address, - methodName: 'token1' - }, - ...stableCall - ], - context: { - // pairIndex: index, - pair: item.address, - exchange: item.exchange, - chainId: item.chainId - } - }) - } - }) - }) - return calls - }, - - prepareTokenTx: async function (pair, exchange, start, end, chainId) { - if (exchange === 'sushi') { - const tokenTxs = await this.getTokenTxs( - pair, - GRAPH_URL[exchange][chainId], - GRAPH_DEPLOYMENT_ID[exchange][chainId], - start, - end - ) - return tokenTxs - } - const tokenTxs = await this.getTokenTxs( - pair, - GRAPH_URL[exchange], - GRAPH_DEPLOYMENT_ID[exchange], - start, - end - ) - - return tokenTxs - }, - preparePromisePair: function (token, pairs, metadata, start, end) { - return pairs.map((info) => { - let inputToken = token - return this.makePromisePair(inputToken, info, metadata, start, end) - }) - }, - - calculatePriceToken: function (pairVWAPs, pairs) { - let sumVolume = new BN(0) - let sumWeightedPrice = new BN('0') - pairs.forEach((pair) => { - let volume = pair.reduce((previousValue, currentValue) => { - const result = pairVWAPs.find( - (item) => item.pair.address === currentValue.address - ) - return previousValue.add(result.sumVolume) - }, new BN(0)) - let price = pair.reduce((price, currentValue) => { - const result = pairVWAPs.find( - (item) => item.pair.address === currentValue.address - ) - return price.mul(result.tokenPrice).div(this.SCALE) - }, new BN(this.SCALE)) - // TODO double check to be sure we need sum all exchange not avg - sumVolume = sumVolume.add(volume) - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - }) - // TODO this formula is correct - let weightedAvg = sumWeightedPrice.div(sumVolume) - if (sumVolume.toString() == '0' || weightedAvg.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - - return { price: weightedAvg, volume: sumVolume } - } -} diff --git a/general/aggregate_oracles_dei.js b/general/aggregate_oracles_dei.js deleted file mode 100644 index 667f67a..0000000 --- a/general/aggregate_oracles_dei.js +++ /dev/null @@ -1,94 +0,0 @@ -const { soliditySha3 } = MuonAppUtils -const AgggregatedOracles = require('./aggregate_oracles') - -const APP_CONFIG = { - chainId: 250 -} - -const INPUT_PARAMS = { - token: '0xDE12c7959E1a72bbe8a5f7A1dc8f8EeF9Ab011B3', - pairs: [ - [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' - } - ], - [ - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' - } - ], - [ - { - exchange: 'spooky', - chainId: '250', - address: '0xD343b8361Ce32A9e570C1fC8D4244d32848df88B' - } - ] - ] -} - -module.exports = { - ...AgggregatedOracles, - - APP_NAME: 'aggregate_oracles_dei', - APP_ID: 41, - config: APP_CONFIG, - - onRequest: async function (request) { - let { method } = request - - let params = INPUT_PARAMS - - switch (method) { - case 'price': - let { token, pairs, hashTimestamp, chainId, start, end } = params - if (chainId) { - this.config = { ...this.config, chainId } - } - let { price, volume } = await this.tokenVWAP( - token, - pairs, - null, - start, - end - ) - return { - token: token, - tokenPrice: price.toString(), - volume: volume.toString(), - timestamp: request.data.timestamp - } - } - }, - - hashRequestResult: function (request, result) { - let { method } = request - let params = INPUT_PARAMS - switch (method) { - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, chainId, start, end } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'uint256', value: request.data.result.tokenPrice }, - { type: 'uint256', value: request.data.timestamp } - ]) - } - default: - return null - } - } -} diff --git a/general/beetsfi_permissionless_oracles_vwap_v3.js b/general/beetsfi_permissionless_oracles_vwap_v3.js deleted file mode 100644 index dad0657..0000000 --- a/general/beetsfi_permissionless_oracles_vwap_v3.js +++ /dev/null @@ -1,1300 +0,0 @@ -const { Web3, BigNumber, axios } = MuonAppUtils - -const ParentOraclesV3 = require('./parent_oracles_v3') -const { - GET_POOL_INFO_ABI, - PAIRS, - POOL_TOKENS_ABI, - ERC20_DECIMALS_ABI, - STABLE, - WEIGHTED, - GRAPH_URL, - GRAPH_DEPLOYMENT_ID -} = require('./parent_oracles.constant.json') - -const APP_CONFIG = { - chainId: 250 -} - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const bn = (value) => new BigNumber(value) - -const ZERO = bn(0) -const ONE = bn(1) -const TWO = bn(2) - -// All arguments and return values are 18 decimal fixed point numbers -const ONE_18 = bn('1000000000000000000') // 1e18 - -// Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the case of ln36, 36 decimals -const ONE_20 = bn('100000000000000000000') // 1e20 -const ONE_36 = bn('1000000000000000000000000000000000000') // 1e36 - -// The domain of natural exponentiation is bound by the word size and number of decimals used -// Because internally the result will be stored using 20 decimals, the largest possible result is -// (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221 -// The smallest possible result is 10^(-18), which makes largest negative argument -// ln(10^(-18)) = -41.446531673892822312. -// We use 130.0 and -41.0 to have some safety margin -const MAX_NATURAL_EXPONENT = bn('130000000000000000000') // 130e18 -const MIN_NATURAL_EXPONENT = bn('-41000000000000000000') // (-41)e18 - -// Bounds for ln_36's argument -// Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point 256 bit integer -const LN_36_LOWER_BOUND = ONE_18.minus(bn('100000000000000000')) // 1e18 - 1e17 -const LN_36_UPPER_BOUND = ONE_18.plus(bn('100000000000000000')) // 1e18 + 1e17 - -const MILD_EXPONENT_BOUND = bn(2).pow(254).idiv(ONE_20) - -// 18 decimal constants -const x0 = bn('128000000000000000000') // 2ˆ7 -const a0 = bn('38877084059945950922200000000000000000000000000000000000') // eˆ(x0) (no decimals) -const x1 = bn('64000000000000000000') // 2ˆ6 -const a1 = bn('6235149080811616882910000000') // eˆ(x1) (no decimals) - -// 20 decimal constants -const x2 = bn('3200000000000000000000') // 2ˆ5 -const a2 = bn('7896296018268069516100000000000000') // eˆ(x2) -const x3 = bn('1600000000000000000000') // 2ˆ4 -const a3 = bn('888611052050787263676000000') // eˆ(x3) -const x4 = bn('800000000000000000000') // 2ˆ3 -const a4 = bn('298095798704172827474000') // eˆ(x4) -const x5 = bn('400000000000000000000') // 2ˆ2 -const a5 = bn('5459815003314423907810') // eˆ(x5) -const x6 = bn('200000000000000000000') // 2ˆ1 -const a6 = bn('738905609893065022723') // eˆ(x6) -const x7 = bn('100000000000000000000') // 2ˆ0 -const a7 = bn('271828182845904523536') // eˆ(x7) -const x8 = bn('50000000000000000000') // 2ˆ(-1) -const a8 = bn('164872127070012814685') // eˆ(x8) -const x9 = bn('25000000000000000000') // 2ˆ(-2) -const a9 = bn('128402541668774148407') // eˆ(x9) -const x10 = bn('12500000000000000000') // 2ˆ(-3) -const a10 = bn('113314845306682631683') // eˆ(x10) -const x11 = bn('6250000000000000000') // 2ˆ(-4) -const a11 = bn('106449445891785942956') // eˆ(x11) - -const MAX_POW_RELATIVE_ERROR = bn(10000) // 10^(-14) - -const div = (a, b, roundUp) => { - return roundUp ? divUp(a, b) : divDown(a, b) -} - -const divDown = (a, b) => { - if (b.isZero()) { - throw new Error('ZERO_DIVISION') - } - return a.idiv(b) -} - -const divUp = (a, b) => { - if (b.isZero()) { - throw new Error('ZERO_DIVISION') - } - return a.isZero() ? ZERO : ONE.plus(a.minus(ONE).idiv(b)) -} - -const fpMulDown = (a, b) => { - return a.times(b).idiv(ONE_18) -} - -const fpMulUp = (a, b) => { - const product = a.times(b) - if (product.isZero()) { - return product - } else { - // The traditional divUp formula is: - // divUp(x, y) := (x + y - 1) / y - // To avoid intermediate overflow in the addition, we distribute the division and get: - // divUp(x, y) := (x - 1) / y + 1 - // Note that this requires x != 0, which we already tested for - - return product.minus(bn(1)).idiv(ONE_18).plus(bn(1)) - } -} - -const fpDivDown = (a, b) => { - if (b.isZero()) { - throw new Error('ZERO_DIVISION') - } - if (a.isZero()) { - return a - } else { - return a.times(ONE_18).idiv(b) - } -} - -const fpDivUp = (a, b) => { - if (b.isZero()) { - throw new Error('ZERO_DIVISION') - } - if (a.isZero()) { - return a - } else { - // The traditional divUp formula is: - // divUp(x, y) := (x + y - 1) / y - // To avoid intermediate overflow in the addition, we distribute the division and get: - // divUp(x, y) := (x - 1) / y + 1 - // Note that this requires x != 0, which we already tested for. - - return a.times(ONE_18).minus(bn(1)).idiv(b).plus(bn(1)) - } -} - -const logExpPow = (x, y) => { - if (y.isZero()) { - // We solve the 0^0 indetermination by making it equal one. - return ONE_18 - } - - if (x.isZero()) { - return bn(0) - } - - // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to - // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means - // x^y = exp(y * ln(x)). - - // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range. - if (x.gte(bn(2).pow(255))) { - throw new Error('X_OUT_OF_BOUNDS') - } - - // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In - // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end. - - // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range. - if (y.gte(MILD_EXPONENT_BOUND)) { - throw new Error('Y_OUT_OF_BOUNDS') - } - - let logx_times_y - if (LN_36_LOWER_BOUND.lt(x) && x.lt(LN_36_UPPER_BOUND)) { - let ln_36_x = _ln_36(x) - - // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just - // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal - // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the - // (downscaled) last 18 decimals. - logx_times_y = ln_36_x - .idiv(ONE_18) - .times(y) - .plus(ln_36_x.mod(ONE_18).times(y).idiv(ONE_18)) - } else { - logx_times_y = _ln(x).times(y) - } - logx_times_y = logx_times_y.idiv(ONE_18) - - // Finally, we compute exp(y * ln(x)) to arrive at x^y - if ( - logx_times_y.lt(MIN_NATURAL_EXPONENT) || - logx_times_y.gt(MAX_NATURAL_EXPONENT) - ) { - throw new Error('PRODUCT_OUT_OF_BOUNDS') - } - - return exp(logx_times_y) -} - -const exp = (x) => { - if (x.lt(MIN_NATURAL_EXPONENT) || x.gt(MAX_NATURAL_EXPONENT)) { - throw new Error('INVALID_EXPONENT') - } - - if (x.lt(0)) { - // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it - // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). - // Fixed point division requires multiplying by ONE_18. - return ONE_18.times(ONE_18).idiv(exp(x.negated())) - } - - // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n, - // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7 - // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the - // decomposition. - // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this - // decomposition, which will be lower than the smallest x_n. - // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1. - // We mutate x by subtracting x_n, making it the remainder of the decomposition. - - // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause - // intermediate overflows. Instead we store them as plain integers, with 0 decimals. - // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the - // decomposition. - - // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct - // it and compute the accumulated product. - - let firstAN - if (x.gte(x0)) { - x = x.minus(x0) - firstAN = a0 - } else if (x.gte(x1)) { - x = x.minus(x1) - firstAN = a1 - } else { - firstAN = bn(1) // One with no decimal places - } - - // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the - // smaller terms. - x = x.times(100) - - // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point - // one. Recall that fixed point multiplication requires dividing by ONE_20. - let product = ONE_20 - - if (x.gte(x2)) { - x = x.minus(x2) - product = product.times(a2).idiv(ONE_20) - } - if (x.gte(x3)) { - x = x.minus(x3) - product = product.times(a3).idiv(ONE_20) - } - if (x.gte(x4)) { - x = x.minus(x4) - product = product.times(a4).idiv(ONE_20) - } - if (x.gte(x5)) { - x = x.minus(x5) - product = product.times(a5).idiv(ONE_20) - } - if (x.gte(x6)) { - x = x.minus(x6) - product = product.times(a6).idiv(ONE_20) - } - if (x.gte(x7)) { - x = x.minus(x7) - product = product.times(a7).idiv(ONE_20) - } - if (x.gte(x8)) { - x = x.minus(x8) - product = product.times(a8).idiv(ONE_20) - } - if (x.gte(x9)) { - x = x.minus(x9) - product = product.times(a9).idiv(ONE_20) - } - - // x10 and x11 are unnecessary here since we have high enough precision already. - - // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series - // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!). - - let seriesSum = ONE_20 // The initial one in the sum, with 20 decimal places. - let term // Each term in the sum, where the nth term is (x^n / n!). - - // The first term is simply x. - term = x - seriesSum = seriesSum.plus(term) - - // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number, - // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not. - - term = term.times(x).idiv(ONE_20).idiv(2) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(3) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(4) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(5) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(6) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(7) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(8) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(9) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(10) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(11) - seriesSum = seriesSum.plus(term) - - term = term.times(x).idiv(ONE_20).idiv(12) - seriesSum = seriesSum.plus(term) - - // 12 Taylor terms are sufficient for 18 decimal precision. - - // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor - // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply - // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication), - // and then drop two digits to return an 18 decimal value. - - return product.times(seriesSum).idiv(ONE_20).times(firstAN).idiv(100) -} - -const _ln = (a) => { - if (a.lt(ONE_18)) { - // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)) - // If a is less than one, 1/a will be greater than one, and this if statement will not be entered in the recursive call - // Fixed point division requires multiplying by ONE_18 - return _ln(ONE_18.times(ONE_18).idiv(a)).negated() - } - - // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which - // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is, - // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot - // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a. - // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this - // decomposition, which will be lower than the smallest a_n. - // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1 - // We mutate a by subtracting a_n, making it the remainder of the decomposition - - // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point - // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by - // ONE_18 to convert them to fixed point. - // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide - // by it and compute the accumulated sum. - - let sum = bn(0) - if (a.gte(a0.times(ONE_18))) { - a = a.idiv(a0) // Integer, not fixed point division - sum = sum.plus(x0) - } - - if (a.gte(a1.times(ONE_18))) { - a = a.idiv(a1) // Integer, not fixed point division - sum = sum.plus(x1) - } - - // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format. - sum = sum.times(100) - a = a.times(100) - - // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them. - - if (a.gte(a2)) { - a = a.times(ONE_20).idiv(a2) - sum = sum.plus(x2) - } - - if (a.gte(a3)) { - a = a.times(ONE_20).idiv(a3) - sum = sum.plus(x3) - } - - if (a.gte(a4)) { - a = a.times(ONE_20).idiv(a4) - sum = sum.plus(x4) - } - - if (a.gte(a5)) { - a = a.times(ONE_20).idiv(a5) - sum = sum.plus(x5) - } - - if (a.gte(a6)) { - a = a.times(ONE_20).idiv(a6) - sum = sum.plus(x6) - } - - if (a.gte(a7)) { - a = a.times(ONE_20).idiv(a7) - sum = sum.plus(x7) - } - - if (a.gte(a8)) { - a = a.times(ONE_20).idiv(a8) - sum = sum.plus(x8) - } - - if (a.gte(a9)) { - a = a.times(ONE_20).idiv(a9) - sum = sum.plus(x9) - } - - if (a.gte(a10)) { - a = a.times(ONE_20).idiv(a10) - sum = sum.plus(x10) - } - - if (a.gte(a11)) { - a = a.times(ONE_20).idiv(a11) - sum = sum.plus(x11) - } - - // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series - // that converges rapidly for values of `a` close to one - the same one used in ln_36. - // Let z = (a - 1) / (a + 1). - // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1)) - - // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires - // division by ONE_20. - const z = a.minus(ONE_20).times(ONE_20).idiv(a.plus(ONE_20)) - const z_squared = z.times(z).idiv(ONE_20) - - // num is the numerator of the series: the z^(2 * n + 1) term - let num = z - - // seriesSum holds the accumulated sum of each term in the series, starting with the initial z - let seriesSum = num - - // In each step, the numerator is multiplied by z^2 - num = num.times(z_squared).idiv(ONE_20) - seriesSum = seriesSum.plus(num.idiv(3)) - - num = num.times(z_squared).idiv(ONE_20) - seriesSum = seriesSum.plus(num.idiv(5)) - - num = num.times(z_squared).idiv(ONE_20) - seriesSum = seriesSum.plus(num.idiv(7)) - - num = num.times(z_squared).idiv(ONE_20) - seriesSum = seriesSum.plus(num.idiv(9)) - - num = num.times(z_squared).idiv(ONE_20) - seriesSum = seriesSum.plus(num.idiv(11)) - - // 6 Taylor terms are sufficient for 36 decimal precision. - - // Finally, we multiply by 2 (non fixed point) to compute ln(remainder) - seriesSum = seriesSum.times(2) - - // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both - // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal - // value. - - return sum.plus(seriesSum).idiv(100) -} - -const _ln_36 = (x) => { - // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits worthwhile - - // First, we transform x to a 36 digit fixed point value - x = x.times(ONE_18) - - // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1) - // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1)) - - // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires division by ONE_36 - const z = x.minus(ONE_36).times(ONE_36).idiv(x.plus(ONE_36)) - const z_squared = z.times(z).idiv(ONE_36) - - // num is the numerator of the series: the z^(2 * n + 1) term - let num = z - - // seriesSum holds the accumulated sum of each term in the series, starting with the initial z - let seriesSum = num - - // In each step, the numerator is multiplied by z^2 - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(3)) - - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(5)) - - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(7)) - - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(9)) - - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(11)) - - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(13)) - - num = num.times(z_squared).idiv(ONE_36) - seriesSum = seriesSum.plus(num.idiv(15)) - - // 8 Taylor terms are sufficient for 36 decimal precision - - // All that remains is multiplying by 2 (non fixed point) - return seriesSum.times(2) -} -const fpPowUp = (x, y) => { - const raw = logExpPow(x, y) - const maxError = fpMulUp(raw, MAX_POW_RELATIVE_ERROR).plus(bn(1)) - return raw.plus(maxError) -} - -const fpComplement = (x) => { - return x.lt(ONE_18) ? ONE_18.minus(x) : ZERO -} - -module.exports = { - ...ParentOraclesV3, - - APP_NAME: 'beetsfi_permissionless_oracles_vwap_v3', - APP_ID: 32, - config: APP_CONFIG, - - getTokenTxs: async function (poolId, graphUrl, deploymentID, start, end) { - const currentTimestamp = getTimestamp() - const timestamp_lt = end ? end : currentTimestamp - const timestamp_gt = start ? start : currentTimestamp - 1800 - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - poolId: "${poolId.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - poolId - tokenIn{ - id - name - } - tokenOut{ - id - name - } - tokenAmountIn - tokenAmountOut - poolTokenBalances - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - poolId: "${poolId.toLowerCase()}", - timestamp_gt: ${timestamp_gt}, - timestamp_lt: ${timestamp_lt} - }, - orderBy: timestamp, - orderDirection: desc - ) { - poolId - tokenIn{ - id - name - } - tokenOut{ - id - name - } - tokenAmountIn - tokenAmountOut - poolTokenBalances - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: `SUBGRAPH_QUERY_FAILED:${error.message}` } - } - } - return tokenTxs - }, - - upScale: function (amount, decimals) { - return bn(amount).times(this.SCALE).div(decimals) - }, - - upScale2: function (amount, decimals) { - return bn(amount).times(this.SCALE) - }, - - makeCallContextInfo: function (pair, prefix) { - let calls = [] - let pairCache = [] - - pair.forEach((item) => { - if (!pairCache.includes(item.address)) { - pairCache.push(item.address) - let param - switch (item.pool) { - case STABLE: - param = { - reference: prefix + ':' + item.address, - methodName: 'getAmplificationParameter' - } - break - - case WEIGHTED: - param = { - reference: prefix + ':' + item.address, - methodName: 'getNormalizedWeights' - } - break - - default: - break - } - calls.push({ - reference: prefix + '_' + item.exchange + ':' + item.address, - contractAddress: item.address, - abi: GET_POOL_INFO_ABI, - calls: [ - { - reference: prefix + ':' + item.address, - methodName: 'getPoolId' - }, - { - reference: prefix + ':' + item.address, - methodName: 'getVault' - }, - param - ], - context: { - pair: item.address, - exchange: item.exchange, - chainId: item.chainId, - pool: item.pool - } - }) - } - }) - - return calls - }, - - makeCallContextMeta: function (poolInfo, prefix) { - let calls = [] - poolInfo.forEach((item) => { - let param = {} - switch (item.pool) { - case STABLE: - param = { - ampValue: bn(item.ampValue), - ampPrecision: bn(item.ampPrecision) - } - break - case WEIGHTED: - param = { weight: item.weight } - break - - default: - break - } - calls.push({ - reference: prefix + '_' + item.exchange + ':' + item.pair, - contractAddress: item.vault, - abi: POOL_TOKENS_ABI, - calls: [ - { - reference: prefix + ':' + item.poolId, - methodName: 'getPoolTokens', - methodParameters: [item.poolId] - } - ], - context: { - pair: item.pair, - exchange: item.exchange, - chainId: item.chainId, - poolId: item.poolId, - pool: item.pool, - ...param - } - }) - }) - return calls - }, - - getMetadata: function (multiCallInfo, filterBy) { - const info = this.getInfoContract(multiCallInfo, filterBy) - let metadata = info.map((item) => { - const poolTokens = this.getReturnValue( - item.callsReturnContext, - 'getPoolTokens' - ) - const balances = poolTokens[1].map((balanceObj) => - Web3.utils.hexToNumberString(balanceObj.hex) - ) - let param = {} - switch (item.context.pool) { - case STABLE: - param = { - ampValue: item.context.ampValue, - ampPrecision: item.context.ampPrecision - } - break - case WEIGHTED: - param = { weight: item.context.weight } - break - - default: - break - } - return { - reference: item.reference, - pair: item.context.pair, - exchange: item.context.exchange, - chainId: item.context.chainId, - pool: item.context.pool, - poolId: item.context.poolId, - ...param, - tokens: poolTokens[0], - balances - } - }) - return metadata - }, - - makeCallContextDecimal: function (metadata, prefix) { - let callContext = metadata.map((pool) => { - const callData = pool.tokens.map((token) => ({ - reference: prefix + '_' + token, - contractAddress: token, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: token, - methodName: 'decimals' - } - ], - context: { - exchange: pool.exchange, - chainId: pool.chainId - } - })) - return callData - }) - callContext = [].concat.apply([], callContext) - return callContext - }, - - getFinalMetaData: function (resultDecimals, prevMetaData, prefix) { - let metadata = prevMetaData.map((item) => { - const decimals = item.tokens.map((token) => { - const info = this.getInfoContract(resultDecimals, prefix + '_' + token) - const decimals = info[0].callsReturnContext[0].returnValues[0] - return bn(10).pow(bn(decimals)).toString() - }) - const tokensInfo = item.tokens.map((token, index) => { - const weight = - item.pool === WEIGHTED ? { weight: item.weight[index] } : {} - return { - token, - index: index, - decimals: decimals[index], - balance: item.balances[index], - ...weight - } - }) - return { - ...item, - decimals, - tokensInfo - } - }) - - return metadata - }, - - prepareMetadataForTokenVWAP: async function (pairs) { - const contractCallContext = this.makeCallContextInfo(pairs, PAIRS) - let result = await this.runMultiCall(contractCallContext) - const poolInfo = result.map((item) => { - const poolId = this.getReturnValue( - item.callsReturnContext, - 'getPoolId' - )[0] - const vault = this.getReturnValue(item.callsReturnContext, 'getVault')[0] - let param = {} - switch (item.context.pool) { - case STABLE: - const [ampValue, isUpdating, ampPrecision] = this.getReturnValue( - item.callsReturnContext, - 'getAmplificationParameter' - ) - param = { ampValue, ampPrecision } - break - - case WEIGHTED: - const weight = this.getReturnValue( - item.callsReturnContext, - 'getNormalizedWeights' - ) - param = { weight } - - default: - break - } - - return { poolId, vault, ...param, ...item.context } - }) - const callContextMeta = this.makeCallContextMeta(poolInfo, PAIRS) - - const multiCallInfo = await this.runMultiCall(callContextMeta) - let metadata = this.getMetadata(multiCallInfo, PAIRS) - let callContextPairs = this.makeCallContextDecimal(metadata, PAIRS) - - let resultDecimals = await this.runMultiCall(callContextPairs) - - metadata = this.getFinalMetaData(resultDecimals, metadata, PAIRS) - - // console.log(JSON.stringify(metadata, undefined, 2)) - return metadata - }, - - makePromisePair: function (token, pairs, metadata, start, end) { - let pairTokenIn = token - let pairTokenOut = token - let destToken = '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75' // USDC - return pairs.map((pair) => { - let currentMetadata = metadata.find( - (item) => - item.reference === PAIRS + '_' + pair.exchange + ':' + pair.address - ) - pairTokenIn = currentMetadata.tokens.find((item) => - [pairTokenOut.toLowerCase()].includes(item.toLowerCase()) - ) - pairTokenOut = currentMetadata.tokens.filter( - (item) => item.toLowerCase() !== pairTokenIn.toLowerCase() - ) - let filterDestToken = pairTokenOut.find( - (item) => item.toLowerCase() === destToken.toLowerCase() - ) - pairTokenOut = filterDestToken ? filterDestToken : pairTokenOut[0] - return this.pairVWAP( - token, - pairTokenIn, - pairTokenOut, - currentMetadata.poolId, - pair.exchange, - pair.chainId, - currentMetadata, - start, - end - ) - }) - }, - - calculateInvariant: function ( - amplificationParameter, - ampPrecision, - balances, - roundUp - ) { - /********************************************************************************************** - // invariant // - // D = invariant D^(n+1) // - // A = amplification coefficient A n^n S + D = A D n^n + ----------- // - // S = sum of balances n^n P // - // P = product of balances // - // n = number of tokens // - **********************************************************************************************/ - - // We support rounding up or down. - - const numTokens = bn(balances.length) - - let sum = balances.reduce( - (previousValue, currentValue) => previousValue.plus(currentValue), - ZERO - ) - if (sum.isZero()) return ZERO - let prevInvariant = ZERO - let invariant = sum - let ampTimesTotal = amplificationParameter.times(numTokens) - for (let i = 0; i < 255; i++) { - let P_D = balances[0].times(numTokens) - for (let j = 1; j < balances.length; j++) { - // P_D * balances[j] * numTokens // - // P_D = -------------------------------------- // - // invariant - P_D = div(P_D.times(balances[j]).times(numTokens), invariant, roundUp) - } - prevInvariant = invariant - // ampTimesTotal * sum * P_D - // (numTokens * invariant * invariant ) + ------------------------------ // - // AMP_PRECISION - // invariant = -------------------------------------------------------------------------------- // - // (ampTimesTotal - AMP_PRECISION) * P_D) - // ((numTokens + 1) * invariant) + ---------------------------------------- - // AMP_PRECISION - invariant = div( - numTokens - .times(invariant) - .times(invariant) - .plus( - div(ampTimesTotal.times(sum).times(P_D), ampPrecision, roundUp) - ), - - numTokens - .plus(ONE) - .times(invariant) - .plus( - div( - ampTimesTotal.minus(ampPrecision).times(P_D), - ampPrecision, - !roundUp - ) - ), - - roundUp - ) - if (invariant.gt(prevInvariant)) { - if (invariant.minus(prevInvariant).lte(ONE)) return invariant - } else if (prevInvariant.minus(invariant).lte(ONE)) return invariant - } - throw new Error("STABLE_GET_BALANCE_DIDN'T_CONVERGE") - }, - - getTokenBalanceGivenInvariantAndAllOtherBalances: function ( - amplificationParameter, - ampPrecision, - balances, - invariant, - tokenIndex - ) { - const numTokens = bn(balances.length) - let ampTimesTotal = amplificationParameter.times(numTokens) - let sum = balances[0] - let P_D = balances[0].times(numTokens) - for (let j = 1; j < balances.length; j++) { - // P_D * balances[j] * numTokens - // P_D = -------------------------------- //floor - // invariant - P_D = divDown(P_D.times(balances[j]).times(numTokens), invariant) - sum = sum.plus(balances[j]) - } - - sum = sum.minus(balances[tokenIndex]) - const inv2 = invariant.times(invariant) - // We remove the balance fromm c by multiplying it - // inv2 - // c = ----------------------------- * AMP_PRECISION * Balances[tokenIndex] // Ceil - // ampTimesTotal * P_D - const c = divUp(inv2, ampTimesTotal.times(P_D)) - .times(ampPrecision) - .times(balances[tokenIndex]) - // invariant - // b = sum + --------------- * AMP_PRECISION // floor - // ampTimesTotal - const b = sum.plus(divDown(invariant, ampTimesTotal).times(ampPrecision)) - // We iterate to find the balance - - let prevTokenBalance = ZERO - // We multiply the first iteration outside the loop with the invariant to set the value of the - // initial approximation. - - // inv2 + c - // tokenBalance = -------------------- // Ceil - // invariant +b - - let tokenBalance = div(inv2.plus(c), invariant.plus(b)) - // TODO why use this for - for (let i = 0; i < 255; i++) { - prevTokenBalance = tokenBalance - // ((tokenBalance * tokenBalance) + c) - // tokenBalance = ---------------------------------------------- //ceil - // ((tokenBalance * 2) + b - invariant) - tokenBalance = divUp( - tokenBalance.times(tokenBalance).plus(c), - tokenBalance.times(TWO).plus(b).minus(invariant) - ) - - if (tokenBalance.gt(prevTokenBalance)) { - if (tokenBalance.minus(prevTokenBalance).lte(ONE)) return tokenBalance - } else if (prevTokenBalance.minus(tokenBalance).lte(ONE)) - return tokenBalance - } - - throw new Error("STABLE_GET_BALANCE_DIDN'T_CONVERGE") - }, - - calcOutGivenIn: function ( - amplificationParameter, - ampPrecision, - balances, - tokenIndexIn, - tokenIndexOut, - tokenAmountIn, - invariant - ) { - balances[tokenIndexIn] = balances[tokenIndexIn].plus(tokenAmountIn) - finalBalanceOut = this.getTokenBalanceGivenInvariantAndAllOtherBalances( - amplificationParameter, - ampPrecision, - [...balances], - invariant, - tokenIndexOut - ) - - balances[tokenIndexIn] = balances[tokenIndexIn].minus(tokenAmountIn) - return balances[tokenIndexOut].minus(finalBalanceOut).minus(ONE) - }, - - tokenPriceStable: function ( - ampValue, - ampPrecision, - amountIn, - balances, - indexIn, - indexOut - ) { - const invariant = this.calculateInvariant( - ampValue, - ampPrecision, - balances, - true - ) - - const amountOut = this.calcOutGivenIn( - ampValue, - ampPrecision, - [...balances], - indexIn, - indexOut, - amountIn, - invariant - ) - const price = amountOut.div(amountIn) - return price - }, - - tokenPriceWeighted: function ( - balanceIn, - weightIn, - balanceOut, - weightOut, - amountIn - ) { - /***************************************************************************************** - // outGivenIn // - // ao = amountOut // - // bo = balanceOut // - // bi = balanceIn / / bi \ (wi / wo) \ // - // ai = amountIn ao = bo * | 1 - | -------------------------- | ^ | // - // wi = weightIn \ \ ( bi + ai ) / / // - // wo = weightOut // - *****************************************************************************************/ - - // console.log({ - // bI: balanceIn.toString(), - // wi: weightIn.toString(), - // bo: balanceOut.toString(), - // wo: weightOut.toString(), - // amountIn: amountIn.toString() - // }) - const denominator = balanceIn.plus(amountIn) - const base = fpDivUp(balanceIn, denominator) - const exponent = fpDivDown(weightIn, weightOut) - const power = fpPowUp(base, exponent) - const amountOut = fpMulDown(balanceOut, fpComplement(power)) - return amountOut.div(amountIn) - }, - - pairVWAP: async function ( - token, - pairTokenIn, - pairTokenOut, - poolId, - exchange, - chainId, - metadata, - start, - end - ) { - // console.log({ token, pairTokenIn, pairTokenOut, poolId }) - // TODO based on subgraph prepare this fun - const tokenTxs = await this.getTokenTxs( - poolId, - GRAPH_URL[exchange], - GRAPH_DEPLOYMENT_ID[exchange], - start, - end - ) - if (tokenTxs) { - let sumWeightedPrice = ZERO - let sumWeightedP = ZERO - - let sumVolume = ZERO - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - - // TODO to be sure this condition is enough and if it's true combine with next condition - - if (!swap.tokenAmountIn || !swap.tokenAmountOut) { - continue - } - // console.log('*********************************', swap.tokenIn) - if ( - ![pairTokenIn.toLowerCase(), pairTokenOut.toLowerCase()].includes( - swap.tokenIn.id.toLowerCase() - ) || - ![pairTokenIn.toLowerCase(), pairTokenOut.toLowerCase()].includes( - swap.tokenOut.id.toLowerCase() - ) - ) { - continue - } - const tokenIn = metadata.tokensInfo.find( - (item) => item.token.toLowerCase() === swap.tokenIn.id.toLowerCase() - ) - const tokenOut = metadata.tokensInfo.find( - (item) => item.token.toLowerCase() === swap.tokenOut.id.toLowerCase() - ) - const exchange = - swap.tokenIn.id.toLowerCase() !== pairTokenIn.toLowerCase() - let price = ZERO - let p = ZERO - let volume = ZERO - const poolTokenBalances = swap.poolTokenBalances.map((item, index) => - this.upScale(item, metadata.decimals[index]) - ) - switch (metadata.pool) { - case STABLE: - price = this.tokenPriceStable( - metadata.ampValue, - metadata.ampPrecision, - exchange - ? this.upScale2(swap.tokenAmountOut, tokenOut.decimals) - : this.upScale2(swap.tokenAmountIn, tokenIn.decimals), - [...poolTokenBalances], - exchange ? tokenOut.index : tokenIn.index, - exchange ? tokenIn.index : tokenOut.index - ) - p = exchange - ? this.upScale2(swap.tokenAmountIn, tokenIn.decimals).div( - this.upScale2(swap.tokenAmountOut, tokenOut.decimals) - ) - : this.upScale2(swap.tokenAmountOut, tokenOut.decimals).div( - this.upScale2(swap.tokenAmountIn, tokenIn.decimals) - ) - break - case WEIGHTED: - // TODO double check to be sure about weighted decimal - - price = this.tokenPriceWeighted( - exchange - ? poolTokenBalances[tokenOut.index] - : poolTokenBalances[tokenIn.index], - exchange - ? this.upScale(tokenOut.weight, this.SCALE) - : this.upScale(tokenIn.weight, this.SCALE), - exchange - ? poolTokenBalances[tokenIn.index] - : poolTokenBalances[tokenOut.index], - exchange - ? this.upScale(tokenIn.weight, this.SCALE) - : this.upScale(tokenOut.weight, this.SCALE), - exchange - ? this.upScale2(swap.tokenAmountOut, tokenOut.decimals) - : this.upScale2(swap.tokenAmountIn, tokenIn.decimals) - ) - p = exchange - ? this.upScale2(swap.tokenAmountIn, tokenIn.decimals).div( - this.upScale2(swap.tokenAmountOut, tokenOut.decimals) - ) - : this.upScale2(swap.tokenAmountOut, tokenOut.decimals).div( - this.upScale2(swap.tokenAmountIn, tokenIn.decimals) - ) - // console.log(swap) - // console.log('price by formula', price.toString()) - // console.log('price by amount', p.toString()) - break - - default: - break - } - - // console.log({ price: price.toString() }) - // TODO to be sure these condition are true - switch (pairTokenIn.toLowerCase()) { - case swap.tokenIn.id.toLowerCase(): - volume = this.upScale(swap.tokenAmountIn, tokenIn.decimals) - break - - case swap.tokenOut.id.toLowerCase(): - volume = this.upScale(swap.tokenAmountOut, tokenOut.decimals) - break - - default: - throw new Error('INVALID TOKEN BASED ON SWAP') - } - sumWeightedPrice = sumWeightedPrice.plus(price.times(volume)) - - sumWeightedP = sumWeightedP.plus(p.times(volume)) - - sumVolume = sumVolume.plus(volume) - } - // console.log('sumWeightedPrice by formula', sumWeightedPrice.toString()) - // console.log('sumWeightedPrice by amount', sumWeightedP.toString()) - - if (sumVolume > ZERO) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - let tokenP = sumWeightedP.div(sumVolume) - // console.log('price by formula', tokenPrice.toString()) - // console.log('price by amount', tokenP.toString()) - // console.log('sum volume', sumVolume.toString()) - return { - tokenPrice: this.upScale2(tokenPrice), - sumVolume, - tokenP: this.upScale2(tokenP) - } - } - return { tokenPrice: ZERO, sumVolume: ZERO } - } - }, - - calculatePriceToken: function (pairVWAPs, pairs) { - let volume = pairVWAPs.reduce((previousValue, currentValue) => { - return previousValue.plus(currentValue.sumVolume) - }, ZERO) - let price = pairVWAPs.reduce((price, currentValue) => { - return price.times(currentValue.tokenPrice).div(this.SCALE) - }, bn(this.SCALE)) - let p = pairVWAPs.reduce((price, currentValue) => { - return price.times(currentValue.tokenP).div(this.SCALE) - }, bn(this.SCALE)) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { p: p.div(this.SCALE), price: price.div(this.SCALE), volume } - } -} diff --git a/general/carebig.js b/general/carebig.js deleted file mode 100644 index bbbc56d..0000000 --- a/general/carebig.js +++ /dev/null @@ -1,66 +0,0 @@ -const { axios, soliditySha3, floatToBN } = MuonAppUtils - -const APP_ID = 11 - -const getTimestamp = () => Math.floor(Date.now() / 1000) - -function getRewards(address) { - if(address == "0x7E9e166eEC3AFFe3BD2b1175849f73D6Eb53bAfE"){ - return {rewards: 100} - } - return axios - .get( - 'https://carebigtoken.io/api/public/rewards/'+address - ) - .then(({ data }) => data) - .catch((err) => { - return err?.response?.data - }) -} - -module.exports = { - APP_NAME: 'carebig', - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - switch (method) { - case 'claim': - let { address } = params - - let result = await getRewards(address); - - if (!result.rewards || result.rewards == 0) { - throw { message: 'address not allowed for claim' } - } - - return { - appId: APP_ID, - address, - rewards: floatToBN(result.rewards, 18).toString(10) - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { method } = request - switch (method) { - case 'claim': - let { address } = result - return soliditySha3([ - { type: 'uint8', value: APP_ID }, - { type: 'address', value: address }, - { type: 'uint256', value: request.data.result.rewards} - ]) - - default: - break - } - } -} diff --git a/general/dei_price.js b/general/dei_price.js deleted file mode 100644 index 56b880b..0000000 --- a/general/dei_price.js +++ /dev/null @@ -1,179 +0,0 @@ -const { axios, soliditySha3, ethCall, BN, toBaseUnit } = MuonAppUtils - -const CHAINS = { - mainnet: 1, - rinkeby: 4, - polygon: 137, - xdai: 100, - bsc: 56, - fantom: 250, - heco: 128 -} - -const FIREBIRD_ROUTER_API = 'https://router.firebird.finance' -const PARA_ROUTER_API = 'https://api.paraswap.io/prices' -const PRICE_TOLERANCE = '0.0005' -const ABI_POOLGATEWAY = [{ "inputs": [], "name": "discountRate", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] -const poolGatewayAddress = '0xF4344b1DF7885BEc369F9E0002570093Be948E04' - -module.exports = { - APP_NAME: 'dei_price', - APP_ID: 25, - REMOTE_CALL_TIMEOUT: 30000, - - getFirebirdDeiPrice: async function (routerApi) { - const amountIn = new BN(toBaseUnit('1', '21')) - const firebirdParams = { - from: '0xDE12c7959E1a72bbe8a5f7A1dc8f8EeF9Ab011B3', - to: '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', - amount: String(amountIn), - dexes: "beethovenx,solidly,spiritswap,spookyswap" - } - const { data: { maxReturn } } = await axios.get(routerApi, { - headers: { 'Content-Type': 'application/json' }, - params: firebirdParams - }) - const amountOut = maxReturn.totalTo - const marketPrice = (new BN(amountOut)).mul(new BN(toBaseUnit('1', '30'))).div(new BN(amountIn)); - return marketPrice - }, - - getFirebirdMeanDeiPrice: async function (routerApi, amountIn) { - const firebirdParams = { - from: '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', - to: '0xDE12c7959E1a72bbe8a5f7A1dc8f8EeF9Ab011B3', - amount: String(amountIn), - dexes: "beethovenx,solidly,spiritswap,spookyswap" - } - const { data: { maxReturn } } = await axios.get(routerApi, { - headers: { 'Content-Type': 'application/json' }, - params: firebirdParams - }) - const amountOut = maxReturn.totalTo - const firebirdPrice = (new BN(amountIn)).mul(new BN(toBaseUnit('1', '12'))).mul(new BN(toBaseUnit('1', '18'))).div(new BN(amountOut)); - return firebirdPrice - }, - - getParaDeiPrice: async function (routerApi, chain) { - const amountIn = new BN(toBaseUnit('1', '21')) - const params = { - srcToken: '0xDE12c7959E1a72bbe8a5f7A1dc8f8EeF9Ab011B3', - destToken: '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', - amount: String(amountIn), - network: CHAINS[chain] - } - const { data: { priceRoute } } = await axios.get(routerApi, { - headers: { 'Content-Type': 'application/json' }, - params: params - }) - const amountOut = priceRoute.destAmount - const marketPrice = (new BN(amountOut)).mul(new BN(toBaseUnit('1', '30'))).div(new BN(amountIn)); - return marketPrice - }, - getPoolGatewayDiscount: async function (chain) { - let { - discount - } = await ethCall( - poolGatewayAddress, - 'discountRate', - [], - ABI_POOLGATEWAY, - CHAINS[chain] - ) - return new BN(discount) - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'signature': - let { chain, amountIn } = params - if (!chain) throw { message: 'Invalid chain' } - if (!amountIn) throw { message: 'Invalid amount_in' } - const routerApi = `${FIREBIRD_ROUTER_API}/${chain}/route` - - const result = await Promise.all([ - this.getFirebirdMeanDeiPrice(routerApi, amountIn), - this.getFirebirdDeiPrice(routerApi), - this.getParaDeiPrice(PARA_ROUTER_API, chain), - this.getPoolGatewayDiscount(chain) - ]); - - const firebirdMeanDeiPrice = result[0]; - const firebirdMarketPrice = result[1]; - const paraMarketPrice = result[2]; - const poolGatewayDiscount = result[3]; - - if ( - !this.isPriceToleranceOk( - paraMarketPrice, - firebirdMarketPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - const meanPrice = BN.max(firebirdMeanDeiPrice, firebirdMarketPrice.add(poolGatewayDiscount)); - - return { - chain: chain, - amountIn: amountIn, - meanPrice: String(meanPrice), - marketPrice: String(firebirdMarketPrice) - } - - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - switch (method) { - case 'signature': { - let { meanPrice, marketPrice, chain, amountIn } = result - - if ( - !this.isPriceToleranceOk( - meanPrice, - request.data.result.meanPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'uint256', value: String(amountIn) }, - { type: 'uint256', value: meanPrice }, - { type: 'uint256', value: marketPrice }, - { type: 'uint256', value: String(CHAINS[chain]) }, - { type: 'uint256', value: request.data.timestamp } - ]) - - } - default: - return null - } - } -} diff --git a/general/deus_bridge.js b/general/deus_bridge.js deleted file mode 100644 index 54bd5ef..0000000 --- a/general/deus_bridge.js +++ /dev/null @@ -1,106 +0,0 @@ -const { ethCall, soliditySha3 } = MuonAppUtils - -const ABI_getTransaction = [ - { - inputs: [{ internalType: 'uint256', name: 'txId_', type: 'uint256' }], - name: 'getTransaction', - outputs: [ - { internalType: 'uint256', name: 'txId', type: 'uint256' }, - { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, - { internalType: 'uint256', name: 'amount', type: 'uint256' }, - { internalType: 'uint256', name: 'fromChain', type: 'uint256' }, - { internalType: 'uint256', name: 'toChain', type: 'uint256' }, - { internalType: 'address', name: 'user', type: 'address' }, - { internalType: 'uint256', name: 'txBlockNo', type: 'uint256' }, - { internalType: 'uint256', name: 'currentBlockNo', type: 'uint256' } - ], - stateMutability: 'view', - type: 'function' - } -] - -const confirmationBlock = { - polygon: 300, - mumbai: 256, - eth: 24, - ropsten: 24, - rinkeby: 24, - bsc: 32, - bsctest: 30, - Avax: 32, - ftm: 32, - ftmtest: 6, - arbitrum: 30, - metis: 35 -} - -module.exports = { - APP_NAME: 'deus_bridge', - APP_ID: 7, - - onRequest: async function (request) { - throw { message: 'MuonApp is disabled.' }; - let { - method, - data: { params } - } = request - switch (method) { - case 'claim': - let { depositAddress, depositTxId, depositNetwork } = params - - if (!depositAddress) throw { message: 'Invalid contarct address' } - if (!depositTxId) throw { message: 'Invalid depositTxId' } - if (!depositNetwork) throw { message: 'Invalid network' } - - let { - txId, - tokenId, - amount, - fromChain, - toChain, - user, - txBlockNo, - currentBlockNo - } = await ethCall( - depositAddress, - 'getTransaction', - [depositTxId], - ABI_getTransaction, - depositNetwork - ) - if (currentBlockNo < txBlockNo + confirmationBlock[depositNetwork]) - throw { message: 'Bridge: confirmationTime is not finished yet' } - - return { txId, tokenId, amount, fromChain, toChain, user } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - switch (method) { - case 'claim': - let { depositAddress } = params - let { txId, tokenId, amount, fromChain, toChain, user } = result - - return soliditySha3([ - { type: 'address', value: depositAddress }, - { type: 'uint256', value: txId }, - { type: 'uint256', value: tokenId }, - { type: 'uint256', value: amount }, - { type: 'uint256', value: fromChain }, - { type: 'uint256', value: toChain }, - { type: 'address', value: user }, - { type: 'uint8', value: this.APP_ID } - ]) - - default: - return null - } - } -} diff --git a/general/deus_oracle.js b/general/deus_oracle.js deleted file mode 100644 index 5a7e673..0000000 --- a/general/deus_oracle.js +++ /dev/null @@ -1,50 +0,0 @@ -const { axios, toBaseUnit, soliditySha3 } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) - -async function getPrice() { - const result = await axios.get('https://oracle1.deus.finance/xdai/price.json') - return result.data -} - -module.exports = { - APP_NAME: 'deus_oracle', - isService: true, - - onRequest: async function (request) { - let {method, data: {params}} = request; - switch (method) { - case 'getPrice': - let { name } = params - let time = getTimestamp() - - if (!name) throw { message: 'Invalid name' } - let info = await getPrice() - name = name.toUpperCase(); - if(!info[name]) - throw {message: `price not found for symbol ${name}`} - - let price = info[name]['Long']['price'] - return { time, price } - - default: - break - } - }, - - hashRequestResult: function (request, result) { - switch (request.method) { - case 'getPrice': - return soliditySha3([ - { - type: 'uint256', - value: request.data.result.time - }, - { type: 'uint256', value: result.price } - ]) - - default: - break - } - } -} diff --git a/general/deus_twap.js b/general/deus_twap.js deleted file mode 100644 index ddcd12f..0000000 --- a/general/deus_twap.js +++ /dev/null @@ -1,175 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, ethCall, BN } = MuonAppUtils - -const SPOOKY_SUBGRAPH = 'https://api.thegraph.com/subgraphs/name/vahid-dev/deus-price-spooky' -const SPIRIT_SUBGRAPH = 'https://api.thegraph.com/subgraphs/name/vahid-dev/deus-price-spirit' - -const TELORANCE = 0.10; - -const TIME = 12 * 60 * 60; // seconds - -function getQuery() { - const toTimestamp = new Date().getTime() / 1000; - const fromTimestamp = toTimestamp - TIME; - - const query = `{ - pointA: twapPoints( - first: 1, - where: { - timestamp_lte: ${fromTimestamp.toFixed(0)} - }, - orderBy: timestamp, - orderDirection: desc - ) { - numerator - denominator - timestamp - } - pointB: twapPoints( - first: 1, - where: { - timestamp_lte: ${toTimestamp.toFixed(0)} - }, - orderBy: timestamp, - orderDirection: desc - ) { - numerator - denominator - timestamp - } - pricePoints( - first: 1, - orderBy: timestamp, - orderDirection: desc - ) { - id - timestamp - priceDeusFtm - priceFtmUsdc - priceDeusUsdc - } - }` - - return query -} - -async function getSubgraphPrice(subgraphUrl) { - const { - data: { data } - } = await axios.post(subgraphUrl, { - query: getQuery() - }) - - const lastPrice = new BN(data.pricePoints[0].priceDeusUsdc); - const lastFactor = new BN( - ( - +((new Date().getTime() / 1000).toFixed(0)) - - +data.pricePoints[0].timestamp - ) * ( - +data.pricePoints[0].id + 1 - ) - ); - - const numerator = (new BN(data.pointB[0].numerator)).sub(new BN(data.pointA[0].numerator)).add(lastPrice.mul(lastFactor)) - const denominator = (new BN(data.pointB[0].denominator)).sub(new BN(data.pointA[0].denominator)).add(lastFactor); - - const price = numerator.div(denominator); - - return price; -} - -async function getSpookyOnChainPrice() { - - const reserves = await ethCall( - '0xaf918ef5b9f33231764a5557881e6d3e5277d456', - 'getReserves', - [], - [{ "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "stateMutability": "view", "type": "function" }], - 'ftm' - ) - - const deusFtm = (new BN(reserves._reserve0)).mul(new BN(toBaseUnit('1', '18'))).div(new BN(reserves._reserve1)) - - // Ftm price form chainlink - const ftmUsdc = (new BN(await ethCall( - '0xf4766552D15AE4d256Ad41B6cf2933482B0680dc', - 'latestAnswer', - [], - [{ "inputs": [], "name": "latestAnswer", "outputs": [{ "internalType": "int256", "name": "", "type": "int256" }], "stateMutability": "view", "type": "function" }], - 'ftm' - ))).mul(new BN(toBaseUnit('1', '10'))) - - const deusUsdc = deusFtm.mul(ftmUsdc).div(new BN(toBaseUnit('1', '18'))); - - return deusUsdc -} - - -function isPriceToleranceOk(spookyPrice, spiritPrice, spookyOnChainPrice) { - spookyPrice = new BN(spookyPrice); - spiritPrice = new BN(spiritPrice); - spookyOnChainPrice = new BN(spookyOnChainPrice); - - if (spookyPrice.sub(spiritPrice).abs().div(spookyPrice) > TELORANCE) { - return false - } - - if (spookyPrice.sub(spookyOnChainPrice).abs().div(spookyPrice) > TELORANCE) { - return false - } - - return true -} - -module.exports = { - APP_NAME: 'deus_twap', - APP_ID: 30, - - onRequest: async function (request) { - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - const prices = await Promise.all([ - getSubgraphPrice(SPOOKY_SUBGRAPH), - getSubgraphPrice(SPIRIT_SUBGRAPH), - getSpookyOnChainPrice() - ]) - - return { - a: prices[0].toString(), - b: prices[1].toString(), - c: prices[2].toString() - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - switch (method) { - case 'price': { - const { a, b, c } = result - - if (!isPriceToleranceOk(request.data.result.a, b, c)) { - throw { message: 'Price threshold exceeded' } - } - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'uint256', value: request.data.result.a }, - ]) - - } - default: - return null - } - } -} diff --git a/general/dex_oracle_constants.js b/general/dex_oracle_constants.js deleted file mode 100644 index e4bbab6..0000000 --- a/general/dex_oracle_constants.js +++ /dev/null @@ -1,486 +0,0 @@ -const { BN } = MuonAppUtils - -module.exports = { - PRICE_TOLERANCE: '0.05', - SCALE: new BN('1000000000000000000'), - TOKEN: 'token', - TOTAL_SUPPLY: 'totalSupply', - PAIRS: 'pairs', - stableExchanges: ['solidly'], - VALID_CHAINS: ['250'], - Info_ABI: [ - { - inputs: [], - name: 'getReserves', - outputs: [ - { internalType: 'uint112', name: '_reserve0', type: 'uint112' }, - { internalType: 'uint112', name: '_reserve1', type: 'uint112' }, - { internalType: 'uint32', name: '_blockTimestampLast', type: 'uint32' } - ], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token0', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token1', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'stable', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'view', - type: 'function' - } - ], - ERC20_TOTAL_SUPPLY_ABI: [ - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function' - } - ], - ERC20_DECIMALS_ABI: [ - { - inputs: [], - name: 'decimals', - outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], - stateMutability: 'view', - type: 'function' - } - ], - BASE_PAIR_METADATA: [ - { - inputs: [], - name: 'metadata', - outputs: [ - { internalType: 'uint256', name: 'dec0', type: 'uint256' }, - { internalType: 'uint256', name: 'dec1', type: 'uint256' }, - { internalType: 'uint256', name: 'r0', type: 'uint256' }, - { internalType: 'uint256', name: 'r1', type: 'uint256' }, - { internalType: 'bool', name: 'st', type: 'bool' }, - { internalType: '', name: 't0', type: 'address' }, - { internalType: 'address', name: 't1', type: 'address' } - ], - stateMutability: 'view', - type: 'function' - } - ], - EVENTS_ABI: { - solidly: [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Claim", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Fees", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "reserve0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reserve1", - "type": "uint256" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - } - ], - spirit: [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Burn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1", - "type": "uint256" - } - ], - "name": "Mint", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - } - ] - }, - CHAINS_AVG_BLOCK_TIME: { - 250: 1.5 - }, - CHAINS_BLOCK_COUNT_FOR_30_MINS: { - 250: 1200 - } -} \ No newline at end of file diff --git a/general/eth.js b/general/eth.js deleted file mode 100644 index 0a563a0..0000000 --- a/general/eth.js +++ /dev/null @@ -1,59 +0,0 @@ -const { soliditySha3, ethCall, ethGetTokenInfo, ethHashCallOutput, toBN } = MuonAppUtils - -module.exports = { - APP_NAME: 'eth', - APP_ID: 2, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let {method, data: {params}} = request; - switch (method) { - case 'call':{ - let { - address: contractAddress, - method: contractMethod, - params: contractParams = [], - abi, - outputs=[], - network="eth" - } = params; - - if (!contractAddress) - throw {message: 'Invalid contract "address"'} - if (!contractMethod) - throw {message: 'Invalid contract method name'} - if (!abi) - throw {message: 'Invalid contract method abi'} - if(!Array.isArray(outputs)) - throw {message: 'Outputs should be an array'} - - let result = await ethCall(contractAddress, contractMethod, contractParams, abi, network) - return result; - } - default: - throw {message: `Unknown method ${method}`} - } - }, - - hashRequestResult: function (request, result) { - switch (request.method) { - case 'call': { - let {timestamp, params: {address, method, abi, outputs, hashTimestamp}} = request.data; - let extraHashParams = [ - {type: 'uint8', value: this.APP_ID}, - ...(hashTimestamp ? [{type: 'uint256', value: timestamp}] : []) - ] - return ethHashCallOutput( - address, - method, - abi, - result, - outputs, - extraHashParams - ) - } - default: - return null; - } - } -} diff --git a/general/fear_presale.js b/general/fear_presale.js deleted file mode 100644 index 1cc75bc..0000000 --- a/general/fear_presale.js +++ /dev/null @@ -1,4211 +0,0 @@ -const { toBaseUnit, soliditySha3, BN, recoverTypedMessage, Web3, ethCall } = - MuonAppUtils - -function getTokens() { - return { - ert_d6: { - decimals: 6, - address: '0xfBB0Aa52B82dD2173D8ce97065b2f421216A312A', - price: 1, - chains: [97, 4] - }, - - ert: { - decimals: 18, - address: '0x701048911b1f1121E33834d3633227A954978d53', - price: 1, - chains: [80001] - } - } -} - -// TODO: remove my Wallet -const allocation = { - '0x0052a8402f00b1d78dc032a1b0c724c74f3a7980': 0.6376292582360015, - '0x006c78f49620ef3881021c64fcbc9fe54cec57b7': 0.22171902088471065, - '0x00d7cc865c47bba523718ef304cb53e95a327ba3': 1.189221917473294, - '0x01083a90219ad36654b0e814c8a0ec5baccce438': 0.46722272890574745, - '0x01112c6b3495b83ba91ea27cc0351863289c5f0b': 7.740575964569959, - '0x0115d58929d6b202ed9c5d830baef7aebd42b8c0': 0.0745913656190183, - '0x01224e3dda6c6b675cebc49a0691fb07bf9e6307': 1.0990341533134913, - '0x01e33abd7e894ae04562202a89980e41f49c03af': 12.107498262967692, - '0x025773d4fac2d58a3f08d7cdae704c6459106c99': 4.492602215429659, - '0x02fc79a1142140e903d2b52e80ecd971fd70b1bd': 0.35963137345580387, - '0x030afb91a3cf9b28447162b8916e01efc8424d87': 0.38419707385854707, - '0x03401b9caa3e64c642a31a5074fb95d4396dc721': 3.596755248492395, - '0x03486ba3dd56ff95698f4b1155c65e584b58e087': 0.7321287428022542, - '0x038dea8232f4b29c6b063544eb8d4ab79d2b5563': 0.629483199284425, - '0x0394f1178cbea4caece422abf760b280803c116f': 2.881349678707739, - '0x0396a4269dacf3ef00708aeafce0519de71bf86e': 9.811284337435453, - '0x042e9ff2ba2360d025503770fafea6556bba96b5': 4.56061794805842, - '0x048ecae6329e42379b5181fec899225384256291': 0.3571743712644374, - '0x04e191e2525e42322ce0d303c393c05dae6a3204': 4.590318402918891, - '0x04f387b2f27e1c1fcb95eefa4e2181ab662d7f6f': 1.7927973900326415, - '0x04f85341b45088559450f0d7f6943c14c4fd9bb9': 10.673607317509594, - '0x04fdbf450cb3ba803f7e1f53edda377d48379f0f': 0.46376939745857726, - '0x050f788d09395724777a67dd08be127cf70dd238': 0.737238989383181, - '0x051a0e3e0fe5783f7c0d5c1003fc121cb9981183': 0.1923467293950896, - '0x051dc16b2ecb366984d1074dcc07c342a9463999': 0.1399767963829917, - '0x0538f88358e101467970930585307278afe4be48': 5.075296691069047, - '0x0550772ceb4aa33d84ede42d442ac46024eae061': 0.7129228967354041, - '0x059d751e47cb00658608c5767f013421b937b73e': 6.832866919181133, - '0x05b8a3df945d707780050475a9661883b03e50c1': 0.2357323675149262, - '0x05d4ce568bb244d1e3ec7e6bd980ee6b0335910d': 0.22171902088471065, - '0x05df796198b7fa78c88255580ef87f38e3d826e2': 0.8104777019493874, - '0x060967d9d210de9b75d6d49236e8f108437c03da': 8.986622267138005, - '0x0638d6b019d699eec59fc499568a2f13d52b7432': 0.48585920155820267, - '0x06397dded2a967dd747b8bfa0c273d2163cabeb9': 2.221959087790297, - '0x0642e89606c9e149d889e726b74de131018b4c0f': 7.129228967354041, - '0x065850e4319dee396522a8eeea6f7f53aab9404d': 7.203316535721017, - '0x067249eeb3a8cbeb3300f19e227ac4708b3be9e0': 0.17823072418385102, - '0x06c5f2c0a296f8f6d7bfb215919c4406e0d39f32': 4.0841439227416645, - '0x06f2261712ba33a57e591be989b0a9785e272105': 1.9228583500496386, - '0x070164bd0c3d188968817a18dcbafc81c8c4e411': 10.184612810505772, - '0x070f0a9ce35a8f758ceba4a25a23913747a8fefe': 19.14991795023264, - '0x07173bb420de135aa05ff97e4750d1456865ffd0': 20.985847025690596, - '0x0726d3942d4a69e297df0fdf82122aa0dc4ff7a8': 1.5323350093622816, - '0x0728001f95c871b37ee5bdfa990f4edc8c135f0e': 0.3261619750855585, - '0x0729102e6a77e784423d2324bd29e02f21ece43e': 4.562706539106586, - '0x0751125b602dab04987977c91e68324432dcde03': 1.0222223355098337, - '0x0753f4142ad5be86855708c5b52fe1a980ac169b': 6.365383006566108, - '0x077a50ad0cbd06ef4067715c058382718ce03ce8': 0.4140227244159623, - '0x0786cec8272066f75d8581a9e36986cd9f1713c5': 7.9465119247292, - '0x0793f65daba18d23312b6173ac7519616fdc1e75': 20.308629882442702, - '0x07b1f3a2254dab31a16f9c0ee1c5b2eade8b5b25': 5.465892255017414, - '0x084efaa5079eaebd9d0a6f08af83976f9f8422a8': 24.443070745213852, - '0x08711b31de3cfa56a4c9a5c5927f54bdf4ba3b99': 11.6834923578996, - '0x08965de2d930d77e62f31c950d063aa8dfc6fc26': 2.7888399101190613, - '0x08ba0bc97700331c56658eef298e96ae6610f1a7': 0.14258457934708083, - '0x08bb02e3676fe3ffbb843eda1f6e46f14c0dd217': 1.478796816838504, - '0x08cd3f9403fd286cd10596ecbda345c5a08d3aea': 2.0269436373713012, - '0x094c25917e3f28644de24ff13ace516c201fc446': 2.1216866543981547, - '0x09b100248b251538c7b5b775d88099f25fa10a05': 7.1292289674879985, - '0x09c664254e2f5d42f530c6ba8f1576ccde31bd7b': 0.14737516800920453, - '0x09e2c27caf717619e19401f226cd101037367b62': 9.885291503599051, - '0x0a31a64be7453f786d84adb757371fd2ffaba7ea': 0.08483782471151308, - '0x0a6b05943627ed5207257cbfb34675733034c309': 4.872763440241079, - '0x0a868a0ca7ba34afcc4f8356f3a2f1bdfcbf3e9a': 17.753339214091053, - '0x0aadca23456d83ddddbfd05103e73751347fd67d': 1.3336471509634422, - '0x0b24600929c33dc129524416a9007c83b93f8dfa': 4.775910873503446, - '0x0b339f7b7e55604e579e12521beca2ac10a67fac': 2.8217737899722684, - '0x0b375247de62dfd497a2c80e28190caafbd5907f': 12.211107322267726, - '0x0b8da62f0c04a3c9bbee22c93469662a2158633f': 2.0146685534844786, - '0x0bbfbcb436b362a1705b8ff97a2bad5ff71c7e5d': 1.2572631315110232, - '0x0bdd77f013669ac5788e6ae3e80bf01e34ac05bc': 7.978348097696454, - '0x0be216ae805b62163783e3de1bc8900ff3b7eada': 34.82931576296452, - '0x0c084b2f7f1c86bfcb588f4d49816d83b61613ab': 0.46253140915035146, - '0x0c3c5fd31055d72faa7ba6d6c1a0fc9f86228048': 0.22171902088471065, - '0x0c8d85d9d66ebdc978853d2b588de35ba09970f7': 3.5646144836770204, - '0x0cc720fdd93b2ef7ce005fe46fad5df6703d200c': 22.012713978467378, - '0x0cc8bdba2b11e87a204fb00d16004deb6add650e': 6.527283058454346, - '0x0cd3694bf3672478be5d61e36740a7704613379f': 0.07842151864089443, - '0x0cfa191c1ed35bb65b111416efb4e0d9c7f1fd5e': 3.553922582778372, - '0x0d047fd94c472b7ef3554067af1dacbfee3786b6': 4.491414249433046, - '0x0d0a9a4de0923e330332126a7429f10acdb1532f': 4.904520644212047, - '0x0d0aff1a42e8b8babd4504f9d51dcd1bd183b6d5': 1.0694035873978511, - '0x0d40a0a0a5eab835ef88a12823966f237f119703': 13.918240125180297, - '0x0d4a1c1f6242ee426a121fb8e9af2d2763c380aa': 1.6054849694073139, - '0x0d4e89af9e8c3b1d83586ec02d08333644098590': 0.21387686902062122, - '0x0dac0d038a8829a9cd51698e82586da8165440da': 1.1982879340618344, - '0x0dcbd3954a38042e1fa5534642783202238ed155': 2.464097351249517, - '0x0dd5dabe0c90db59e6ecd8314eb965314f398eea': 0.22171902088471065, - '0x0e000e791ad1223114ff558db47bb3c731ac2fd1': 63.927058086904744, - '0x0e117239a64cd97a0d7867cad3616cc5b1d501e7': 0.10502067191809238, - '0x0e2697c26d78cfc09020a8401f09800b570ffc9c': 3.707199063024101, - '0x0e3f0756bf4ba0e8979386aba96677e6372f11cc': 15.276919215758658, - '0x0e42d32dcc5b83a9bc74523af3b8c3a3b4cf107f': 2.9919026196988163, - '0x0e49b49e8ba640974478dd1c45312123d44f3f18': 4.362348877885648, - '0x0e8727bd9cd48ec0f258197b70ef1431fe149dd7': 12.164208190323558, - '0x0e8bc576ba0a301ca8c131d21b59420716bc8b51': 8.692425072465346, - '0x0ebc175a68cb4ab78de5951c5d58968903135a9b': 0.9840675519465075, - '0x0f5d7c309c677ed520955235eb8c88e55f29c0ac': 0.49214719750890706, - '0x0f68528b3f3e79d952d5ee00708ec4609ba8fece': 4.273759409138227, - '0x0f777be84015cd8edb83dd6cc94666f6f94af9d0': 8.660671794804108, - '0x10097f6c60f99c8b346d6b061f687be2ee6acfbe': 0.8555074760824849, - '0x100ef1406fc7ef0051ae68250558a98c17358b23': 0.35646144836770205, - '0x106301e4920827937c56aee4d6c54e9cd0057367': 134.38272268748932, - '0x1084af6040c4b89e3f98c27253a4271683992273': 11.146994049476676, - '0x109910d0b5b401a3726a36560243ab49ba4b32e7': 1.097986706913214, - '0x10d0382698476107f3e96db505bd78fc372500ca': 1.8535995315120506, - '0x10de399f54910192c3607f5b5b04943cf9154638': 1.577827577053882, - '0x10f69b33361ed0968bdf6fb6395711f4ab489cb9': 0.6416306070618637, - '0x111e364336040f181f332ec5fee69228a00031ec': 5.081588249094154, - '0x1127558491caaad50bad7158fe4a809d3481ca9a': 0.2055476955442896, - '0x1127788d5bac732404976b7ae456120b6f9c9144': 3.138680023165612, - '0x1155634cbef3a6b571dad2635313be2d09a0cdf0': 20.982931619497325, - '0x117029bc39380663a89c7c0ae2c13c1ec612d6c4': 0.4034276652994876, - '0x117b73c50d31eb2ceb5246515f9452bb32d755e4': 1.2102690418071842, - '0x117caf30527280b7bd19f072efa3839684f71ce8': 12.417419257347893, - '0x11a1769ba3c0330c69154ea7fd0dfdb0b01a8611': 0.09240622846718645, - '0x11a43fd426188829daf80de8b40d0beca3b06887': 1.4258457934708082, - '0x11b42aec74c26c8062288cbe2f9b19617ff3ccb9': 17.521769902088028, - '0x11d87626f9283cdb2f0c828b7f419d9cdb70e548': 5.70087934025802, - '0x11ededebf63bef0ea2d2d071bdf88f71543ec6fb': 75.56160757199021, - '0x121a29ecfb6e191bdd0e31ba1efba5d54abd3ffa': 148.2741614431225, - '0x124d9bf2fecbc16b54ec4accdb14d44c2144f012': 562.8710887185089, - '0x12b5c225c3dbf8f70c0d1788aa05936098f34496': 4.277537380412425, - '0x12e7a9c91ae858bcf38f0f90687ef342deea91f2': 0.36511048517381256, - '0x12e8c0937000ffc1f67ab17999d710e6abbcb7a0': 75.1933087757113, - '0x130152a78f7cc6bf1655851b4ebbc4be02d62760': 0.22171902088471065, - '0x130581413367911de964c6a395f2b13f58fe0118': 0.32061420793160034, - '0x13099532a46adb1f7e1342d103ac84c3402f10b5': 0.09655297079813516, - '0x135bd694649a4b1bad69847db022bf6ecd98ee20': 7.992358811352161, - '0x135d867845561c19c66eb97dd721b8a76fe98185': 3.5646144836770204, - '0x136faae0ee63442a1a50e482be2fe4a2d08aea8f': 0.290052478861559, - '0x13bebe21d113263f0f7eb82ba658a76a6ee73d80': 1.0693843451031062, - '0x13e6f072f4e5994c179a01fc83af244e84cdda02': 9.145748023630203, - '0x13f7b602f87790b4024d8a1b259e70e3cdfcf534': 12.404129069662792, - '0x13fa4a5a8b12e7f369598322723320fb1a53bb11': 16.911440151680893, - '0x14436ab1275732862112f08f1167d307aec2070c': 0.16046656973971837, - '0x145732770fd9e4105f869b796e6e162b99ba4085': 0.7665726812402173, - '0x1475d91cb09caf003ba15ccd04af55081c2700fb': 4.891869928737442, - '0x14964f915a278255fdb7e2de91c73d75650e1b19': 0.0761659603515119, - '0x14b94d00d8ede2130357cc079f1cb2d8f7553efc': 115.62019219302097, - '0x150db831ae32d95dccf82bd68ed3ed500b8b2cb2': 2.4550448646620815, - '0x1574dec8be2e476be411baf3dd4ec3b94c55aac6': 0.22171902088471065, - '0x159bc415caf9f6dee53352afecc04e64b180bd02': 21.38768690206212, - '0x15ff3477e8f2d3dc56d1d0a16b3ab001825e3376': 3.6407355397682695, - '0x1622c83a735b4038242c55a9bf0a11f6e5a407f8': 1.981055886990406, - '0x163d982fd641dce699b5d45940411fb67ae0f91a': 44.07091294308183, - '0x1680ca9c04808695fa337dfebd47a30e541b0441': 0.4016714912230606, - '0x169ac4a5be1412656f493a3cb7db9da3efdbebf4': 29.630252297108672, - '0x16b333573e91fe26ed0e17d5671baa312c715ea1': 3.4039134647971547, - '0x16ea6fd94af7eaa977e98e16dc66d4b8bce0ee12': 0.2031411960525782, - '0x17236fefc3f1a08760a530f74771bf9de2ef9099': 0.9124954800262962, - '0x17296842cbdb2bee63462fa6304b10a01a5e6f45': 393.5488250234437, - '0x173b8a80832a1bc9ccf1e33dfe0b788f4de835ce': 4.2094787520432035, - '0x1759e79b9f91c748731b68758848847433bfb6aa': 0.2729090338747356, - '0x175a69a658ea43d2b837d8b708a545dde6e16fe7': 1.6912536811419365, - '0x176144747ca91e25f296b1ef2df806558b20718d': 0.7978757454025616, - '0x17786e08d474655d606c77c74c32852a66efe2cc': 0.9267997657560253, - '0x1793f64808ffa6c22fe96fa349f776eb94be0ed5': 714.6262389212517, - '0x17b31c28d76045eda91f8cd191420e5bef52deb7': 4.502487873865266, - '0x17ba0c93587be8dbbce33ea408760b5ead8fd059': 44.29954220066558, - '0x17e838eb267595c381af29d201fb130dbb6a475b': 150.78675636064264, - '0x180b3fa07b0a198b938c1de43e371e8a79eb8288': 6.871615086459398, - '0x187d3c1b58a88ef8374bff28c99893ab35a11690': 0.42775373804124245, - '0x187f4db433475240a524a75cae57b4a6fc36dcc4': 8200.92673745972, - '0x18cca7257f50b46871b53d13fc5f34e2ce365730': 63.50489908064408, - '0x18d9fcb56da96f6031514d1025b223dab560a698': 48.5960326881403, - '0x1903b1e5b4fe39cf8b9bab12b0048c4daf62eaee': 5.168434349088855, - '0x19410c41987500dd401b752743e2afc3d0af4ac0': 0.24567332790948687, - '0x19508299452e27d4dc4a87c3bba19f6c46fbec46': 0.17241439757211605, - '0x19689e8758b4f21ef55d5d64e02b3de3d1f55bef': 1.2941914589872685, - '0x198e115754a28cd5248dafd4e638c8689dec5cd7': 57.562188859964884, - '0x1a4e624c83a0b6d0feb6777e10d1c02f377f7ed4': 0.8746928018225231, - '0x1a66495ac83a3f29490631748d192cc7aea02d80': 4.7316233476515634, - '0x1ab3e252c89e14da637ab41e5bdf8c6c8696208a': 4.195445324453258, - '0x1b0c8adec17950ba20f4206c75e2322bdcc27eca': 0.127762734346671, - '0x1b2ca5e488c7a8989d422b15280c819aaf56d2d4': 8.874059513442505, - '0x1b80787de355ee60a04eb67b3b21b1e8230be954': 10.291121802800875, - '0x1b9ca3d511886c71e9b18f05965d168153120c02': 2.1387686902062124, - '0x1bb442f8612deb5611bea4e9a0fdaad9b24a4ff0': 0.31340242050101613, - '0x1bc93a838fb84719199f01bef4e799decf91d4d1': 0.8251522352890143, - '0x1c289a5559c196b170fe15409ecaa3d43ca131d0': 1.4258457934708082, - '0x1c2c04e520eab5aba0224817409bb4169ce32238': 0.42775373804124245, - '0x1c39fbb6a618e16133ec48d85c5b353de7b32771': 5.238330486828242, - '0x1c58e129bfd29aa370f511d868f8f544982e7622': 16.973677116262035, - '0x1ca13d6342c834c197cc111d6247607a044a2083': 3.5646144836770204, - '0x1ca4c53b6b3ac895d5b0a49fbb73f3a693aa0039': 1.3151337590656222, - '0x1cd313fed1762079efccf7d54e0dcce5dc9afd98': 0.6210662411841387, - '0x1d0988743a8d065b14c080b22b3447d652cd8681': 0.2536464233340459, - '0x1d2caacf0676183d7c94233db57d8c9c65dbee23': 3.895499762611289, - '0x1d439b223977fc4d8185e47ba6a8802fbd351fc3': 35.66826356103889, - '0x1d6eecdd656c82b6b843f359929ef9bea28c6750': 9.909628264622116, - '0x1d775f7f404402f0ecba3d6cf36ed78d8db84635': 0.23373752409770815, - '0x1d7b13d2c5c130e698dffaa11d76adabc787f269': 3.853471971599127, - '0x1da7b8b22c398f081878e8006eb07bdfe388f5b7': 32.258056832256415, - '0x1dbd08d4644eddfd6acd355282c6f07859d7bc76': 4.840806396265209, - '0x1e14b928a4b895c9a5498e6b239e58f8e1ecedd5': 21.690977144008894, - '0x1e2078ff52a11e67b1c02e639867a61e2dbc7481': 0.24368657263841234, - '0x1e25af449af3a8a37b66367869ca7002036e98ba': 0.7129228967354041, - '0x1e2dcc427d17dc276907006b7f00d755853a308d': 0.8425864265541446, - '0x1e3bed8a10901f385060d6d5f81b538aacf63bcf': 40.90515793887557, - '0x1e88730ff5d33e7349e0ad656a9246424559144e': 18.991835606052074, - '0x1ecca5624ebf869f85ba0e31c1e671afb3b9fd79': 28.5565734379234, - '0x1ee164d600ea4ccf08b45061de3c2fcd48ca9492': 0.5029483122545686, - '0x1f49867c2f1b4a9976b79526f12f199fea973385': 2.650402327056029, - '0x1f7824f7427c7b5181f547896b00edf35858ca1b': 0.7129228967354041, - '0x1f9cc9ab9877856622ee5d8937c9443de6147736': 2.365809267028962, - '0x1fa2b455600d50a49c46ecd32f9b8b7efc8ec292': 0.22171902088471065, - '0x1fa61ef2a3ae8e16c4cff900438cd88d665b69b1': 6.117569857276599, - '0x1fdff3e6ee5289f8ee824bcc1359d4096bcb8af8': 0.9379154596345316, - '0x1fe0f0579b4a0f20779e1abcba663fd3b2e327c7': 0.0942562542289791, - '0x206eee517bc036d3242cce439c7b8341cdbdcad1': 0.4134952801065342, - '0x2072a9f63bfb23da5d67e75177bdfe6bc4c3d365': 42.87234115162066, - '0x20a50c363ebbf72209add6f89ad994b796bfd6c2': 4.000844823099912, - '0x20bacaa6e688ca213ec46d9ae7d08bbbe39b82f3': 0.5431464910899376, - '0x20bee3033d9660a7f1c15c32d2543e14fa473f53': 0.21318031658940131, - '0x210b95dd9eeb456d97a3f415d2001c9bc84904a0': 0.20778083505130654, - '0x212a0dcb7a1932412ccb32e2b0e4c24c4a3afc33': 55.64222455082183, - '0x214a4b792c67d2b36baedaeda32f1ba0b93a75ff': 2.227260425676298, - '0x215f629ac0eafb5e5346b187cd1bfd6a9b89f05b': 0.49711785912533774, - '0x216a81badf86dcb50ca5e9d9d67564a28531efd8': 0.8768951629845471, - '0x21801263db3649beea7896099348bc1214f99019': 6.158329770027753, - '0x21a51a76fa1ee57e899af6b4de98e5f6b3d7e61d': 2.863862536307056, - '0x22057c79e4a9f2856a97c90b8a5d73b5fa14ba6c': 1.5490769506571018, - '0x2208b0c1dc19000706cb243843a4302534931f88': 4.944373762506747, - '0x2266923a1af57662c8ffaa8b2ff1d573e40066c8': 0.9758292007902647, - '0x229def14b7c75e9c3694ac2b4b6976860ae51c5a': 25.106932257407117, - '0x22bd14032fb62f3a687af4c7408ba3ff46e552e4': 1.4859140981346428, - '0x22f7d1160d565843a227addcc9445999803f9209': 0.5328447125837857, - '0x2369399b4ab963fb83501720aeea41665045cc57': 9.365489863688822, - '0x2384048315ec2ca4c1eb3f724d187665541a4fe7': 4.464116010170243, - '0x2387d8393cfa211eb554c83dae3f93c3ddb7bf3b': 6.196629438742112, - '0x23922c230bb0ff2785cb19a887d0837db18daed8': 0.7129228967354041, - '0x23a842020b30e7d336b12655dcbc576c6b473d27': 2.0665189564623456, - '0x23dbc704ec284cbbc592e899bb1c093549274ae3': 1.740159333774398, - '0x23eb2207e9b0d019fc1b987fac003b70b31ff97f': 0.3073886710015765, - '0x243d76ac922742a67563e61756cb4fb477988ce0': 4.299201947932928, - '0x2461fde81bc0a8bf05b2383ed8374b1177ded251': 1.7823072418385102, - '0x2474e3fb9ee6af57a67c487632aa3355988ff376': 0.7129410765047137, - '0x24a40bccb1ab799a366e92322247f9fea17fa9b4': 0.35646144836770205, - '0x24ab83d9a1f48ed430995144195edf00949e8921': 0.22171902088471065, - '0x24b5c9552eec1410295ff62c71f60483053843a1': 0.1423707024780602, - '0x24c8ace7c94f9fd9b0364f6cfd508d8f08997ea1': 0.22171902088471065, - '0x24e219ebf46093dc5c5a748cb20b8c83e86bf09d': 7.974182920773859, - '0x24fce5597e6636f57cec2a19abb213271c214a04': 0.6420071433732153, - '0x25336865356fb0ac36925a9cb287591eab2da9bc': 25.073975444186555, - '0x2545761ab22098774fd43f775fd2668b6cc8e682': 24.523603149710492, - '0x259818c4703eeb7141206ea59dce5564e7dcef54': 4.163631556210786, - '0x25bb66d28f7aed46b54613c74309a53228ee6893': 0.42775373804124245, - '0x2656dc64946ee064a580fa4105e6f1358c28fd50': 1.0799559231750384, - '0x26683a59688d65f215838c99f8a5228f7a454436': 1.3707159154122255, - '0x26a601ac8a07e1c8b27bd2a5f05d6ec89fe7ce4a': 10.815514621596206, - '0x26e6275bc2876cc5e879c67844838d1ce533a768': 1.0693843451031062, - '0x271c76183e03ddd14b2c732296ec656f7b6ecaea': 0.8025882841322843, - '0x2761737a67ea0a6a7146f60d0cfef74a75046f5b': 0.27959288422023515, - '0x279fdec6a20f74d6f53f832bec6914c0e73fafef': 9.438287394208547, - '0x27e53a36e230ff37e389e6266251bacc1ee80840': 1.4258457934708082, - '0x27fc1ac5bb9f2fb897e042a5e7453b060fc1c04c': 75.38671435844189, - '0x2817c198bd85d31d9f4fe4df3a2fe041764522b5': 4.049062176368067, - '0x281b6342c648f88ecc49dd6de9ca66e7a1bde4b7': 6.146377676895021, - '0x281c54e02f33ca821c93a6272c2119796bff54fa': 0.42775373804124245, - '0x283044a7f58dc794eb4d4a9057c2870bac5eb973': 0.8827616377619183, - '0x288912c3f4a922389dfe1a6bd828d4cfd0826ef6': 14.131591959776701, - '0x288f4e865f77a56d61a5dcf3b3bddfe7a0622f8a': 0.38562203856495514, - '0x28a4c2aeee2181cb29394b68e8afee37c72f4082': 246.20259135725294, - '0x28e2ba42ae4553d98623d904388da31eb2a82031': 1.9812071473004333, - '0x28eb9be3d9cfe6d439896258a8b23556cc7204c6': 3.9489019811162613, - '0x290f66edd0b10cc5401ebfa7994b34a0a7c3e448': 0.7129228967354041, - '0x29258f4f8d06db12ff3f8e1ebc62229daabf7353': 23.108245140935722, - '0x294b0bbc1721402bf6d77d46aab72c1c2c3560bd': 0.09037075577782216, - '0x297ab21bb0191e8d7af6fa2ef4b2be759b68cd2b': 20.329082948875783, - '0x29a9c5a14b6d651e1a3922ec3555171b80ee27b9': 0.6126455454559037, - '0x29c6ae51b800d55a8f6ebbd4f4857c4a0babecc1': 12.570274443207834, - '0x29cb0fd0cc44d327e435a273778822b28c7726bc': 22.222825152523598, - '0x29e1995cd351335fcf425f9c4e87658665c195cc': 1.4258457934708082, - '0x2a1700f5bf4ee30765da80196cbcf2edac8eb2bc': 1.9562604286419487, - '0x2a192e6195ce8ee7a925263ec8ea70076ff0de91': 1.0693843451031062, - '0x2a2448876c1976ee0cf2a06c6bf7ca8c935aa419': 0.7129228967354041, - '0x2a3a30e7faa076bfbc89678dedb587764e2ba6ab': 0.22171902088471065, - '0x2a3c1115ec5bda3d23aa00e670f08bbd431f3716': 0.16704419124109463, - '0x2a60319014332bf82fde5ba3aa1c68b876d9f255': 5.490206387547036, - '0x2a766fb15e786cbdb43bd7b6fde43cd2504e6325': 0.12444145493224142, - '0x2a8333c2226a5e7be1b4200ba4d7f02793d8e2e7': 0.22171902088471065, - '0x2a98c3b13473479b2db3e5eaf9e735aab2f9ff0a': 0.7984396433473206, - '0x2aaf881538fa0dfc1cb74e786c9576b7b652b635': 2.553658207252549, - '0x2ac857bf38b464dc703a6f26dd37c715dccda8b2': 7.0579366776805, - '0x2b02c20c5880b3c13dc5b3aa288147d7b785d5d6': 11.835257866084994, - '0x2bd2e521fb97228986c385fb5ee6a2f6b1c243e1': 5.23452197097572, - '0x2c3945318e7ce606e5fac4284454f4bc3d769d3c': 1.4984642429787791, - '0x2c4b15e4b3671fe00c8bbb969225918b58e8c543': 0.7129228967354041, - '0x2c55d511f350508d075df84da8186a6d64256631': 0.31650924923464996, - '0x2c6cd2ac53276fa70b84924fdf8443732890d7b7': 3.603842681051741, - '0x2c9f150c7e9a624e53e88960213c69da0d60d181': 6.286360734083442, - '0x2cc35230e7e6b3705d1dcc71f5865b9108ddf8f6': 5.592136565403318, - '0x2ce0e70b9ed5bffef698f6631dce727c1ae3349d': 0.9254136449032415, - '0x2d003bf140f22125bfe0182e948f186f728ff367': 9.76837094128199, - '0x2d43d02863b0f0554e6739a53667fb066c994c52': 0.22171902088471065, - '0x2d79c6d2b99a7c857e1d8662f689402e59eac4c4': 0.35646144836770205, - '0x2d7aa374fda57dd7c4660b993b12800696d7306d': 29.983937602529142, - '0x2d8e24f5639d1b0f0b5fd127031d4341994b981c': 0.9685230298800247, - '0x2ddae4c25e343a37a3e4798ece59191f6d5ae0e5': 5.3173415767867835, - '0x2de0f6c480c7458ded1419dfbcf9b3fb5f9de96c': 21.012296740423928, - '0x2df128a84b4ba7582ea79c8768fe1f0dc953040c': 0.4514245966864607, - '0x2df21b04bc04a0fa3bb0d1e38d3ba4f8ecc1e1ac': 7.138708100468011, - '0x2df80118e53f3479482546e4ea2a6ade278d46e4': 6.4539955976297145, - '0x2dfa6d32605542d3d79ec498bdace14f07f0040d': 2.29262546976217, - '0x2e5f22968cf135a0146017978fc1d7a8a2aa2502': 0.12015920628846605, - '0x2efb72d15b37bca9ce445a040463545c7ed27b65': 12.477735597636709, - '0x2f1bfaa957dcb7a20b77eb6e3bc1e2c53d9c67af': 0.32488368956250174, - '0x2f39064d60e30cefc7c20af2533b834a8a8f08ad': 1.7092386872259293, - '0x2f8783025747c2a3e6b04739a37b50b1e9f19633': 0.8562507106874077, - '0x2f968d0699096c7936909d981418f0582e83651e': 1.1099714956632643, - '0x2fb6b53002457cc2a7eab098cf2be3350b64377b': 0.21474537149695588, - '0x2fc8890eeb8555723f5efb38c56949d837e1ef86': 1.284375561274743, - '0x2ff5e790bc28b40ee970d7e545985039a388c054': 1.9667774223966568, - '0x30046a33f63707497eb760901235b462e1333bbc': 2.401141346274385, - '0x30124f7fae84cd76190b90faa355a2b5beb5d3f7': 0.18889855864704375, - '0x301ce417a45ca5a48fc759d938406a044b6c327d': 0.23408090872511356, - '0x3025f2940debd92fc6318aee017415923592b3b6': 2.3853700442967813, - '0x30a4df334982a6dd7d44df32b2ed6ee11f10cbdf': 1.0519224552365591, - '0x30f0b900962f859d791b40791ece4cc0443e1b2d': 0.7271146007931534, - '0x30fd403dcb27c7f1152a62716f8cef37ce5f7205': 7.394548071091476, - '0x31443f5523d94bd575c992177039450b856c4678': 0.712923970943414, - '0x31581f7d64a01625fc79137e5e3822e42f343747': 0.5603085899068591, - '0x31626238a715511783d2e29e9c07e6fc182149bd': 5.500769667500532, - '0x317a233e6abe5de877b1cf6f3291f815c57bac81': 0.13404446087798874, - '0x31b172756906152ac18f54f35555e7e843d0a519': 7.699567284742364, - '0x31b7713b1cdfa8dee88ffc0af0c9a1c9eca59acf': 5.452993559260855, - '0x31d4a547ae1a5eed81469419abeb97115a51c2e8': 1.0729547452126356, - '0x320b488843d7b7fed0b78d1b09c03ff68d6c75d9': 3.6457758188871425, - '0x3217cd03862e4369e84d35fa32ef4b645a99ec72': 0.6305293790984123, - '0x321cf5effd8162687e9c18ed1a29bb6c25b2fa81': 2.240563266799864, - '0x327755d47828d0a522a60416db42230cab002797': 0.21581967569711305, - '0x329b89562a80615b947b1044ed9c4d28ce3e4f84': 15.437738923953416, - '0x32aa32b06fd0deba10fc80b8501ef8c536ec1178': 9.167546820317964, - '0x32da92d80978cb5d8b751ea2d082980de7dc0e85': 0.22171902088471065, - '0x32f8dd495c7da7c59780a4fc381e45b90a2f891a': 13.009800718619024, - '0x32fc9f713704ccc4bbac860eb898625c2f087da0': 4.296357895787894, - '0x33219aff64c59e38c478c3e139b8e51b85e1e69b': 12.678138601537665, - '0x332b34e40cb220bcd04e4347d272f468e300ce4b': 2.1396630743901524, - '0x33454f46b8ab4b33e510e5ef065dc5d1fbf34507': 0.43625176934862026, - '0x3358c12acd53cefaa940b056ed6e30960469e97d': 0.6423435299585992, - '0x3376a867ebaa86fddf9be3a94bce097376089a1d': 2.6633296413110634, - '0x33c3f18e557ae6fd0c0b11cbca08a66767978ce1': 2.010009805321045, - '0x33d68efa6d2428c03098ac239ee304ea3149357b': 14.258457934708082, - '0x3411c3a964e5d3f0f823481cc1ad35908ceef2e0': 10.484733489011907, - '0x343c140c5d126156fda4f467ab597ded07cc18d5': 4.001462401513434, - '0x344996ab718705dc2fb13acbb98c4f420dcd76a4': 0.35646144836770205, - '0x344ec0f642f80bb6815104f337afc4ce76fa10ca': 0.22171902088471065, - '0x34685ee0d0eb42f5ee16446c17f5300ec93835de': 26.665577745773337, - '0x3477f22b12bd719f49cb3fb8f16487f9ac50b1a8': 3.389936461625656, - '0x347af94127aa713512d1d0bba508296175b5a885': 0.22096683567388864, - '0x3492263977f0528033d5b47898d96cd60b928005': 1.9645671426786357, - '0x349adafb5c3efa5815a4ae975840be572a5992eb': 3.3387660688334786, - '0x34bdfd5f07f47219a8f437cc055e53f92ec7f141': 0.5437949855748825, - '0x34cd406f4349f5686bf66da66d7d72d962d89444': 3.8772866546791986, - '0x34e6db308bf366d48a8413d4f020210a33c83e4b': 16.646330780523886, - '0x35055dc57b925bcc2cbbfdd75e4f2a7e4698c4e0': 0.5601537045778174, - '0x35141691a594fe908b315896f52ce7e743d7aebb': 52.37051389132764, - '0x3515745eb95433916573401896a505d589f3cd6c': 1.7451617492357858, - '0x351a09bea2cd997f5eb99c534b6a7566589f2adf': 1.3014705749880366, - '0x353a34c3dc678a660fd8c7b194cf80c15fd09a1a': 57.29784027432717, - '0x3540bf3d6ec9618b3c27790c27014e6a250af87d': 0.4837305144143268, - '0x35555212cf06fd42f8df3c1607611830653cef3b': 0.7005264190065962, - '0x3556b021b66d08b3df7e2932e11120a5afdd3aa9': 20.725687069379248, - '0x3578f15007569406ad224627e5b197ab6be2ca1b': 5.434758528244597, - '0x35856b0b864f373fc221ed609db77796d6507781': 0.35646144836770205, - '0x3606ba053e42546389fc417fc910cae2ec43cfa1': 7.528890065541831, - '0x36e9053a73c029847269f35473877ad2958b9eb8': 43.3413257863798, - '0x36f9454263651a178fb7cc93ff96a1b9b9f9c859': 2.8087758236999014, - '0x3709fb0f05c269f7449a3fa30895ed39be6bb58b': 0.9145548313247431, - '0x3728fb092148560b220eb9c2e7a1b4a22f2419ca': 0.8955444783154352, - '0x37561eaec28db12fe68c0a47d0daf1c0224af02f': 22.02401671134288, - '0x377e8e5902f00bbcf2485129f66f3d911b4a3268': 0.4303489137876481, - '0x37a5c46a950377eb73326bb806c466d7cea03def': 0.22171902088471065, - '0x37f86bfaa3879506f1b76a4399803fd49a35d824': 0.5361172508482431, - '0x3820c2ce0d636c5b9b1b9a174a113481ed095baf': 0.2053109401793873, - '0x383711d785e958806e953cb08943fc119f20caff': 7.926112793637971, - '0x3862157afbe1881ca885b771cb3da11a1e1acbf3': 0.5070951929150956, - '0x3876f11500cdad871829fa605a5f338fc4a38c8e': 1.0819528492781965, - '0x38aa0c014993d1fd3dbc05aadba53bc2574dd959': 14.258457934708082, - '0x38c5e856440c5444aa5774d1b6d4088a6388836f': 15.35941591615329, - '0x38d9b396d48a3eb247e2a5af35150256275b78f6': 4.034531470368821, - '0x38eef7d3e9cb0502406dcb3c306802be33811718': 0.13507094008660248, - '0x390803c87a305712a5a5bbed0c5a60696fc8af39': 0.14258457934708083, - '0x3913ecc1c8e2a97a34f51efbccaab5848081cdcd': 1.4351721260385053, - '0x395d515baab41e6411cfef679cb56a5a231c57a7': 0.9007394154126102, - '0x397257717501cc55ab2d52362ed1288641d3ea92': 14.30802578337088, - '0x3987da41dbe94f88f4726940211b8a56a5167796': 0.07250056486689802, - '0x39af6ee6eaffcd73f3d863b02db52f87e33c6929': 9.866667137235586, - '0x39c661bae2f608b3c70d19f88e26b0915b9f1895': 1.791288170610522, - '0x3a0053166f27a0d0e5275d62ee59f5460b09d3b3': 3.5646144836770204, - '0x3a01a985b3cdafbd8bec303d28166141c6c5aa49': 0.7129228967354041, - '0x3a2edde4f8622b22192b1ad234c23d4867c3b7fc': 2.4952301385739144, - '0x3a70e8c00f3bcf3eb845b6b6928aba92b465c183': 1.742748340201867, - '0x3a7da66a3862ee9dad6eb3a21e3918a882779323': 12.762762072583737, - '0x3adcdd2c61904d0eb07f70c86742e0bc4f409de2': 8.888007375356867, - '0x3af1e549b31792a1303c6985b8708c20a8ddb76d': 23.217233405374273, - '0x3b38398fc2e316b84cd0421072ac9e2cd7da4560': 1.4258457934708082, - '0x3b7fe05a061489dbf84cc1e2250e69671e31aeb4': 0.22171902088471065, - '0x3b9c8a558ee744d1c653c5f1c2e3a43c5b9335e0': 1.3226849590715564, - '0x3c0c2f6e711d1122d5413d4361e0f83385ce7245': 0.6170039967792823, - '0x3c9955185f209c4e749fe792478d0a9e14c91032': 4.488558559640297, - '0x3caa44d49d2e2e11efc560bd5c52245ac89eeeac': 0.42775373804124245, - '0x3cb81aae04a4cda944d2e0a9763b49b5b2b83a7b': 2.195468948019534, - '0x3cc91a520cf6d24f86e65bc4ae45074816856873': 1.568430372817889, - '0x3cd337f044a6e5324510500300dd005bac1615cb': 19.823400336909557, - '0x3d0c1346244010d42e97f2cc5b02d6800a2ac13b': 0.7129228967354041, - '0x3d143859ad6a6fec4edb1d0f345213fb34a07779': 0.8127766514329201, - '0x3d1bcbe454e60b3724efe8264f957a5721da5a47': 1.9318070038008714, - '0x3d1e4610c1c5e3a91787e4d3e5f89791d4b798d5': 60.6660849644532, - '0x3d4c1546407053f5cf11e6d5946b608b679b404b': 0.21281436834506556, - '0x3d5689e9e96bde358df2dda595062c6e95b0cad4': 1.9967959483837907, - '0x3d65768555cb4ac47572e07fa880124cd9eaead3': 5.31904060446743, - '0x3d77258ae064f90b14d471650134084358315248': 21.38768690206212, - '0x3d83d43cdde1e890d8e61104d4be5208d2dd4d1e': 0.14258457934708083, - '0x3d91abdf4541f8a0b892533d9116e2ba2d00eeea': 1.7075447172595528, - '0x3dc7f73606cffe554bfa3b105712a806c74a5d9e': 0.49053953957901497, - '0x3dd5579e96ee5eb96d1271a3e6e4eda747131444': 28.516915869416163, - '0x3de2251b39171c660e578f8a0aa18a8330c088a3': 52.267876893298904, - '0x3de848617d923ad77576e7b7256d530fd34fbd53': 0.6051567399551386, - '0x3df8b09453c5c26e71e0cd2d2f1e92f5da351745': 0.1100855635658396, - '0x3e0dc8e3db5299e050eb3c35950c622006930a7d': 13.479643201710086, - '0x3e8f1ff2af2a717cb0d57c750ebcffdd7c8c5c9d': 1.298030980399035, - '0x3e9ac665782abd91a9fb268cad8505ae6fd2226f': 0.3072406137163805, - '0x3eb0ea1128a5f27a22db203e08e3a6a259814d7e': 0.3815654424212163, - '0x3f241840f609b4f9d9443417774161249dd30b62': 5.654121095596403, - '0x3f53ab5a0d3b87db731bcfb42ed29a9b8584c2ed': 29.393072325698732, - '0x3f8791781556440525e95fe52da2a1c00b8a3f95': 2.5658095053507193, - '0x3f8f40026991af3098cb4a5f841b816201c7ae89': 0.7129228967354041, - '0x3f8f44aeba84226a6264563177cc478d916bff6d': 0.3830371471819243, - '0x3fa069c0c06a345c794de2e964adfde6d2ac0311': 0.661989190421974, - '0x3fb58007dd29d6d565202964f0cc42cfda07f5ff': 10.504693667870043, - '0x3fd89d40199b0d1119b23cc3bf468efec027347b': 7.102251257036662, - '0x3ff1f9a3989ef741c1755e43f4603a8622fd16e2': 5.22929629998165, - '0x3ff29ef7d24c95f5164325f8d394acb57e1a565c': 0.0925373414038418, - '0x3fff5e7974152eda43a6dfe2bdf58a6af0837ad5': 3.579076751211921, - '0x4003fc3afd292ab56e0dd11727ea3439dae81ed5': 19.028137644449455, - '0x40158e1d5eaa2dc589552464010fe81b1b3a23f5': 0.22171902088471065, - '0x40c59330e35d5c75bc756e30688e49577b058b46': 1.4258457934708082, - '0x4119d556d7c00361c2980de53e90592da273248f': 1.1078419045565644, - '0x413e893e04f7a6a5b92882b7a5a595d04464243c': 16.63090095091236, - '0x4169f64bfdff38aa636f698dbb8df87b1fda5db4': 0.25248662182943526, - '0x4175f951428a3c0f7fed2dc3704abc027102311d': 0.30167992502064267, - '0x4184d9a175d13e568f3466ea93c02b6f8eb9f8c1': 0.32186037514933846, - '0x41c41c7f1f0163ec799d8ef3a983611681e4b6e0': 2.4219428577849014, - '0x41e3fe4e80d4118369253761d0ac3e8e243f42b9': 3.7212209034509636, - '0x42152bb239631f3af023c025848e7c8ce87d9c55': 1.94184305560334, - '0x42241240a6632fcf3582d98afea0ef4f36697862': 0.8801385351968316, - '0x42380310f16607563d03c7f85c989151a8296d86': 4.990460277147829, - '0x4252620694862e6f74fc62499d1701708d940501': 67.95746309623799, - '0x426570f76d8d9019c47f16958002dde253f3b8e6': 0.5401811897488391, - '0x42711da08d8c8c0bdb9a6e0a81aae0013962d864': 14.698825481564565, - '0x42a298374d691ccc1dea404911f6b3eb409c91a4': 1.924891821185591, - '0x42afd520393efe09ea21d4aaae32eb7eb10485ac': 0.49297848937262234, - '0x42e154ae24df6c6bbf2f87a4fe27b24060a1102d': 0.184418200649308, - '0x42fc39653a2e40fd290b2a527da91a1cdbd2c353': 2.048629634724422, - '0x436cf0ea20b6a77f571cb2b1a7628e94cb376fad': 8.733534287986163, - '0x438383134fb08c3c3ac796ee0819abe5ef8b36ac': 11.8388754027142, - '0x43b83cc0c5059fc6a2e175dd2402c80fc2140488': 7.560775111357285, - '0x43c6d6b6a3162c092423c1a2d57206cb79ac081f': 0.2930903885192942, - '0x448293da0c104336ebd2bdb83dd8ceebc596e16a': 2.6725689653860574, - '0x44c85555820c24f6ae6932e358700fb5dddf9c9f': 1.2572572674894946, - '0x4503e975e6800cb86a19f7ce6fe7cc257594ff32': 0.6472292641277683, - '0x456ebaec2e67b06de2e970357638ad7d4914534e': 0.34543681930398457, - '0x4574ef638b4be8a18ff56f7035a602d0f6c7c838': 15.229373782359371, - '0x45c3e6be55256f23aadec63576d8c633f6cb6e30': 0.8240499679794586, - '0x45ccbffbcbd1b4891036c0ca308efcee45ed7876': 1.5496805540813927, - '0x45de528a6c107efd74fc152d3924ca24643bb523': 0.7129228967354041, - '0x45edc20b149467edb8f122cbc4941edcd754471b': 0.17795268425412417, - '0x4611535c51100d439f278a4bd00e2d65c1a68174': 0.28516915869416165, - '0x462348c4e319152e36b3488680649058812b155b': 6.794679024447912, - '0x46ab8ed5a7bb8070d913ac11e676ad72d35c35b9': 1.6024548148165987, - '0x46d262e27ab21de74fb80f6d6b8c92d820477099': 1.4672205951000126, - '0x46f15f3fbc60532a4048e8d8f86267859b715e07': 1.6117250173419444, - '0x4738d330b97754626e0b4efd523b911e091bf601': 24.43951719424861, - '0x47606244ab0b0ff196ab47686b048cf06a0fba0a': 6.258186534286535, - '0x478bd0762f4652155de0c93ee353523f500086f8': 2.313996263151119, - '0x47c9c731dc1f4312d62a796d29fbfdd50469b733': 0.25240451579420614, - '0x48392652402694c84dd64b6fd99b6e99f52014f8': 2.93384706409924, - '0x48743674e45137512934e52a83dce56a4e4ff168': 7.200521257027581, - '0x487f194c5a0bcd1ad9ea766d1666823aa5367169': 0.22171902088471065, - '0x48a8d5c53c9f5a9c779bf0e82fc2fd53f2011035': 3.0068451309427404, - '0x48bf414f56d43847c1a6e4514ab4f6256febf7f6': 1.765940707217884, - '0x48e77ce3b490f06ba89b5db218a4e148a986029c': 0.22171902088471065, - '0x4903792a8a9d61d6702e3987ba696a8d926a57b0': 0.13695600042644185, - '0x4913a5556d8c2a5bd1c6d126ed686a983b1d16b7': 10.69384345103106, - '0x493ef80f9e374c93dee3ffbb546544bf1ef15f89': 4.327049841447465, - '0x4980609f4fea2990ce1e637a180ab2c3a70fcd3b': 0.37132097490882615, - '0x49afe5b1d95e5255a6502815399b427dff670647': 0.22171902088471065, - '0x49c30e52ab67b0839239ced720dab2b3165834f2': 42.67058720190323, - '0x49c44c1d3f3b8f16d38703e1dac11d21054d00c8': 1.5276919215758658, - '0x49df6330c93fb24beff623062c9c44d933ce4393': 4.3389416515815675, - '0x49e0718b0f8af19a6ca3c2ff9e41774ae59aa1d9': 8.551885304888316, - '0x4a03e42e34a123f1c15afe549bdb1df0f6317f6c': 7.278229425562748, - '0x4a3857ff1fb891cf652a6c8a5d73eda8f4593b5f': 3.3374928592716646, - '0x4a420e0878b63775ff4f4db22b4cef3439714693': 108.12160510441099, - '0x4a8bbfb8537b12f84935474524b539763d8f3881': 2.559950545495071, - '0x4acf0d497f8d3eacc7bb567f8725e19bf1501107': 0.22171902088471065, - '0x4b021dff8b60e31fc19009641ff621c6006e7cfb': 2.210132272169426, - '0x4b2289f79ac89934063d6a0a32652f8a0de52bb5': 0.49904602771478285, - '0x4b66265f772b686bca60ded7e87630e6547963a8': 0.7129228967354041, - '0x4b931e0148dcbc7117b5cf0ee093e3975b9851b7': 1.9685628096931373, - '0x4ba4c082bc88dca40d7b7105a1e159db2c8e2d82': 5.584367848360279, - '0x4bc908c25a6655ce3564e0b65beecd4eced9978a': 0.22171902088471065, - '0x4c4b598ead3d9b3f050364a07a2deaa6ad11050c': 0.7129228967354041, - '0x4c9e5875d66c778b0305f7c3ad103ed4bb4d973f': 0.11834520085807708, - '0x4cb97e6f5b43f13dbea66f4b20f561bf0878653f': 2.466091464945698, - '0x4d24a39c4b5fd0873ba07f9a90e885e0dc3553a0': 0.9683366532144065, - '0x4d3b6f9008947bba2e68e0dc201a9374e1fa1924': 0.22171902088471065, - '0x4d6c22540065b03c92ad33d9fb01264e5de8ede0': 3.2081530353093184, - '0x4d7f50b9dea33a478c60f20a139d766acff23418': 13.829735420747923, - '0x4d8f253aab29f37fec17e3b597b6ed0372d17e79': 0.28516915869416165, - '0x4dc7003d6190ba057a3275be41c67243f0ee9224': 18.052643946235033, - '0x4de2873cc64470b11408226ae87e35e10f66bce9': 4.073845124202309, - '0x4e0db98c173b30b3ba573e08aed407eec1242b94': 0.22171902088471065, - '0x4e18ab44c8eba6a2ea79d7c1f1f296fee4a9bd08': 0.7025389051505808, - '0x4e1b6b6cad93406b03d4904650680a77caca20dc': 1.3458747466808316, - '0x4e2a541f178040459bf664b08f8ec7e8fa4de13e': 0.22171902088471065, - '0x4e2df374d935ca8647cf92a42ec0f32583e5c2a3': 14.381747139364341, - '0x4e312eaea0705d09e1a6886b90ec1c42f50ddbfa': 0.7804695752240739, - '0x4e44121f04c29757cd14affdb3089da937e26cbb': 0.42775373804124245, - '0x4e4f1a51a1e77ac4b69d4207514a4a3fd40ca29e': 5.295088554062666, - '0x4e9c2dc261e0edbe2c7713582eb2bdb0680f902a': 1.1406766347766466, - '0x4ee362569b1bfa2913278cd8ef5d8b463892136c': 1.2043602956243697, - '0x4eeca26b144d1b786837529919bbf3d0422cbbcd': 3.725634895319769, - '0x4f3d78c8943a855447ef7366e48e29cfb4224efe': 6.562081808631537, - '0x4f607008e20ec530ce497e8f238dcb56ab37168f': 0.9155835297242652, - '0x4f8032fdb48f6c700610099233a31fde75f9b453': 0.4792175026637166, - '0x4f8d297b5d77dfcc7e05928980d361fcc0eee577': 4.959561494132332, - '0x4fa718d903cdc684a2f397d82d8d5791e9be4033': 0.8868760835388426, - '0x4fae778f4a4f76809bb5ed1c053d59d42459ad2a': 14.70882292206717, - '0x4fd130d3341a364864b925ed053b60f82444b91f': 40.258822528268354, - '0x5017e382c1c2ae95fe8ece3eb7b4682cf314be1b': 0.724182411451213, - '0x50588b676670dbd480e6d8530b8c99ddc6e851f6': 3.5646144836770204, - '0x507326eb0bdf1a63c54dad8513eff8616eb4bff8': 0.22171902088471065, - '0x507877597378ed46bd34e6caff2f290eabd26eab': 6.429906430797359, - '0x50b5db1662cbe07bf963e055a15d784c144034e4': 1.8172977707946814, - '0x50c491ffda25f9e472d467d60835468c522e7d3a': 0.8044413912542169, - '0x50c699a74906fa9aab9c36d4a467940bfda7f760': 1.3431538666784688, - '0x50d0101f6ab28c39ec7a4df15ae852ad18137036': 4.108792013827706, - '0x50eb44e150092598efc37755dc817d16af7f7f86': 14.98270072755711, - '0x516e797f0269544d2830b144973624389b74e970': 7.129228967354041, - '0x5196f9696b3c441cf0e982f8bb96a1b0b74d69fd': 0.5481380343294996, - '0x51ca0c6c642c3bea517a79a22816b075f91c0a54': 1.470956256051261, - '0x51d33bdb729bcfbc9d359cf5df94fa9c802fd825': 23.94915951077231, - '0x51d603a579137e26eee7bc148aeae908919ed8aa': 3.8461214226192917, - '0x52285cec385b5bdc2db8463ac3f035766bf825c1': 5.342443929624733, - '0x52409d45b11ce63d10c63765b3ab489909bac916': 0.14258457934708083, - '0x5250ffee4fc6d00f22577428d84a426b59a258f7': 0.23161007257590227, - '0x5258989365431731b5eb60df6d3e0261c26d8498': 6.532007851998609, - '0x52768b8af60fa2a752205bcdbc766a2176febf2f': 1.2274278095186886, - '0x528c24cf712053b6b93f98e9b6571bf084c4ea7e': 0.07337313369096658, - '0x52a40189e5a271ecb16d073ac606c7f573f3ba7b': 2.2087440109096623, - '0x52c3ea74c79351cf990bd358ace9f1cb1165a31e': 34.186338077530735, - '0x52ca5dc4925012dea68e271be96a5951845bd587': 0.24124047824841152, - '0x52d5c151c8aba2578531bc1ad19b68cdb009f947': 0.35822878422870924, - '0x52fbbd3973388bd94c0e5b644e29133fa78b7717': 27.536686655461494, - '0x533596b2aef4d35dffeedffcad7920b16f8879c0': 34.80643974106789, - '0x535c31980059a70d333ffb6c18da344a7dd577e4': 1.266515746432024, - '0x53631949e1e1bb497acbe389a1b1ad098910ecc2': 1.575349513217216, - '0x536f428c511dcc898ff92053079c041cf2cd7b14': 18.65998385356733, - '0x53756df6e315e645b6548a40edfa2b41cfdbb821': 4.277537380412425, - '0x53aa4977e41a3a2a7811726dddac66770be29e0f': 24.739597876704632, - '0x53b60249254fff08519fc4ca123b4a7d287936f3': 5.096590386967468, - '0x53c422ab841fe8a91a9d87c194a438f2d9bdb03d': 1.2221535372606926, - '0x541093c7b73c3fbd2cfdc7d4cf563bdc565b89d8': 0.21387686902062122, - '0x54143be111d14ce79b29e7d8db2245a4ed359a86': 0.7129228967354041, - '0x547a81ecf24dde706a50be3dc68f72dbbc6cf3ec': 0.6046719984086913, - '0x54a02017e585fb87816fc990aeada01b00b55ea8': 0.7824991817523075, - '0x54a19af1fe3ac1c127695ca29fd9d5211e5c0a46': 0.09587105677337099, - '0x54cf60fa37ad04da9a59ea1543fa45f7f2da726e': 0.9782512725362422, - '0x55086b1bea293278496459d09e888339d0ce7703': 0.7129228967354041, - '0x5586cb9aa46d0459025bf7393433970d0c62556e': 10.907259801443553, - '0x55d074620f031e49376acf7e260f351fcfe0c652': 2.1225013282926333, - '0x55d84f85820259e42e2648c52cd3647f29d95e55': 6.185107563603962, - '0x55f4512bf03ab9cf294b13da1896fdd28bbd2ebe': 2.1387686902062124, - '0x563141c63bc83ce2c209543b46419d80adf4dab2': 10.582997240682854, - '0x5640f35db33d6444c0e42d19b1ba160db107af21': 21.38768690206212, - '0x56c6c9387dd7976cdfc5a757ebd5905f50d1542f': 0.7129228967354041, - '0x577815df8f0d4d098fbc4841bee6d59e812f5263': 4.444685023138781, - '0x578557a5c1ffc56d3f655748bce6ba38e89bea85': 4.6483534824534445, - '0x57ac12aa3c433dafc9b9e99c6868e7a62ef1251b': 6.306290741320045, - '0x57b5214746cf548f69c4fadc09c4dee44f9e6a9e': 0.3946489098581697, - '0x58176a2d1c134f0a88f056d9984940452e53193d': 0.4733879326612759, - '0x581d2ff3b7cfdabd4f0be696252c08705fb16dbd': 0.22171902088471065, - '0x581f963261a40aa6ed3d842e4d149b5f097560c9': 0.22171902088471065, - '0x582fa78334f552acac0f59070db3ab67ea4acd04': 0.6819091296485479, - '0x587744fb3770d7d7dc34601998e69bc3e9a764c4': 0.5417422846943154, - '0x588a06d3767f156a7065ce6474888297f4f85f87': 0.7129228967354041, - '0x588e2956cef182b0096ba9cbeeb0787a42547158': 0.10542167853561438, - '0x589e8f2ebe3ea15133d42f6e74cf39cf6892cc54': 1.6574349574111849, - '0x58c0c8544ae004efe602bee37f0a29eb92182417': 117.97092484438319, - '0x58ccb7ea60a413e17c66a838ef888509d2f78672': 0.16165479886766992, - '0x5924ede9a9d5f28241be5e0edaac17bf343f16aa': 1.4252954614349977, - '0x5961cf15c45c0f3ce04d3d10159d923456ae1520': 1.724247218393395, - '0x59681ff5f37deb919d0b78b363d93b09ea4d9a8d': 3.323487761013116, - '0x598b27a20fff1f1fde9db82a3bb1b23e228f0c33': 4.4395107091378945, - '0x5a076d4704bc67da3621084194ee92815fcc54ab': 1.6449141670254566, - '0x5a1ecd8fdf21712ba92f74e229a30af3d00af7eb': 12.505556888565907, - '0x5a21f090a1d98d85e9575abfb3987dd0de3484ae': 2.162816061751376, - '0x5a4b0cdcf4bca3dd252d46b8d161e5a55ebb3b20': 2.2868079247509665, - '0x5ab7f0dd40186b97612f4d89f575568b2d163e9a': 0.7376855373729779, - '0x5aca883ab55d86e4ec52b9b84b0a29048d9ec92c': 9.600526683485795, - '0x5ada5aabc1f7157a6c7ad37c4e855df7c2cae582': 0.10855890825459014, - '0x5b2e1129b1f2b2b0ee1b83fdc594a113157f7b5a': 0.22171902088471065, - '0x5b4929c56f16b355da47177dd3156fefaa8b9041': 0.9833971561545441, - '0x5b590520482c981d44dfcd223b9a0d5de47e6376': 0.14258457934708083, - '0x5b8a6733599aebae1f0af7bc4c99c66235acdb44': 8.445359299224704, - '0x5ba42d5bb715839f318c1723a7073be23a4416b9': 3.8541958046606153, - '0x5bbb9dcb8f8cb3d166811c1fa3a0bd91fe1b502f': 0.41312263308575103, - '0x5bc6e3209ca9cef44aa0846e7d94f327cffba042': 21.387139445933183, - '0x5bd5122f3127856691a958cb58a21f362316ab07': 1.0109258880009317, - '0x5bdd05006b243df142a26a213ba2cf412e7b8c5b': 3.934246936566908, - '0x5c29c526d8348676706bd4a0af9d89de42d4c38c': 0.08038276952981357, - '0x5c46e00f0a5a38a9487a070d876320d9f9e056f5': 0.528743722033401, - '0x5c892d296b0ef2b9f41d1c7b202ab49b1ca807fe': 1.349401462965195, - '0x5c89942e2dede8a5bbb9427ef3cdb9edc70a4789': 209.92928551819725, - '0x5cb4ec6de31c879c8a4b888be1797d9a96a789b5': 5.094688416296135, - '0x5cdf7f161e257bf36fa0d4c3d8e9b8bee5751334': 12.201135191502656, - '0x5cf7950aec40f0988da1f4ecb1564ba5862a2d36': 0.9774830910431284, - '0x5d247da70ff34ee3bb57eed5d36e78c2be70a5c2': 0.7129228967354041, - '0x5d321b398618fee93aad25a424974b0caec57e85': 90.67065938690776, - '0x5d7b6d838d609f9c0a4022e775e34fb239d2a694': 1.4587139258621382, - '0x5d80e950cf754068b84bbea9e88caf1e084f17de': 4.505952297697086, - '0x5e2d7ade02ef1817c6388971b4cc3477c90a1b33': 3.5646144836770204, - '0x5e4c4df2c3f6f8ac33bcdb2dd50bf686fd496afc': 1.3371611282817226, - '0x5e7ea040983a36a356d7659d01c04e24d291a81b': 4.444902945620101, - '0x5f04b71c5cfbb4ebc00896df3196986e8c64ea58': 1.010809364556027, - '0x5fa1e57b48e1aed5da9902f88934b6e2076855d4': 6.230256342342069, - '0x5fcee35b42d172bf4a3af1d663abcbcb9e340eb2': 1.8525016225609143, - '0x5fe7e1ec20d713a61c42646032bf17a31257c2e7': 0.41301939713657077, - '0x5fe961f42941f9ead5f0e3eadf955bbe2a51a4a1': 1.4084933338739927, - '0x602888b64fef8bcb981fc0b0268b0818f5d5beaa': 17.080040347910327, - '0x60823a341d4816d0f68eb89e30de825a9f1993fa': 0.4539163104602004, - '0x608cef4c9f531fbc84bf439ff8777ae516dbe79d': 8.707537215633774, - '0x6098db87684ff506e92879c283dba4ec36983940': 7.931366990989212, - '0x609bb7e7c5c465c4f11bb0e0d811ae4c21e868fb': 6.622388457610059, - '0x60c0186ff5991baa686fb5eb6cc23b42c5aa4353': 2.1140958844581887, - '0x60d4b673b6ff01da76bb527bd6b69a107eb9c105': 1.6059911170665082, - '0x60e46a2de5775916c0a00f1aaef5d3f4cd8d0d3c': 27.12788145042807, - '0x60fc719005e96c112aebf0e65275b0d52d6e6c11': 1.3675553752161322, - '0x60fe71b14a122c07cad37d30a8002bc386e24f79': 0.7129228967354041, - '0x610691037e225ff31044d82488021df66c84d3be': 0.3402028560233294, - '0x61633e237b101774fa821059cc5acce4e4309200': 0.15906943196894732, - '0x61f6181a3486122a3669f4a7dd6f3838270a292b': 7.047192929626698, - '0x6232564d65a3da89a59961f5943582df2d506bdb': 11.77349711536827, - '0x624fe221ebf28cfe88977e191530be619799f9d0': 1.8571296931084844, - '0x62643a8bebb60452c0b47c2749bc4c0eb7b8587c': 1.5351307271067314, - '0x62a23198485f740b0a4f36b0d67415bd620d30c4': 4.608331616953469, - '0x6352af3a0ecd3b5b00525ee70e6fa18951711ecf': 0.13819297430319075, - '0x6378598e36068de0076bca4d73f74b5a03a772dd': 0.7014899297816392, - '0x642fcd7005ee152ef5846e6496a8d5904b846332': 1.5993701008190382, - '0x644aed3d2eca89e0a86e8ad9fc4db72c7748d2fc': 0.7556995366204332, - '0x6479d3baa8d5d6a587c093247929f09473604059': 5.280852143726372, - '0x649b8c1e8a45e25f306d554710225a08f417eba1': 1.7269737891893988, - '0x65185079bcdcae45b1a71b75c38dd70660e1ef96': 3.6465893393086546, - '0x6519b1347785a78d4611f4dd4be709725ac84fa1': 0.21387686902062122, - '0x6526da152b83e16acd21ddbe26044069ecda49ff': 1.0693843451031062, - '0x657ca2c755b40e5bc69a46e3e395108a14d25475': 2.3462460279566293, - '0x65a0aa87012b26a0ffcc86c8933bf1e3cf258ce4': 4.484798377290772, - '0x65b3ddf4daa64fd61e154d1e6ec878f5f6cb860c': 0.3635422138362451, - '0x65e6007b5856bc1f215a8f314c2a5407f4e56754': 8.329969615426505, - '0x65f2dd5a1a950544e093e60cc37195082fb9e054': 0.22171902088471065, - '0x665bdd3892a4cc66b2c7b621cea3f8cc7adca3fd': 2.502794988061106, - '0x665bebfc607ff9f47437201adece6a0e1f790fe1': 2.788229379317346, - '0x668fab5429f363f87c17b1d9f7eada702cadae1f': 0.22171902088471065, - '0x668fc6c0c95e762a66ad4433e05a3563101adc7b': 0.07880776068732062, - '0x66f999bac83a94878b3ee44602ebef6701710697': 5.525925183024914, - '0x66fb0c39d0db9349d3dded6d3f6e89cbb945d3d0': 4.148721619094029, - '0x67198f0d48ff9c8e27a368b0d1b2fa28f2e86ded': 3.789554609043754, - '0x67401ddad97fc1675b7454baacf12fb93fb01d83': 0.42775373804124245, - '0x674cb18fc8bc1498c0205c1f53c4d053d70f339f': 127.48364703338966, - '0x6760847e02905e57b7762b2f96788e95486eeb86': 1.127221145371639, - '0x6765a7c54ac2f8c28d36f983d787c6c045691062': 65.74061574629889, - '0x67d583aca6a6725f7e4c8a081131eed2f367106b': 2.6787846401342, - '0x67da197829deb74983d61f635c3b03f9b7016af3': 8.55507476082485, - '0x67eca86871985831470b1863ba4a751d803d7b8e': 2.3389509158133213, - '0x680986e431c7363976cb8eabb4504164a25a64cb': 185.57105541433447, - '0x68b0bc53046d8eaac7dc0468df2e9e46ab340984': 3.514042843916761, - '0x68b79c0daa649433fe84e6bcfd6ddd8a8a56d48d': 5.424609344538226, - '0x68ba30f5ff99b936830c87da5d38f7c0e960a14d': 2.115943742289643, - '0x6908a4e27f77783c6ba61d1d03db8ff1f7121661': 13.010726900667251, - '0x694d0c1b77882900a2c5637c552574d26c86da01': 0.35646144836770205, - '0x698fa6437475f3f86df33ea0cb612ad529954811': 1.2528741427702077, - '0x6996a15857c63802578a269800078b4b86506aa0': 0.15839951211628486, - '0x69c0e518e4d1dd2d2369f71e0a140422fad1c5f0': 4.349396912134013, - '0x69fee7fbee489bed46569e922bc91463f741c6fa': 0.8265270739852827, - '0x6a118f75177516246139879fc783da2f69ba7c21': 39.521671571323196, - '0x6a5b80a7d867b539b0af192718d7ca2888cf63d7': 3.2081530353093184, - '0x6a7bb96c57fd36dfe5b1296cd59dd388c4907f5e': 1.590929393070369, - '0x6ad615bad12ca5b3eed29690f258b0812bac4887': 0.22171902088471065, - '0x6adb4db954a76e73e20e57fb1b63b9d9934397a3': 0.35646144836770205, - '0x6b11f58e755f86247fa90054b9eea3080d70d4ff': 0.7648942653312325, - '0x6b538f5191a2a4201e2f39a880633b870953526c': 12.482115678873061, - '0x6ba052465c36c9c3037e15e4a3018925a852e095': 0.10478620316817773, - '0x6bb043db109d93d5ab3c67947913cae53fed2833': 87.42447254303502, - '0x6bce075217d3c1625bb2d79a637d36d79058e95e': 1.2651535337742248, - '0x6bec785e055b4d1ba6996187a3abaecad9885c21': 0.08622392967118306, - '0x6c388ab724b02c9b13616c2fcf1398e501d40119': 0.28116819697785483, - '0x6c5da7ae9a7a23c62d3ccdbabcce48d328fb631e': 0.4036827874800056, - '0x6c5f4588c8d226b83fdf0fa606ac9850b34beec3': 0.18364604808957813, - '0x6c7e8a3b7c6f98b95fc38d2f3e926f1b41231117': 0.1579012535426602, - '0x6c865e64b9f7731f51c87c7f475aab1fafccfdac': 0.2444447566201695, - '0x6caa99fca02174b7896e7284c79fc1e93680683c': 6.3330211888874794, - '0x6caf295b2325b743be9c65bb3873caddc2ae0ed5': 6.487598360292177, - '0x6ccdcf17792447277bddf12560678f3ac03d364b': 0.8067386090129444, - '0x6cdcd948ddd9776d2e24862514f7d8ac6af020a6': 0.14258457934708083, - '0x6cec9c55f557b3e711f8a2d3019dc50db37ea504': 12.937329953577247, - '0x6d2272d54f2c9912a4162f868b2c4f0295cb4617': 10.732697253429354, - '0x6d69127e288d3816af1dd59edad6f0d4976b52c3': 2.0221714990902204, - '0x6d747c454eccd35a8d076e64f1a59c5917f0f74a': 1.4771048823097732, - '0x6d9f45025618457c500c9b91e639a1c5caf332f6': 0.42775373804124245, - '0x6dbd6fe26d611a40ad80c96a780f32fa81896e2f': 0.9267997657560253, - '0x6e565b38b8dd5cb6b1851605064f138b45848d85': 4.741851582134092, - '0x6e82dc1c66889d799beeb575427f1e3f36017b25': 0.22171902088471065, - '0x6eb511259fb781d48bf2ba4f0f2fe06a560c3e2d': 7.129228967354041, - '0x6ed240a87ce726bc629eabd5c1d03e1eae12aee9': 0.7129228967354041, - '0x6ed77b74d168b86745a81b2c5621e22459be1fba': 3.2024314772647116, - '0x6eebeb1af295f61c157c234b9bb5cc66bebde666': 17.620620136921016, - '0x6f2765d7fc7ab813e9e8d8f2320398b1b93161cb': 0.22171902088471065, - '0x6f4d0e110b91424d7ac49e90c710d9e326a554f2': 94.6269767233149, - '0x6f6f2166eebf06df3c1d697b6c79ab9f56e1ee14': 3.7278981712298256, - '0x6f8c2fd1e4e2dcfef57bcef0ae0268abac6bd489': 0.0981394702819903, - '0x6fa45c03abd8dd2bf8f917d9cc49aef02e6bf409': 3.204460094704229, - '0x6ffb7086198ccead3515451ff5abb1ac174b48a6': 0.9748365105380569, - '0x702666f3334e4251549597572ed6359f0579869c': 94.68787155172218, - '0x70384bda0e4f146796913ffea52e6d01d756b465': 5.081352079989987, - '0x706f83e37354442805b32477b3871cf6463ac958': 34.706071599546014, - '0x707da61762c7dfac2aa354566ac94afc4bca40bc': 20.535354383677777, - '0x709cf68db3bb63b728d0b2b1cafe42dfac0a93b9': 4.277537380412425, - '0x709ec772a7660b96917906338662cb1a26a0857f': 1.3517184024689457, - '0x70c9de3d26649150572f82757281f05b0843f188': 0.40844705326169545, - '0x70e33162894dd3fb7c17721572054c03b228952a': 0.7279764750300167, - '0x7178398f0a3826cb6b0e8c70f307a2b7bf0b93ab': 0.81016442749557, - '0x71ada241d894ae4acac58383b345b66408d21bfe': 10.758182106220538, - '0x71f60cecdb60be5ec2d081ebc1fd7abab73a01d6': 1.0802561292009871, - '0x71fc12ea9ee267107149ab2dd3a1075a583942ff': 3.733050385500198, - '0x720c9244473dfc596547c1f7b6261c7112a3dad4': 0.14982795121648057, - '0x72480363c3cbf22fba91c3e0aa8c1a5f8fe7db50': 1.8072730274827449, - '0x7249fc81ab78c1b426239238b2269386ebd3e297': 4.5714779147223314, - '0x725499e972038a15233415b2b42ebe083e497d09': 0.22171902088471065, - '0x72d220cc5fb547052286c3c8542ece96dd5eee17': 2.8863554728512226, - '0x7344f007a23bac538d87ef9b53bb28ee8793c177': 0.7699772290145079, - '0x738a08dde09feabe2330e39d97a70df1838a672f': 1.8587433684055763, - '0x73b49d2f03752c55ab81e05c1d7dab081d7c0907': 28.734702353190567, - '0x73f7af2e7cf6f051b89efc020f9a32a8ccbdb0c6': 0.22171902088471065, - '0x74023d943674df67ad9596e14bf93a3cee77b04e': 0.9267997657560253, - '0x741e721c5cee5b935844383cdba9174bf2732d44': 2.435201194342772, - '0x74a5e6e97ca33221d813f198fb9459d3af608452': 0.09425400197014357, - '0x74b2baf2399e9947677d8157157d0146661fb4fd': 1.0343527925854594, - '0x74c447467340a47e17f6c95ef43a26c928eb43c2': 0.28165126907067517, - '0x74e53434e6fe38ab47ba2a5e406511ab0bc71aeb': 209.54980434667672, - '0x74eca6b366964f5f1e9ab3132bdfa58c05bcb78a': 0.13000684568052176, - '0x74f4a4d2dedbb23013f9e323afe855fd9318560d': 0.49904602771478285, - '0x74ff576d1d67180af590f2bfc121051f22a9c26d': 3.478893407770704, - '0x751a662df4068138505b2991986d1ea8fac6c954': 0.22171902088471065, - '0x7529897524ae7f03751e7ca2dba84b079f085d34': 1.9670431051178923, - '0x753690a551cf960670ae42f6f6b38cbc9dae6248': 0.33580629297191333, - '0x7539f96a6277c6d1bbe79e1dbecb67f4e22175cb': 0.44194463762624586, - '0x755de8bdfde768986421643cf687aaf8f0e26c6f': 0.21989177472686397, - '0x759a269b02c1fa552dfe88ba84bfd3ed03855f92': 3.5646144836770204, - '0x75cd1735965e5828b34045513f33dd5913c0a6c3': 5.322006825766722, - '0x75e0dac2c9f2737072642f1f070c20b7261165e9': 166.17420145802114, - '0x75fb91bd8f32e051f419fe0e9a2dd68e5c17001c': 0.9558397546048115, - '0x760669ed363dbee56296a51bfd7972a03628e9e7': 0.7129228967354041, - '0x761ab36ad7d15a640f4807c5d9b6743005d5f4e4': 46.24300724561191, - '0x765cdb754cc13ae79e693f3ffc0caf61caf0a79b': 1.438675601465137, - '0x766e68950079fe62de1fc9182c11700ccc4b1eff': 3.291053939172299, - '0x76b394acf305ee1fbb6bf978f88aed68885768ce': 0.13438500820297106, - '0x76d564f8fc572b0139d9ddbcfcc9d333ff63cef5': 1.6397226624914294, - '0x7727c4d143c5040c965acdf2b94a1706609c2793': 7.493478003589206, - '0x7752bdd49a7344c0f26d4cb69c29eb8d1796357d': 10.018911310652529, - '0x778c6533e0a6e7f40f499b4afa42d476a5ee5782': 0.35646144836770205, - '0x779ee773a45c0834ef325182999614ebd2ac5aa1': 4.669399308470421, - '0x77b637ab9805d3a863db56993a71918ef38e5aae': 0.35646144836770205, - '0x77cd9efd223dbe2fa7292131f10443e243887ec8': 3.7879321075162045, - '0x77d4839b5e7f22c42070ebf53c7dd375d79dccb9': 10.836428030378142, - '0x77de64e6ed23df58a90c6aaa98604bebae46b61e': 0.7129228967354041, - '0x780685d9fa29f02d0c513130562115c5aef29c8f': 3505.3235309621364, - '0x78080ed38992e6b88de9be45169e188ea04fe44f': 2.381747296446833, - '0x7823b4e4d100fece867054d5d2d5ada9e704fda2': 0.9980920554295657, - '0x7835e887bd862709bb99a80f4d27c43e9dee5d3e': 3.593972784031321, - '0x78405cf30497079a36420a1d6974a6aa8a4d6407': 0.823176196340428, - '0x785f47f0b08aaad4f018d0b0b5be4ca080f2542f': 1.3747902190029162, - '0x787e9d3073d891d7d347cf2a3953f36f68f25513': 1.6033805046568856, - '0x78a58ec81bd331f4f6bd761ee9682c77cf2dabc0': 0.6110767686303463, - '0x790b62a9aac3f36ada0047709d6cc1b57f6cbbef': 0.2998342887037707, - '0x796292bf8b151847187ab4a243d9b2ff4ebcd7c1': 1.429085333550509, - '0x7977b909d55a53f9c73140f7f611eaf0638238ed': 2.878866858760772, - '0x79a97d5b5f91f4b981b3060e8f4ebea71f57f1d0': 0.8626367050498386, - '0x79bafb8227c576b0c1be09a3c4922375a1a4a02f': 2.1387686902062124, - '0x79c0d051694ed740cdb9041e3588b279c97d5417': 4.11510467306677, - '0x7a2720c1f8fa5d367bb0a1e9a56fc116e3f42cb4': 11.153990158323428, - '0x7a2a9b49bba70e6e60ef06d5a1d2535a999267c5': 0.7129228967354041, - '0x7a8027127e081e80dd3a3a7e3295c0f02651d16d': 0.8334497054411772, - '0x7a87ba71b3fdc84489942352c8f8a75c0748dde9': 71.66484642167819, - '0x7aa4233baa2ae35b41a83b97a07d21af8d1a02ce': 0.26451650521522657, - '0x7acb7fe058195925d99b7f32f6c0f32a76e4a26a': 1.0891402574581888, - '0x7adb195daf0ef2ada8bd79c88796d91952069eff': 18.048294187881144, - '0x7b5601832c607ab77ad33b0911c417228965ab89': 3.4785295285854216, - '0x7b582228aeabf75d8045325e32d47b697250f436': 0.8370297307607343, - '0x7b7ff760aad676b86287cd6f7fc3d6f1f93678cf': 28.389237831555455, - '0x7b84df1c15c69bfb91a5ff966918f681fb515bb9': 21.15657255220877, - '0x7b8d96ba79bea28ecd7e4fe31b9afd516cae63ef': 0.1738348084879116, - '0x7b97b46d35a28b561d47f50cfb9a2735e506e59d': 22.109654889770674, - '0x7bbbd17099f3c56ef235462c86a3bc5d0a015768': 3.769425366809344, - '0x7bdb304f42bdbd4a4ff5678180a41880cb33d491': 7.183371270139, - '0x7bdfcd90b75e913dd42a6875f06a3ed1fe322fd9': 0.28516915869416165, - '0x7beeb4dad941c049a228230b0813d755def9f7de': 1.783835370940506, - '0x7bf415bff6d1417bf616609afbfc8e7ffa0a9fa3': 86.5694276727933, - '0x7c04bf39237563cbf9cf9ca0478ae8a0fe08b86b': 0.22171902088471065, - '0x7c15f05a2b31dff05de187ba08178b03ee457932': 1.6689869404234547, - '0x7c16356f4559a4f2a58b4a2e7de6b1e0b73b3678': 0.64265748106497, - '0x7c307c1893fa86803698d2707b348d158d569225': 20.66513610294522, - '0x7c641326a8500e4158e3b7ff2a145c6c69f8f025': 0.40016120672342154, - '0x7c869d56443072d6b59143f3097ee448223dd6ab': 0.49904602771478285, - '0x7cf8f7e495f648e952c029566c5be321ee266d3d': 1.7823072418385102, - '0x7d18c33dd43380c0ec80875ca41afbbe78c72fba': 1.0693843451031062, - '0x7d5daa214ee3566982e10d7fe4db5ec57a0bffa0': 2.164535097956865, - '0x7d97f74ae0e1b66b2fcaf40964e03c1147d4153b': 0.7129228967354041, - '0x7da595a5573cc6e27ae89e25293da3beefee16ae': 4709.502226697024, - '0x7db3a5d1917fa549f32907ead5b33ba1386b0bfa': 0.32409757800883066, - '0x7def4984915a76996dcb8c4d60828921b6c8281e': 0.22665380833284804, - '0x7e18942bd2d4c152349a8c61a7a7f7ef9ae7c0be': 11.073531927374404, - '0x7e3d993a8d63c25d1db5f7ff8a8d6c59091003b1': 4.990460277147829, - '0x7e69b5cbc26d82a3a73fc73b9e1a268d1ff33295': 0.20690395880362578, - '0x7ea779aa03a35d62ad6adc07ee1b67afba335470': 0.3065568455962237, - '0x7ed336ea841241ff083706f7b83f175196cc0e19': 6.543707000872111, - '0x7f0732b96a6985f6fa6df8b4c2e774bf29bc5eeb': 37.36658627582716, - '0x7f07b4676910899faf80fa9868b01e7eaf2cd6cb': 0.22171902088471065, - '0x7f1d75d2f0824e484e3697813534beaf9a9f87c5': 42.56149693510363, - '0x7f1df76b86e8f7bea99f139053ee3558265f16be': 1.5482854062962463, - '0x7f35337ea917f59b50b3c480ae44bf107d39da94': 4.519044419428067, - '0x7f8734e5082ab50ce26901c2fb0586d9f8d37dbf': 0.3279227084749845, - '0x7f8e398b8b34933cc6623261a2e3fc98fe80a8c4': 2.340786431872642, - '0x7fb349721921095964d277f0784adfcfb5184e59': 25.26094374817558, - '0x7fc723ab065041021ff878e9cf672e973f560b73': 4.172449637343029, - '0x7ff59e18da9ee9fcc9d20960840b577ebe2e041f': 1.2949662223893519, - '0x800c20b575366d81f553683f03b75b30541e37d5': 4.725031627704419, - '0x8012c006f95bc3e434dba9660dd43efbd6a528e7': 0.07494887000757011, - '0x803755e1d8cabbfec230510fb53cf905612737ef': 2.1387686902062124, - '0x8044ede654f0881c3f299a9ae36c951b5d687bbf': 0.32717101397672543, - '0x804b6bef1640b5eab3d9b9e4e3d43720eccb60c0': 13.063838075333248, - '0x805c711f0acd8961beb7d70a4a60591a60ced947': 0.43891359311336275, - '0x80786e198991002a4c7e70a5a8b55cfc4e5822cf': 1.5527524518923679, - '0x8087723c69d02d1dde0ad78d7434d9242b930fb3': 3.5646144836770204, - '0x808c7d4df5eb56eda041f0530e60b4ea74634f04': 7.129228967354041, - '0x8091ffe6495f0e3fe5b9f94780ace5d79e5177d5': 0.22171902088471065, - '0x80e6b4e1eda64af9884c9e07ecb52c2c89ea3331': 1.7541168613521894, - '0x80eaace1c09416778e1944abebf62eef85e4f54b': 11.763227796134167, - '0x80f70d69b5946acffbed7d10ddab61ec59b7c27d': 9.501888898998976, - '0x8105728ee86fef8099f7d011dd9b34f1f785855f': 4.222215307559718, - '0x81064947c029efdcfe1dfbde8853508df51ffa43': 7.121722650057952, - '0x815840bd88ed5f8a0469314c57f57e35305b947f': 23.67680379721902, - '0x8162790819bb8d07a028bfd1eacdc0784d646ae3': 20.69560867078575, - '0x81baa47a539e8acbb8ead88599316ebdbeee2169': 27.079028325764824, - '0x81c63850e370914df3eff89ca411157e59546e8d': 135.54936543490498, - '0x81ed62df1708b9e24408db2ef5426c93af5bb6ea': 4.05973230623079, - '0x82467054facd80184c0a26f9e56002d0116104b5': 11.216885892885426, - '0x8264c772927ce782b656764f82922338b0790b54': 3.3991304281895824, - '0x827f3f48efbcc286a0f660d4dfbeb1bea8b857b9': 0.5951452746782686, - '0x82bf93ab5928dadec364fe29cc7ee9f5b0ada4ea': 7.628274995068824, - '0x832a1c10154cf94d60249cea75c67c6f6724f4dc': 7.129228967354041, - '0x8361fb6dd44a329253a75074a4e817994dffa121': 6.401371006794375, - '0x83a1f61f2d6d364a1bafe1a573352cfdcd85d899': 10.69384345103106, - '0x84322a3aaadd0ad588935c8e8d3af3e1db94d9c5': 26.05008999020584, - '0x843ed2f66fbffbabf1938660034571ff3308fdc0': 83.76616368816302, - '0x84460bbeadec29e68652b27e11a8329890d07446': 28.951516243409742, - '0x84614e100727f5eccd33169feb8b986185f35669': 3.415548656902644, - '0x8480bd856b09140f3be5a4f7546eefbe695f75ec': 0.4997017399839858, - '0x8490f401d295591df944bd85aaa904fd0ef572af': 3.809111915669682, - '0x8519a7032125366483e83108b76b324da728aa36': 0.6179994187957201, - '0x851e931a6cabbdd5b17d0da2cd4b0edf11941968': 8.421250928627517, - '0x852011b4b98cb5436fcffd77d5a573f90ec033cc': 21.956163578442883, - '0x852ebbf999cfec0bd334f4141ccb119a3e02c975': 0.22171902088471065, - '0x85346797b23a86f66df94e67c79ed31a5f75d222': 2.4952301385739144, - '0x857bf6fb01679226d72cb40c3a4ca131ef19f888': 0.09412571659786549, - '0x857d5884fc42cea646bd62cc84f806aeb9a2ae6f': 7.17704562752308, - '0x85813298a760405e78e85880d210692f25f40a84': 2.7737483105016567, - '0x85920c7c78db66cd5f996c188cf8568e92e74ab1': 0.42775373804124245, - '0x85bcaa8021da0c0f53f5c6d5e9c1a94665318bb5': 1.8560529182166667, - '0x85c60a12a1459f554ad43414dd0fde647b341394': 5.002110975306822, - '0x85cd1c8d17c8c922bb8161eccc7d3a8e8f3eda0b': 2.4156183540362477, - '0x85ea826433b73919185cac16eeabb6dcf2a71787': 1.7914098732983639, - '0x8643e1db24f46c6e6a77ea7434c5efa611f48c8a': 28.901465588905477, - '0x866414f4b313c4fd47d4b54bddec7c08ab06234f': 31.861885929318692, - '0x869565d33bd5731c6b2d963783cb67d1a9cd6f8a': 1.0693843451031062, - '0x86ab846eab1db8ed6f410cbc7c5497de0b7b4536': 78.86905204302165, - '0x86e6d2b0aed3cbb4f6353eaefcb2161b9fcd6088': 5.703383173883233, - '0x870226e5fa64a258ccad6538e49775e870452e0e': 2.560592896271641, - '0x8744e24bf9be32ea3b13a01011a9c828c8e3be8a': 4.155322026686354, - '0x8750b871eb0dc258d6a0be6823273192827e34ac': 34.01296283525145, - '0x8764ff06b1776cdca8456262c63d6a10d1ca0390': 33.41420148142255, - '0x8785bb8deae13783b24d7afe250d42ea7d7e9d72': 0.1887904806791625, - '0x878632809b2d4f8764c66e8dd829053b36ccd729': 1.0098544370636877, - '0x8791c0718a801c4d327f33e32d6da4aea22dcc7a': 0.22171902088471065, - '0x87ec2d8766b026c3bce5e245b6ed0382079fa64c': 8.847461240227627, - '0x87fefcb7790ddad58171f5807a2e37238d067314': 7.036467769594536, - '0x88053776c209454f8a1968ca5287fa8e366a3dbd': 2.8471977502602703, - '0x88503f552b3ace09945228840c3d7555946f53c4': 8.045844120299561, - '0x888edea896f2bb2080d6d9d193de621c144e2e27': 10.930948243808668, - '0x889b4d9502b2e222f077d81a1a1f3b4bc13d476c': 28.296240966725197, - '0x88a9a52f944315d5b4e917b9689e65445c401e83': 89.91375076377831, - '0x88b1aed223748f7e512d6b5b0d9ddd8fb264b074': 11.30059755752385, - '0x88d55343505ff2435ebed0ef90b165518964f93c': 0.42142003280868356, - '0x88f64776a553b9d5fb0e1d32db6b36ee353382e2': 0.926981292618636, - '0x88fc34989120d9d9f13432f5127342bf33b04a79': 0.288997733705154, - '0x89078d5947003d676ba28e16a560392cfd0f76b5': 2.359435946002858, - '0x894107b7b5051409f279e8300774b2f62febe057': 0.3404124068341031, - '0x894ff5fd4e21f6641e035775f00881584633bce4': 1.0693843451031062, - '0x8958c87cb2fd0d2abd14a83cbf072f2ccfc73ee2': 0.22171902088471065, - '0x896fa88e0b7fca31308f25dac77e7c6329651bea': 2.8628470561568014, - '0x899c73118949bbe4cf2b0896265a601a581a637c': 7.1520614831147045, - '0x89be1b4deed2b58111f4bdd440050e4f54993456': 0.40307601425339296, - '0x89c45190f9930389edf5528e0d18b055c6c8e9d5': 0.5772976857028628, - '0x89c7d7e625ff42f8ae91f8f551b7455046baca61': 7.782650856213526, - '0x89dc54ec0d2df683ed78a09d9a3af2558f160389': 0.4290250541651039, - '0x8a03377292dc8b17c5981951f75a45123fb71c6a': 0.5623960463977392, - '0x8a2a58b5aef56895aa6c60ee1b956dc1da6be915': 11.896095270564647, - '0x8a638a3fb36e1fc6894f205f0c5e6617742e2960': 3.707199063024101, - '0x8a665c4335bf5d5fcb8038714430295b05cce8b1': 49.90460277147829, - '0x8a822e3f8da43a0dc2290d72bd19472e1d60ae8a': 1.2231265954143127, - '0x8a988e0f18d088290ae76cfd03f324aa7e88b657': 2.8335916165843047, - '0x8adaee46d1628269f6ba712dbd0e5f195f5036e1': 0.6416306070618637, - '0x8b00881ed6544a1edb6e6ee1645f0d4fec559269': 0.19752914462736204, - '0x8b3455800016778eca4061d2d5aec3e9b68e1482': 18.45449194175427, - '0x8b3f6fb399001db2fdf454448a66fdf810a07ac8': 0.14258457934708083, - '0x8b54d74e2bd63c41b41d9846b2fab6def6ab5828': 0.49491586154404554, - '0x8b9c2505cc972276f166fa9c53a192505b7f2ba6': 0.21387686902062122, - '0x8b9edabb1e40cb1d3396e0bcf4b413a855ce40fc': 105.81625653699193, - '0x8bbbc13d19f2821922f6b0a88d8f79130727e5d0': 8.669584417943673, - '0x8bf9f55b5a4597d730c4e5b71f5620971208333b': 0.5839705571287322, - '0x8bfc4fbfcda2ae60de76981dc7fe5dbfd2a44ab6': 0.15742677552684703, - '0x8c480c50fa85468bbf8576ae8e09336532916414': 57.064425542701365, - '0x8c77ecfe69787309f6e24e55b52a4ea849a8788a': 34.101509530942735, - '0x8caf4a31535f38224e55740a8ca743f47b43b5fb': 0.17655535537652287, - '0x8cb2081e8d0392bf7793f6844b35fa861b163721': 1.96700289282486, - '0x8cb82f737c277a9c37d996c23c1ee7e1e56f06f8': 1.2051105463243257, - '0x8cd55fa9ae01467026f3d08f9a9726765d36bc51': 1.6078895927501862, - '0x8d00061deb511a49582ba26df698e1d6034f5c54': 9.939483910487565, - '0x8d11fb8184e30671451972405dbce1dece39143a': 4.0182116767249205, - '0x8d2fd4d661ebc59f2b3a215275df4c4af26df6fe': 2.0084056462317386, - '0x8d6c5321a05f4692cede425c2a1f64519a2beba0': 3.707549829916985, - '0x8d8291dfeaf5cb4a051be44b1842b7e050e0e63e': 0.14258457934708083, - '0x8dfa7dcccd432d34cc76105ce6a6bbf4efc5648e': 1.8244765219882364, - '0x8e2411e6233b85302f3367aae79b9cba07b470f6': 0.22171902088471065, - '0x8e48c7a2801ee3ef08f32c74d0081334aaa00ec9': 2.1387686902062124, - '0x8e49b61be4f02d68eb620954730b5cc74ef53b92': 11.865438541051121, - '0x8e77951d232f8066435817495094244fb4a0d28f': 3.621000695543536, - '0x8e88abdb6b6b8f769c5e11af90bc3b38bad037f8': 4.328375332368709, - '0x8edfcd41fa3b65953f13b38b61f8ed86c27b89e3': 0.22171902088471065, - '0x8ee9d31e321f0d94d889dc6c8e8cb1ec2d3ead7a': 1.347424274829914, - '0x8f05a569393ec0c4346886a8b075e285d0739a09': 29.153509152206773, - '0x8f3c2547ff0fc71d115cd55cf9385825e5f4fecd': 14.14391203674246, - '0x8f59795943fe37e0e2bf5e75c1af6a66c318ce9c': 3.333866377143202, - '0x8f6203d12ed7f96389d881cd62127aba74b0003d': 8.526160309205078, - '0x8f93e3a2fd62dd44d08cd56c8a5afaeae9f2e1e5': 4.566954404891477, - '0x8fca5462a25a7dd35efbd2f9a0910f2bfebc1c77': 3.7033702459237374, - '0x8ff7c9e5a74f1a12f8f8d4587cdca5a87f91267f': 107.62721118379308, - '0x900f3a5ed87caaf1899c7cd92a85a74ac1501df5': 2.944638888032, - '0x903fb5a195091910b86a9f4ce295b1850b8eb533': 0.6294908621427068, - '0x908027af40f4cd537c1ae024f07f12399ebc5cda': 0.21387686902062122, - '0x90a58ad0ff9b5bf1beb42123f9c2179cf8d13bac': 1.42779082498875, - '0x90d1a88263cb604b88f7a1c4aabe502aaaa13f3b': 5.51838586829564, - '0x90d6a0bf3c3fc3c8b05235a511cec6da2e2e054a': 0.22171902088471065, - '0x912064700cc53ca921992a739e4510f9e060edcc': 5.129978409835826, - '0x9144142cb9cc8621af3c139262faf051e0ba15a8': 1.7778759849059158, - '0x9158a849734895a90342b418eb9c5d470cb066dd': 1.8350382593498504, - '0x91c12b19486a880f45b9b516c7367900956f6015': 0.33487407605368374, - '0x91c45b9e96430c0dd63c68798c09e560c580eb93': 0.7130411190311066, - '0x91c5e160be5bf6377cfb9162779dbe6d7e60621c': 7.06553295695715, - '0x9206777f8b501b91d64a9f5ec745cdda9c9879cf': 3.455209021168877, - '0x922330cbd08fabac583fcffeda0361639b13576d': 0.5089011454770962, - '0x9223f79df651e417a0b71a05065f3bdcb04c1d3b': 9.750544880982373, - '0x9228f6ab228b37b0e3935a446331698662ed0924': 0.14234633515907547, - '0x923539fb48e685419566dd4f96d3e13c1a2dd076': 19.576405036604637, - '0x929b9cece77360ab9c9cff0e16e898e8f00ca996': 11.312755549267541, - '0x929d58703919aa7c591330fa4e20df8aa6ae39b1': 1.0707846113892745, - '0x92da66da5a9d18699b39f7cb797dae99882d7e91': 47.45411701917522, - '0x931782c9375f92a12d8e7391517b05dc5894806c': 1.7110149521649698, - '0x932d53efb3c9e428e73bf735b872de376cd93176': 0.755110746010026, - '0x933cdbaf8a92cffe14d2a0934eecaae9c171af7b': 0.22171902088471065, - '0x9355e656813d859ba5635d70c2e02e3be84a70b2': 2.665175718539427, - '0x935993809d9a53ca47f0cc63e33047aa7c11e7e2': 5.141865304497044, - '0x935a2feffa498e5739425c28ee1b2ab882afac7c': 2.9096061013963705, - '0x93739bf6c1133029d63576f472cc6c7831e6f04c': 3.17911381948111, - '0x9377d26d177b563e02b35a588145fc5ac9e6ea7d': 4.980275664337323, - '0x93a8eb94947c01df5b837a40821f9576a6661d09': 0.38987251970802644, - '0x93b9a1d8c75411337513c4b8429b489a363d0984': 0.5803446293099611, - '0x93ca64c742270da88a9198d5aebc5e1118275fe6': 0.6951540777326335, - '0x93e03a46446d52530bac3d7b9082f519866fe267': 0.16061134402167604, - '0x9403a244a6a90e2ac4c5475558ecfa2c2efc5b95': 1.7928052192867252, - '0x940577d34a5749d73a21a78236ca667f9a47fd99': 1.0117615145890846, - '0x941211a2832ae3f15beaae49c714f10d5463ad10': 1.008907174867595, - '0x9412a71e285ec518c78fff5635e0b9e3441bc235': 0.5958355302942472, - '0x942adb5189f9887d7757a071a31bba6a7eff0f93': 20.147240201907216, - '0x94a44458edf01463f2d1179a82c9102002d508b5': 39.643056259203114, - '0x94ec93106a21c6f936e5f2bc45e7fde907c2f6d4': 0.6629655225119567, - '0x94f6bf6f9de851916699e5abe932052f73047890': 24.38196306835082, - '0x9505c63317b41699e7c6a2a6e0ec8232eba45077': 9.220278279355302, - '0x9593b9f815c859b6eee1e07be6a5bb0135f7f3c5': 9.329886453297094, - '0x95a1d7219721a23dc4f8186b9d740ed68588a50e': 14.258457934708082, - '0x95d04a3260bc55888844ad282c9ac4627387f0fc': 11.55077665648179, - '0x961d07833b254e9041648b227aa1c868b517ea8b': 1.4258457934708082, - '0x963a15796261d4e3043e9297f918226b38dbb491': 1.2642143676756132, - '0x9647e151cefae8cea0a423ef214642f248188dee': 4.689388037391484, - '0x96832b54a63fd6e122a74f3d136d2f80027acabd': 0.13545535037972675, - '0x968c83582f9e02597a7cbafd418ac96158b7e66b': 0.7129228967354041, - '0x9697f3fc8ca372f6947bf18daa39d8c9bc34762b': 4.5267388953618495, - '0x96a8bcaa279b48f3a3deddf3df5785ab774b370f': 0.7201213568471286, - '0x96c195f6643a3d797cb90cb6ba0ae2776d51b5f3': 0.5975195830906683, - '0x96dde45fa10d05422eae1e33761af8bf84046739': 2.637814717920995, - '0x97488cbc176b5cc80db56c225bde85fee315835e': 8.313698082314545, - '0x9790f735d0f08e5fd09bee7868eeadda7c5bd475': 49.54877145268957, - '0x97948a76b39156aec8edfbbf128d11d7228b0bec': 19.961841108591315, - '0x97a29ae88a7f1d4f9fb097ff67b9863f25ad68ec': 0.41739884996036636, - '0x97f0cada635e6d6a54047a4a396fd7b1e7b9ca0c': 0.19483821369900595, - '0x97f64b8bf7eeafec646fbe8ba0d7a6c4dbe014a5': 0.7699567284742364, - '0x97f9b68c92db69032278ced716961d673126fe24': 4.159817789673127, - '0x9804bd7f9cd022fcd3ea147132b9e1212761ad95': 3.8630331177792527, - '0x9823bf6833a1bb842e7e6ebf935dc1ed04a6a712': 0.19137765013017952, - '0x98468c0e9342d4e0ac3e09257251fab192992092': 8.18294711892894, - '0x98504cbf2182ab0fee4de8e27f5bb022c1f5f5c0': 4.158725010211608, - '0x986ce2034449f3be36cd26e2cc5f6cdcbd00d0d8': 2.0450577479027783, - '0x98dae81f500b4ef4a8cff257706c6e482742bb44': 5.242666456271362, - '0x994476aa0bef744a286e3f5f66eab2320a6ab96c': 0.27417452339754633, - '0x9954f8e56376fc03b3017149bef396adb0698242': 0.6868985315643543, - '0x99af5b288386ec0be671fb256d982f9acd98c414': 16.29316960927372, - '0x99b64cb9fbdd0b73351a0b28a507373b6eef59f2': 1.7524473828250071, - '0x99b9a0d02764b9c9c719105cfc53c0bc5b3ba61f': 0.47015076856014826, - '0x99d8f2dac0100f4ef6b0da947bbd3ee7e34112de': 17.79771056203277, - '0x9a16749f55c20b46ab74fa4dfa216cfafc48ca3f': 45.156914163311285, - '0x9a1d731747997354ac2d7c291d3ad48c4398e360': 10.004670758448526, - '0x9a3a8c703a20484b4cdb6e24fbeb310ae3adb841': 21.547665602256398, - '0x9a6df0d97d5db2c5198d8dfd3e6b4bc1e9fd6bb7': 0.35646144836770205, - '0x9a761aeaddff48e0662da9dd7094370906f8b39a': 0.5957998494145877, - '0x9aae73d866efd7ea55759d832f07617000574330': 2.609522729955732, - '0x9ae4b823f31d1fd1f37080494cd610564fe5569b': 0.9419514923908133, - '0x9b1ff090dc06d3bf95baa83e9963cfd53ca24f1c': 14.989429952904382, - '0x9b4a4b447a6de7e769d7a0a4dcf8be8d5ff308e9': 0.7137973248899233, - '0x9b7493d217b4fc55d79e806a4504a7a83fca0f75': 3.6036696737765332, - '0x9b772e75ef3ef29f4aba779998ca7dbf227554dd': 1.6046678423259417, - '0x9b783722fa68605e40c797f6521d8a590c43c5e2': 220.06926008457498, - '0x9ba6a67a6f3b21705a46b380a1b97373a33da311': 2.2621756436311107, - '0x9c623fcdc8fb81f28dc21de70d888b6debf1d247': 7.129228967354041, - '0x9c8a3915a9d81a61c25f14592f9ecbed7e9bd7b3': 1.249537402201321, - '0x9c95df27387e63c94bb0d76ccce4ed22ed97af47': 2.3118412371961172, - '0x9cc3c775e265fb19ad04e531a5bb362c5aaf3cd1': 1.8130262974837503, - '0x9cec5f156bd28d88a0fad4093731bdb086af7255': 113.60805037164512, - '0x9d7068ac92e8ff252a64c86f1004d2bb2fccc9c6': 35.703150987059956, - '0x9d7c20e890aba1a7e699685bc2a351b665a2ee6f': 15.277113593608252, - '0x9d9d290b982c575a499835429e293bf6555b5b75': 0.22171902088471065, - '0x9e13a8c933604aac48baf74866348cc15e5c07ef': 0.6633198683600986, - '0x9e1bbf9359ef313123b88973009e07e5d2fb992a': 1.7818462731225835, - '0x9e38cf86a400e813f6ebeeb3beb3780384d43625': 0.8147690248404618, - '0x9ec579a562b632d5c089d6a8b21b7bf0505d6198': 12.00965246163531, - '0x9ef6b50a20d5e0948480efcd79dbace6e20d72bc': 0.35646144836770205, - '0x9f2a353adf6233a45eb95417b472c2d43d1a0c6e': 1.3874373970590332, - '0x9f32cf3018956f15c647eb515a4cb6b8ad356a2f': 5.325911163584576, - '0x9f4a4a3b1ec8102cdba8acd26d272f34b2864c8f': 0.22171902088471065, - '0x9f936443bcfdc863e3b971c32b540b4f21804a8a': 4.393779169391229, - '0x9fa89b7da5ce9defefa9270dd13b610587c9a703': 0.22171902088471065, - '0x9fb235c9f2801d1143acc61f5660f9e3ca84d3b7': 3.5646144836770204, - '0x9fe7906d93490d6bf49c181e6406cfbe1b3dba15': 7.067432098091122, - '0x9ffd8776836a2d1b8baa3a721c194be00da3bf15': 5.7737175673908325, - '0xa01257cf9a6ef4e222c807fd36a9add19a7eb95b': 6.6017288545389095, - '0xa07f4b5ab56e7c92654bf3198d4b462d7f5d1b2b': 0.08180467985762424, - '0xa0abc0fc9b56d006598cbbd292ba1a40285c85e8': 0.1894481691009349, - '0xa0b47f8ebd8a545363a52fa41755f1cd2043f528': 0.4508920087036658, - '0xa0f1aae91660253f29aa966dca0679f8f3ba9f6e': 0.6236789938455415, - '0xa165c8c274ea22e6b2639a0eb0997784f682e601': 6.757878590024031, - '0xa182dcde4d8a88f2d23075d2b96c613be06a80ec': 1.6843279497889092, - '0xa19a089fe8720360a57488a1c58567b873273ea9': 6.701475229312798, - '0xa1c8519ed5cffb5584dca408042e3d738f14affb': 2.586529251496727, - '0xa1ccf1298a6eb7c7a3d857444026d22e7d7d27bf': 108.06774979547441, - '0xa1db1504f82bc11da3e5c316261dc543c2a1ef1e': 10.789560408159884, - '0xa1ff5a8d5193d6ab65ebb3e45af166ab33f15ded': 0.5967592399413372, - '0xa234aabac7ad2da9a4aa383e78244c5e86bfbefd': 5.092306405252886, - '0xa296487a8017648f67797900acc8c3e2d45e2bd5': 14.616948438968429, - '0xa2c6781d166e938b41980dacede05f5edac3d4df': 2.423937848900374, - '0xa330881a237c8355f8aad661e68d4ead24f802c1': 0.14005729644145443, - '0xa343ae761bd2ee107e357175e6ca20fd10e787bd': 7.026814550294458, - '0xa3ee07c4540cd8f89434b8270855651c9db4861b': 4.177935800389765, - '0xa3efe4b337f7f386768edf8e7652c5b62b8a2c6f': 1.1224946567978311, - '0xa4240f2d968a34554a369bfb6f88a6482d1010f6': 2.0379429960244053, - '0xa43a51d79c21d24cee40f974267a56e36f27beda': 2.1387686902062124, - '0xa44d472b1e836ed999096464fd913d2db0172a68': 17.666171871986126, - '0xa46d1b31545281f5cab4652a006dfe500b5920c8': 1.0790779694207056, - '0xa47e505ffd52d1200a3b1677a6b02b9b4d442e11': 1.2262273823848948, - '0xa48a082b588fdb555ea0d3c800cab4501919e996': 3.1775965655548037, - '0xa4b442dc6cb61eb9e9a62adbcef92808b3507e82': 22.7578477058726, - '0xa4b889df80fab169c742f89cca367694f5ee2740': 28.832008322352543, - '0xa4d937d71a0b679a7937668c5d488190de8c209f': 9.872987152946136, - '0xa4dcc1a5f426249b16783bf8a20e575cdf752d2c': 1.0889254660106644, - '0xa507b7f7551f3051a34cbd6d66f279514e46cd10': 0.7129228967354041, - '0xa50f00f1bb055691b5d8c0b68be8575e9ffe4012': 0.7979119204851856, - '0xa556ccf1b81491f9aa7a34a63719cfe8c73ed8d1': 21.38768690206212, - '0xa55c15492b264584fc9d2ad2e51fd718a4dcd5c7': 1.510029348868407, - '0xa5b7a305d27d8448ab998ab626ca86105ecb4dda': 3.036962217051021, - '0xa5bd60f921ec12e93f2eb1c11d756364dde9e401': 2.400674839216166, - '0xa5fb161367318858b361783976b4dc8d5cc952cc': 11.393018918069764, - '0xa5fd8c5e127fd8118591c7353129351f35010592': 8.63082231469069, - '0xa5ffd9ce84789d997431714b5037d4acf2d89f32': 0.22171902088471065, - '0xa627abbb0a721e869f2455f71acd241b4d228611': 0.22171902088471065, - '0xa6437d50db1a665971f709a483983d187392eb2f': 0.6516162270123681, - '0xa67d9faf68d8e9718514afde32d4617dc59dfb75': 0.5238480110791122, - '0xa6d366c8e199d150c30fe680db6bdaeb623fcaf9': 7.002270231973668, - '0xa6e7c27bddbafb3bffcdc89b4d53ac02689bc73d': 4.8204325090655615, - '0xa7a36ffc604a00a2f6ef889082ded06b3c4fd6b3': 30.598871105941576, - '0xa7c62208e3f2c654753651d4eb1a83166461d35d': 0.7129228967354041, - '0xa7f58bfcc07f36ff333463cf8878d393b41cdc28': 0.9151286126681211, - '0xa8014ad2a654e3b9dc2ecb047502bce1467bbc98': 216.5281775475549, - '0xa81236c2afe21c0165349b267d5754b6ddcd8300': 3593.6825790714324, - '0xa8773794d0f2e672b60987536ef3ee051af9a082': 1.3806430836207346, - '0xa8af2b41a07bad2f5d90043b4a4efec3def1353d': 22.47025930784183, - '0xa8fe22fff633fb481b5c9906877f17d37d37ec3c': 0.6416306070618637, - '0xa903b7947f38db223a42f5c6891c0d3005093d2f': 5.260020221739407, - '0xa9778076829d9775de22b457fbf1762dd7cfda0a': 3.064446723645829, - '0xa98a7bb80f1cf9aa82125b5c27dbb0ab30714340': 12.476150692869572, - '0xa9b44795f368d1b92841c4e84818d20fb8ad7ba4': 3.870862342823394, - '0xa9d40c221ecb6a30ac0621687700d226272b2258': 0.13437187067704903, - '0xaa0b8318e46fc3676db787b0dc020c430831e3aa': 64.6603875826827, - '0xaa36f86ae8dec64d2710528080f85587302a628f': 25.234858364847756, - '0xaa5b2b89dee91e155bf25a2949ce0f3fde09bfee': 0.17803407549262018, - '0xaabe23d8b22964956cbeaee2a6c0c8c531a1e82d': 8.177364463906326, - '0xab0a9e0a8f110fb29da1de226ce9b48cf5c666ab': 3.5646144836770204, - '0xab35bb484b95332f9641001836af525b9a56a164': 1.3127308279498517, - '0xab68ef28a7d4279f67af4c93b47c52633f73a839': 3.5646144836770204, - '0xab69340189c5332b5e38db4ea47efbd27c2995d2': 0.19069872364967705, - '0xab9ebdf17eaa967cf73ddbf5f6f828d513bbad1f': 0.6498933201481282, - '0xabb603383c79c498879d8cf0da350594972f52de': 1.0360212146719248, - '0xac42c49f76a7bfa1c36c21bc014664bed3ddc555': 43.512280285544705, - '0xac615f319401f7b8afa1c29261d170d822a75362': 0.35646144836770205, - '0xac8e3fa9b178c05831720a3a128afbdce3f4656d': 0.9391049065264429, - '0xacb0ef08a73b537511cf1d9a20022438135e4af7': 2.030473841235743, - '0xacb4ab364389e48237c93838d9172efa1d145b2f': 0.7129228967354041, - '0xacd0b010c2845b46eba29b7dfe8a46f8c6676f72': 0.3308278819821976, - '0xad16eb7b8253e661f202e080f50ad52f92d3bbaa': 0.8555074760824849, - '0xad16fbc1f2ee16ba2c9289634d4f7ac7c0bb1408': 0.8108922655706405, - '0xad1ced810fb0eb3167e22b5b54822076176f2285': 5.084885183945253, - '0xad1d12acde84507393e0206e476303ebf644a8fc': 1.4381948780556841, - '0xad2680cf5d6d1e15cf03f7b025f952f876291e60': 20.176851732679857, - '0xad2f9a1452bb3bfdc8dc50f0668e1c1a2ccb0738': 2.0741807175690887, - '0xad6ca7c8d96746e37eb4e7132ded3c30dd9d9651': 2.1387686902062124, - '0xae1ee23b34e125225e13ca146d9b7190a83f6b7c': 0.83847981883747, - '0xae37dc835d1cc7c218c4f3c2b88e50d0c6682699': 0.21387686902062122, - '0xae4213bf95810788087e04b0770b4a886908de2e': 1.0693843451031062, - '0xae58dba7218ea2eea5db35feded9df4cf22eba27': 1.495620269157592, - '0xae5e20b0b0274fd1193f5f30677bd966e0229e96': 1.350937235566562, - '0xae6b008cd699873af443f2ce60247200b2378448': 0.22171902088471065, - '0xaebcf90b14cb163b2c0b485bd693efcde1109244': 1.811155408775622, - '0xaecb9e579c3091b51066f06083b8ccf128b10009': 3.4093114839230854, - '0xaed15a1b8e25c70ba186c3e4795b5dfc4eb8c571': 5.572065627190427, - '0xaf25f79ffd2fc428c80392f0796ec9c3b2e37fac': 2.2104161055734233, - '0xaf29092702e1b6b8ce0e3f80b62e48bf5b47e9c9': 6.105876727614782, - '0xaf700c8605272b13f1549e320b8b32463d58732a': 2.4453913983864397, - '0xaf8d8208ceb63bd43afd7c180fd99137f082fae1': 8.061211376125483, - '0xafa1b26c5250995d60b5534232832f178f2cb694': 0.22171902088471065, - '0xafbf48d529dd60154768c0d30461707c37b560e9': 1.9134585050943531, - '0xafc865d88624bb4bccb0c7fe2f18721c7c466b3e': 3.6744207549359986, - '0xafdeb4041c147f22b8c8c50c27b3f3c83598806b': 9.481302583417515, - '0xafe9e328a3c53bed5128259c8247477935d943ee': 0.8909241081746245, - '0xafee75a8c18ee4c933af5bcd23b5ca27966d5afd': 7.140414293899171, - '0xb00d4b4dba395ab32e1ac15edca27077860e0979': 28.987403593101796, - '0xb01a9a7ef5779fa8680898827cc2b1aed638ee2d': 1.9130167368709075, - '0xb044b5f114ae66062af864ebd9bcdaa33324cd89': 8.03186117433637, - '0xb076bb190e0b187594eef2c37399080be27063a3': 0.4144105969385124, - '0xb0a00a24f1c14ff7f89fe62046c7cce6bfb76873': 3.6663163224397888, - '0xb0bf855cb61fa2a04ad34b202e3ad6b3d4cca51b': 7.129262003018263, - '0xb0e0186336867ab2ef482c8eef8957b3e80ca039': 0.3301151700172994, - '0xb11c7eb9cba8b2aac1194910630992e45cca10bb': 4.753201188714466, - '0xb12843e1b29bd0290c0567508fd67a65906b3f1f': 0.9144100825567054, - '0xb138a4f6fbbf8a4bd32edea8abd4322e96f07453': 3.8369510302299457, - '0xb13fbf9f1433539c2c7a299c0a49611a143a975c': 103.67998676429475, - '0xb145ab1ab9246d23ccc1a5b1d91428471aa58e9c': 0.4846869639258189, - '0xb23f23ada32f4f94b1a48e55340979a8b2095359': 35.658898753947874, - '0xb29c2608c6bbd629595167bdbdc75092e5505981': 10.371578972434987, - '0xb2e3d9d0a227097b87e53dd8e93f55c769babfd9': 0.35646144836770205, - '0xb30d707b6c7bb15ee53bb187259870a09ed448fb': 2.8101195816431614, - '0xb310483a23104d08b048ff3e0f7d669c664a9804': 2.4952301385739144, - '0xb36d3027d3fc3347ab7add19162477332b6db137': 1.2556451317786992, - '0xb394497bf4980839e4ea35a1c8adf4d2ad57a80d': 2.524134743625468, - '0xb3ad8e30b0ccdc3b4f9a243f93ed35df6b1279fc': 1.340057947809207, - '0xb3b46fb4d1e60c64006aa0897b5e4698dc4ccd95': 0.3781723252990868, - '0xb3bb8d0b57ba10887a31b77e4707c0bca6df3883': 4.536152115989319, - '0xb3c42bbd46080e3a02f4024a2f7075b90706ea3f': 8.597875483947, - '0xb3ca3ea339d75457a7b8ff55f832f1561ea9ca9b': 0.35646144836770205, - '0xb3d26937ecf40379366f0c2568d5841cb37cfafa': 0.45312047833828767, - '0xb3edfc3f8f7efe5b0608e99f2562dfaf3b7fef24': 4.990460277147829, - '0xb3eee714870aab21fcef4e3e4de41acc677fb507': 0.33196538487845023, - '0xb403f53ee827030a8963ce363477e4ea98b2f679': 190.01435976649387, - '0xb43fe47765c9d686b1c9021f03749c0f472a439b': 9.196705367886713, - '0xb441ed2949294c535eaa505ed4e88d11b0295614': 1.109029951065807, - '0xb44f7c9eaa8f051599da8231eba3c07fc9398d5a': 1.4258457934708082, - '0xb462be70e18c1e26526bd68880e606fee6a70b9d': 1.0693843451031062, - '0xb477724bf058bd9021931de8a19b4c1581bc972f': 0.25461532026264433, - '0xb4e1619d078c1bebc4b7fcf20a852671860d2032': 4.033076633709829, - '0xb5041f57fb6a3e1ebaaaa5e9e965a21173ef72fa': 1.558515797239276, - '0xb58dc4efe3d45e72114fce715fb66373e23f934a': 0.5354344309587192, - '0xb5c971b3dcc3934d8def7e28e39a20a2aff5abf2': 1.1038484646431763, - '0xb5fba388ebd51b82b92bb66721f8c55b87f67509': 46.858059973450914, - '0xb60f2ac1697bddd2af4ce6c2dedc3dcc7d07dc20': 1.4902428876696934, - '0xb623e11cbec252d11663b39eb787bc8d47d00f2b': 0.14258457934708083, - '0xb625519e1250c46a819f3234736185078a7e5361': 5.099979742867676, - '0xb63ca3d2db4c31b01647184e99e2a5d807c045b5': 0.28516915869416165, - '0xb6aee534972dcdfdccf4c152e6b38df1111178dd': 10.693567917911333, - '0xb6d73ba46770112bfa2029059dd0c59771b652a5': 6.132463738818054, - '0xb6f91106707bc148c418ff1b3a701c3692e7f4ea': 0.9354701574329027, - '0xb72845aeecf2b2f9344f1eda82274f611f60cc9b': 1.4771311554889224, - '0xb771d03be80be63af365734658f4efbce3c38b0a': 0.14258457934708083, - '0xb78f11bfe9f69cb82d9465542e69072a3ffbc5ca': 2.515571916271524, - '0xb7b7d369f1cff2a7978b7ee2c350d52aadc721fa': 4.960200839095284, - '0xb7cc45b1729784c4cc55f93fdc9344ab6090d04b': 1.0693843451031062, - '0xb7f496972e18b98490077b6a686960c0687951c3': 0.22171902088471065, - '0xb80e120a1b48df4dfea69833ea12fc2f3ffc3268': 4.805908607835181, - '0xb813dba79ab0fd1052a2c5735740bdecc95c19f2': 0.9480553585372588, - '0xb84cf804e4311caef6fc567ea0b6bd683672ca74': 11.969300393250112, - '0xb85971b04fe023e961eab91d3c60c7eb4ab66a31': 0.8027328314218446, - '0xb866c4c1a4e0b7699cd6b1e9bd2c7a36de1da303': 3.3971722286705686, - '0xb86a352cffe8629266fd0279407ecddb67e5c328': 15.38647053844777, - '0xb86bc824ea4eb3677e7b54d4d9eb0ec1dff63aad': 0.4075903395732186, - '0xb93f10e7074335b500897a5e51f4f78b42cf267d': 0.22171902088471065, - '0xb98571755d95462cc43a62a3e16cb18e4d51ce80': 1.8535995315120506, - '0xb99bec8c0dc698f1a92b55dbd2769d28465835fb': 0.1986589191556872, - '0xb9a69b834ed7275e350db6af932f0bacfd244740': 0.2444455327977991, - '0xb9e944f60d7fefd9a8f4e7c7333de4b15ad309fe': 3.8833548721881295, - '0xba2e2b0424be887cf777df6a33f73e9e06d03317': 7.17395499094442, - '0xba314415bcbf4d89e6d3285bac17ed35fda504f4': 0.4852725251220914, - '0xba62acf915c1697d000de2f70494ab65cfbcf710': 1.6397226624914294, - '0xba6d9c4dd182b25c81196929f21d63a3188c39fa': 2.646759378056056, - '0xba93f37118f9d0ac9f620cd7bfb9fd79635db7d3': 1.4258457934708082, - '0xbac22068e7d35919927167196dd0ff93e3174f46': 1.5098945283235883, - '0xbac9f625ed7fa9630011e177e127cfd7b16deabe': 0.5499355672599038, - '0xbae37031306577245cd16c9f659d7a61580e689f': 7.431346865239879, - '0xbae38c208f57286a2f6450b499673ce814217cc7': 0.45573681675053956, - '0xbafe6e1389ab79e88a5b2900028fac02114a94e0': 12.099964144977797, - '0xbb26fb1b77850eb2a19b58f956cf5b5cd2a8c53e': 0.933987773042221, - '0xbb49392af8994dbe064dcab658e78ee5417f48fa': 5.145746810390368, - '0xbb8e52570eb6d5dab41c983bb58fb3a5d65bb70d': 3.766850403122701, - '0xbb9be7700e6a7b08e901ed5b6d7b9442f3436b1c': 0.6073235703663871, - '0xbbee6e0749c7ec3ab6ed519991423fde60a141bb': 0.22171902088471065, - '0xbbfe98e31e7305769e0c8815a89585bb3397af30': 0.32643595630762107, - '0xbc743c8a32848b590393bbb109bf8a493d06a7ea': 21.38768690206212, - '0xbc95012c83c672ca061a1797b85a45b4f1cde44f': 2.205595411553201, - '0xbd28edccf6ddd31d74caafc322535d1c03b3f8fb': 1.1736522435644674, - '0xbd94a9178057c6f1810d0853bb6fec66a4d14c88': 0.9346419176201148, - '0xbdb7765a6eefba6e499a0808fd330e66f96fb5c6': 0.5187121697045559, - '0xbddb0ec784be02283e34f0b1e822b841b76e6419': 2.689439135105996, - '0xbded28d68dbab4e87b88caf31da1483d2fc2cb08': 0.22059367454976314, - '0xbdf58bb8b870672cce858b5399397ae1f1ffbf11': 0.514242583485541, - '0xbe90e7d39c0054ddc2845c649aa5ca379218b6dd': 0.6174874195763133, - '0xbe94ac4c148634228f9e2cbdc275a5ceef1577ef': 2.12517855531613, - '0xbebcf09c45b826ddda58290d9fa867d1357611e3': 15.166858555732254, - '0xbed8dbbd1398aee1600127942745b7b5ac29053c': 0.7265598031810446, - '0xbedd774b8161d792166765f404283304b8b55941': 19.5826558484292, - '0xbee27418bac915cc1f697e04e006278e51db296a': 1.6211236372780373, - '0xbef187e4026c5938fa9a2db5b92f8dcedf3100a0': 3.249642195615836, - '0xbef5a136955ef78291782bfef5045980853c3dae': 4.355429900469235, - '0xbf9ecda5f091d096b29474f8bb2c92effb3b1fd4': 1.513727721299242, - '0xbfa99bed49d6fe537819ecc97ca6fb5c43bc820d': 1.3394574728597421, - '0xbfbd0c5f45596d563a9401025957da540f4b3a10': 0.37654802860421804, - '0xbffeeeef2cf46e3abd08ba4db33daa1c41fff394': 0.23184594562527588, - '0xc00e83b4575a3f71cf6601616b668a6df774a21d': 1.9150419533141423, - '0xc06f5bb6da4027d9abcab659814f457e2ecde803': 0.4278980518294702, - '0xc07e251ef2e2c1cb4a5fcf8c8ee2040a3e056655': 1.816282706413902, - '0xc0add347555bfbdd0a15be9003c4a757013d1a5c': 13.267859349048358, - '0xc0b83e85bcf5b9952a4f3c9e6eb024fcedef3ebb': 11.005973251322482, - '0xc12830d586ab1ed17c1ba8fc65baa4964ec894f4': 3.276996703083129, - '0xc1d1b59b8b77ef5e438f8a84305b589628eb2b90': 1.2745727900133663, - '0xc1ffc574f2426bce090f799021c180b1ac67bae2': 3.924015997549459, - '0xc247a139ccb2fb172e457913da132abe95adc560': 1.8580622795943578, - '0xc24c708a80a08cb474b49617e2cca086dd75a0a7': 13.593741482216041, - '0xc255b2324d572913ed95c5907cbcdb24af713d70': 0.6416306070618637, - '0xc257e85558b144425df1809e16172e1c2175688f': 1.1341681294572608, - '0xc2d95c99033562443817c076b6876480dd3e18e3': 0.11963702303120693, - '0xc2dcdfc8bf14469b4e00eef8eb8819ff47562296': 16.45468118131261, - '0xc324f339df336007a4c46f7969cec7f0d685023a': 3.6219387657684674, - '0xc342161c9c55105c37f6c8e0375f944e3e172308': 0.6470779840447954, - '0xc361caead87ce3f2efd5def1a7a610cab354cc60': 6.205551820433654, - '0xc3b5c398067e544368b70112beed760cfbaf56ef': 2.6356949085090524, - '0xc3b814e8f66c48a17729dcd82d1b250635c7a332': 0.22171902088471065, - '0xc3b92420b3f762ffcaf3686358d98bdca6bf49ea': 104.81768080282406, - '0xc3f66a0392678439ff85d1606a59cd891f4ad579': 0.8525335436809807, - '0xc3f9afb5f728210e3e5548a4cf3334fc9e6d1507': 3.305052277545223, - '0xc412432a1f56e128f48e74edac99a87499c9e1ed': 1.9088032879420818, - '0xc456f81419a4c0ab25d33677640715f62fe8462e': 1.6397226624914294, - '0xc49ec2cab64268453556951aa465355ca08059d4': 3.363628479444957, - '0xc5001bcbc05cb0225f24cc15cf3de0c2cf56b496': 0.42097043178429516, - '0xc576c7d36b454b7aba8d89a76e8a02a36de6c720': 20.838267766214216, - '0xc5c36d72956540e958da833fa889504184c36561': 2.8516915869416164, - '0xc5cc00112495f9c3048973ce0ad83cd2e87f2aa7': 1.0907881759468707, - '0xc5d0b61394f1e37e2af135e7091a056f818b64b6': 14.904913620731365, - '0xc5e89ebb3efa3171791665e571ddfbcdc7046a31': 0.5125616102456684, - '0xc5ef44454e8f1912c7710db79d9697079a80ad9f': 0.28090870533784135, - '0xc5f103fb2b831d461465cd80cc7fc09ec5e36051': 0.7801519256419203, - '0xc5f7a96dd0c1c87618a6f51afd1510dd9d03de6c': 1.4355366677772985, - '0xc61d13527db47514995a889a45c9cb01ca955379': 3.9964261132050476, - '0xc627c2688c7f1f08d17077707926a87b437d512e': 3.397259913393507, - '0xc64d924aaecdf1c4ee741e3a216c737a71d82472': 2.6829971807161295, - '0xc65b62845189ccbbbe2a2f7a4b26ac9e9bfc4b9f': 0.13580405919410726, - '0xc670a4a2e9f25e69a2ae71da2ec9439f810adf48': 0.22171902088471065, - '0xc6c4f5ca82b529da5aa3c5a818c211f773ab530f': 71.29228967354041, - '0xc6cb96cc1727ec701e5483c565195b01e3c1da2b': 14.258457934708082, - '0xc6f2dd6de080927b5b7396f7a3f426193eb38471': 1.9490776286292295, - '0xc7079097813502c30ee5e612ee58a6d730a0fb49': 1.469956843582508, - '0xc7401274cf3e019c8ca07357dd34f841268f3802': 12.437583635904206, - '0xc75671b993ddbb4f9ae882a7ee9527eb507da30a': 0.2285726685365855, - '0xc75e777d14114e5e227471e80438bf02a9e22672': 2.1466393589861714, - '0xc778ba043bb12d5650cbeefebaa57ae4d81e8341': 4.439657299651225, - '0xc78e04d823cc8c247c7b88a3007951447db1fead': 11.033439352227555, - '0xc7a34c6a3e83baf73598caf9a0809ebdf5623791': 0.5336395917734638, - '0xc7c9f3758577d7df14c422cba3b067ee8683d1ec': 2.4883114473887367, - '0xc7eac41415ba9ace2c2002a2129cf541bc6d3fcb': 0.5597496358442994, - '0xc8021bd0b552e08d8fdb8ee73f5bfb888f735dcd': 15.655786812309469, - '0xc81c9e6bac103c8a4ef244c3ee02f777c9441216': 5.3264338465611525, - '0xc8520b81a034d4315252ddf81a42690cfd3cf47a': 5.954201566973109, - '0xc864b30df2f907a80849ad53dbde989b7892fff1': 9.308361208162074, - '0xc868cc61f2e1a49e5c180de243d5da5886253eea': 55.053316416603906, - '0xc8728ae130381eb77fc9a8b715564b00e83e19df': 14.135583474394156, - '0xc87938eb4585dd8161769d62ba86d3630d5f6e8b': 82.46814909560193, - '0xc8b24ab0c6da572714966228f532104cd8557263': 4.407711903947619, - '0xc8f8245d339eaed126e3c49f25853bf863f6983a': 4.712383639450717, - '0xc93f653c4c84105e61f5f2fd25fed8ae8956400a': 11.885701046619358, - '0xc9c6a4e6314c1e9616614e56ee33b3a3c4f70808': 6.555403348964095, - '0xca367f6702937b22ae4fff598bbe908a286e690b': 8.371020558907741, - '0xca8d48c951f0c59bb2249ddba2a7b11a65fb362b': 0.3255857563658837, - '0xcaa9ef4d6d0e605374aaf7d90bac15e442c0d7c9': 0.2343132744050401, - '0xcaacf189bc3f856213e3d9f93971c6c52e66b528': 4.75328973817493, - '0xcb0c16efc3a0424afba999b578af7e6232cc0362': 6.089316493783924, - '0xcb45adccd82d5379124702ba72904a43a5b6f584': 0.22171902088471065, - '0xcb589587a5e8eedeab03bce94f352232ed61ce9d': 86.95572182071987, - '0xcbfc8fe2dac2096e7ab5affc7112604962431699': 6.711610320213185, - '0xcc0a488f28237d25cbfe5f9f88e49ddcb90a0a07': 3.5646144836770204, - '0xcc4629cf43c53d86d31728afd3c6e5570520209a': 9.071620858062927, - '0xcc854c22adab13930b3bee4090c9401334bb5c42': 0.8176430037242376, - '0xccd43df00dfb151eb63622ba546292e6a3350651': 0.214867371488109, - '0xccdde45bce9e5f3c1fab2b8d2e9a42feff05a34c': 4.088033472618922, - '0xcd29eb38ce1297bed6e645d7c1b9c483b97ab66d': 3.9961021184433916, - '0xcd37d272d75ed3c78796174b8b999279a0050b74': 0.4645684122115915, - '0xcd62349af723b0e3b90ba644e786bf3427c3921e': 52.28166815263929, - '0xcd7fd1d40147fe87c8a531532bd9137fc60cd987': 0.07955554254817745, - '0xcd811541589a22b62c85a55adb9c1fa8c5ac0c76': 0.11369977640476117, - '0xcda685c8444f659ac3fe778f8d143aabdf1a21ab': 6.048134881959904, - '0xcdb07b3cad33af6c938d61ec2ef8ae16ebc2de23': 7.202964264730848, - '0xcdbb181b84dcb9fc51ab2610eeec0eb66f8d75b4': 41.41009242198047, - '0xce01ea847694cf4b1adbf9a25363b45c6c817fec': 1.7420396062730785, - '0xce0eb9a798e41f7a875e90efefeaf84bfbd5d24b': 3.170420180213816, - '0xce2a6bc1bfdbff98afb8ac1c2dcff1455b6da7b8': 0.10602972312743267, - '0xce8bdeb37fa852b5aa823c888b31563ff67dad54': 0.9758857280954042, - '0xce9be400141068ba98ffeb3a06fc376e9b68eb68': 101.60816468333984, - '0xcee4efaa39ca8e9fa68194eaee6f486f57caf31b': 0.4637777320132825, - '0xcee857c35bdb04a455ac7205bd39c402c1bec6e1': 0.46339988287801265, - '0xcef3c3c2387c7de18af623245203beb13db88d32': 2.1329627771373194, - '0xcf317215f982dab5f79ed8b4dc0792c73e415792': 10.010157211219486, - '0xcf33fd9ce13fafd83d32fc1853c70045b0d49060': 5.650104252774385, - '0xcfbb4b69530d7a5306fa527db18291536b275e96': 0.22171902088471065, - '0xcfbc689201be8386a25c37b9bf61dcd5e665fe8f': 2.3188725970829434, - '0xcfe73bcca7f359569a84d957442e7c9de69860f9': 11.62267449367517, - '0xcfeeef8a5da42515aa151bf4e758bf7a89668072': 1.1020129051791983, - '0xcff4490e7a839755f2fa87a5f275ba17a68435b4': 4.687562345460895, - '0xd02ae1cbe5b80d48174e29756e8603d57fdc0415': 7.129228967354041, - '0xd04587d3c39a66d5de768eda99888016a91895c1': 14.59128462860077, - '0xd05b9dd5a631b48dfa7bdfff7a3fb700f08aac82': 0.42775373804124245, - '0xd0777d1efed16fee1230baab987cb553f6e006b7': 30.75987974201439, - '0xd090ba44620f8cafcd279c3fe037d0d1b628e54c': 0.22171902088471065, - '0xd0ee95fd23fcac92127e0b43490d7585a4055cde': 0.17892923429717114, - '0xd0f8624448d155f3abbfbbf9e49e2662c4c81d66': 0.7129228967354041, - '0xd113062ab41df67bccdfed708e3516312948c2fe': 0.16686138160346342, - '0xd11d35a0f579e87523c4e2772bca9adee6bb2028': 35.875506410232504, - '0xd1321ef5a6257b3db6a415129b768894727caff6': 2.489071526531309, - '0xd1aadde532c93d39bd96629cb268bc159b1b8b80': 248.97216034018413, - '0xd1e7c2358e8271cb1aa06507dca57e648d0191b0': 3.045649542221465, - '0xd1f29da49a72907a129e81c584274b029e58d2cb': 28.860316723313836, - '0xd236a98c1c1305b9517f451acada73b674aa878b': 1.9117419660757258, - '0xd23c66d688d35e0c1ba695af7b81ca72c2b76fa4': 4.521081743514059, - '0xd2e4f6625210910972cb3076c824be14e33555a4': 2.102206410153092, - '0xd2fcb847f19381d7c06a99cd2266a80ec8d6ea75': 2.1732226917695883, - '0xd35f1338e86d6e4c082d446f52c637dc8186e89f': 0.7493473376223482, - '0xd37c8992af7205b0e514783cd40fc67cfb88ec35': 0.8555074760824849, - '0xd3b119978b44d26a48da2a74c37c5905855ad582': 68.9144637075037, - '0xd41d722b684740147b3c95daa661fcfc576f7241': 0.6182978642136835, - '0xd48cd53b24e1ffb9fcf83e7eeaedcb1ba73ee02c': 0.22171902088471065, - '0xd4ba3d0a5a79a27dc8fcc19c61bee494b5c09edc': 3.7380835444222247, - '0xd50ad72ce6c3f1e597c310c786bcea2fcfe1f44f': 0.22171902088471065, - '0xd50e4bcec8e75cbc76507d92612e282b24c0b25a': 0.17567834221206813, - '0xd5108a08da77cdc026dcb59ddba42b045bcedf9e': 0.15807207123871392, - '0xd52cb9bf5658ec717a1d830010d321490295b221': 0.34447042386910703, - '0xd5355a7706ff565d29148f0b9eea18c6f10fe663': 0.21387686902062122, - '0xd542425b315413d04bf4af51c876f4b65c7dbcea': 8.55507476082485, - '0xd548803d21411d05b7753b6792fab0ad7d57f06b': 0.22171902088471065, - '0xd559b0a504b8b35fd988525c7f446178bad8798d': 17.18144181132324, - '0xd586b5f9da58a03e4e1af4399ea3101732d4f1c0': 0.7129228967354041, - '0xd5c6754b011cb9eddea2506084376299997f4dcc': 0.18313427936058888, - '0xd635eac82d772bea841ec0ad8acff5275b2db2ac': 3.546725002468632, - '0xd6424096fee3dc5b6525c4d234133deb6c3bf6a6': 0.07705660173340878, - '0xd6430459301f36c8aef24d85c3897d4d71f49a69': 2.602956528712521, - '0xd6b44f59b7526e023ca173ddb74054a1dc4f026a': 0.7842151864089445, - '0xd6c181748bdd0f06405e52a153946c2ff8a891db': 9.347014190629524, - '0xd6f151c8293eea84e114b304d62c8dec2b2705b6': 0.33182635618299045, - '0xd6f63fc6c2de559607466416cd66f5314f02d0a9': 25.803120487730425, - '0xd76ad9be610060b18798151885a7a34ec8c415e8': 5.416376745331475, - '0xd782978b38ab40db43fa421b32f2e924f2007898': 0.7129228967354041, - '0xd788d32737f9d892c8a358d3d47ef382cc3b5f49': 2.8607297427796308, - '0xd78b968acb47c1965616b683a6b1044f4b37bb66': 2.1939428159499266, - '0xd794ae660cead04f803a296df90d636352fbd3af': 1.211968924450187, - '0xd7a7a89d196974274bf73f66aaaaad9f8cf7b579': 3.0132486543214894, - '0xd7aa0af3e4f5a09106b82d267cdc2fb2703ca7ec': 0.0769738764576418, - '0xd7ec72b51204ae2a52119743a7265aa94f62dedd': 71.30654813147513, - '0xd82a051bae021f948698f6846510d2c8d6715b09': 5994.097262068741, - '0xd8322777c558ec4388d79a0eb5541ce31eae84bf': 0.7078454955421076, - '0xd84be26c2eacf52d587b612034d1e0caca224f4c': 1.009893624348874, - '0xd8602acac6b0735b99c5942ade49b2422060e0b7': 1.839981656981764, - '0xd880e4536d2a664f9d5bf6eecda8a19b2156a4d6': 1.2287075073866456, - '0xd89c3448a1d3145367b09e83f4f8325d679ebb81': 1.4758096380447365, - '0xd8caf0d02ac0b2699aa83699b6ed7cfee8d40edc': 0.08820275164199069, - '0xd8e24deba23196920f529ac321ecbc786a5ba5f6': 46.803523092578274, - '0xd8e296b3b26677f745aec19e88a1f23564db30ea': 1.2153471257663286, - '0xd91d579b20109cc5c38b234d64341adf167b1af9': 0.20369225621011544, - '0xd9230c5f426d15bec21e24fea53223825d428a08': 2.5724110070532227, - '0xd93ef487e2fe1b04771d14fb4bcb65621f864bbe': 249.97197536945401, - '0xd944ea819d80c424310e84633d956ffc3b3edb64': 0.14258457934708083, - '0xd99a42ff0479d58938295c880e6c2c18ea72d1a0': 1.5831009680847103, - '0xd9af5311ef257f890ff55378a38b22a9ed7d98b1': 6.6852027177893945, - '0xd9dbd3a863a0c82e997f0c04159519bd7206e004': 2.334720119185134, - '0xd9e1d61d51b4d1ef7da8f09cabddcc59030bf872': 0.2569048987286308, - '0xd9ee7677fd3448f356a160bfcf1b4d40d9b7a48a': 4.065391170169152, - '0xdaa97fc3b6e833f084aaac64c396fe485ebb05fe': 0.5462771696235033, - '0xdad04315183644e20894c8e2a4cb77e3e527eead': 0.7434994197513398, - '0xdb0a55f29a99a4f20ee0a3a874bf8f3ef86b2b2e': 0.35646144836770205, - '0xdb1048159c3cbae9e6b4040e8ef4f39473a4585c': 0.3403882226494695, - '0xdb258d2500156da4de8e84a22263f8e390e308d7': 0.4549198988554511, - '0xdb31091d38e218589f2bfb20e300d131fa73c80d': 3.944769558125624, - '0xdb4ef7e386b0b2f3461af5e728d1c0e598810e8d': 0.5614888590711768, - '0xdb7d8f7afb6807f4983233656382ec295ed96764': 0.244693426771713, - '0xdb869ec912bbd37d322f05d3ebd845abe19ef42f': 24.63563518664299, - '0xdb88e946cf2304241d1de78ae824311b7118d844': 2.8958775772529535, - '0xdb8b4df452daed3d7faf1efa597df82bb8b753c4': 0.14258457934708083, - '0xdb95b5a27fdda44fc21bb8289d2b19b41a0f09fe': 2.9484982478187662, - '0xdbff660038ab420a89c2afd2941da7bf8b087196': 4.705291118453667, - '0xdc22728f7515716a35d7eb0f305b3e2f07897d0c': 11.523534887116577, - '0xdc36bdb096d98f82fe1ede533f38c5d1faad6936': 0.098845294640312, - '0xdc3d7728356452e9738af41d287004148b4083f8': 1.212284500797157, - '0xdc492dab0293a772029f1f84abd29d7e223e352d': 27.93434810681751, - '0xdc5894570df6fb60a352c2cb8edb40c99fce63e9': 5.713486374193546, - '0xdc89c83ae682f59d16b66beb3769b24f93bbddca': 0.1860978283493262, - '0xdc9cc1ce8716dc26166ad4c0cb8b0153c2270a52': 3.181376278714484, - '0xdcacadd78158b2cf800ed183b6de7f15dc4d32e9': 0.7976539371320072, - '0xdcc27335b4fdaf36f9e4ff152f202e1139f13fbf': 1.1076926725484806, - '0xdcce5fcd243260e7e9f1b5e9eaece5f19aff0666': 3.502581982297379, - '0xdce666057952f7aec8ade6fd4499aeada007ec67': 5.135391053539237, - '0xdceaaf4d0f15bd22874941e716e8b922bb7ff128': 0.5285785959075673, - '0xdd04e758fa0e80a131569fd656c906a6da80885e': 3.2219623518190827, - '0xdd13f2d54592f0e98b5cf1433ea7d7f4542d41d3': 0.07736446935095982, - '0xdd6d32875b7ce1b3da2d273dccfdb30d4055fefa': 35.21893414773488, - '0xdd9aca01466055ed30e9cacc854cfc90e070d878': 7.265544964082781, - '0xdda4b8820407b64b59dbcbab9bc2f621fe296b47': 0.6054423525867717, - '0xdda9ffa8199d8868725bbbc27797ee117eefc55c': 2.780399297268076, - '0xddc87a9a231a3163a2c71c149d1dc997248e0baa': 2.4689046164837882, - '0xdddf3067053ecca0f016cce39906f0d0f6ce8951': 14.258457934708082, - '0xdded1f1f8c73cae4e41c61a21eb1aa75c1222079': 1.1348816982054921, - '0xddfc15da8dc4326fd56cc58f6932ac207f3e192b': 3.829400608230471, - '0xde29b34aa0c856c6859855e2583f92534991d226': 2.3600270881427368, - '0xde57a21dbd6d3338688cb3dbe0178fec1f4022a1': 0.7803879445284337, - '0xde663ea4e6397781d593bb9ec05b5e2d2bd02b8d': 1.036954438712982, - '0xde6f8f1cbd6dd5167bfa5dacf09b04463d1a253c': 6.322464247819546, - '0xde9b0e0743c1d2390b1de2c999a5efa37e562f78': 5.152851690515026, - '0xdeb75ee3d759bdef650b6ecd041bab7a47cc792c': 0.19528701306481516, - '0xdec84c5961562006ba02abb5722c7b158f7d6688': 5.693592078315552, - '0xdf03de3665ecc1768c450400dd4cecdbb8db5660': 0.2476052512651732, - '0xdf1618c821a1e1ad3fbb63a37fb2d48af347e87e': 0.14258457934708083, - '0xdf2b22faf0512e72c63480c80f7586ea34265050': 7.1175049163316375, - '0xdf373db84fc64bddd010300eec55081934359eb0': 0.3827690631907971, - '0xdf3829925588922869f06203d3661a311ff24b5f': 0.6818492881435049, - '0xdf7799b55f1159b722f1d66380cba2c965a9fd67': 0.14258457934708083, - '0xdfa5024677e7b5d58e7a3257653473f7f2295d27': 207.93858114906178, - '0xdfe038d90f286e6b511db5397f5cc3e18d8158af': 0.22171902088471065, - '0xe018f9eeb70e0364f9dc4ad50ae1d942786c17d1': 7.743771850038918, - '0xe032a7a436f7e5304eae5bc1d1337c065174cc90': 0.2706257876151771, - '0xe036dccb35e931799e836ec3d8c2b657804d6460': 57.49180875466563, - '0xe06b5d9ccc997eb1fa7b52002d0059150eaeae89': 4.161134066905077, - '0xe074026471fa7588bb0f70c1a3e76f79f4653c18': 1.629976956524197, - '0xe079212e4cb6b00ec12953f566f01fc7ce426ee4': 22.998854929628568, - '0xe096d7500a7b0dc68fac62c4b06ad05f2f167ce4': 0.5001771725095707, - '0xe0d5c8f4fc8f79999b189927b91e0b738afbfa70': 0.14258457934708083, - '0xe0f659606e208a55d685749319ce919a76ef5f07': 5.864802179502275, - '0xe11cd3a7d02a64cd778427dac73c4115cfbce62a': 1.6534387813744786, - '0xe1469a3b943363af303f7ea6c5bd6f0938411094': 1.618260541541203, - '0xe180dbfc0bbbe24ad62666a8cf256027b461898d': 0.22171902088471065, - '0xe1b29b42ddb9baf123e1ce7aebf95a0e248da097': 197.7816923562026, - '0xe1be287a43576aba4ed1c2de357142cf2366f8f6': 34.23635822176519, - '0xe1e9dbec88d4676d6fbf9e94984c909b7810e8f8': 4.187635464501257, - '0xe2012d41a9fff896c75676e2d5c2372ae6c578f2': 4.488950175632165, - '0xe24307ed0ffa2a2bc746fb288de76152347b1900': 10.994214753347837, - '0xe247204d20036ef8aeee36e4f19f5ef958105215': 0.8038956095136578, - '0xe25989c58a0b6a95aaa7e731d635349e0dbfb3f3': 10.679044321695079, - '0xe272d2caf62cf84f1f867ee1c8ae477e817d97e9': 4.3378251096561975, - '0xe28538c23da4695c4c5ac365f2172d18d0f80294': 28.2776375663223, - '0xe2b7fa9aa3b30197416667ba3c237614a140ebe6': 0.18459760616602233, - '0xe2fb23993bf719cc4ead0fcdddf9f920e447d17b': 0.08555074760824848, - '0xe2fce263408686d5e48a8e995c7d80bfe23ee201': 7.121946464414312, - '0xe30f2da98d5a97a2dab84440aed1ad59dee30797': 7.3099030234909685, - '0xe31bf034e0e7c6cd626b146f614c9ddcbb01f590': 1.907615929070022, - '0xe394c9be6a06f483b6302bfb4776bde80679b50f': 5.040131264616365, - '0xe4082998526181c9aa0bf4cb0532730e4d668e8e': 14.258457934708082, - '0xe429880202a53c33d265518a84f45c2f2d7e911d': 86.87721101926485, - '0xe42aa08c616dbae8abb1e6bd8931afc6cdcd142e': 1.7021274539825257, - '0xe44d5d29edda42a44c3e853427ec7bd74d68422b': 0.8555074760824849, - '0xe49973f16129efda8136c7e2e27da7ebbf180ad9': 3.972893782680342, - '0xe49d11a5d73795750a51ad6cf85e52eb2633aa32': 6.565179325862404, - '0xe4f670e9adb4ee15078badabbb08149364bcbd91': 0.9413763511496192, - '0xe4f89f5e8584b7b4a4aac9bdb2bffdc5ebf46f86': 0.7129228967354041, - '0xe5689c740ceaf36c436eb1a5713898201cb2e786': 0.10796759602427643, - '0xe582db06f0a2ea3bd5410d1bf9f44c27610eb018': 41.85570326733558, - '0xe5c82e8d592ee166be36f0cb1abe58263966cb0c': 0.5703383173883233, - '0xe62ba23026259b6f8cae8bd52fbc47fb8c1d118f': 28.4982634122919, - '0xe62eca9cbacb8788a2b0f8bebe1fb545168432a0': 1.193764274819815, - '0xe656c33cb2ea108b7ea00ec03b93ac17c97e22ac': 0.706524144010325, - '0xe69197c4a9abc8140dc0093c866147350467c974': 0.998160947318276, - '0xe6ab4b57c0a66dbdc74c264c06aa549ab2e90b8e': 0.7129228967354041, - '0xe6b1249778c2750a805f5577d39cf1b8cd616d88': 65.82530187075236, - '0xe6bcd4f0a4a2cd84d5a3aa6c93990b93fbd822ac': 0.49904602771478285, - '0xe7060014ee5e8c5a97734327748dc19108ea53c7': 1.4971380831443486, - '0xe7282c02fde0bf909bdef50958dd3884d82f56c6': 25.461532026264432, - '0xe750a4dca8763324af9c76e25c1943c83cd28a95': 30.444369363048413, - '0xe7687fe39e286a8178c25ff82061addd2425618a': 0.15543251334005298, - '0xe78efb63801380d19a79c32ac92bb2b72bbd87c8': 2.019091758758971, - '0xe7dacc335483667489bf67261f723e7da9197c95': 17.407372473498995, - '0xe7f4a0f779e62a5697ede1c8fd20b632a61eb522': 0.0901982485895669, - '0xe81eddd2248429318bb6fb881d82458508badca3': 2.4952301385739144, - '0xe848c05883da370e26d289e4d2f9639e98176adc': 0.14418303948853903, - '0xe84a782023a558716ec1c4b8e474361f3e276b66': 2.6742860048836796, - '0xe87a50985be3ad5d746ef9e43571c896375e7a00': 25.961013812099907, - '0xe8ba28f9614ef6946127c032631bb4a9c5eb941c': 7.1339632932266825, - '0xe8d3be585f46ed0e218debc1311c13cb0424af5a': 0.1359891120587814, - '0xe90aea7a6cc6fd92aafe7ff57cb2b4908eea7aba': 24.17110199950861, - '0xe9255146954cee2f35d7738a6dcdd644e866fc5e': 2.2389472238668957, - '0xe99e7bbf55266bc62badc166f821887fd22eb5cf': 1.4645029855895686, - '0xe9b4e6302494616b5a94bf5b88ca56ca9cbbdd4d': 14.159053093572306, - '0xe9b5f3a3857aa5bd6d12bb6cf782a88ba9e4220b': 9.816661614883147, - '0xe9b7ee8ee7773405988146b008c4827110a63371': 7.3826963905919145, - '0xe9c718a640582031e375da36c789f06cfc889a4f': 0.5001656682495965, - '0xe9e82a8a3cff3ad5b1f9d0ba0f18200a39853c81': 1.0535721329817318, - '0xea30b266000d0c712102792eed18c87a8d74718f': 2.092116910631259, - '0xea41fc7d208c98e50e452a02bfc1657f9170a46c': 1.0693843451031062, - '0xea47d6ca14d6a3475d27c5087cf4e1f1863b84ff': 11.586557941058754, - '0xea4aac0bb97e281472bc80e8ca2ad2073efb925b': 16.339335929507506, - '0xeac9c27c52909387ff02b8f2654a1357a30a804e': 0.22171902088471065, - '0xeacb9a6e32d414e5cc28fda15072c51e48862dc6': 30.590810463530072, - '0xeaeb5a6e1dfd2b9c13fa8efea1ded44ef3e4d5f6': 1.0693843451031062, - '0xeb0b0c4ecacda68456d458d981ca26c9dc72f0ab': 1.7024788045313966, - '0xeb1700d13aa4a0d06bf1a370a8c675df84ae4b4b': 0.6991031507052883, - '0xeb64e9be25e81ab56021159cc52b6a806063e93c': 0.714622014083203, - '0xeb672e04ce36ca09db0cbb008ad62facabeaa346': 5.988552332577394, - '0xeb68b631693cee4b74f472c4ca22cc0e9cc4de3a': 13.319113475603126, - '0xeb8bae0d550dc55aa3dea66b0714b42762025c7c': 1.4800510885805713, - '0xec255eba1aad8023b047204e373eed258b746eb0': 14.266380824775403, - '0xec3e129779f371387dd3a6cf01bfd0522473d535': 0.35646144836770205, - '0xec6028787f516425f814d52cb6e44dac6a067a05': 11.87526738666208, - '0xec65382a62ae50e51c55d25c58f26cc16ada6d34': 0.38805299939678845, - '0xec7c76552a6d1d1ce66fa71b55e8eb00e3e0bc9f': 0.22171902088471065, - '0xecc6f51bc3d61fc6d5a9f531259c116986008048': 0.6715095498204761, - '0xecf4bb56645374d9d3d294511e124cc09b669cc8': 0.45836452227651364, - '0xed0a70acb6268328d129d2bab94e450640a3059a': 0.6985057847308345, - '0xed0dd549d1f2e4372fb55bdc008bbe831c8b18e3': 0.20369225621011544, - '0xed32d9a864d2259025d1fe22cd633e4b47ef8f2f': 148.7544951709937, - '0xed48076353695df75969faa98b242e38b4ecdd98': 8.192365573437996, - '0xed496a107ac5271162d6718205df22b6aa7dc249': 1138.0145355533289, - '0xed913538b70b2df2fde710cefe1eb3568d43992f': 0.08791930721043156, - '0xeda3ec76da6d4f895534d0eb4792b4ebe0766226': 5.092306405252886, - '0xedc8d1681766c4ba8ce2ebb52072be3b4fb6cf6a': 561.9880327458225, - '0xedd97e3e9e7c10481e00fb234c3c7d8693086fc1': 0.4435220410216476, - '0xedff74e91154bea0ac6743825e13c106b01924b4': 3.84965885527902, - '0xee06557db1c125772748a0bb19722ea80d00c596': 2.2621276465070763, - '0xee2fedccfdf29bea075f3aa5c4cb1aa80ff48825': 14.25880782082323, - '0xee3c198a7aa86b5c5dcf47ee4a1ea0099924b4c6': 4.705291118453667, - '0xee673d3cd304097ab5f5c3f9bf33c730a5c847c2': 0.6857444410849881, - '0xee6cf62b4cd0afdda438fe1e1618827a7114b89e': 21.92249394704405, - '0xeedcb316984dc99a7db7558ed97ddf3ab9927822': 4.462751877162397, - '0xeedeecd1d331298dd945da27fda21778a5d170af': 0.28518736839043957, - '0xef1171cdec282c7d0992334414854107cbd32c6c': 2.577426763477196, - '0xef3c688d88a463f16f529e845c97c4b37e446691': 55.15549540172554, - '0xef428c3d08673eab9ce6e35668613a3d10c62e0c': 0.5905813829070441, - '0xef834d569be3dfc4e3d5488f0134782e776288b4': 37.51397199945572, - '0xefb772c977a65b8ae30f075edbeecfe4167d1cf1': 141.61503746236957, - '0xf01868413612fcf6d46b2a835fb59c2c0902ab53': 6.644613540317661, - '0xf0938d04b67d4e1eb67b12ba7680372b2d1c23bb': 0.46892143446716694, - '0xf0bffde9838310d8fee6bb15abac397c4a97eadd': 1.6598035922190164, - '0xf0d1a2deaebfc4ebd45caecd609dd3dfd4ceb580': 154.3204111045124, - '0xf0fc9328382c0a97832084a2ca96b878dc57a1e8': 2.168526038487532, - '0xf11f4e1f8db1fae0e21d4baf75bc4a83666bccba': 0.7379748913088148, - '0xf159d89161eba1e7dd3832df0822c0b9e176bd5e': 0.2244234663366446, - '0xf177b8dc69b22b5b82a0c77792f0ca3977e67bc5': 10.46232740840773, - '0xf17a2e61861f4ac5f6b3be1fef14aca99f7b4006': 0.7129228967354041, - '0xf18f68989c2b6287202225326e8bd3fc6ca40fed': 0.41655066394968604, - '0xf19245da662fbcb0d38d490239934b23378d1274': 3.32802128063513, - '0xf1be33f695c8509f60cca654220272769813c524': 0.9980920554295657, - '0xf1c79257dd159f0ecc1cb2a5038b1e85d5e53053': 9.065084858329854, - '0xf203aa5bbcc13c91ec008b194b7a941353c019fa': 1.9617760231246866, - '0xf20d545099321be2319e369e78909098de821434': 3.193427549058465, - '0xf214b55a57d52148b2d05549e5f62ee46354b931': 0.22171902088471065, - '0xf223fa7ad6ffdb553c6768dc4f5be18d52fcb419': 64.09021470818054, - '0xf225302a61b344a0635319e397771a0f5eb37ab1': 2.328325062257187, - '0xf270ff01b896a5c7be06a17ada9a6ba1e130974a': 22.59256973325701, - '0xf293c0171e46134051824ce6172afeabc20f1909': 22.133550751759074, - '0xf29e80e31d2abe3eb2171139bb0b1ea26a1203ce': 0.42775373804124245, - '0xf2b373f8cd6aa5892c40ce2545e87097cb5ef99d': 22.91537882363799, - '0xf2b515b32b5a21cfa79d0be2feaaca61f5b448be': 2.6665756632976683, - '0xf2c1779d6a0064e3b9b4ccc72c301ff22f0f5ede': 4.565568277790658, - '0xf2d57a394701d7bfc5eeb530a0cc9bee40750b17': 98.43296909876567, - '0xf2f5e7c9fef6c58b51fdb0f60ff26e66813c8ee0': 7.759912543558696, - '0xf306df8e748642da5fb9c6b5325bfdcf416093c4': 18.155549068222484, - '0xf318044ced046573f223b4a8562ced147dfa22ba': 0.8135567643019496, - '0xf31d66c44aa89bba798a2a042020f52758ef2644': 4.314677987088417, - '0xf32761f2a08b33e72ce4bf47839967498b7caadb': 0.9057065088295987, - '0xf32d71fa386eee1874c04d5f42a4e4a5516d980b': 0.42775373804124245, - '0xf3309d9f33b16535689f5eca3f6611010d9a5719': 0.8619447241807672, - '0xf37d180ce43fe9c6f66855c08ac2b39825d13b97': 0.47389224714255085, - '0xf3811f412ac0307ae00b3666a639e6933a1c2977': 0.727728881655876, - '0xf3bb57b9ba688cf961879af84372470e88ec016a': 1.8279143592853166, - '0xf47e48a81b71b64d259ffa9f4f2e0807a5511c10': 0.09592338096259341, - '0xf4a4864e7e24e786595b4c46b84e2f470fd48e60': 27.7077574268112, - '0xf52b1c1033ab9ce34777cb02011f28ba207e93b7': 2.6288943325079392, - '0xf576560372b5da4765b8a75b8d0f72ba4e0e8ac8': 0.22171902088471065, - '0xf59a7106a96d88609a56e2b6f2220589332ba040': 0.5912847704839008, - '0xf6041fbf331274ceec8f7e9b1b3eafc32234e3a6': 2.291844745020671, - '0xf607655c3cbb70a7d041338ea1c6376c3c4bfd23': 2.1829889009332755, - '0xf6096f087a987f5d76b7632383a1c4897cabdb7e': 10.750383564303057, - '0xf60c23dbb4a4fb79e6d95a2a2d05254a10420d87': 8.499671497836696, - '0xf631f45e0786a1f3e074fa1063de48d001dbaa9a': 7.380625471291905, - '0xf6cc36df57141c20b868d2eca28795f46bd55ce2': 2.169868556138267, - '0xf71823fb70efbce9dd68b1ff58a89156188728f2': 2.5902776131122467, - '0xf757ea36595f1e84ed840ed759d597bebaee11c5': 1.830078273484161, - '0xf75cf52b1c04089014b79f86af69ab9ef521e63d': 0.11239695781944253, - '0xf7bee90752dae13ce75e98643f7d7b5a3b80d864': 7.171413877416586, - '0xf804b6a679bba9a2ac5f13ef7e5c96e37e088935': 4.277537380412425, - '0xf83c7758662e38b30c24798d60c967b684928b9c': 9.796270937054377, - '0xf84838b84f93fe5ce0506695284d95d16410ddd3': 0.14258457934708083, - '0xf85a11ad1e750740e30f22750289ab8c9a01aa35': 23.364952753919617, - '0xf8714ccddd5ea8d0e7b2564570fbac7d3089fc2b': 0.8476653452310277, - '0xf875cd23ba65e757d2ccf4422f795bbe1feb0d1e': 0.7709517625456331, - '0xf8b070bdbfb0fdaf9424701b5362a064e8c3d1f5': 0.49018184976824125, - '0xf8b1575429b5768beb43e1207f9cef70b7799fab': 50.72695649829767, - '0xf8c295b9f249af6edb39819878717ee408a7bfda': 0.7129228967354041, - '0xf90d6010672a9857f00278a947ef48bc9ed2fd8a': 104.14863753940612, - '0xf91dd6595b7de7478a4b2c40cdc9eac740f653e8': 0.34483564219415497, - '0xf92b7697637f6c187240506633be8c030758fb9a': 1.2230493080857638, - '0xf92cf8606d1856b37af743aefd081dbe58c8abda': 0.21387686902062122, - '0xf932c84e634ab8e5024dec1415e5a2dc4f79f2c3': 3.5646144836770204, - '0xf9d7549a4ddbce0c548761b56d3f132597cb6805': 0.7775922039905623, - '0xfa0c3824cbbd3c32345cb172e6e4a87cde89c601': 17.823372135428325, - '0xfa3ab1e72f9ea6eaafe45a4cd88fef5dd621b683': 0.22171902088471065, - '0xfa3da24f57588fb70beaf053ab9f067547953e54': 24.17315826657129, - '0xfa4c30cb8ea28044066bb7ba620331f2d38ea792': 13.310048115521024, - '0xfa5bdee2e70f20598ba992ab5c2b16f4f84dd678': 0.3798903518480286, - '0xfa860f606b40ceb63156090f86407e736cb41e4a': 0.5936301564580004, - '0xfa98ad36dc387b4f012a9ab9d9c832bd90de5310': 1.4258457934708082, - '0xfad05ef4ff14aefb4c45459b6ee41b5c5f80b99b': 3.3757849965667104, - '0xfafcdabbb5c5b9723dd8ee114ff6ac37449cdd31': 0.8054289722090451, - '0xfb4ec897618119bfc057c3f62ee9df13d5d972f3': 0.9086630047754607, - '0xfb5c3703965182615437cf14ccd70aa62bd444e8': 8.973250732104033, - '0xfb5e6073bd9a81e48749cd1cea5f05e32fa39d33': 0.22171902088471065, - '0xfb67b3aa5f58f9f51d198c763c10fa70e9c98658': 21.38768690206212, - '0xfba6ccdf60c712bf96c094d989ddf412d1559a62': 8.413859733198453, - '0xfbc61e8d453eb741f720c273493f6208ea70a4d2': 3.5966928263409237, - '0xfc5640ebada1d637f0f976a38bea8078612e4eb4': 1.652036108933058, - '0xfc725a027ad73aea840a56581935aa93f1911fdf': 0.22171902088471065, - '0xfcbbdf31e9840807582f1f3571293b97918c1e4d': 3.817665552843799, - '0xfd0707959c59681d1405295f3f50ebd325d6487b': 4.292172350365175, - '0xfd4630b1772bcfc7ed4e9cb0e63664c7ea11f6e7': 0.22171902088471065, - '0xfd4c9a55cce14356e4feace7a87596f797072c6f': 0.6283794900510429, - '0xfda92109d2b7204f2d14b22386157ad7ab46b86e': 3.201531304616669, - '0xfdca5c2438a8589568f2af982e4bdf0c2a7d4a8d': 1.8091915642744016, - '0xfde35598572aa0263ff725aaa6148faeecf11bec': 0.6887096779521067, - '0xfe12df05369af64405b709627fe52ce2373b7b41': 0.3509561071609534, - '0xfe27369a802beeadf753d45fb613cfb3ae92a228': 25.110337302909816, - '0xfe2ca8f5305009649312fe054953d038f4370fdc': 1.5609562703728261, - '0xfe8bcd309e994bc67fa4e5c66bc8d1550dce3f01': 0.07670314859101741, - '0xfe99a10424fcb3d3030192d87302c94238d56e8a': 122.22028291024908, - '0xfea149cb5dca2ec2b44d2fa894e7446d2f102ffb': 12.519512940663201, - '0xfea9d4e14f7eab2914be7b58d43974955e963816': 1.3346111613092524, - '0xfed6f9878db9966500052b4d2bf9fc6a3bc19335': 0.7129228967354041, - '0xfef7ab590f58148ce8823d6e46b560ec533fcf70': 0.22171902088471065, - '0xff0d97b55900af47585026d4c103e7805d0d0638': 35.70466650661451, - '0xff117e7d7d4e106c0cb795bcb63af5be6c6ff15e': 23.906243206795583, - '0xff2ee850ebf2db20e8cdbf3a0ce1cb6305a9d69d': 0.22171902088471065, - '0xff3bb753b32bdb63f6cd0a4883a1947abbc85bda': 6.353205529719996, - '0xffa5a4682fbe836c48066760d8fcf1992cd8f19d': 2.854816124777511, - '0xfffa74dde50926f1ebdf968075dc21e8383a1db3': 0.3405847594878196, - '0x0010ea5f1ede6df322a95de139ddbf2bb6455350': 0.15263164955273822, - '0x14ed8ecc2e8318c934a88f0e390d8e731ea3848c': 3.274482554028792, - '0x1cd393b1279f84f090dd1ca106fbfbfbf2e036ec': 15.046868161756564, - '0x3db9da4bcc449f0947c358777ff2c3862eae340a': 14.502688824714868, - '0x3f2f7a17cfbe756ce9dce6639557127b3a0c6913': 5.097232730418726, - '0x4f11fade3a987984ea0fa52695df1b1436bdae6a': 2.976806888076775, - '0x792d793994fe50965e2b4982c3c1e9e09a0d2e96': 1.5129990872434163, - '0x943c7b613350add1fae641ab3755e596a2c108f9': 2.4358402396245697, - '0xa276ef9cd1267b3d0ecbf296a40bef4547f9f358': 3.7555892894192726, - '0xa364bdac6c8edd236f44996e909293cd2e3c2f84': 0.49316296343951044, - '0xb339d904db5ee1bbf64c738625b9d6a1c52ea516': 0.6791023090155174, - '0xbceabf1eaa882880ad617b225b064836e8532c2e': 0.7630968214560363, - '0xd2ff7311732902cd4e14a36b14c5638d30dbeb36': 0.9294102490934544, - '0xd7e0a68271bee849342502c977fab9b569aa98f6': 1.2669403064498614, - '0xeebe2c7971c6131281a6a0817cb98a92040122b8': 12.604768275816525, - '0x005043e4e74ea7e566224be2c36e3ccbfe4e5a94': 8.705346199120168, - '0x0bf78af601c5839070033d7d7ed6ef582dc3b310': 1.723607820764823, - '0x0e9f9f1ec883ac676e375864593bb2c8003f7bc1': 4.1958078401718994, - '0x28e041de5a82e4b3f99e34637d30d476b38c4d86': 0.6759942830161422, - '0x3526bd2b220c02ff7fbbf75e47598e8a29ebac66': 1.0540700532724088, - '0x43ff5759ad694b662a061f34bcb4efaa980ac1a6': 0.4667032476119622, - '0x50e4ca77ba8e5de01a9c6df5f354b1b618494592': 1.1255877748771939, - '0x53c54bd13eed8a34af217dc439e7c32ca912d561': 20.549396522872915, - '0x5b5b414ba03bba3305216b8fe68de9e0acc171b3': 4.609467702797465, - '0x6bebfb88561cff061532550103141a2ebaefc3c3': 4.245295060451495, - '0x705f7d4702b27ec443123a54bdb0c227fbcc6793': 4.1776641787934405, - '0x85ef9574aada809a5e86ad0dda48ae0ecc889494': 0.6110767686303463, - '0x873bc66620c0cc13b15b1302fdc3be25af5ca45d': 19.40415458765081, - '0x908f61486313fe987f8207e5bf63aeb6ad2e9953': 4.4300836307839475, - '0x9148955a6e30c0c1fb65b13ede791dd6c386167d': 0.44023880214579947, - '0x96a07fd0cf2c52f0ce9f0df9c168fce49cf5517c': 0.13119993960469567, - '0x9a839e74fe9d2d8862a58ead40db2312c41f5de5': 0.8190520132804237, - '0x9c35d950623705360b47cf8ec7cbe9e7f69a03b5': 80.99293895542378, - '0x9cb04d69151f3332ccae0e9e157bc58ab7e857f3': 6.414892939005028, - '0x9fd28b152ba029fdc62883f0307dd289da39c039': 2.183820427291262, - '0xa75e72e3eea0fef0aefdfa5426012f738bbe8079': 0.38061958098557896, - '0xa8e00b3dd105e322561a8f85f6d048028bff0a65': 1.2832612141237274, - '0xb1066e5056c397e16cdb8af0d8c07151df2c74da': 1.2496790785249827, - '0xc6480ff40117e1b4e4d5b04c5b7e690e1002a1d8': 2.4375900265196337, - '0xca2392524d04bd1aa994772be94269068f1e6ce2': 0.1926740238567093, - '0xe76db907f9c31b1772c12838e37e3253ce245da4': 3.779106302605401, - '0x1e61648d5ad4d2525684f06b34ebaaa6abf64b84': 23.471693691579375, - '0x2de2b7fb4cad3104814f2fc4af8015550c12ea26': 1.0133127097506407, - '0x77e3a4de9e6c146f854e3bb76556b377db273026': 1.1203074091556349, - '0x8eca6181300db1b377d3963aabb83c62e7344930': 7.724480735403959, - '0x9b663c6acc8ac4521fef6e01d37abf751b67bd69': 5.259807249984316, - '0xdadea0765ed4b016f8896233ee42627df2e28804': 18.752665780533302, - '0xe9b6afd5e429e67077bc5ffe0d95b5b0c33d2428': 11.238665638997169, - '0xf058e1dcd8588cf07c3f9caab2759841ef53d59a': 10.224686888623335, - '0xf5734ea971e486311eaebca74cb0c655ead3bcee': 1.1203074091556349, - '0xfe03feaa9d5725b3da8c2b39c07627d4597d9eae': 0.522168693334509, - '0x09f35fd96c5775c2a5bb362290f4c29198f20c8b': 0.3860221598506822, - '0x30cdfa04e15a76a3bd9accbe192f1645807a456d': 1.6704197347160683, - '0x428c9f90c188ed3ab36db4ab30fe39cc18c1a386': 1.7823072418385102, - '0x4513d1a68b966a6479bc0de4ce9c263cf41eb2a4': 3.5136914196244913, - '0x4867318edb387ab4acc8f86169e2737c1ccb8a66': 2.546153202626443, - '0xe0827d715f1eba82a55c7108b00d8a90cc32aad3': 14.219947728272091, - '0xe5dff9912dd7ad0b15fb88f729f4799d85f22b73': 0.8940931069974586, - '0xff75fefd04621ac83161c4c79f62b14ab2845f87': 1.0184612810505773, - '0x001d71c6d3d816990eb404e2b89a2f08e3822bfa': 0.7166798422085195, - '0x0027fa6c48fa736d6ba4b75072aaac8ad4a7ef13': 19.783450771881824, - '0x11b1916f223c8e504ece2f1d2367da79efcf832e': 0.3070364106883004, - '0x1875c41b0a2a320672d9042d8aad2bc15f254b47': 16.522112769932445, - '0x4d2bd9c9e292fdd2f25c91c82bc07abfd058ffb1': 0.10040024949431593, - '0x52102166f961d40ffc9f0d01adef39cf44a2742d': 0.09915157904375237, - '0x7953fae0466c413f5ad89c316de48a40e7c5225f': 4.953257773422955, - '0xb079d54c6eb6050e889db51c115da3f207150276': 9.166151529455195, - '0xb53550658466a899c574d5b0651e1f16841b98c1': 1.6695604551039944, - '0xca7ce5ce36b8be9168ef906fc625aa5a9f124d25': 1.5080599639003043, - '0xdb90c916f3c5bade1d4340f84049b358086d7dc4': 0.5407099370682787, - '0xf1d2089e196c39d5d48781722177b9fca514db67': 25.406409716980935, - '0x1462ac14cb1768a1365271a70b3b2e4a2f16dbb6': 8.147690248404619, - '0x69d925eeaeee4c74408ee8c55c0605d0f1e0acd0': 0.3340026695883727, - '0x6c5c472a5d1bdc22c843c4ae5244f5f4e8b79453': 1.3854588268345331, - '0x924d803799b88a7af9ccff80704688f0266b75da': 0.8278573002196902, - '0xbb9d431dcf9e4ce77a723dfcbd8b4c5819434003': 2.168244956758238, - '0x1ce01c0768b3f359f0503577214a46ad88d1687e': 0.9600729801081868, - '0x261a37adde09ca2a0e381b1e418b817d5e9aac03': 0.25758659099846615, - '0x2b9950d080a3d0f8e081c4957a7dd0a253da646c': 109.54290544790362, - '0x541fe3a5e18fd55801b8777911f77f6c8eade46c': 0.21948557357454254, - '0x60fafa65b78a8ffd17591a2f172f52b007d662ed': 0.2898737353062714, - '0x77c951711cb4f846af9006d28206e323eb67b4b4': 1.7823072418385102, - '0x81a5ab88ab1a11783f351fd3496810e95f9f58a6': 0.7543084209648278, - '0x969abcafaed28b400269bc19c159e80175db2442': 0.2855561672833712, - '0x97c8a0290e8ef5e01cd0e9a63fb558546aba8ead': 0.30553838431517316, - '0xe078fec061eee887a2bb39c04c3f93b2ead47641': 1.5582457600073831, - '0x01c7e8b7a457afbd756e9ea0c5ce72d0829ffd5d': 0.5845020550741897, - '0x065dd980e66aec1be73c7cab742824758719432d': 0.5350583718064497, - '0xe880f5f9c4f7b7a70656551475ca02683250db8f': 13.160677000935145, - '0xf78a06e2adc9d99a890baaec975c3a7a644c8e89': 0.5148184406226525, - '0x02e4b685d226cedbf984bd0e812396a23c56025b': 44.52723748058275, - '0x1d2d2d12c0a6bbdc67aec6bad35aef7eac0bb3df': 0.2826230054915352, - '0x489741007fd46f15659fbea3f71daa7bb5b61888': 10.184612810505772, - '0x6c5c117ca3192be122d8d574ad6788efc27db84a': 0.8528708627401813, - '0x6d5b808ebbe5554718b7f3bbeaaee0c158fbd032': 0.23971720521588202, - '0xb467b18ce277bcd7ac0d45155b06c40d4d6643bd': 0.6933392394908153, - '0xe6143e65ccf3bcf4f06d1a5637770668e3805645': 0.6751756368566618, - '0x26a13c5d5c82fc3fa1e1161204921276f140a350': 0.4476174514495173, - '0x47269a8a2aafe811233d3a53da2d02254cd1160a': 35.81518273127242, - '0x700d97e326595269a1c03bf3c1683d044ccb4cfc': 1.9104706224697512, - '0xd1f1c367c7dbca9fce8a9773794adfe08478acbd': 1.573522679223142, - '0xd9356796927bf4218c9f032ac6e8173c7015b3d1': 2.418845542495121, - '0x1d52d8e3f9ca01ad34afc8c11e06adf7f725bc3b': 0.5354644445771223, - '0x45d2c1a385b34b2e86ad84e3e52d3c9a37eac72c': 0.9413740472381235, - '0x8b71fb29534c240757432df6a0d5fff1cdd666a8': 0.6501237091537914, - '0xd477e44fb6bebc71d9c6c7e25c3631dd2d388774': 2.3377420671805424, - '0x1e7194add4daf683faee927e73a07cea484a1d82': 0.3535309991240371, - '0x4b321a293cfdaea8d3b8fdd8e8b18f08f3e23c62': 0.3415830100423395, - '0x60b5aab6912719c033d19775542914cda2445cce': 0.3245011149070538, - '0xe53a37887d3bc9f4a5132323f16e394c99855d55': 1.3643300972025194, - '0xe711a45958ee4b3cd64163bbb4a641532de6d220': 0.17856600163757289, - '0xee60ff13989313f6d73c631a42927b4ddf1bf5d7': 0.09042479776097223, - '0x4151C0C03F8E403cAce27B6492D2d938eBBE8F7F': 35.646144836770205, - '0xF08fF2aB3AEC2569342b989BEf99Fb13ABb76c04': 7.65679191093824, - '0x53aD13397105aBFE7aDC90124Fbd9468753Ee10d': 35.646144836770205, - '0xF053A29988b1c09377E3D3a112a28b02965cE9a3': 35.646144836770205, - '0x9F4e806313b74662dFf93a0D37EbA6D36812B274': 35.646144836770205, - '0x000c94f96d6d71e587a6dba19f4ea2f78e4a5068': 90.7617075763072, - '0x00137006700214b8cf63d85ec5ec1de992631a2b': 0.1725929342902023, - '0x001e923c620c718c0cca45e00bba0c9b8fc78a05': 24.524474732082783, - '0x0050facd2c04930257438b213fe9e132a26e5a29': 13.1707292327172, - '0x0054eea85cfbca9ebc391a8e534b394acaa9f5bd': 7.56972976678891, - '0x00b0fad262808094eb554e4d3b94636fe9a2e8a3': 1.3717489911577778, - '0x01181be6c5aaafa05def979100ef73bb8c0e53f0': 84.50787598131836, - '0x0124bcdeb3b50acb8bbb708b1b8192be8ce202d4': 26.734608627577654, - '0x016979754338fb0014606a25ad4a871c3baf67a4': 14.325583637765781, - '0x01980376e6fc10e8a562f44d936e11f3525bf5ea': 10.273828934110256, - '0x0213a402474495d09431731e80301cd93f3db26b': 585.0023021324824, - '0x02a25f3d9038a575094b32ef82aa53bc7fd79547': 50.80918000508662, - '0x02c5a10b897e793ecdb5862b7e997fb502d12da4': 13.350728474211323, - '0x030e0fc1df1845f305442f5a027761cc665901de': 6.7302259838923435, - '0x0335e53f3fb5c6a5fdf46abdf5e9ced0772ef9ac': 3.1766432662677166, - '0x03420050cb833e4fb04e78f1a5b5d24359f87567': 5.423801191930784, - '0x03a11d1493f21bc6b3f2868946f1864d39d995cf': 6.747782381797823, - '0x04318137ab9fddcee5545d15dcad2c76fb8170a4': 14.258457934708082, - '0x047c3d435b06bf82ccf4f2333b4d500b9a87ba8b': 71.29228967354041, - '0x048c975cd1d76962e89fb762b40bee07d9798455': 4.453711322039193, - '0x04cd5735694ff487cd4479179e6d0ad2e9d30762': 22.56694976985691, - '0x050eab5decfbef8fbd9d9d0e7897116fd590706e': 21.38768690206212, - '0x05420ecaff077205e2985192359b1b1cdf98546f': 0.1506709957057413, - '0x05515ffc0fb33a4a58b6676c52a6c6c0edb2d34b': 63.59973786808506, - '0x055b2907e94fa54ac9b6ffcde7cd51205a35b0d7': 2977.650804336827, - '0x05af00705a12b2713bdbc996548b352c7443a85b': 21.951961169649564, - '0x05c23ff6229120c5dcb45e1cbe8527aca63a2aa8': 293.44776965733865, - '0x06185869b7d687e56e707f7a6fb23f6c752ee08b': 47.173810495192306, - '0x067a986a7ea85589cb5053d18b4f4a4534cc031a': 17.865509847985372, - '0x0684e98581ae06640f4653b78f66110f68c47a8d': 91.28419529674125, - '0x06899b851e0cc9b1e9348c0e985e6c5454bbd889': 20.369225621011545, - '0x06f5043eed16e6b2f878e9648424d7b745ce31c1': 28.065756110317057, - '0x06f81ba1eeae12256ce78ca6884916b46e20a2ea': 91.66151530533745, - '0x077928abe08c756b323b3ef02644a3c822368443': 231.31004254059067, - '0x078bd20b14a48114f6eac4caf57d3034f31d053b': 0.28516915869416165, - '0x07a8929eec07ffbd4d284900a87063f89bdc288a': 2.701977778627181, - '0x07c477fb558e3e649e545949c32d8a98a28ee085': 39.65918782249379, - '0x0804d28f37c301763ce24d9665a480b9a3b6cf00': 11.335474058092926, - '0x08399dfb4c22106d537b2822a91bf5e2988d260e': 3.8115495874192633, - '0x084d0cd0605f47d92dc2dfd22238e9c5605023e9': 317.09442839047585, - '0x089a47fee70c98875a212176f9e08559fb2eea8d': 7.129228967354041, - '0x08a3ac8dff839daefaa13945f2e88aa3128488fd': 904.3426945088601, - '0x08ab90201e5e4e11bc93f4ab502c30b51589978e': 9.374621324163092, - '0x0947f21edeb6e1f0a1d1de027042a90b7b26750a': 9.649159377693229, - '0x094ae01995d12842e8d1b2e29430de3011adfdd9': 213.87686902062123, - '0x0988cea15309ea250902f0bff6ea9d4f703bbc3e': 4403.424144291561, - '0x0a4e3d0f3b82902c9d575113053a7b65f8b52a19': 66.08416159561384, - '0x0a653bf9cb8dd88cc8e6468ab8303fee6c8400dd': 57.033831738832326, - '0x0b0acef4e74c558608942a106ce48aef6dc24df6': 60.85468260594398, - '0x0b3a583d16a31df649177a4916beb0a3936d9766': 142.58457934708082, - '0x0bc01d950ed45fd94d4a234a5fdc7b3282c325cd': 1.4258457934708082, - '0x0cbfbf5d6cdebaf339345a738cfda20d452acb37': 4.4713169529740755, - '0x0cdcab94fdc1cfc8a55a3566817e8803720a372a': 9.001462074662097, - '0x0cec55a02c0e7de70f3911fd1e859e65ad1cbb3e': 11.823846603293237, - '0x0d4daedbfdb722542bfc17ee0ea2162cc8387c90': 207.12015328382432, - '0x0da9173bbbae01f0d883e10d36cc481835b6cbcc': 2.9594155593712745, - '0x0daf45768e0ffe16ceeab97bfbf04b5ecdc488ec': 2.00224290710433, - '0x0dbc7d8634d7fbafd1b0f0ce2378ade4bd86cb0a': 8.751076861655301, - '0x0e0fa51197b5fceff44882672c86e81e5561cf7f': 2.0756133429791066, - '0x0e21461dd3ea7b818e0466daf3761c12071096e9': 35.319119540979294, - '0x0e378b74a39e59f41f08ed7c47396fb77c9c8bd2': 0.6346824720612105, - '0x0e48ab2da63daa5d1d36e86b371ee5b438a2332d': 202.17199228543706, - '0x0ea8746e867e04690d319ec640e9525fdb273814': 78.57060843278784, - '0x0f58d108716e82a14cd745d220d0540a487cf257': 26.76065980609254, - '0x0f79637052a1878985a293ef3791b3a8f314efc7': 0.4380116981048559, - '0x101315e4f1084e7190e139d5c7e58db48937a7fc': 6.474785838410015, - '0x102ab7b32f346699c0cefa88c3563c3efd775650': 0.3467477650016022, - '0x10428ea8ec3b8a440e07a13ddf18b0e2bfaf1710': 795.8086100549681, - '0x1076cdd7187b84dd184aa08a3d32ba10b2056137': 34.23715181409876, - '0x10b0c11eb41d40cad97a2952309f7fa6328c2147': 32.23685164789682, - '0x10cd8ad9f2f7ad92ab5b329c6e190086ce7d96fb': 37.35122168025656, - '0x11329ebcc3dd0afd3c44ae2e2b1161d8e251bb31': 71.29228967354041, - '0x11b82a90b3ba3ae5c7d430980ca10e8ce208c1c3': 294.5153661011349, - '0x11ba753c1e35c09883509c9d43426229801adbcb': 4.87551994106388, - '0x11de622c8acf1d7dc7c4fcc7da8614d6d7f68d09': 121.08402695233691, - '0x1257e6cae2eb3e17683cc9dcf19874f26789ed3e': 23.662221952783746, - '0x12756d73422b6de1b6c8abb34c28aae2681549b3': 0.5049185556515889, - '0x13307b8854a95946b54a904100afd0767a7a577b': 8978.92482409024, - '0x1357c47f85a31bb2bf47c21776e562d3b885c71f': 23.203624981182752, - '0x13c497f6edb8845a2df29ecf41b52a6bbd63d1c2': 10.922946284867258, - '0x13f0685c5827326dc89b2ff6655e3314572f3267': 5.34692172551553, - '0x1414925e5a7bba07d875ee3c986f44c29b17fc44': 14.258457934708082, - '0x141fb3ceaa81c7250fb146c285ff6910267b5da1': 9.693807511222825, - '0x143be5c98d967b9a9107fd7ad4641cc0752f17b1': 58.98055975891435, - '0x14781b75f698b66acebc9abc2ff89343991eded1': 1644.8913222902645, - '0x148f0f21dd1820cce60c98034f6a1f29facd269f': 14.29162029019125, - '0x14d5660762f20074a85a512f7c75a0103f57bc64': 106.9384345473534, - '0x14f06223e341041c3c3d9888a091c44d5f56e397': 69.58242179647198, - '0x155f64a5c850c42b21023cfa0305b054a76d27f1': 9.149027708323759, - '0x15b7031491548963581ba5979a8792f012b6fc12': 1972.1791306628206, - '0x16aa679a8eb0998fdc7045023cff873d0e0f8ec3': 71.29228967354041, - '0x176f1997d20aaf7e02281705b2932701f9642ae6': 0.0727181354670112, - '0x178d1559c6af7a0fef3319fb1623f80507d9798a': 2.097914488916812, - '0x17aaa2cc327c6a1219d9b7550d89f28c88adf1f5': 3.9576967516309223, - '0x17f188a939122a0374f8d9f385c366e2e3c4cd4f': 3.0598212694092473, - '0x187b06e5c33fd3408660a0d854da4fb6cac88830': 0.629190102513831, - '0x187cdd46145b031010d663cc3ce43370e1521bfd': 22.107739027764875, - '0x1889dbb512d6da0d51bc050ac92ff7aee63c17f3': 0.41222687140971204, - '0x19b519bcad7b0a087984c5d0b5a7c2a84cfb1022': 19.04025874444577, - '0x19d9207e2d3d89fad2e73e5d64785ab0c01f73bd': 35.519797870239834, - '0x1a36853e09a2fa62293be6951ae505ea9030bcdb': 8.266460973614391, - '0x1a58d7af3625fd00a9ef77aad85974d46124f838': 1.0913297584352508, - '0x1a69ccc386d955e5375e357ea62807c7a9112d2a': 33.74144580837966, - '0x1a770aa817e5e1d83e8b2a2010c6428960fb9d42': 14.258457934708082, - '0x1b2ad5cd51ec069a003deac967c19821cbc74f71': 3.983646631340793, - '0x1bc50dc3749928e67185c38c8b3510caac206962': 71.29228967354041, - '0x1c60535fd054599e049c46418fa30891612b2d2a': 9.587106685764146, - '0x1c9d31d64a7863969f83bb91dd027daf284a67d4': 20.059471519364376, - '0x1cb3fae03e5f73df7cbbc75e1d236dc459c72436': 446.38169756782275, - '0x1cc830f569db5830eb929025378e236a631486c2': 16.14744684968968, - '0x1ccd0f0cda287d2df5accf19cbac027929ac5ecb': 5.1205404121328835, - '0x1ce345325938987714cab310037a1dfede06c34d': 7.11497050941933, - '0x1e07d76b6dacacea003469ba6aa00e25bcfc04be': 15.797023739552806, - '0x1e35eaef5e40cf694aea35d706899e9747b7b204': 3.136860745635778, - '0x1e7aa3966247eefd1935be1aee1a3a6b6fc4c7e7': 7.170485616690164, - '0x1efbbfd1ff01121ef8c5faef6aae5fef51c6bdfa': 14.889480120263741, - '0x1f11c5682b03e8330d4d289d1c82eb324d2229ee': 28.516915869416163, - '0x1fb29af6c5e7dc57c633dc1b7a43cceae54619d6': 21.92833225472921, - '0x20201298442a18087a179c55d43d2d50503b223a': 6.754827241979354, - '0x2067bf3c197d8b7ab37a09c8957e8deb7cd62c58': 0.49904602771478285, - '0x2132ef54bfab1c2c7323eacda407c5cfa7d7af20': 0.5547276273570978, - '0x213e1164a3988143f02f7a5f611e8746c294fdfa': 20.750608880159454, - '0x218c09ee2a69813ba0eaf8bd147b6b96b5de87c2': 5.721895981922625, - '0x21fb20eae6a7dc7fa128d02b3f27c9fb54ec2b50': 5.140174085462264, - '0x22576e4a0a5bf764fa46495bbe2631085c91232e': 142.58457934708082, - '0x22b7d824428d53100c8f841c383d77aa7489a5f4': 118.64295021022468, - '0x22ca71d9f1ffca7d89ce4e964b25f40cd06d60f4': 95.1039144245029, - '0x233082560d527ae4d6b8eb5edfd047e3b68cfeda': 4.1728102188481015, - '0x23651d5df9e1546357e1142c854d2dfe3f4f55e1': 110.83151986676674, - '0x23e2437ae55a98eec1d13e936de72f6070786adc': 259.223396372135, - '0x246f2794432d6eaf14905bd360abdbbf7594275e': 36.762446043516185, - '0x2490b3c3fb17460ea1b77ec4620a83d32043d740': 16.139433410784918, - '0x24b90bc5ee87efaa5c954b0fca95d1757ccfa37a': 19.79858448685443, - '0x251c5e24db28f4fc03d187d8411378d64e7bae7f': 17.31610104058121, - '0x253741f2884d6722e2c4f69a976d5b355d41fb14': 0.6194452154234191, - '0x25b513a6fdf34c39f34007da03c87ba2c2d6488f': 70.579366776805, - '0x25eaf83ebe771de0008ba7e935624c0c8cf4c46b': 20.26114304733243, - '0x263c4a12847d9a203e577ce29fe2c415ea999211': 7.129228967354041, - '0x264262655ca28addfee67e113333acc635d21cfe': 0.9536509662356552, - '0x267e6c9790bbc1001d4eb735e4c56b928bea563d': 14.258457934708082, - '0x26c7cb42bbc25c6e37bf9cd5747c3c60b5618c3c': 3.5698320953818596, - '0x26f984b6d48964ea4a8004cae27d0466279ca30e': 10.613720898358558, - '0x26fe79c9206df7d063126f00f6bcde5dc10ca784': 214.14467137755085, - '0x271309635aef2b93ca296ac8e24ebfd11b77026b': 0.8653377267355896, - '0x27ced08dea8a894bcf213fcb236b2bd872553bd9': 28.516915869416163, - '0x27fc3c98d836a2ed56956e0ba7a19638e58f02e1': 28.58097017195892, - '0x28544bf66ab161b07142a7d10cda052c91a14e91': 17.705939186451474, - '0x29b096c557ee89a680a7bf5ae04c841a7af82513': 822.4900205130273, - '0x29da5ea337173ee0cd9a7e902551a0e2c720f464': 71.29228967354041, - '0x2a0997dac87a48d64d2fde670fcd089dbf7fe324': 15.220156084331661, - '0x2a44236cb414b7e42d2542440fff3c42d5228b4d': 7.8910795360066315, - '0x2a62b3f0b46fe9e00f5bcd931f6bea5ce9007de0': 41.85801721075503, - '0x2a693ccbda744faf14ecb7c28bd811927bea61a7': 814.7690248404618, - '0x2a9b5fca68b190b36c8dceb34dd6d97f74fb3cb1': 54.831516828136444, - '0x2ab0c9ebf9ddb5643a217fa32e2ab296f6af9267': 1.3113315853184235, - '0x2b030e31b2d6ebd2f5fb8032ec7a24aec221d3d5': 27.49568089137712, - '0x2b1de001e82235a1234d264ef6e5d867a5ef416b': 8.504404674670257, - '0x2b3e639bfb56f7c4d3b511029edbc804de03f35d': 142.58457934708082, - '0x2b49e4a52b26df8c33dca58bd5b4fd9174f74e3b': 56.048863485652035, - '0x2b7f05b4f9c7c056dff4cfc5cbf5714efc6718ad': 126.07602888794452, - '0x2c2022639bb6c95d6d507dda76a289f25f06ee51': 27.304946944965977, - '0x2c4dce64e8740e7fbab99f037e7f39d7f8103859': 12.517664193146475, - '0x2c6f971115dc4bfd3affb6d524932ef7d9d885c0': 3.0655684559622376, - '0x2cb86f0296f854341f9bd37a5e266fae06be5a4b': 9.749341030524366, - '0x2cbaf3761645c93dfee0952d463baf19c0cecf6c': 94.67790229941079, - '0x2cd8053937f9d63cd9ce102212121c68bf5f7e98': 3.589793555195594, - '0x2cec5e3b4890eed41a2605d573c7fa94205224a9': 5.632090884209692, - '0x2d888deb974c002692d83b1146cf37e040ad522f': 36.566836774631504, - '0x2de3e1e7d5d742287736d4f5610975d5315a25ee': 60.10825910961287, - '0x2e13a58e4f654e4e594f5bb9955c1d92ac0539f8': 1.0975032581912252, - '0x2ef6632c16713a1bae1f491a1bfee5c5e035eb6b': 55.305668516819544, - '0x2fc64c66dc3cac1347a909723ff4741a90e5fcc5': 0.09262975187540878, - '0x2fcb8a9375c429c3e0d81c9be3409aa810c1b4e5': 5.045868654127834, - '0x3009631dbc78122c906aa77ace17f93b2d18409e': 50.17487580263029, - '0x301ba37793921c0b0171c71a402d3311d0ba878f': 39.353343899794304, - '0x302b4ee8b059f7d21ef1f4d54e3786ea7945e0c3': 14.258457934708082, - '0x3077a4f9d7f4729a9b9a25d81c954fc344a4f585': 130.65079542756473, - '0x30b14392b5c8dbe992e6d1d28dea0a612d152f33': 216.4676560149264, - '0x30e071b62d39a3755ec6862027f6c2686a1e1261': 417.0531474715193, - '0x3134b8f931c3d92831d75caca424d8f8911a4d91': 2.7387557860890173, - '0x316361f260ca02059f56abdeea20bc8def67848e': 1193.9861856133077, - '0x3184159b72444503bd22b62e6d3b4bdcb0d5bf38': 0.21869859951819748, - '0x3184a03d9dc293c07dac04a8f9aaba8558a55597': 777.3333287177064, - '0x31eacaa2118c283ce66911d94b2363694831fe6b': 7.117241544433544, - '0x32371b624fad61fcc122813ac42ec6f8639f7fb4': 112.50350164417704, - '0x323bb533d5fb23b569672c2f990d24ea090fa7ec': 30.658409570853593, - '0x32f6b04a64f5c735b94672059b9ed87a55940dff': 30.579132495918223, - '0x330e30613f044293912e5508189811a1951a5d58': 24.952301385739144, - '0x336c76bdf5e8e5d4d924f0aa284d47483f842f8a': 117.4853740849744, - '0x33895e6b9bd5da2933a281df88bfc2f880b222ed': 466.5301377819335, - '0x33ed736eef9e8ba67040d9160a78f32d2b3e9b8d': 5.132317027806249, - '0x341031335f3aa4d035286999e481da89c5872199': 7.129228967354041, - '0x3413d643b14809f8b73e66f1cbf796f634521c95': 42.325519456284226, - '0x343915ffcedff953fab35124662675eafb7c7b5b': 2604.5223495453006, - '0x345045611ee934dcdbec45647dffd9fc1024fc6f': 2889.0072015073083, - '0x34ae4e754dace57d9efbf142343f263c48d6cebe': 12.682898332922845, - '0x34cc54f3c65e6e6cfd1f05e2ad0540624a5eff24': 7.497255065974219, - '0x34d0aad6c7289687e81cf38ab12b3c80bf8b779f': 12.69661813338289, - '0x3521444b34a26c6ba3546f9c58cb89b175405823': 3.279445324982859, - '0x354e919794591bbe61bff65fb069b47e02f3f6b5': 11.406766347766466, - '0x3624c808b025fa95402b13860de4d43b39999bbd': 465.34388855193015, - '0x365bdb766c9ff296105a43f0df2b0d9b6ca1fc6e': 23.740332461288954, - '0x3699a39a84eeb861a0a45ebb9ad7f14d1c97efbb': 9.267997657560253, - '0x36f26e2e5bed062968c17fc770863fd740713205': 14.258457934708082, - '0x370f4d1dbf1033581ed7e5b8f1ba1d7f2d3acb85': 12.463015428212893, - '0x3715ae75dc4ea0a9d71c82fefb264b1275644f89': 40.307093369259285, - '0x375c1dc69f05ff526498c8aca48805eec52861d5': 2.819363709218594, - '0x37c53dcd7b035fcdb79599bb5d18d87c0fdfa991': 26.701762387608603, - '0x382ffce2287252f930e1c8dc9328dac5bf282ba1': 2.0187147124452616, - '0x3862903859ea9b1ce6804823bd9ca7a249afebb3': 35.646144836770205, - '0x389b81247595db374083658f8dd85cba0d8ce64f': 71.29228967354041, - '0x38e8011e740b655075c6eb1ffbf9bfe1b56a1da0': 10.598711019690688, - '0x39112bf9c080bfa5b0d99852a31f6a6e36e97d6b': 249.52301385739142, - '0x39167c623a1425480050d2e1e3663864d7eb4f05': 16.749142078953465, - '0x391ab8613edde91056c57fb4ed6135b3e4744775': 4.563537324754426, - '0x3923a9444b618dac8d419fe446e9aa7530a9c861': 133.49750882092482, - '0x394ead239b476f5dc6d301755d4d87263b706e99': 105.65517538006048, - '0x39736f27681c28710f7c3710acc2e414ca065aa4': 2879.1892827517404, - '0x3a2bf47293bef22e052368ecb9c9240a8b4d33a1': 19.405571983117994, - '0x3a7892e9ad7b0db47c28737a925b198452674376': 1133.4496745601166, - '0x3aa656257f08718ecbef79feea7b9e9582daa813': 4.814359486873206, - '0x3ab28ecedea6cdb6feed398e93ae8c7b316b1182': 950.9481800585556, - '0x3ac9cde968653fded8819b9a17718cb6e37e7cc9': 84.00346763243479, - '0x3bbc990c33cd785f8915e14ce593561677cb71e1': 38.22071600984954, - '0x3bd28cb379f37c7dd67e18ccca3d9b1e0fdff714': 4.752081199464617, - '0x3c0e4fa1e515232a45f5a0dfb433e81d95d7494c': 3.422742827226675, - '0x3c4b1f90ec4ddcc91cc092c4b0c50e83337a136e': 22.838994227559194, - '0x3c867996f663bb41568b421157288026d462fc67': 20.588657318359868, - '0x3cb35120e21537042ddb2793dd3c8a5d37aff67f': 1711.0149521649698, - '0x3cc69622fae6a638dcf28e3d5a153467b1e52501': 128.96537249950745, - '0x3cd64838a348807459fc2760f03f81eabb420d82': 44.24253861393158, - '0x3d2db8f87069ea66268b8e7a561ccbd2f7abc70c': 22.171902088471068, - '0x3d658f40b158be23fc06b859c7b385b58da21c4f': 26.944593700838002, - '0x3e0c5a377130c5d8cb74c24ebba11fca1c544239': 77.96868826100284, - '0x3e11f2ed284ece6e17a1f674c5ad902d74be0e3f': 12.439001838844545, - '0x3ee3d0ccef50bc9a6ac43e763180c0c870fd2787': 37.73638781494712, - '0x3f536de42a53cc54f9de7f7feab93cc157a07ce5': 5.427670223373905, - '0x3f78fc42932b789ae879ed5c829ed91778942d5a': 51.23258676979485, - '0x3f7961286cc0b915f7689a5d45b9d3cbff73c0cc': 60.303739208199524, - '0x3f92757037fefcfafeb39449cf1eab103a8b7d55': 10.213640105246352, - '0x3fb12b27fd2bbe0a00c020e26a6f653ccca45202': 125.1290994587477, - '0x4059e94f431b2c48373c3cf962b257b7a4b1dc63': 7.129228967354041, - '0x4073f538d3be2fd6b49ddbbea000ebf52438dc1f': 8.490091838787418, - '0x40c949ced4fb14727312b7dcd79847b3146af566': 6.283481533456769, - '0x416c0c00f786f5510b29624fecab455b72cdb84b': 52.38129009323358, - '0x4192044d3b8545d24ec9e09ff6a5158cadd32b55': 56.01537045778174, - '0x41da4bce269331064b945752b67f07d57bcd4f79': 14.295285355068911, - '0x4248e48ba745f9d7455cb0b4845e14ea3d11d4fb': 4.494720785828105, - '0x4286eb0c53679ab0e009c38cede116c1735ac466': 110.48263700293128, - '0x42b0aa1bdeb37dd19e3fdb617bf723ccce3da7f1': 21.2465935763455, - '0x42bb6bf81af6fc2fa0d8f6d4ac883ff75311e92a': 96.72224103705399, - '0x42d097d2e93aea1ae31542b984f21ded3e1331f1': 60.96052622254775, - '0x43143afb53d3e36c5306184394d2f5689ce70eb0': 150.3020660111963, - '0x4383909d3b59bf4baba42aa664ec53c0a81f586d': 237.24115568154303, - '0x4388f8178e035e57946ed5e7e2b27b0d685e9e7b': 29.168971300612743, - '0x43b44f384d6825c79440b9b95f087cbc63357cf5': 2.6616581917894453, - '0x43c8dd007368d4afe671dcef9979fb481441813b': 1163.1555187785789, - '0x441cfbda64943a0affd5cb36eb868def4d6b0117': 8.390458012277055, - '0x442dc46e4ad89dfd4090e7cfcd73d8ae5e04354d': 1.795675573284541, - '0x4464d72a2d9e4d79042c2ec5776fa8db86d1a9ae': 50.709786908980085, - '0x4466edea9fe237efe6b202a3ad2b657a2b4c510b': 68.30200337832589, - '0x44734a0e89d505bdd0d63d08e680e90c24356ee7': 897.9024667374039, - '0x44d2ba8bf6b5fa5e7055ec08ec19ac70ad68e99e': 7.277627232545611, - '0x44d6fa50b6a15215e6c589d528a68b48095a43fd': 45.7412843415767, - '0x44e4cad333b764cbbc78fb106a0304f60505944b': 4.581620383556977, - '0x450688c9e4dc1fd99a23a46b2ad54e010925c8b6': 6.1867506190933135, - '0x4521fdd9d516e0e16ae1cc8bbf4c558180444bd6': 63.6535071393562, - '0x45274d34d25380ecb6f2b58076787f895f3882ef': 4.211363879348091, - '0x4583384e4f517068cd58f64e53a6148d9c61529b': 19.633177391594497, - '0x4586a5bd97e483daa27f0883e42f85e8f54c3d4e': 78.68743888137674, - '0x46188f0bb4928e3d851ec8e70cfed58f17c7d2c8': 60.55654624744306, - '0x46204d4b57deeb36bbe3a8eb49d56420d9445576': 7.7835701190934445, - '0x46507d902590691b25e1e7ecb68b8041ff87cb04': 617.7951037163119, - '0x4696762c30890cff9dbdfc8f920f7435c5bc1a73': 12.176559103974457, - '0x46f393511085cc3bb563b6014122b38b244a8d9e': 25.761968530638313, - '0x477f2462e9ad994b6e31e04d04b0bf920e4c5541': 346.14558557944247, - '0x478e769164e2aafd590614e6ede86f1492666666': 425.94349584962424, - '0x47bf886badcbbedf233b4f1804f54f5b043afada': 46.197169215993746, - '0x47dc4037977abf2303a47399dc04a1dcfd09fcd1': 77.77988803383258, - '0x47e45cf85cfeaf2697e6e9a3988d71f8b6d2a4e6': 2.812051422942424, - '0x48144bb5f94d3562311f342025556f34c54f1125': 4.512116452446775, - '0x4816daae73c5fbaf4f5dcb922e850068f6a93c73': 19.092167689120714, - '0x487319b45fe28c3d83da3830f57f1751cbfdd58c': 11.405618541902719, - '0x487e8a629237724328a0eb7abb1553f62cc40005': 392.2104156526226, - '0x48896b5cf7f73f569b16048c7504c884c3ac9d6f': 93.97035377823897, - '0x48c5fb8db5bb9d4ae678cd259aedea23c6012ea1': 41.73969798127071, - '0x497aecc01c067633d5e61b8d493021132d23a807': 3.4776378902753002, - '0x497b0c1652ed879420d9e8063c895bd7971544cc': 1.4616971240115797, - '0x49b0283976969b390cf08cf517e3b9690f53a9b6': 27.31777955710721, - '0x4a1e7f0738aa3e3ea2604df1499cc087c432df65': 599.4106448815477, - '0x4a53f94497923102bf18c0b4acd24ebf4d42416b': 40.633175766267236, - '0x4b47807b23b431194b31e16bc9b28a24569277b6': 2.301423290042882, - '0x4b540a0f1c180839abba37326b5fd7eff1871ccb': 17.992017854358792, - '0x4b5a769bc99b9124687fddd31a9bdda9a0d47c86': 54.702038911213684, - '0x4b634bf244e80bc7c327fc5e83c770881f6659c8': 6.813299385062035, - '0x4b650a5f71a5eed1d5369c6a6ea91936a6a12f43': 0.14258457934708083, - '0x4bba5f077a8fcfaf8d6d07c6cfbce553e2d94c9c': 12241.496486304855, - '0x4bbb05460593160843193ca40a49b1ef2f27077a': 2.6661787285692604, - '0x4c620ce9f3f4654a892617d1123efa5cbf769dc5': 4.111702521311861, - '0x4cc332ae41d41073feb04a64f084ace622743c73': 3.120998193644557, - '0x4d13bebb40bc6f9a752bc9c607369831a22e151f': 0.5459815311299151, - '0x4d37562ea3487a55f3b80407d374f8b387703fe5': 400.3851812122522, - '0x4d97cd7bdeb68b4b15f9bcb96e18db0a03f9e4e8': 6.425763602175444, - '0x4dc78ace18469f4a9344d8fa43f96b4898a6bc56': 14.258457934708082, - '0x4dc8cccbf1fe491902d01a0bf4f7be417189284b': 6.350898343396985, - '0x4dcf7541ada0caea72be2ebe9a77c9f756533e1b': 175.45032488658293, - '0x4e1e8704c6f1258830e3d512e1658c4fb2b53157': 1.1172357365780394, - '0x4e2dccf0721277c58b487fc2975d3ce871754154': 15.61193955650203, - '0x4e692e4fcd9d42a2069fbb0663cd05c2c3216d6b': 7.625004770334405, - '0x4e77378e80d855b13272038ccf2678fe8931be4a': 10.41142194494675, - '0x4e849584f80830bdec73baa618731b948a6d0f43': 10.29241141632326, - '0x4ebee3bfe56a5259f40372f7a3a92d28bde13003': 14.258457934708082, - '0x505cddfabb1f0ba1bdefb2b9b4bfae424a030528': 11.817220953938518, - '0x5080c50fa71cc762626d125fa0c920167a825c57': 4.820615033301501, - '0x50d71e071b1ff0022b49d97d87b89e8453072be9': 52.94657319185426, - '0x50d7ff30bb3390cb276c18ba933b5b92fd4d4178': 22.770336122833008, - '0x519dc307c3dad04aa64a16efaac6151fe418dc95': 18.327875330636484, - '0x53241bce6a6e3d850425f53ec5e2c06b8b82eafd': 2.4952301385739144, - '0x53270d44eee663e509f0b715525703b12c353e30': 7.129228967354041, - '0x535ef9734c3440769ea70e4f7ab4a5a45577f602': 3.5162230747208456, - '0x539ec04d0dad19c20932b17fe8dcccd5d2d6e16b': 142.60780266370392, - '0x53ebe91da07d4a2894561d4f6c451a25207a38fa': 42.45545626443533, - '0x540c30e4b99b01e9ac1637693a4e9b056005a7ec': 1.26135860222125, - '0x543427c0d9cf0ace6f6864fbbc88b2cc49bca0e2': 71.05265792969062, - '0x548e0ef06675746cf9301a1758919f0e442e0044': 270.4205283728229, - '0x549b96e3fd3b7c8f5a884035bf8072492056a6a0': 25.606252236505036, - '0x54e039845ab8a6eb4bbf7e7b73a3934134428ebd': 40.63660511391803, - '0x55e25b726bbc84328708f83599568ac8e074edff': 28.213302954389725, - '0x55f967dbd80ad97c1add7944639d6e936d834405': 22.928883225702666, - '0x5625a71e8e2a43b7a2ad7f6b62b1bcbbfd061718': 8.29679640921351, - '0x5625f1a048eefcdc842a24a10e39ed71d018386e': 6.3628213398510125, - '0x562680a4dc50ed2f14d75bf31f494cfe0b8d10a1': 42.28774592724266, - '0x56361a1aec2b305c70e84aac7d43ab5cecd6c76f': 22.41042759645245, - '0x56668490659b9dd5b86e43597b876c8024d9b52d': 7.973020268551574, - '0x56abaf385a1b47074cecce29528ab4094d87fa63': 0.6882714584644409, - '0x57335b836e34133e382ceed050e5d54b490631e1': 14.258457934708082, - '0x576ac8206757de8d3be04ed1addf28c6f3fcf6cd': 89.1153620919255, - '0x576e5861db0d1ba3ce2660104dcfbb4365441483': 71.29228967354041, - '0x578722b72d0afb4410240e4acb67c93254e4b133': 20.742149738667667, - '0x57d89233a594902b495f191593fbf5d98d134a59': 47.47170942825582, - '0x5833869fdeb4d371b854d7474f5f84b43320fd05': 2.6306854889536404, - '0x5836e754b11b02352496c7b354c13044e6d9988b': 971.9783455260969, - '0x5870d808f5d1298da9aaf3f8f4af7b1e8479c4ff': 12.85143506862554, - '0x587fc38e8365ee3b6a3e522a93e0c45d39a12bed': 21.38768690206212, - '0x58b2fdb8a90250c3d8b9a2acdb4b4f64c739ce70': 216.44339144886868, - '0x58cbb99ebc1f17e5cf6c5218be631eb0989f7591': 23.669040171615414, - '0x592387f258914a9a59cae4822c0033dc03f6dd0d': 1.6805108783877571, - '0x59489dbe68e1b702caecad55982b67c01b93fdd3': 94.66228281435511, - '0x59555c50f2fefde05af802f6a589f559859cc611': 2.610770178896673, - '0x597ddb68758395860bf7fc0902b46a305424f6fa': 426.4064901813221, - '0x5a5f52afa90ddf5c417509973421e720a7133900': 4.652099941128239, - '0x5ad9325ef546b42f2a185e27097239f071345b3c': 41.25679847025007, - '0x5b1864f1b1719599d831fdcbc7b88e69bc16f24a': 4.824688593507326, - '0x5b63f9c0d90c5a66fcfe37c92156b6d51a869015': 10.69384345103106, - '0x5b876fc2f73fce34878a301ae67ef16c6e097dde': 14.338080071864914, - '0x5c2566d6f5fed66b979ce2690525ce3ae94b93f6': 47.48066492257791, - '0x5c482ecb5c40164412b70fb7e229ced5e1a3f238': 65.79632431704133, - '0x5c5bdcafad44ad5af406699c25de3c257142e697': 30.111924609591796, - '0x5c616623a468e3b3f87b5b8ae95781f66a208376': 176.72960122316584, - '0x5ca13c74da98237f4c1d5846e6b5aeaced875f5e': 8.44412964069627, - '0x5caa533b1bb4cabc15f26d4fc7c549a27421ebfa': 534.6921725515531, - '0x5d07560c9ca7919c55fbfaa57208cffbdb69ac27': 22.917889976511407, - '0x5d51d35e63bc2286d991e68e0d135d3babe9c01a': 733.5399598631826, - '0x5db02751d42a09ff3e75051ba382499eeb473927': 14.258457934708082, - '0x5f7acabc4f853b1472212ecae2794b1415397d19': 3.425804842990691, - '0x5f8c3603969f4ba567ef3fe0acee852b7a2fd1ab': 2781.0010415522197, - '0x5fdf7019b4aa839121a5238be13b5facb93573d5': 5.3122607099045425, - '0x6061d9bb2c4fa1fe4451e58153a34f4b73888a91': 11.899505686120657, - '0x60a531d4055fb1a8ed226d311275704da9596cab': 489.9896391397337, - '0x60ce41e4badec4c739d322092f55773caca373dc': 1.539069202789613, - '0x610fd4adddb6ace4410d6b7a4f6e4d156df51859': 2850.8360794655337, - '0x613ac5efe6fa53f1f0d50ef46804eee334c3b347': 4.515673331685068, - '0x6170d2cf07b6653a9de6788efaffa8aa83b77960': 32.112010667888214, - '0x617846476713c8ce2e47c9429e49c4d02a1e9e2e': 9.565963782250815, - '0x61875f996526f33b0dd6e5da988deba774dfc199': 4.277537380412425, - '0x61ea3b096dd7013f890e0add346dd63bab0b810a': 17.04688933168023, - '0x621d019ff44ff81a110de334acbd548cfe08490e': 93.69599033760583, - '0x6235191390f2dd78d2369477e696da2ec005c667': 17.351395564104738, - '0x6248bc493e79ac5158e970f91be6ece7c6648638': 21.38768690206212, - '0x62552764babfd66ea8731a335b96ec75dcf37460': 6.135803908560005, - '0x62ab920b78a32b1d6110add4d284c88b5d8a4201': 3.818180817645039, - '0x62b9057488a13fc478e6b16e263ae0eb5e653a05': 1.8293877170391997, - '0x62e53b08dc8c21f5f7a7a6a1da8218f8d73ff732': 45.520537403116705, - '0x6362dc17918e291999aa06403857494434a9df9b': 0.3506590992594641, - '0x6416277024ee30704d94f62dddf52af862152811': 45.96366428123009, - '0x6483afa117fd0c334f2a6d8d64149cf84fdd1db2': 72.51679539654664, - '0x6518b4fd7296a3161561b250aee4ddb7ce308757': 0.7506233915717201, - '0x654b0cbe41423178be5bba2ab2dd6ffd6142f543': 339.82006040020286, - '0x65539d602c01fbc932ebfee66a3c293965bc6ae4': 0.39326440393815804, - '0x6567d655953f38d29f57b1ebd55ca6cae4daa12b': 99.05360964535535, - '0x65a402f23593d1c2ad09541c6b9a9ff4f68ef743': 1.813141078405448, - '0x65ee350dfe200ad00f189af86e7f3f20d9e40218': 57.033831738832326, - '0x662b92197e380ddcc2f329555ec032f535010fce': 1.8875956034125783, - '0x662da1802f1500e5e304d3c68a70162f992f12a2': 0.6646249682349911, - '0x66a061302df9bfeac24f880d9fd8fb52f3bf7ad7': 61.02018746003509, - '0x66a83d07c48a094a331fa259bea1c17b737e9438': 52.09696389754184, - '0x676c34221253876d42560d59216cb332a4bb18de': 20.401718666822237, - '0x67914fbda9f96a277cd818ea85cfe31ca7e91cc3': 7.29976765942911, - '0x68115d83d36d12d7653672ca3d29aee478ac8501': 336.9966590481294, - '0x687437f1a37d45cd22730dfdc610acac20588c4d': 5.267074361081165, - '0x687e6c2d22cf5768650d7af7b3d88bfac5d3d498': 10.4086742923369, - '0x68bd3a3b10365b5f390c33dfcc187ab275c26511': 32.98877001979389, - '0x68e68cefbba5defd393f56293d6185b1299f6903': 5.212806776323715, - '0x6986508c63b3b1cf08cbadaf07327a4066a32111': 35.646144836770205, - '0x6a9c4f49d9e4c9f96f4c2aa45ded2724c6b61fa3': 23.450060620411552, - '0x6b7083f08b207a50f10cf2f9de6ca60ee5181687': 105.60996685530492, - '0x6bd53ee06cc4d599dd5f069a9b59de2b51563c9f': 35.646144836770205, - '0x6bfe59e8feaddfbdbb97f7da8c6b4550a8bd4ffd': 83.08803661736552, - '0x6ca323ab76aa6d0c7406520f49795470662e9c84': 49.92037076269465, - '0x6d79116eb6d33d54d64b96db7c34c7cae7eeb6e3': 73.07991089746733, - '0x6dd8bc7ef7ed2a10a8dbc7c540d3016cbbf619b7': 204.63763423403827, - '0x6de424face6e033d2bdbf430a4f9131cfbe150c6': 32.64296740581774, - '0x6def9af7cc29858cb8142a7f7ef47bd2482405be': 14.258457934708082, - '0x6df6bde1eefec5b1472271fa1ebc742cc1bd1f21': 8.258997881810636, - '0x6e142102c9b51bde5e341d8160a62bf1b1efdcc0': 0.3179636119439902, - '0x6e2a7453fa8b4983a211d9697957daae7d58bb9f': 22.136469820503322, - '0x6e4486110487de946e5387fc8510f64aacf96ed0': 8.89543681390734, - '0x6e85239c88359a1b0412aa55ce509435c65016f8': 0.1269464609246453, - '0x6f1eee882ec592fa1b48b3b53118898881ee420b': 2.1387686902062124, - '0x6f306126965128fb0de4a9c8a25e2adadde27428': 710.7601727560811, - '0x6f521de0a4399ac613d9f9b7629b1d76c4f62410': 358.835781152814, - '0x6fca99c517137deb0519c4e65df81b98492bad1c': 4.968964963496033, - '0x7056ef2365b515ae9ca7fcb300a76ff831f82644': 43.82262192929396, - '0x70b007eebc32a18422d7b2180b1d674e827fe317': 21.44420552257436, - '0x71182cdbff8f15999daec63aea7a5cc8963e4410': 1.504281570569637, - '0x7181d6e0d5f03c1c3fb1ec2f69dda9434ce305bf': 3.846853267036304, - '0x721254875f02e137ccfaee7f2701402636ff2675': 83.08599092116089, - '0x726cdc837384a7deb8bbea64beba2e7b4d7346c0': 845.765456754884, - '0x729d023839967d2629e3bd93ea136d9b8515b2d9': 12.840445456914477, - '0x729f0d8835618820ef5f4fe0221c7c6913260532': 44.93417894362586, - '0x733f7f9fc19ee9f5e9a421b6ff2f4bd62744df65': 41.681246953486315, - '0x73430e20e97b9b482065208b65f862fff1dabecf': 27.3457316106014, - '0x735da1a63d7d3a9266ad0513761ddcc049a9125b': 8.883043237604017, - '0x735fa175acdc0508e92e57acf60a931b56c44fd1': 79.66029877905099, - '0x7377fa805010ac979f37486b9c5a931883ee30fb': 3.3125413713368026, - '0x7385c4ae0cb556d2a9d0997da207780adb32d118': 11.210235401028006, - '0x73b01cce28475861c54b130bb4311bfdde14f854': 0.13559062047829373, - '0x74059b6b0064e7d2183839e53ea92ec0d024564b': 1306.301828245123, - '0x740cdadae6e847d305b0d4a3baf2c350ab7cdcb4': 10.789790225668694, - '0x745d96024318dee0296884a0562fceff0734e06f': 111.24394334358078, - '0x74a6e4689b4a777e6cf91815ccb2df7dd10ea08a': 322.93244962756745, - '0x75406fc95e84be504456c05dd40d97761971e86e': 212.661792169404, - '0x754d0cd6c8cbbbff4a27e21ed3b4282d49ba6221': 6.3421967616691495, - '0x75689167a2109b478b395ce338d321adb63394dc': 2.1740601623181632, - '0x75724ef2b5a36c01a382f39df7e91af90a9d338d': 26.67037193039749, - '0x758d3ef6bb3b1891787a4c4b82f96a8ce155ca4b': 20.033133398264855, - '0x75e89d5979e4f6fba9f97c104c2f0afb3f1dcb88': 1895.915711952314, - '0x75f351029e91f2ec73bb5c6ff263778e6f2ce653': 171.47215761977242, - '0x75fb025b8ee24b9524c24300a0616257c50700a8': 8.488992707181646, - '0x763a0ca93af05ade98a52dc1e5b936b89bf8b89a': 13910.40681241053, - '0x7699523dde9580048ca334aff4e72d57d58f603a': 7.285476379253628, - '0x770e86fa0a5c5c7bb59e392ab5999b9119dae7ec': 21.678344433692477, - '0x77363e80d0db4a43668b64e23358fac38fe73fd4': 1.592563294412816, - '0x77f2435e54e8e2ae492d697887f93d99d69c4668': 0.3099764107961938, - '0x7801f6a3c4c157d2641059693e5bf3a353530eaf': 14.258457934708082, - '0x780d3c376f8c7147761f6d8caaf78c3f28822204': 51.78783854201638, - '0x784cc11cb88d510189cbe6ba4c5a4f14dfa64ba3': 17.983933144028487, - '0x78974f86c02399699c44c320ebe365f6f0b1a31e': 0.08428129785018101, - '0x78fbcc83451db35695b5b4d7047b771cdd0c1f74': 1.4258457934708082, - '0x7962592b769ea628e1c28cb45c91872a499526ba': 5.805025739184933, - '0x798978f9d3158216e10408e73b9285281fbb135f': 0.9503117811081166, - '0x79f7afea93188190923e40ddf542e07e7f869780': 0.6626511339769686, - '0x7a187c91710f22f9116cd41992467b011870de7d': 5.018881847968193, - '0x7a1dae61576193eaa9299f2aaef9713c4b4cb0bc': 49.27809342777053, - '0x7a7c22ec6ae6c99ccc4f0d3bbd5bd8319c5de21a': 1.4258457934708082, - '0x7b09f8acd14f53a57fd5a7e0160a77c6f065def2': 0.28516915869414655, - '0x7b6dd345365de2671603c8020f46c66f5c417f0e': 6.481901015457325, - '0x7b8fdfcf79e72a9a8e656958647d139c0e16ea19': 1099.3984703479562, - '0x7b97791c6adae9f7bc1e4a144cf2feb7dc782d12': 12.436402973165045, - '0x7bd07410e38c4309e793a510908ffc8330a7354a': 338.62135700697866, - '0x7c11e991909160d6dcf52f8519c1033aa3f9d9a4': 18.470334801543988, - '0x7cc141fd7af75615a43694035716a9709ae69424': 42.82492216502761, - '0x7cc549ca4359e1cf8c4e6d3c76e499cd1f9bec66': 73.25061899026791, - '0x7d0ceff25911287d235c9738420dfd6a52c2a705': 1.2550348996406107, - '0x7d7427e9b52dc021dc960fa559fd3479cf5e640b': 16.196474760528396, - '0x7d964297869a22f9b116fe3f68c1090d4d708a77': 33.770251274245325, - '0x7da69cfc1e94d46c4e48154281c7bbdd6b2f542d': 3.4569570934372242, - '0x7dcd5136ae36b2ac9c157094cd72723afc7106dc': 0.085375867419622, - '0x7df0c02dffdc407d8cb49ab31ff24f2568ae70fe': 172.71628668302986, - '0x7e0797381e6ba0575a7c2aeb7f00356befb0ffc8': 0.7129228967354041, - '0x7f24a333b3ab7ad3fa334400c423c7f53104ab02': 872.9749241156363, - '0x7f4b35a9bb95af6416e12cb429f0b3e1fdf3e8d9': 74.14122651329437, - '0x7f5c140e222e08ccfed96db215463c7ae9c220a4': 480.0454167679427, - '0x7fdcc49c1b32d6bf0336e27fe5dcf68f6771b268': 70.45450608978908, - '0x7fe50ce51e1ff57936d0e5e758362822b629f60a': 3.6002606285137904, - '0x800148a457b4e269a707841673f17b2949f24fe0': 72.71813546701121, - '0x8051c46f7a7a2ca8f4f5a627a1d58cc6eb2b95fa': 0.9252976577612517, - '0x80f565516bbb0054e403c787be3234e9fbfa7861': 11.272371657142838, - '0x814f3c4627b693297b493e4df7e806804e23ff62': 30.99672914516692, - '0x81994cfb1e90f96e696693a0642350e4322c11e5': 2.716257592257246, - '0x81be945cb5a3e73e7fa906e4d7db45a3597e83eb': 690.8057213668459, - '0x81db185bd8c2733af6cb873a57440d6b9740f39c': 5.922457480382225, - '0x81dc1f5475cb871c276b2568c614de795cacaf7d': 13.534719563963904, - '0x81f9bed9f8cbf1cc2bec3dc12d680d4553b89eb6': 15.569275791779623, - '0x8228cf221c7d8b05a8fcfb422873174caa216b75': 71.29228967354041, - '0x82de4fc960b138afb3e50b9c560828fe489afc48': 33.11850067824109, - '0x82f132c695362146a8f777588a8344a0c409b725': 0.5796576796010541, - '0x8320b8f4589601ffac96938e26b738f310602e81': 2.610770178896673, - '0x833520a2a5f4eb86e570d5960e92ca621a305b96': 51.757151272845206, - '0x836a2db4a9195bc2117832955f98ec9c2d5e7211': 275.3595007125117, - '0x83a5a6af43de19180aa0c2c66f763aeb45d5496b': 8823.174641536663, - '0x83a9e42f0a0178eb49274025d667b60447df1737': 80.75149086513925, - '0x83e9119a61c074e8bd541bd0df6e1d43f55d89c9': 5.547165050289196, - '0x84345a4b74ebb6a6010a3eaf60d053397250a758': 83.38480624960694, - '0x84478c58b630bb8a28184d148dcaa6923029fe99': 39.69219624156781, - '0x849a807b2346a8ecf97878be069228fb6ddc3a6c': 14.755065670218416, - '0x84d6abcf72fc52a78f754083f815667970982f12': 7.24305026018153, - '0x8578ebedb49c18231ccaa41610ac5eda0a5d00ee': 54.72570239491701, - '0x85df4a476d88c70c35952174c5e003a45d7fbc12': 2.968788798760406, - '0x86463937cce32e914f37c71d64c3dabb8f84dd5a': 131.80564893803793, - '0x866eacc78089e7e082f908fdc672de0c0eacf144': 71.24373935888649, - '0x86c5d1be03df851a367ddae8d870e440e528a149': 131.7634163804273, - '0x8705ccfd8a6df3785217c307cbebf9b793310b94': 592.8450269615581, - '0x8754ed20cee30b9dd65bb7e1d1638718e8f78a3e': 98.69903599750724, - '0x8766d72259b34056f3794626f29edb33d4a52ef2': 4460.707572700006, - '0x877dff793391aa463fe75d301fdcd27faa950003': 0.6228301358880498, - '0x878b315e0f2f19e7e83c0fe16809681043ce8112': 81.27900539873214, - '0x87c3e35577ac7213368fd2ac9fc2530d6e0c41bf': 0.8797950894239055, - '0x87e14eb8e1ec36dfb6372e8f4faaee183ea04d1a': 34.38794450311604, - '0x8818802ac0dbc50daf37910ac8e096a0c1f2d540': 9.33027665715182, - '0x881c05e8be40e805031c61fa2c13245cfc6b5779': 71.29228967354041, - '0x88a2875010736248fdf5f768a008e95ae828d572': 82.22496342709938, - '0x88cfb82e31ce8ab44ff3b5b4acb1f3e23a7221bc': 1.2158320197888857, - '0x890b28c7792bac96c2e9f8e8576840e0620ddfbc': 244.6635246456028, - '0x897c3fb0ca462c76116b45890c55e55c80a393e1': 41.807723399542255, - '0x89cde2b3609b002920cdafee671e23906496c181': 1967.0742686007186, - '0x89f06b62dfefc043c3f74ac5c087dfc933170514': 78.49959651852372, - '0x8a17117de9863124dbb865e18f4504617d7af189': 9.768423008292707, - '0x8a67a6ce64eacb3efe4e0b32a937f1ae95955ab8': 7.129228967354041, - '0x8ab4f50b28d78946cad7044ed4568cc362adf038': 140.75150409793068, - '0x8aef2fe85cae6e3bf8d5d3fdb10b6c9a8dfd9b06': 114.9756392871408, - '0x8b101a799ffe745ca7f8e76bb98f5c9d88a07870': 43.146388147583004, - '0x8b409f0dd2d95097bc684af2fa493904b4e8b990': 26.77610234139626, - '0x8b4e794d1da960c7dbb5cc1822271eaa162a0a79': 2.045382076075702, - '0x8c5c77ae86b6b2df3d696aeeb437be3df5587edc': 6.874464425721306, - '0x8c902b8839010bb1761201d42f788e7ed9fcfd77': 109.94882546956102, - '0x8cd06ecc4297544a9827465773f929d37deccd0f': 2.7750558027418757, - '0x8d452c1f4bae385b13933c83ecff70d74229915f': 1.0951934406166746, - '0x8d6e656d906a442fd285790b028f91900c7516f4': 1713.5844391961068, - '0x8d938a0064cb67bbd7d3aebcbda5cbdb0a993809': 23.285866823306463, - '0x8da625c5a78e6aae278f4156750841c295524351': 1.2569007124594105, - '0x8ddde9a4b148bd631e024522e22089ea05025364': 10.356161740895526, - '0x8de0cf05e6185e86ec1a51251f42c042303f1991': 71.29228967354041, - '0x8ded713600ef76e30db4dd249c22566c494fe773': 2202.445240288598, - '0x8e78d27467a12504e9a91e50d427cafc760ce542': 2.4952071611616975, - '0x8e902bbdcebb832004cebd42727daccb476056e6': 5.005791115608124, - '0x8ead55a12833aebb7cbd71f44ac5ef87c35e1399': 14.795187416073851, - '0x8ed3f6454d1900c68ac2de52767a935114d3a312': 0.7129228967354041, - '0x8eddd4d986201c99c07fa26610b4b50d323e49d8': 1.5907901935397877, - '0x8ef7e5b9755b998c323a445beb5465067c615785': 9.806084248390219, - '0x8f2a7023cbbaac2d825f3a60d6bf7074df5514eb': 1247.6150692869571, - '0x8f45c2d94e9fffde3e1078259bbc5a211be8f5e7': 21.12338195342826, - '0x8f5334f68889d0766505d2494e4d3cf8367a86ba': 712.922896735404, - '0x8f9512c458d690217dc9c8a28db2c8548405b59f': 35.646144836770205, - '0x8f9d959adde5f1e9a7166eeec87acd43cc7529f9': 127.99683588601515, - '0x9008d19f58aabd9ed0d60971565aa8510560ab41': 87.29525133994845, - '0x903a8320f7099f8ee978abb7a5e142943dee748c': 14.341521662420055, - '0x904c2435208f57d84cd28312e921c7a3b4e1be4a': 20.67497358615238, - '0x9079792373ed2f6152247bbe2485ff8ecfa0059f': 56.85376628686226, - '0x9089c6838f6541c3047e0658d055f7d70ea8c086': 73.78751981211433, - '0x90c194e85788a9160f6386dedd9d28f607a056b3': 514.0174085462263, - '0x90ce6b2b902084b5e6170c9db29da44d938e596d': 25.59176470719493, - '0x9146f8e4ca3a5a5573af9c91660e68814da0a378': 16.10920577463319, - '0x915d6c7a0546e313be8d31816b31f83fd318f3d6': 54.133508744778666, - '0x91b43e597287f5bc118a745dcfafd9102aad5d9e': 6.001403338129367, - '0x91e0193d46e340ab06911bba9aa9ce1b0d5ec88c': 63.018926463075466, - '0x91f10cffdeb9701f2a03d72ff309fb08857a9b49': 14.745596366936823, - '0x9216a487c6337cf2737326f43b3173f1bd995b09': 14.183025615266134, - '0x921f93f52422a2e725d38159e4968e35d9e8cd11': 36.20845731162759, - '0x92e86e40055708e8ee282531be95310bc0f56859': 12.863937973319828, - '0x93128ef72cd192533eced233f56082a41150cac7': 7.463589805922948, - '0x932c4126bd165125b99434d1d4787cf3275aed90': 16.43876434714949, - '0x93344fd8e32166db791285f90433bc0142ecc737': 83.86073536462133, - '0x933e0237e41c979ce3f684ee55c44e873cb06cb0': 6.914147003051123, - '0x93544c410e9a0897cfebe1b61d3c0bd73dc13474': 1.272567370672696, - '0x9378ff0049c43f520273110ec8617c1a9cc856f8': 582.4434901537835, - '0x9396f2b7e8ae8a162ae47e76df58708b1568305f': 6.115857690986219, - '0x93bc8d8e0fc999a2e7e02f3cfca37b771e4ba26c': 79.24345461976937, - '0x93d84acf040c04190e20c6408a9dc72426b5565c': 294.293010626112, - '0x93dbf35cd446ffc262045b899fe36df45668b985': 9.886723753925317, - '0x9534b6680d915bcc3501531790976dbb6d9d1ba9': 111.92889478745843, - '0x95c4e6c95ca13b0c8421acac046b9b4653a97a91': 2.59628977056624, - '0x95e3c5a6cb858b3402d95dc345f6fad0850ffab8': 27.293540178618215, - '0x9614ade72761f5557618bea55c7b00c5ab461828': 187.33468308843115, - '0x96443ea98d0310b7c42fe88d903ef3749d8e721f': 41.57739111376883, - '0x96866aec6ef1dc857a2e20e192f383e48316066e': 4.6306050371784195, - '0x96a8bca768a8d5d455360f992cff54deffa19e1c': 3.9234566548278234, - '0x96f9739bf12dd5ad3c275dc9c830b378193e31c0': 0.28516915869416165, - '0x96f99c29a6ab58cfc93cab0693d6a7b7330b1463': 35.65327406573756, - '0x974c3820a0f9b420051fc832e9044bcfd7d9843c': 19.481719578941153, - '0x975a21f71ebbf293845054a788ff214b6e4c86de': 66.46265562356272, - '0x975bdc6ab91bb75e4ba4a4912c035ddd52533a2a': 68.31616726326244, - '0x97bdd95983b8f85e8f0603c38e8cb94d9ab72bd7': 40.136207199723685, - '0x98814017d00329be61c5d9a2052c2880441ca08e': 0.7346955620017035, - '0x9882caa5a02cc7ff005e22dc3c2c50ede71436b0': 3.056295697625388, - '0x990c83e69217d73b5237f272cdaecdfef94d5648': 80.11441470892156, - '0x994e94bcb32a73d753459672bf24aea114fa672b': 10.653951137421336, - '0x9a6956040072121b918d73dca43476af3f521207': 63.54944388751321, - '0x9ad0f3f40addf80891c1dbc0fb88cd35a6ac04cc': 30.81215100202399, - '0x9add833ee5edb6f96c45d491f867de31769dd241': 3.4918706481533053, - '0x9be3fdd60c3f76c5ecd228a780197a21f3dc2cc2': 7.301079744535007, - '0x9c4e5775cdf64fad4a5f966b37d7bdb24c68d8ee': 46.90095034509785, - '0x9c5663b4ff15a8d8bd07dbfd661aed1b57ea1279': 7.307100207325316, - '0x9c6522d9a669d080524c1e8b8195cb30d18e2975': 19.95043434224355, - '0x9c8aeb616de1f4c86d0211ab680e896bfc7d0ae0': 28.730792738436783, - '0x9cbcbd22858448a8166bc2b3fc755d75673630a0': 17.443084514425134, - '0x9d247b8b312ea4a4ceccb1aa8ef783cc2740e513': 6.437876139697743, - '0x9d249c90f8f1cee6f4ddd53a25929dc2812d25ab': 5.036772302144383, - '0x9d43a1b6203759cb29ba8c0bc7034bc1717ff481': 3.7492116093287176, - '0x9d8b2f236659e670142d518542ca1e0a9d1f52af': 90.54667237591119, - '0x9e2862391b73a649cae1085da79b75942a274e07': 0.7129228967354041, - '0x9e38f13fd2e9285454caaf3c73bf2eb6abdafe5c': 3.055704454763007, - '0x9e42ca752eb608ad750de70b6c59f28f541c8143': 0.42775373804124245, - '0x9e4d4b2deff620b502794125f83d0626ec310153': 27.926769658910537, - '0x9f8fe4443063a685c4dce5fd6dde03ec23422fda': 5.271219294802784, - '0x9fa4d75861430d114982c0ddfc6d81e636f730eb': 23.187218361085755, - '0x9fb6eb809ac20a6a151f92bf9543ebf0321e1991': 71.29228967354041, - '0x9fd8313cfcd184ea1eb70bf2bac8f9bfb07e6e37': 225.30060799540334, - '0xa0259016c2ee472ca23e94e9cae0755ae2860303': 7.282555068030511, - '0xa04bd847469a1467f3ed9085427b9e4b6b227eb5': 8.78341479136848, - '0xa0d9f8695357a630291fbaf0946341d79df1ca9e': 4.7622111621923695, - '0xa1546e94da6b0829697e50558d8b1692a9df7fc8': 45.418560386064044, - '0xa164853a9a496a70b0e4171cda3aa9007e770324': 0.4407852031497837, - '0xa16f88efa21f55c743c71f3a3e2093c944067073': 125.60111507208477, - '0xa171df891a420e5a441086bd3f179b38d36cad6d': 4.387376108322949, - '0xa1ab4cd01f5262917555ec598e1b63953e7c00d8': 5.009005982644524, - '0xa1f430d87e257d100db0c789714303cdce2f99f3': 7.622249021591058, - '0xa24f732e5d7187559a014b0157153bd1b1fdfddf': 9.91191286391845, - '0xa25cc21f45ce40fa17c37c0bf80f12da66a98182': 14.004404230618618, - '0xa26728cadc617d02d0f9bf4cf073da12b5cce2be': 10.235016395282358, - '0xa37707197a0c0a721ce78b4623d24a11aac05f23': 71.29228967354041, - '0xa38b06e6c615ce4bcbbfa61e9e0a30a3d4b0a50c': 5.34692172551553, - '0xa3cd66f12e6a7bcd897591953e5c6fcf608a4c00': 5.3502015575772575, - '0xa3db1977726719e4ab178fdb36456339dd851f07': 8.725035579406569, - '0xa48a91f099db3a5dfabf38fce72739653fb5ef68': 10613.204692674957, - '0xa4b423909c829b1a040e7e1a012fccefa90116a7': 16.918767436071633, - '0xa523ea521c6a9f218b57badedc8c3dc4ff8d54df': 0.9301463573064997, - '0xa5684bc40fbf4e9cfef1604245e6ad1bccabfb71': 5.221540357793346, - '0xa58cc53380a84e5da92299f0490501823460dee3': 4.584094226008648, - '0xa6172df9d82d9a76dd519f0e65283f25532506d0': 104.62091171971935, - '0xa64998e7cb850ecdf1f88c654cdbcbc921f9dc99': 11.406766347766466, - '0xa66a4afad5b6f951322ca39071797b73cb1bd787': 1.0693843451031062, - '0xa6b17e772d496c45b150b8c81fef94bfcd7c67d3': 8.814430139746634, - '0xa6c503783e6152a4ad4877e8c19a5ba20fa7f8fb': 93.86841559504502, - '0xa6d362a6ef190b1cf58598bb7d465527b8b087a7': 4.355856215119047, - '0xa73916736324191757723cd6e35ee5fff5efd785': 20.45080379734805, - '0xa7496366f43667a580df464e1bd60175a41438d2': 8.060206461284935, - '0xa75fdf0385943e17565a0b9d49654f6b4feb9e11': 14.258457934708082, - '0xa77f2d0895fcfd6c1864094213bc102b0b3ce9f9': 41.03161329365099, - '0xa7d84057f829248062582a33b69acdb6e01c9a52': 51.26872372068518, - '0xa7f569e019328c4c2774acefcb8b4862146cedca': 52.68854571553669, - '0xa8028896e29660625d3bdc54a8b1fa2162d255ee': 4.882314947892309, - '0xa844d1b6b1798141919069b8b260bbe52dcb3055': 21.38768690206212, - '0xa887e8291b1eff7c71fc10b937992ccaeff9a6ed': 0.980981905907916, - '0xa94758a9b3d0f82f0a307509bb06f4e287b695da': 15.570565511455234, - '0xa96c1df041e4a43fd95487e6913626d7af3e752c': 5.06352203099653, - '0xa97b7342eae5948f78ebfda3345453e802596984': 26.097050422343788, - '0xaa264ea133079cc48080d59532ba5d724f0a1f57': 173.87944429612594, - '0xaa82b4dbbfcbcbf4f48702ce50218746900e8000': 11.884424688579188, - '0xab39dcb1b2d05c32acfaef52d25f398e4adf2a1a': 3.1760141157013533, - '0xab645df28ad59f0c7bc843007b539118e9db7ae6': 5.590940974610127, - '0xab6f9938e046a52ec6fa1338489af173905b62a2': 170.57190842739354, - '0xab7bddf5dc4c54b7197fc5f82a809ed1c50deff5': 5.221540357793346, - '0xabda457a3251d5ab0d5da033f9f777b79b2fe26b': 256.2724459642105, - '0xac1a56a8dd5623aaa2c411f009308d7e0730dabe': 102.37572797120403, - '0xac94ffd5784b6eabaa271c291365214703e9104e': 36.285822616290005, - '0xad1b9d004a9c15048e81331b1f5604e2256862d6': 2386.266669998722, - '0xad9e36f363e0388d213027f70b9bafc115b38b34': 0.6900737713988386, - '0xadda94943c6642386eb2dd6c313369c00afaa7ee': 2.610770178896673, - '0xae7201a514421d8d361dbe61521a156ca5140c4e': 17.650375380935948, - '0xaeb1ee6b146f937388fc5ecaef6b7ccfb43aa880': 244.993057023792, - '0xaeceebce28f5e1e5bfc2375ecb5e7fb2d4bd6b98': 10.743438865371038, - '0xaed787a65959715c6a90f7d269adc121ca55334b': 0.7344827279525937, - '0xaf4b607ca8c81229c07aca529534fe420ded39b3': 286.25181766360186, - '0xaf77f85cca96cf15c71a572ee891824ccaede118': 1.120171689005322, - '0xaf8ea8c7254d74eae52f51e8972cd5898d069407': 39.56722076881493, - '0xb028a43f82ae20dc0ef7aabe532b7d9234eacf6e': 61.9282782214064, - '0xb0b0f09a99d8ad135a54487aa327ec899cd744f1': 3652.452899014765, - '0xb11b35ed1b99740cc333c63dba14d5525a783089': 25.211782418031262, - '0xb191c292cccca8ad0b8a2b4b99484cd7bac392c9': 140.95723302607678, - '0xb1a2a3749f3e7044c16285f5f88113780cc190ee': 0.2640686587963744, - '0xb299c5ff91baab1c6e07ff8e4c45eec7a30d84cd': 21.259757404021766, - '0xb29fce06533f26c3cef0aca3e0d6bf55904e311b': 4.3548952317267515, - '0xb31cfb18d2ee2b46748fe133c75a1f7be7d7d3ee': 318.6452386097635, - '0xb35d354987806c627ae12dfdc19f011654ac8c4f': 5.8844935105663545, - '0xb3739c18f574ef670b7fb0490653cd13e17a741b': 8.316735368448546, - '0xb3952d961853b8f24ed0fa772fe3505da39f3a86': 2.314617024835371, - '0xb3a5862132c13328dcaaa655a558f12c408bb081': 2.655489483665272, - '0xb3f647a012388c6db84e4f0862382d0098a75508': 2.610770178896673, - '0xb3f9a5aaf1ded96ac7ab84198e0840c2e8f3436f': 7.988642101689084, - '0xb44b8f1f521d4b0f6643481eebd43e4583232c76': 27.422255046257778, - '0xb473d947d85d8e9e01546a840a5b07ec800857b2': 2.7169491594586255, - '0xb51c1dc926dcff5a12abb93cdbe8044d3d889db9': 1.8535995315120506, - '0xb5599f568d3f3e6113b286d010d2bca40a7745aa': 47.128298359121146, - '0xb569ce590e9ac91dc1d1077e9bbbadd08302e452': 8.496807572474665, - '0xb5b35a9e63edea2a43399632bcef85ce879b29c1': 14.258457934708082, - '0xb5cb1feb618e3227b75e72ac7760ae844ae603dc': 0.1256608145229605, - '0xb5ecf4b0724d47d4e4ea66241e78ad3baa228ff9': 686.7923449337795, - '0xb69ee4006795eee8cad1672794708e0ed1adcadc': 123.23725968685281, - '0xb6dc4462f841ce22f6daa6492ff506bb935553d7': 10.192302222014296, - '0xb70835d7822ebb9426b56543e391846c107bd32c': 71.29228967354041, - '0xb73a9fe884cee9bca56858b4104e3834244f2093': 107.7821847723461, - '0xb7b6788709d3f81d6293fb84c33fcd4e1944d4d9': 248.83743356376277, - '0xb820cd2ba48fa97ed81913406307cb5acefdf23a': 102.7029930504959, - '0xb936a49374f23ce67eeec51ade635ec86d437d39': 0.7129228967354041, - '0xb951da3870f7b7d1e3f9249c18e93d5cc5c3565c': 35.646144836770205, - '0xb956383f0122051c077bd76e8f78302dd4903480': 1.1743701423556443, - '0xb9b691a11b641d3900f067448468abc2eb81eb8e': 356.461448367702, - '0xb9e7217274e2579ed75c2d03f0193c52b9ade92c': 98.40598717852052, - '0xba2340fccfb195dc80a312ed3f5c85ac4cc8aa90': 129.93957689581347, - '0xba30963f47a2d33476e922faa55bec570c433dd0': 71.29228967354041, - '0xba3867ce65a3e50c1acc24bbe2fc3ade4d872246': 3.6256543653408824, - '0xba79454b3bcb2b89feba1f4f0c1f569a1c80d697': 33.7117545398616, - '0xbacd453d53ba5803f7d923567a738658934b6f0a': 3.450521622706746, - '0xbb37654c5ce04d78a7b72b1c9012536a2229c92a': 71.29228967354041, - '0xbb57138b25ee666d7f994a2f60107f177410baba': 114.04162040344204, - '0xbc12fd3c9679b36631af3351f9e9c908e179d0e7': 6433.81593601199, - '0xbc147973709a9f8f25b5f45021cab1ea030d3885': 1.032188517141611, - '0xbc19524dea0af044549bd8df34b94e247b3115db': 12.273303847800168, - '0xbc8a15d8f959e5cc1f46b88b519d9b916ff9e8c4': 28.73298768850663, - '0xbc930f6308ca6a406a96f9b7f9393a171fce18f5': 7.750883474849379, - '0xbc9d509f97d87b8f7fade11c3a879db0568c1223': 2.610770178896673, - '0xbcb8d658292535e997ede08543bc4a49083c92c2': 29.827741159770458, - '0xbd32fb9afd3a3e926020f9b4a05b6edbfdf6d925': 5.703383173883233, - '0xbd7a245b54b0006d9de16295706ebc3c91903f87': 13.098578925200732, - '0xbd7ee60d7ad948a2ec3c65b3d34c421c7c241e30': 3.236669951178733, - '0xbda21febaacecd80c9bb0b7e9b28bdd04e87cf71': 22.576126519228456, - '0xbe24f7ae0c2b64b647ba5fa97d7f5d9df39e2883': 36.166578551387055, - '0xbf41d2b79a10f4ab271a3d9897161dc684da9104': 7.110556090842747, - '0xbfed2d8075b0a7defd6b1bb69d96fb2dc2e83505': 64.60777656282657, - '0xc00b001907fb459d99e4ba204f801ae9dcf572af': 4.9269806893463475, - '0xc010a7d4cf0d9ca1652f87c41592cef1649c5213': 11.950605960033654, - '0xc02da128a64f79652c41aaeb571595d9e70b4ff7': 27.745746345676967, - '0xc06ab5ed615fe12022d943ebdd84dce8edf493ad': 10.69384345103106, - '0xc18322da31df55cf9a8dceffd12ad9ee4b2c0fee': 86.31171363871927, - '0xc18b36aefa9193f029768aa61476e4a3f13de17b': 15.376322671811915, - '0xc1985f1968a8468e49ad54a25d77e14e7ddd4676': 13.175646131029788, - '0xc1998f7c539a200816c77888b326b47bc49c2243': 2.617528010678685, - '0xc1a61d667b4284dc66323bc200c79d08cd7669d6': 4.878592070007312, - '0xc1b0771846cefbe4d02eace495817e1d03289de0': 105.90510781056611, - '0xc1d6bbcdbf6c084af71784954fe78977ba0ed2d5': 8187.964586741965, - '0xc20187dbba2c1d8a0e7a455537f9ef97efe65915': 218.6096095442019, - '0xc211df99b464483c2028ca4b1e284bac03b3b589': 16.33030390588028, - '0xc25e05ff75c5930de541ddd18379805a0ef28de5': 14.32309865375508, - '0xc27d6b4dfdce915f40050a9d47ad12c9caf7270d': 14.258457934708082, - '0xc2a639c930a3e931171be1136ca400d2b5138324': 21.145913154107642, - '0xc2c8879be8efa93aed7845423ede7222d21650ec': 4.467773726177301, - '0xc2f2baf3e68309a85220129412270f9170920dca': 452.4156417827702, - '0xc30189bfb767a51a61aabcbeef50086c45435d0a': 202.35059945850284, - '0xc327d7c4bc9cb4f1adff2b0e1222069e777d22d6': 2.810366647963478, - '0xc3432cb38ba22ea1f2b39ac606725506833a0f70': 5.398519690586341, - '0xc34b57ab3b27e7019dddd4aed53cff8620fcadee': 7.165722825616008, - '0xc3a2533988cfbc268c161b92f90ef8147de924a5': 17.823072418385102, - '0xc3ac32ec3bc5031924ab796890e3f49c7475495c': 48.3203136930393, - '0xc3c87e6ebe68bd212a4d099013328d474ed14b1f': 7.129228967354041, - '0xc3faa2bc025b594db4fa5ed89a11d4b46f942a10': 5.546052497340075, - '0xc4d3b05d8a1101bdddbc1c7028164333c48cd3cc': 20.50794004749063, - '0xc509b8486cb73735677ce30ae16f20cb7bfcb49d': 0.6555578410187483, - '0xc53f95dc50c07f724f5aca404a59610715d0165c': 57.810081694696876, - '0xc58dc96c4b89660fbaa6c767a669445ac3a552e5': 24.367041362560975, - '0xc5a2ce3a6c74704e9cdf48b1cfe23f60b17007fa': 29.786582568558508, - '0xc67a6113c387bb301db5cd2a0120b17b53a158ab': 372.48439047183024, - '0xc67f3e8098d676d9122aaec705867a06f9815c90': 17.210671650089385, - '0xc68c6f5a58753144357c0c51180cdc2ce8850693': 74.30225014355727, - '0xc6a589aa2aa8252bbb089d26e7f1e31be62bc066': 25.091918895853098, - '0xc6f79dd7c4c07d3e1aa28ea8ccadfc2e07258bc6': 0.0979234437329787, - '0xc792b1a1cd45631b7b9d213cf108a16de34ee9c9': 7.129397266792218, - '0xc84e424da4d09e14832a4055ac0c0187cde130ed': 8.523761282917725, - '0xc89b8136b9e1e7ea27a176b76a3c4ca4c5f7da74': 4.167805660550235, - '0xc8b5c265f485f70e15d1b593115e7700cf5c8ebe': 0.12818742732904329, - '0xc8c66744736776a30e4902af61ede4d06871c6af': 3.5646144836770204, - '0xc8f7d67c47b2f6a53a514ac18be2ff32fb184150': 3.7285867499261625, - '0xc90746d2e1f49acd1f3e215b3355fd696c4ef7af': 19.248362131996462, - '0xc93ae2d0f3888209c239861d43014db983616242': 12.72549087295863, - '0xc950714c3e345b385f66a7089685469cc1f8dde1': 23.061940412810667, - '0xc95fd57b78002ff48d9c8617b48ee28278577618': 4.610359747230733, - '0xc984c51c6cb3f12cc6648704f0ca17663b40f51a': 175.0492237673211, - '0xc991248185f443ff8ff77f6d27835deb036b7bc1': 2.1387686902062124, - '0xc9d147cd0abde09b4903c2797671242d2bc7161a': 266.740231017281, - '0xc9d995060c8525c284d275dd4d6be2d9370220c7': 69.26919537041223, - '0xca11d10ceb098f597a0cab28117fc3465991a63c': 18.494756408550742, - '0xca1b032b79b341f9c5352ff65a0f9b85743454a4': 49.07444342517132, - '0xca99677b4494f04e8098fc4cb6c3db03ff976026': 17.823072418385102, - '0xcaaf1042892717a91d850b481422a0116cb022d0': 30.553838431517317, - '0xcb1754e7e16b58613fce7fcd6ae1357dd31728bf': 19.749122999494748, - '0xcb2e267c85d65f5752b48ad6eb10bf914adaa0fa': 142.58457934708082, - '0xcb36149cd3d4e98ab1ea6a4b434e9bbce9ce7dd6': 14.156301121016353, - '0xcbb9204aa6fcf3f83f3fbb67cd55d3136f0eb052': 405.8727678790762, - '0xcbc5cf551ba75496d10727e62dd660efc6a5b347': 35.646144836770205, - '0xcbdd967e8af8b21b99b3dcce85d56b69263ceafe': 1.0693843451031062, - '0xcc0cfad37ac02e2c8483883ac6c75ffdfe44eb9b': 0.12826876703565293, - '0xcc0ddf6652ec4302f10240c0a1bbd39371606f2d': 7.129228967354041, - '0xcc395ff009ffd0f9bdb555debed9c8874c9697d9': 342.86525790793866, - '0xcc7eae6bf5a0d5aa49e1af66df971b9c92f3b191': 2133.842392989771, - '0xcd00520aef6cff1ef6b78d6adbedca3acc732b63': 9.862575353437578, - '0xcd74867282c9ddab3e0fea82b43a068fa95b816d': 16.743751695308323, - '0xcd9782e02d725dc66a7056ac7b49c0e84a49f333': 1.2850292629076312, - '0xcdef4f34e5ceb46c7c55134cda34273349be65b7': 12.738099952817057, - '0xce0e318207f62e1414b3dbd75ac8f7dc44622643': 87.96903096694017, - '0xcfbd75787608dc61c12d71ce3eb37eba14194eb0': 18.31571117894227, - '0xd0a7d4a8880c2cf24f1effb33571edb71c8ef8bd': 45.056727073677536, - '0xd0bb292183343addddf6a76f3808f1882965cef9': 11.647152677234644, - '0xd0e8ade9540f21cea8d93d9aed0dddb98867f63d': 34.06910810009246, - '0xd0ef309f8716a64552c65206a0f8c7d454e5fdfb': 499.01967273759783, - '0xd0f8502b80228438a2d6b724be71d4f244314b2d': 256.6522428247455, - '0xd10b535c0019c06a37cab485b300b85c438fd8b3': 90.28124235598581, - '0xd132a5a88a97a412323d16eecb9c1d08d70ee487': 0.3983380893207141, - '0xd1444c3c53f45f7ae9be976c1f38e9d0580a92e3': 1.4258457934708082, - '0xd189077083dee06ace6ce65b7ca15e22e43f0b72': 14.015845656041382, - '0xd198942bec27ee88ee517764afd846bd01140e84': 4.647849977466702, - '0xd24142f260174c0571b19f1810a264bb2527d4b6': 23.173527900392475, - '0xd3317f1c749a8623f1114134d5837c02df686ec5': 20.350027625863746, - '0xd35da8fedd3db795a87905f7ebd6032cf04bae90': 1.9145870041498474, - '0xd384ac3fd5906218b9baa0806219d02bd639e7b0': 17.221472431974927, - '0xd3be1e0db120e8ea523729f9dfb305d5fafee8e5': 0.26812532281177265, - '0xd43df5e480847030e7459c2bf38158cd37330760': 79.63348756534464, - '0xd47db836479666981efddaf910c0578d43899e08': 4.075508928395556, - '0xd4eba8573ea102d001b7e89c08f516868f7c7dd9': 22.60322044099599, - '0xd52f2196a60748174e6931a9df55decab0402c6e': 5.221540357793346, - '0xd65a0da06e638582b4c0abcbc8a8f4e9ea26d618': 64.4479687049986, - '0xd69b9e9ccac430ec7ac440fd838ee6f391e84fe6': 8.6216261132351, - '0xd766a177f6e8d3385b8462d8fdca39e144ccdecf': 7.129228967354041, - '0xd76f59cf532eba2e16641fd9b9cd0c56bbb77ebd': 0.7874264630303967, - '0xd7940bddebb5697ffd8b3bd7296c2832c295e132': 0.14544067269263183, - '0xd7c96a0fd05e0909d9d225a2d0a35df7a9382aa6': 1282.823009086121, - '0xd7daaee143751e2634ffaec7d83b4cda08a5e79f': 10.50205513393918, - '0xd80694430d42d9dcd2e2db368d35ffdbea56c434': 0.7728965453360344, - '0xd81f264efa6d75a2408302f201b1761e92f0f924': 71.29228967354041, - '0xd83865833c9e6b3bf137dacec0bb7301752a5c5c': 74.54848356929627, - '0xd84b49ae3a08faffa1aa9adeb5a0667bf16fa3e5': 35.646144836770205, - '0xd8dec59bd94c047687d2130941b50d9b16fe9ac1': 25.455475237026015, - '0xd9440bfcc03e4f04f67639981f97a3e8b244f5a2': 285.16915869416164, - '0xd9641f70abd087ffd21b473643ab4438934a8107': 91.04445142861141, - '0xd9e393321f61a2f476431aba1407f1f12e273f21': 11.259193872405838, - '0xda1872c47526b46b0480a8f68fa0ddfe11e18435': 3.7201050103069844, - '0xda1dced9b48d133434315d8458fa66d27bc4fe09': 0.5948039582650285, - '0xda25824ee511fd8cbfce7dc8b316820418a34a10': 33.22715918351028, - '0xda4b2a684ace724d164ce4dd60b9172bbc43a2f1': 134.36457834772165, - '0xda4c38d21be452ce4f32012eeca7ca8c1b38b6bd': 15.95078717774962, - '0xdad38924dbd6550f5d94c6ca191e691070483892': 245.34250105493183, - '0xdb6398d4baf25d1b512e2c3946125f6ad8a98c69': 2.9640607762099354, - '0xdb9da6566a347dda47a1b68ddc42a31b601b0336': 10.581842734380684, - '0xdbb28db4cd7577bb66f0083619ac03ab09a6e77d': 4.883521842637518, - '0xdbb79a687008712e492262b36e0622a9393222df': 12.234219723364372, - '0xdbe4085c2c6d127905c7f6fd12da6fe548f0ab35': 220.6994829386408, - '0xdbf9ab5e1f68349db4f6e5447d9980a98351bf6a': 4.705291118453667, - '0xdc0d66c0793547eca414e33f89b54bf2009861ff': 9.251671245857047, - '0xdc2c9f80f60dcc2062dfc6a66140bb53e116acc3': 12.492704762531764, - '0xdcdd14f9a30cf718487e6c8fffcf99db2eb0bd44': 15.294310651424786, - '0xdce7863a638caa71fee398a7c638124200430126': 16.91222416271064, - '0xdd40e17132659d069de656ca9416b2f37a1c30fa': 2.566522428247455, - '0xdd5b8263da239666e1631eed29fe150c5d48a4c2': 33.099991634143755, - '0xdd9f24efc84d93deef3c8745c837ab63e80abd27': 6.053394975318482, - '0xddc86fbb738860c7d3e4b7130acaed8cd958711b': 171.85044752698943, - '0xdde5e7f5d2f1c4c51ead37f3b72b9a59b87479dd': 71.29228967354041, - '0xddeacadec20d5f7f755eb0bd0bc007bf39fb9e4e': 15.220903845300876, - '0xde120c5dfafcd645f8673e44ae8d582a225d0af3': 0.2913898405336257, - '0xde1c1f83154ef64a8b3ae42b20ac2da716d18aba': 1.7570141981621548, - '0xde354f02fe2c3b4ebd4874fefbeba0610cce2686': 77.56157835444797, - '0xde74c1c979a31c80562f0b893b250b4d9ad6b510': 7.129228967354041, - '0xde76de28899c78a459490e1ef9de1a3f4b7ed5da': 10.77827292023596, - '0xdeaf08db1943355f0a8f9766f32a629e5645751b': 1766.780471447071, - '0xdef0d465551434dfe4bdbd5535223e1a9f009440': 25.118414468959948, - '0xdefbffe64156f9b5e854206a62796e08df230948': 130.0132588940198, - '0xdf1c1add3560197db5bb8c9c29fd59f7bc430dfc': 7.129228967354041, - '0xdf78898430e3b68478f32dae5d2cba12c5ca7ca3': 5.955254022025245, - '0xdfaad9b2ee278e5271b7d15bdf1521b213a4a654': 15.24038849898738, - '0xdff9e2bd6841481d48259789bf303ff0203f7a34': 8.77376722566758, - '0xe015874aa3d69cbe84066c67bc16e26dff59a9d7': 0.7417450938852409, - '0xe023fe889bf757c0e7d2431aad66a5e281467caa': 34.232842137452266, - '0xe031305bebee3c64896d14abf244c53a37967659': 75.13343259843612, - '0xe05e3ccc7e4c7569d100ada6bdcfe7f236195076': 97.17249161979534, - '0xe0c9b2b63b80b5d1447d2fe859f4dba3037cefbf': 71.29228967354041, - '0xe0fe1af4f57b0b9c743bdbc6ad63f1e7bd6ea830': 13.688046701704648, - '0xe124d5f3cbd170cec78ed8b70f91aaf559219bfd': 1.524669308965047, - '0xe14a62f8a5da2100dda3b59fa1d6cfc068435c45': 0.42775373804124245, - '0xe1ed0d3114b28c9541e80912eed255c34f6c09d8': 576.976421614268, - '0xe25b7ef2ebf5fc9826229533146f3817422f3b67': 115.43326453958062, - '0xe2620b2c51316bed25a7ad5f1ace428314a579f4': 1457.0930484765065, - '0xe2a27a7f9ac78c8d0b178f6878d71f223f803073': 19.81954786233429, - '0xe2bacab2a96b92d96f864b7022788e39fee9afd2': 64.61116185105779, - '0xe2d698b1302ad84fb20c2a8905648f3eebafef5a': 0.28516915869416165, - '0xe2f0dff07510ca67d6e49849f8316cd91fa02e55': 7.129228967354041, - '0xe302d2ae0cd9b3f9b34717f3006b15ee2f600488': 183.4034089891106, - '0xe306b6bfcb8c8113f725804bd45d82682f4cdcaf': 122.01596986394901, - '0xe3973a96593026f64456801b90e042577b00161a': 71.29228967354041, - '0xe3b1b33c40c028e651f573b35e01af1260c06f96': 4.881428662092445, - '0xe3d51681dc2cef9d7373c71d9b02c5308d852dde': 22.69010600088309, - '0xe45597da55fa2de0ddd390bc1b33b42fd41fd1c3': 6.82351849714042, - '0xe4c1a44a49d7de6af836f5ba19ad4279ae1d82d3': 35.15781793220562, - '0xe4cff02675b27e400624a30adaf03321bb9cf082': 7.699567284742364, - '0xe5017357d68a593bb8a4badd1ff9e727a46d3ee4': 2851.691586941616, - '0xE53788120BBC9f36C1d6E1933Fb72F7098490ae8': 37.07199063024101, - '0xe54ea34c9793b23e0c74c347cdba9f94bace7aaf': 307.26130123900936, - '0xe5e7f5e927e5202b720bd3fb3b7bb83c8527ce51': 212.57250939178223, - '0xe702e4a02b8316f63b0e5feac75382a68b5727ca': 18.598271779471204, - '0xe716806d41cc8bdb76cf82132d23b45ba0e1d53d': 8.837990271146579, - '0xe785b2939f5f240e3df3def55989f203506c1da1': 49.31147026809978, - '0xe81a20f6fb3fb15328890edc8a2631ffae86a636': 21.45897919173566, - '0xe831fb4b85af9f9dbe5008c3a3edc95ccda48672': 9.09891870678542, - '0xe91cbc483a8fda6bc377ad8b8c717f386a93d349': 59.4266965141239, - '0xe9415c468284f43f8d94ba6b3d9b96ecb8363f12': 2.8839010655131685, - '0xe96f839cf1d2da947f7a691c9c988217f3e80f03': 0.304946321663551, - '0xe9707be0764388e38945e6322dee740557b3ff3d': 0.08504401841047558, - '0xe9c8ba11de2172e6380177bfa6829045cc06219f': 13.197842541234822, - '0xe9ca3d49c39669d688a146932275c49d432d32b1': 0.5410312995630439, - '0xea8741ec1c52222469c76901571f1e068aee3a7b': 0.26228463943249586, - '0xea8e5fd4e28482f8377a1c5230097a74ac201e36': 21.345455562210876, - '0xea92bc95d27e3d5e45c5871f7e44b2e4a4af8f41': 121.9098153417541, - '0xeaa41f3f3bf45ba14f06fb76004db779c89c5435': 25.56195269773007, - '0xeab8c38edf8295e70cbc97c51b3f78a3c3d3655a': 64.16306070618637, - '0xeaca3af1c3700063b4cea20580ed4505b07e5ed6': 37.07993293029258, - '0xeb2fa5632d3cbcd2f5ffa240276ba6074de5250a': 8.937789594864832, - '0xeb30c7376b0ea0fcf697b7f4088085917e7add4c': 71.29228967354041, - '0xeb4dc07a9f55ac3245cf499dfde9985ea51333fc': 40.10360821070353, - '0xeb7580909f5e2efc6c5018e74f08c496384fbafc': 24.207570221996967, - '0xebaa7e59c05f2f02d93b6d203e51a8c32088d832': 71.29228967354041, - '0xebacd65a74decc7b5f8d565bb042f95adde77c59': 96.71330315859828, - '0xebd924f5db632fde85c16071ed1b4c8dc05467b7': 39.85238992750909, - '0xebef3febd740c4381689b05911b14f17c0aad1b6': 110.30553833730711, - '0xec742f328d187246b600fdffa2d9000b123bd230': 13.580753429071406, - '0xecaeab4dc04867c7e69c3b856d3c3e8b702123fc': 174.4022814337877, - '0xed03c5b3f3c4875a931e900123c4fa24bf7c9c3a': 7.504428112865805, - '0xed0bf65caea0fb50d7ca3d9086938b02f25421a5': 37.760701663764536, - '0xed23487a256604053b45490de6d1038291157e87': 64.84579467445442, - '0xed7a14d0cd4708a0b74c9ea828b5c12fdcc844e5': 3.9857730246548377, - '0xed7a1ab081c3e24789a422acca01de8be1e01828': 71.29228967354041, - '0xeda6ae782dd9218602d7c7a5466042dcf3ebd917': 2.8516915869416164, - '0xedc15e460495104aabe944c31f15a41fd9e1ca93': 3.5646144836770204, - '0xee2956d115dd24c24706eed249723983b25bf4ad': 2.495230753113452, - '0xee4457471fb969035314ac40b16a71ace6142bc4': 14.86267205609118, - '0xeea421d050ae03a16ccbce50378bc1e292ddf33e': 24.560077159061684, - '0xeeb2d898cbb8f1cf58344aa4165597a58f9f8945': 153.60924024877696, - '0xef5a165debfc0cbf1e140d7b444f6966c5b189c8': 1069.3843451031062, - '0xef9c79fac6730b7b96f378067fae116b3ed04d54': 25.60474573491189, - '0xefbc273ff657bee064bef8c750275c11f359aa90': 74.81760270198484, - '0xeffc1fa66e1ed3fab871358e77ec16834d8daa5a': 71.29228967354041, - '0xf06570fe5e2a30ec650694acc60929674d061721': 135.82015733607645, - '0xf07caf51b46383a062136aabd7eb3c7fdd7151e1': 2.8972013306876607, - '0xf0af13a23171e5c1b419a80e42c7fef82d5531ca': 85.00698754422517, - '0xf0ce3944fc379c072e8e36f7b12201e1d4def0b7': 30.562303259676284, - '0xf129ed003a046fd6997a6156a3eedbe583b8e1ab': 4.014674674861899, - '0xf16e9b0d03470827a95cdfd0cb8a8a3b46969b91': 11657.097834495778, - '0xf17e641830d85102e256daad2c1461df52597912': 38.21366367006417, - '0xf1a789613ecb6b824b9c9df99a7cef3b327cc6f0': 42.6028195615182, - '0xf22311504ceda6e311a48a04f935edbba658d43d': 1.855177811705162, - '0xf2379b15677ad3bc3e9b764065336c9ca7430693': 42.6203230087606, - '0xf23a8dab5dab50bc8276a15e73bd89bb2327315d': 11.15434985322732, - '0xf24ba96e280f7475cda34a4adba6f4c1c70c49dd': 19.250486337646187, - '0xf276dbdcf4a6fdeb78164393fc38b6552648c4da': 13.274079979234841, - '0xf27cdeccc57c8dd51b3e3f52885a3a976fd88171': 51.3251159016815, - '0xf2e229ec9754c6469160c8109c8e3c3684ec2e53': 8.903415477259971, - '0xf2e6e664c1dcf241e1dd81664137192f477660db': 83.76844036640998, - '0xf44be8e9c8e9e32f9297f3921b925170d18cc258': 105.76538512420723, - '0xf459e726c59d4c8b41b5e29ad84588dc598ca9b1': 7.093446378741976, - '0xf47c273e18acd72868bcbb967b89f2daa9bb8a3d': 1.765086461719708, - '0xf4a202ed4541c5735d584966a52cfa17749acb7b': 356.4952550020113, - '0xf503feb4f6570e0a44c5231df53dae3fb5d7d628': 71.29228967354041, - '0xf5c29f352ee1e802abbf31bdea1db446bc49b422': 3.5646144836770204, - '0xf5e8cf9d825d5af478b00d396b80695e5701d881': 2.24063797766908, - '0xf6006cc4f7eefe943a78533fb00273f3af74f9cd': 14.00021068160616, - '0xf62540ae80a2fec7e289b90197d6f9667713344f': 13.535611151250118, - '0xf6352b344c7cf369924975bda04ea6aa8259e3de': 54.277198618707196, - '0xf658e8995506a9eca4bc1af52f6bb283d8de5eb2': 4.79569992934812, - '0xf668ce10b2b8d13852086b2666e1379d5697fd31': 15.99494942662939, - '0xf6694add7c1b548bfdaeab7c3fbfec422faf7b90': 7.0643815006669906, - '0xf69f7f4ec215be26c43ee491f2941cedf1a076fe': 72.1843936907421, - '0xf6beb6756e945e75d5bbfd379eb79ddc39dfb843': 26.7567235068099, - '0xf6ce5763768d15272eac30e99695f4781f652480': 88.96065782333393, - '0xf6e7e67910e643ad3caeb612367e3e28a919a97b': 5.108951423784926, - '0xf762f27d6cc2ab87754db66a4e0f2177bd22634d': 7.564597393165008, - '0xf7bae44bf86a69a44606ad3002eb07ee75d32dcd': 0.134246079723835, - '0xf7d9e63d8ccd5e7fa37d3dcd08f0097c149d8649': 61.45918583616634, - '0xf80733926dddcfd65baf672db2f6230ee99175b6': 0.1884612203094108, - '0xf80de93c0ecbc37cf157ba8571cc103471f4a871': 13.70561681544341, - '0xf846821dcb8eedb18e55bc719064572dec6df273': 69.8664438800696, - '0xf86a2d083e62a0c2c2365d8f23e1db39acb0585f': 21.38768690206212, - '0xf8747a3722beb030c9b90e8ec91383d270fa409e': 3.737141824686988, - '0xf8a11a0dd5afc22abb4eddf3d3e0c6553d4c099d': 5.3736102755552055, - '0xf8a9ec4d9223b420aab0b7de3f2ddeff16ff9b6d': 306.7478566004436, - '0xf8fa2372c719ca8fd0aecd340d06bdd4fa6c1ead': 19.916332244170814, - '0xf90c8653c23c92b3dc7e9596ab7746a6703ec4b8': 1.4258457934708082, - '0xf9867baa9f55737804b44f94ca00a4936abc7617': 350.7819978956113, - '0xf9f5ab2b8e35fa2013c37f880e3904c0a7ea8e53': 11.25563437694176, - '0xfa35113163bfd33c18a01d1a62d4d14a1ed30a42': 652.3433613363642, - '0xfa57faa6fd3f5579bb0aedc647fbd489a92022ca': 42.49020464543008, - '0xfa7dde4581ee385df0f3d1cd2dbecc29f879cf96': 7.714997190101662, - '0xfae4d2b23c2cfbd3cacd8f21a64845b08c0f980c': 21.38768690206212, - '0xfafa08913b446621248d3fd0a7128aa64d6ee1e5': 2.8240778222974474, - '0xfb4b30f0ac2f75756d985f95d5fb299048d42fee': 499.04602771478284, - '0xfb6a641b61131359679cde690eadf68b8d4f0c46': 3.119465530915163, - '0xfb7c8ac0a86b6055d908c42e1519bb7807a51737': 1.481151104411635, - '0xfbbf22582c1c947fdd80da2f3ceda26838ac5adc': 1.4258457934708082, - '0xfbfacbcd4f9dc717612da1b3dd97a2b80ea81450': 72.05515511723632, - '0xfc44011204dafa93fe06660cf74485212a9e75d6': 1.0386529505782949, - '0xfc722c0294081fd22957361e93ed92b8c1cc5173': 14.258457934708082, - '0xfcf3a4fd4f2044cfa2839a014477f30705a4a1aa': 33.51526562447857, - '0xfd13d634dff0b7a07fc85c73c0f3992c60e394e3': 38.825662457856374, - '0xfd6b746c6fe9d9427d3d8001991ce85e38428d6e': 0.5492268757219304, - '0xfd7a73e6aeca1ffa331cc6d21fc1fef100f8be2b': 0.6357006623106541, - '0xfd96ac0766a056948df4d8eddfc12a57f51180bd': 47.1023482118534, - '0xfdde482b80a5de7f9534a2eebb22234d90b9b07b': 4.705291118453667, - '0xfde74085a61e665f5c207f05d804362184b5ee70': 169.05951293875157, - '0xfe274b074ce85a9f4ff47b66d586c7a8c1c8f742': 17.6519709231686, - '0xfe42c58cc16b810b7713c246d43f9357cd36d8c3': 0.8555074760824849, - '0xfe711ba380ce4254524360835538cd3a4555bfc6': 14.258457934708082, - '0xfea0b209d9127e0bebef4fc3a1cefb8b4a913329': 37.84371221058907, - '0xff2008226058110ca652649d3477b68281d5369c': 1.4291884139549356, - '0xff876e72c14401a9c1d7e80c9a9b8035977885b7': 0.9656900195810436, - '0xff9931a59fc373bf2289aa7e42d27a4e74e6ab92': 21.38768690206212, - '0x219b89802cc3ced1bca7a800a55600bac115cf66': 43.790183614116366, - '0x326633e9561c13126923792e5249f3655bf83e77': 14.728138326338719, - '0x4f122c9d01c9a2925178a6f25878a40a5c6d34b0': 14.041638188497396, - '0x54c5b84de2b712c5657b47f3c45277cdaa36df8c': 18.210087705184318, - '0x60a752fd9eb4075230e4c970b360081891b37d41': 22.48208382003669, - '0x70d0a2c20f60b66a72ce671a34e97caf9e87549e': 9.518326985337959, - '0xa1d8d972560c2f8144af871db508f0b0b10a3fbf': 389.8680839286145, - '0xaeab9a034ad710f5ab0da379dde53c5d47595d5b': 5.366723258566919, - '0x052207065366190aede72885737f52ce5494f9e1': 7.265270229346474, - '0x15301804dd323962b78d93b461a667faa3d3825c': 35.75899324747266, - '0x198b54943219beba2b6193898179c05047cc87f3': 20.82211301702519, - '0x2e5b1f00aade0225251d6e46cccf020b5b1b4602': 162.1495551492949, - '0x5b6c2397b314e693ee91f9ac156d8cca4ae64cb4': 29.465646373982914, - '0x625b36a9d5e18b35d0b69e93e57853600a77cd29': 3.1050104196408634, - '0xd48530ee4e4a2a4ce1d0e95cdfd1ef8c9f632868': 15.76112068876435, - '0x0a4bc5bc9be7e025e56ebe2e223464bbd8722b73': 77.24582586615257, - '0x2dbac95ae162744b58aa58514e6bedc0a3acdcbf': 184.12889876567817, - '0x3302c7fac4d6d661dc18b217028825b56b4290d9': 4.624550221782061, - '0x9e32d9cf39c31a3ff8d9ca010beea540a24d0a11': 38.088899367466105, - '0xcb798e7484025527e0c1a625819a07932c338788': 20.267379492906485, - '0xfc4458c5de0452efb9abf10457cb9860defbf849': 56.047718382519975, - '0x33b9ee5c807cd6dc6549a23c66a5997858c929b2': 38.23295183596243, - '0xb7a8054447a2ed42c9a276ea7497dac96098113f': 9.166151529455195, - '0xe1aa4674fc96ce22aab808d8732456aed125b924': 35.06709524209408, - '0x0e242f8ff433282b27088275a1689ffa2659cc22': 4.911280615929319, - '0x379e3726b5c9e1426ec758ece0649fadf8cb2f4c': 4.075770423408007, - '0x39b103a7d6f588d96461bc4fb822570f1e6496d2': 15.315272013111334, - '0x65025329000035f1bc489a1efd3d4b87115c5d8b': 3.0678852516843715, - '0xd2ec8df4050164c6711a3dcda6d1cc43c91b5f6a': 3.2042608836776547, - '0xdea267bc026e180a02d3744d04036ccd41449516': 15.148614278340931, - '0xe9eeb588cac327c67d93bcc09942bb0a34253194': 258.43203978058324, - '0xf6c5802b47ad58d4da6cfc2fd84d7889dc45a45d': 28.581342600922188, - '0x6cd5e49074578933b933ceed5a1228ba7d646758': 63.80480982134786, - '0x7680a9683200e03aa98f1bfc71e50b2641e612bb': 35.46791411258635, - '0xf90ac51d0d92753972e0414e4ad99b072ad4db24': 2.3834524312063987, - '0x23f44c74ad65719b2741fb4225cf98cdc52a3637': 887.4333542958018, - '0xf7e4f2078127faab6f6ddf7a8e09a25a82d43cac': 3.4533123387588467, - '0xe9d79597ab26705430d68684ab444a628aed430e': 25.543422714827546, - '0x682c4b33b671a7fd5af13083fbaf8612f992dd4f': 5.746597537701327, - '0xaa19f76081d97efa28ed02df4ca0425c98f68e91': 1.9282460133206003, - '0xe86ae22547c470309c3edddf87a1d9bb8a4a9d7d': 5.642660590877944, - '0x7746c7c6f546f7dcad5c1d9ebcf9fc2f570bc8f8': 4.969447990555843, - '0x9ae523df2ef794fa164157c0a2bc642c498c4644': 73.38769431163026, - '0xe0cdf365a59729536b5ab528bfbd802b872b11d3': 9.842456135414302, - '0x071c0b052045f043accf127d8d15ad6d1ab9d09b': 304.37107491789703, - '0x21f1d9f8d2b5eb8c061fb855a72c798a54a7fd5c': 406.41694304506143, - '0xaf1aa4b9f7b2de08ec99c02fa62f8b6fead169a8': 1.4972694560577018, - '0x438fe5915f6f6f747ee1a5f5a3218e73200f47a4': 1.7008105626200833, - '0x738cf6903e6c4e699d1c2dd9ab8b67fcdb3121ea': 330.5265620179986, - '0x01ff0b295240322eb7647d8748329cd1fa4b1937': 2.8516915869416164, - '0x0216ed3aabfdaa50e263600e5a39082121ceed9f': 26.90664502875404, - '0x028b0363ffd8c9dc545a4eb60c085177cd31436b': 7.129228967354041, - '0x02913236ea437d0c8d8f26a6cb0feecfe001356f': 2.8516915869416164, - '0x02cce96f656c0c2c02d2461a8a35b3b0ae0c7248': 0.2891806838568561, - '0x030e40508954b879df2fb0f55b38f578d665c3ac': 31.552962776210247, - '0x0325bb73267c739125552573fd24aa4fbc7e0fd2': 0.35646144836770205, - '0x035495b687850f79cb1652f416ea7ec19907557c': 0.721408018378448, - '0x0362b5f4a03a4f19bfbe40e71405d53e279c1ea3': 2.210060979879753, - '0x03fe7d1439adae68233a5dd8c03370b70eee0188': 65.37089319960312, - '0x046a020ab8e7e0b33fba87f38bd3b91a5e0f43bc': 3.1655843830935346, - '0x04b84380869ec4c0961a76b5952fe4a6ce1711e4': 37.96751964102239, - '0x04c4e0e45d8d7cee60a6a33844e9b94ba5303b6f': 2.8516915869416164, - '0x05032ad49e0c759d8769e39132656f62459bebd4': 12.210833903882488, - '0x053230e4d6bfd7830f7c66227878deb8c82cd073': 34.12705126689314, - '0x055c4248f2eee8a01afd7fa27fd257152ed34faa': 6.51284188289848, - '0x057ffef38ebeffd53fccf7aa0db1c96437f65b1d': 2.8516915869416164, - '0x059a569b6387191b43ec698b6ae277688ba6ba2b': 0.2456648783175089, - '0x05b56b2b0e2f395f2f814c09c845ecf656b80b1d': 0.22374242141904271, - '0x05bd179bce905a18563908a7a75283d3ec5f02d8': 4.325406555901193, - '0x06315536bc3d406311e03e251e58ae43ff95b272': 4.990460277147829, - '0x063444c22f312a2372b049bc2abcc63c3321fcd2': 2.8516915869416164, - '0x0652f67e2358864402bc17a97289e2ccda410451': 2.8516915869416164, - '0x066bb576fe00ab388b8cfbf0622ba5b8e2d62268': 9.995188142051516, - '0x06796638a25eaab4862763f85ffdc8219be0dcd8': 4.635056158781465, - '0x068659ad40973a11633a7f0672fc0fd3567473af': 225.36247134210612, - '0x06a7b90f6b282f432c414400271bac89a90573ba': 2.8516915869416164, - '0x06ff5da0585a7e5c46295568280bc23086fcccf3': 2.8516915869416164, - '0x07023c87471184ea2e837037ed6778999173276a': 79.6558807969935, - '0x0709d1e28fb9ae44ecf69cebbb1761ce1e917126': 0.0727181354670112, - '0x075c3ad6ae22f995dbf89671c5f166343b4d415d': 3.5646144836770204, - '0x077ff248e7e19529186a6f2e51a5e26097637a9e': 7.989537817709924, - '0x07cf726b5a7dfbe53d4962bd67e6194d88382950': 224.14672173885262, - '0x07d5f67dc57a0998e7994b347d53e40ec3aae190': 2.8516915869416164, - '0x07ed528eebac4d94ed3ec56d57d067856a585c5c': 15.43255236819507, - '0x07ffc744b8d57d86e2b8974f682a4517f9559710': 1.3229037031212165, - '0x0858ef5046c17da7e0135dee9357cc70f51c6c3e': 0.7129228967354041, - '0x0871fbad6840b140b86a6c12a996da9ce16021e5': 17.823072418385102, - '0x08f60170fc86a1a88db0a5ad4669c82e56b721fe': 5.578007760347733, - '0x08fb95f9cb87c37c8b25181525dd1d9590a3e186': 0.3833679983613424, - '0x09767b9e34160459a54bb8096e2096d1edf6fb6a': 2.8516915869416164, - '0x09cba7a42d174e0fcfabce462dd27db78bedfd5a': 0.7129228967354041, - '0x09f521d49125d0e07737195fb9550b21da866c08': 0.19571563714050189, - '0x0a9183561d24ed3ab55c9cce2f142e48f9ee417a': 42.577045427946686, - '0x0ac8969f8988a67c50fa8c85125456e756448322': 3.245268684296668, - '0x0ae3776dc9d86fc766d032289352f7cf0a1ee036': 0.23221240147766922, - '0x0b304b328a0ba8f78b60926619c5c75a45c482bd': 2.8516915869416164, - '0x0b551649e281aa1d3c2ee1e090d64c9f35a4c73e': 0.9577064403953739, - '0x0b747c53d283d74f54263aa3529847a307b0b06c': 9.709894607531828, - '0x0bbbdb5f938a2e8a96d1e3e1f1e34ce1a17abe9b': 16.98015864857535, - '0x0bdbfeb57c3691016dd58912d7669d404c0fc8bb': 1.9961841108591314, - '0x0c015819936f62964454d854e0a517d911732c9f': 2.8516915869416164, - '0x0c0750b2578c8f5e8e13fd5eb3b1b1aa521c5eda': 59.508267206959076, - '0x0c22b1f9a3d87e65e6ee76df872c707fbeb9e706': 0.08933857835241361, - '0x0c28d74b3859c710a518b6e0ce082cf8e62abd8b': 2.8516915869416164, - '0x0c4b11dd46bf2234bd4cc7d4aa586282430a0ada': 16.682395783608456, - '0x0c602a8dcf99fb16e4d61c7ff4e110de8fef856c': 1.042714695294227, - '0x0caa19ed3a6d04cbfa75662d8a7f42702afb612e': 2.8516915869416164, - '0x0cd2a1030f93518531b69f0000fcc3bb72adef7b': 0.28139257423450653, - '0x0cd7e9320256239d51e9385fa015dd370ccc7910': 29.575126659989778, - '0x0cd9c31fdbee94655178effcc4230f7a2717960c': 0.25059506147874466, - '0x0cf106af7b038035d888b441a118b8f064e63082': 35.78126617025548, - '0x0d4ed61d464084f126bf93b4cd868a7f177fe901': 628.3497939239597, - '0x0d6697e49d6025ab00b0f952b556ad064de4c39c': 2.8516915869416164, - '0x0e3f253dd0d1d38c24b5a51bdbac08e3904beebe': 2.8516915869416164, - '0x0e6a8772fddcb93699362c378f9ffa68f00605ad': 0.7129228967354041, - '0x0f2020adc31ce805b550d791dfcd8fa3ba35d3bd': 0.14258457934708083, - '0x0f2b1784691d962816c1164368c9611a08bcc32a': 0.124220546298502, - '0x0f6003e2b2515c27bd8f63cf2cf5289bed87bfaf': 0.10495060173124854, - '0x0f9da849917557c802742dfa9b40860cead1b8d4': 0.11880788362620719, - '0x0fe5820f7d6161f405cb6bcc674ebeb3de6e8d03': 18.675060422984632, - '0x10034ca950aac463e4c1673af5d4da92a243b7ea': 0.08815953882608518, - '0x105d753040e915e28a860e0586e1312203c7a6b1': 2.8516915869416164, - '0x109c16cfac06e2a9889bdd029fad54c58560d5e6': 2.8516915869416164, - '0x10b69ed1f265753ec58d21f4093455e3de80323e': 2.5314368605394515, - '0x10e28beca706b1be2fc2f66b442e18a955e50d9d': 1.0130768720847918, - '0x112917df78e0997c787d29017ac4f82b9ceab8bc': 2.8516915869416164, - '0x113a8b53417dafc59d1039b2477a0f32d66c5c31': 2.8516915869416164, - '0x1144158b3adbf21e1f4defd1e6350b459238ab84': 2.1387686902062124, - '0x11568fcf9f59e8996560870daf8309e4363903f1': 2.8516915869416164, - '0x11db6d0fe96667d6ff46febb1226a7538d33b592': 2.8516915869416164, - '0x11e756de36b468e51f6cdbba7508ae43c35e6763': 2.8516915869416164, - '0x12043c149c30b10abd9c2f0cc5a68234736cb790': 0.35646144836770205, - '0x121dd5e2cd9ec95402beb98b78b71dc6eeec27bd': 7.555939217501306, - '0x128a8b19efa4b3ad12cf9cf6e4d3e36ca6b0162b': 26.20749971280107, - '0x12a729c68cd89a605ee28b7298c7ccaddd6ba1f1': 39.0508781868264, - '0x12d9e28b104b97e7263bed309bd6011c3554afaf': 0.07862999004128803, - '0x12e3927e164f79cf6e480816bfd65a7ca4259786': 3.2429299738558757, - '0x132a5ff5d407bd91c4fc2daaa1759c69689424ad': 20.38372869513826, - '0x132cd54b4bca8bba5458e47466733eeab8da64d5': 61.544732934943866, - '0x13485327bd769cb2f7e0c757f1ede8cd21094c28': 2.1387686902062124, - '0x13b09ab9f819d28d82a672bec51d721b62507617': 0.514151340151187, - '0x13c745684360c9800f36405703cc44d37513d851': 2.8516915869416164, - '0x13fb94ad7a73b61d0818499dc32111bd750255c8': 1.0883626846029681, - '0x14063f49ad8e3a02090c3d2eeb90ddb15745fc35': 0.9661767197974735, - '0x155e2d014a612cacec6da0c5c48e40dd5bbde009': 0.2951136796946616, - '0x15744998fcb42bcf88f975ecc902750040bcb8b0': 2.7091070075945356, - '0x157b6c44f47ecd30c0a2c428a6f35dbc606aa81b': 0.16685094505546505, - '0x15f9f4e9751cffac6b520967a86d9555c6cde87d': 40.01285688911264, - '0x163f67661e11ef5d6207eff6eee9d5ca20a71307': 3.2395359935063466, - '0x167681165d97388aa782af2efa3de295d5b74982': 3.4220299043299396, - '0x1705058ffc8fe934dde8412b644e0c766d4eff5e': 37.228430474263725, - '0x1762d1e66540d7d8d75604a16e4f648f5159477a': 2.8516915869416164, - '0x176ebf38df624d00c5ef301fdeac04c619a97c9a': 2.3807525695971545, - '0x17706a861ed15b12d4d578718b28425f1b2e42e6': 30.6059322597001, - '0x17b6f9291bef73147b43affac2ba81fb67d095e7': 37.97020784840646, - '0x17c9aba7eb6e3361e92ea12f10dd02f7d8a0359d': 1.1406766347766466, - '0x181348d19d4c5eddb9383c34bdc7eafaca6d127d': 7.9245363769409805, - '0x1893473a6d0576e8bb98b12a4a7d2bff13675860': 1.9471777909375392, - '0x18d8dd4df04d1a6f35c9f56bb8b17d48fb5ac4f2': 23.72263423889059, - '0x192fade688e45dc06e4b2e4d7b9d23a35849ec50': 107.4615260624635, - '0x193259a74241af8f6c8eac406784de637bb91b69': 0.3419981728836574, - '0x19d00a48340de700938976bbe0b477c61be214ff': 1.1394201893049913, - '0x1a35aec8fe8bcf96772086d978ff45964f79974f': 2.8516915869416164, - '0x1aa6aaa927a757b0812df9f8232f2adfc66a4b54': 17.823072418385102, - '0x1adb466e1b43c4bfe524868d79cb2a864439fd81': 0.3171580109747236, - '0x1b4c60261173020cc2c96a529c3e24fdb66c66dd': 14.258457934708082, - '0x1b55557ed39a7692ecd6e6b965e1e23c7bec9d03': 0.6041387048454454, - '0x1bd0dcb082975aee7f33b45411dc48fdaa7fd174': 2.8516915869416164, - '0x1bfa46f5cd5841b3a0820132febf54b57fff2ea8': 26.563532900782768, - '0x1c47f167d113902e158864fa230b927d0a0452d7': 35.67185956064381, - '0x1c93e95ad21e1847eab12b7d143f0c4865b1b536': 1.8627362204137137, - '0x1cd2d97b90459b30bf657f5b5995940a849d3ca1': 80.01035648786237, - '0x1d1a9c975e4bde782f052baa1d0ea1d74e9c349e': 0.19023942067939395, - '0x1d1bc6b00bf527d90e2f076d662218a64c91ccc0': 0.7050814314775828, - '0x1d3cddc8f3c81a367492184cd5545a04c0a6515d': 4.990460277147829, - '0x1d83d060a15019a06b221640ee3486bcf1e16155': 3.31567022692913, - '0x1d9798a5501af641b025b8c1c0c5313690d10702': 3.2779165407573343, - '0x1dc229ca7a233ffaae60ffed64308289fdf4c2d9': 11.733590572855595, - '0x1dd36182f323785ef2a14ec8641fcbe61a0c9cb7': 2.8516915869416164, - '0x1e38124656e38f8114eac1279da870161160fd16': 0.4795394154322661, - '0x1ed406ee1046197376060b42de12c82aa2ebb434': 2.8516915869416164, - '0x1ee875b0bf51ea7ed8f145a9dc46edd7fff4eaa6': 2.8516915869416164, - '0x1f2e6cf79eb59dacb536bf68084c03483c4ec5dd': 0.40080525254464416, - '0x1fb9580e0b19956b90351c825ae7819f1ee0257b': 3.601496355015972, - '0x2067bed542762d26e2755ce7d8776728f3429f48': 9.748578067636455, - '0x20ae496f4261ed277d430d0ccf371d66cc9145d1': 1.1192968058291333, - '0x20b5cfbf8de864ee3077f8840e622d3158525b15': 0.7464717072995187, - '0x20d2e1656a7e5d352f1ef153412e3ef97414aa2b': 2.207419693147469, - '0x20dc271f9b6b142e1f73685afa982f64568c31c1': 2.8516915869416164, - '0x2103643a30c35bf9ad4e9552f892221b35d3141f': 2.8516915869416164, - '0x2192f3a6a74028e0c7d15a4cc6bf616782d2217b': 8.945763997400555, - '0x225516233e7601c68dd5b586a88a52b21eb56204': 753.1940695054147, - '0x2274d18dae078a89518ed308d88d9b4493a1aad6': 4.516885207156236, - '0x22be3ad5df9f5dbcd8152ea4204b3c2078a10bf9': 801.8229298730461, - '0x22da1eedebc60c1b8c3a0c48f5c81bbe2b943dd9': 0.22554445713198149, - '0x22e58785a16a7fd2e98ed1d05c1e1afb81a8e32c': 2.8516915869416164, - '0x23864fff32a5fe614573caaaa614d607a2c92478': 2.8516915869416164, - '0x24250d71956c945d2ca01853770b7f7841d9516c': 0.12183188563457902, - '0x242809413e20470c63d12913cb4eaa2412e89877': 0.09477906195478425, - '0x242a8336aee8a4c2c0f337d1fb6a1adba30c844d': 1.7110149521649698, - '0x249d2f99916808a5610b023b1164f0954a9b5a38': 35.76955926859333, - '0x250862a67ed3594c4644af8ca65a789dc6f917a5': 1.0795689579136118, - '0x25663b9af136c6558be4d0a3916a8edc112f569c': 1.4948380207877683, - '0x25e7601ba5fec254e0834008cf40594edfd08b0f': 14.365636680833738, - '0x26828533326d255cddb3bb44d5d696608a53da0e': 35.646144836770205, - '0x2698b3032b055374dee1ecdb6da2dfeb2c036606': 10.35786854074439, - '0x269f7009c138b5374f024eb11f093979f3400e2d': 0.10876390923496983, - '0x26eb3428cc068f88c10ed1c49717ae79c4098780': 33.90238574445081, - '0x277a340e58554fe5605737c6200dffcb6d03c20c': 31.95086979475625, - '0x27a69ffba1e939ddcfecc8c7e0f967b872bac65c': 8.637080607472067, - '0x27b3f6eb45c17a763ee1b37068da3ec804d770e4': 0.5149449525487897, - '0x27baabffb51d4f5c8f0598f66fc76b698768fa74': 5.337186215501761, - '0x27bd34986d05911d6cacf1d71cab6e154986e4d5': 0.07136794507711554, - '0x2872f2fa141f640c5793bccb3888e4c040ab7585': 3.085098681688199, - '0x28f0f0c9a097550b7cbe2da30804b5a90496eb1c': 2.8516915869416164, - '0x291396f7e2027a0c15b63ca9ba955032549aec80': 0.7155824755881768, - '0x293489401b96ae1caff8b54cea5db5eeb941bf0d': 0.6420714977885389, - '0x29a5965482b072dd4be97e2028c2277fbebc2b57': 35.69706364443874, - '0x29fbb5d4d71395e7aa37b7948c8f713c3df18e73': 3.106035858108586, - '0x2a2b7015c8b308aa45cb4d6a5fee46770d92ce1a': 0.07541694854107023, - '0x2a724fa5e6e38322c6aea935ce008bfef70c982f': 5.780202991249635, - '0x2aee4cc645fa60221c92a7ef69bc1a9a66fbc8f6': 3.714605058502047, - '0x2b162c0d37b69bcdca024332c121494da303daa9': 71.29236455264, - '0x2b2971447d1965122e98146f3b73d8ac47b14244': 5.103230696589574, - '0x2b92376dc4f1cd3f7c07ecfc3579354b2f20abff': 0.19254294842821765, - '0x2ba6725d7fbabca3e8d933fd6614b887ea7cd018': 3.169954569435188, - '0x2bbb4d8fc7206f78ef0907e9b3afdaf363fe1eba': 3.5646144836770204, - '0x2bbbe985636b52f6dc3056c6aba9274d9495bb9b': 14.063965511261326, - '0x2c15192f19e08104e870c3ba7480b14fb3066171': 1.0432016119795118, - '0x2c1679992925a96671951d011f121c51fe308bdf': 3.899519198665632, - '0x2c36989e4499361635708d382519c51869a20410': 46.28793153829793, - '0x2c404c68088f767b16cc629bd2fbcd562f02b54c': 3.6524419355214284, - '0x2c8fafb96e27b2d24298b1d4391595de44b7d79b': 9.080019877121535, - '0x2ca8eb78a8a3d1f3875fce75159a7e83f1568813': 0.11429244216308906, - '0x2ce5fd87071cce587a7b637270171be191d5093d': 0.7129228967354041, - '0x2d212adbd6029f7fb4ea4b62aedf6c18d02eeb83': 37.65710371043217, - '0x2e72ef73bd7daead2110a66f5e45321033bee530': 2.8516915869416164, - '0x2fb8fc11bb3245bd6d066817802382e95379e7c3': 7.169906258890842, - '0x2fcd5b84e04ea940afff17173e67ec64376e1dfc': 0.1681092084614632, - '0x2fe5f217f9ba3caf99ca1d81707f2c8fdb262d44': 2.8516915869416164, - '0x307aa7f66c8ace2a7c155a540115a88a2a1f1f64': 0.9743374791988496, - '0x30af7f51953e238c08b09db08633d3f687560341': 3.862273210383043, - '0x3134a2b526845947fde17d0a1e0d2b07cf1bde72': 1.3299942330056382, - '0x313c78bd73bd3356e60ec76af9c15c5ca33f669c': 2.8516915869416164, - '0x3147ca5b0ce270ea0290234979c3fd7e37144901': 0.104327271351561, - '0x31b47a0b0a98d0bb7524985577ec605e5a2a99d5': 7.129228967354041, - '0x31b5168daf15de3ea9565b2b919c53a437cd33ac': 0.7129228967354041, - '0x3216d6f79ec9987e3c41d8a7afe3ba1378c76285': 1.9858016738178315, - '0x327f2ffda9c150b1379e1b4e142f6abbda3024b9': 2.8516915869416164, - '0x32c2a84fd528fc5f84014ca91c94464b7021dd47': 2.8516915869416164, - '0x32e549899a9e0b1bee0b905a8d2efab071084cc9': 2.8516915869416164, - '0x32fd77c54a807516649237a2da5101d1d6f819c9': 3.5646144836770204, - '0x3345deb0e8552220eab98763309bce486efafecf': 0.10225725872339451, - '0x33574f0150f480ba63e4da98b6d1c4ccbfb88334': 30.034871762092767, - '0x337976d68b467a5c9617593fbf9acb5a01d76844': 0.42775373804124245, - '0x337df4dad96407f3bc5838d0e73ab18ee4fc82fc': 17.33738673894924, - '0x34244790665c5d6d03673a0cb6dc04e708d7f2fc': 7.1700277725905375, - '0x343b0e953ca65cee44894283f57306500fc22c8c': 0.9806540475306088, - '0x3447f584f3352aad621468400b9098b7111feea4': 108.64117435433712, - '0x3463a29b8030dc39883802e4218ff2a3486f9503': 0.7512845585996845, - '0x3476cd44726af19f50b0780a5ce21dcbb133f324': 2.8516915869416164, - '0x34830efc2b60fbaf0ce6e6c7b6874f2e58b01385': 101.75141010678836, - '0x34a13a9b5547c310999960d53f2d2b81b00ef0e5': 10.233414537394523, - '0x34d113d0d5428ec7cd86f3aec46e33701ff347dc': 1.2698639708635324, - '0x3694d711dfb950e38afcdaddeedc79575c16e015': 1.8536048149433861, - '0x386019b327196b50159e637fd3dd52bf9262486f': 0.14258457934708083, - '0x38d6aa74830b90152be2f2307f174b56de6dae51': 4.129949827046069, - '0x399688426230f20cba14e3710f9087a4dd644ab7': 0.35646144836770205, - '0x39d24ec21761ae69ba51b8cdac7d61c721088774': 0.3023247342910855, - '0x39ec78441269fc5245bc73688e32bdb9bd2aba19': 70.78023160331779, - '0x3a49d005e5162855ed782e2a88fe1bc2c3be0829': 3.5646144836770204, - '0x3b0f627e5051c40cf2787c9cd954e40a3d44e753': 2.8516915869416164, - '0x3b9bf2738c4818e0d0a32afeb86a57dd8ee75bf4': 15.194569226145353, - '0x3bbd15dca4fa0ec70df328381ea03ef6c691c3d4': 44.25986808103248, - '0x3bcc607b486cb96ce1e4badfa0c12ac5baf8dfd9': 5.951642153162376, - '0x3be03906cb1f68494be2aec706c66bc95f0d2ae3': 5.535353743547044, - '0x3be8cc8f2481de7c7d39088329d1a28c38737bfd': 15.990006669067332, - '0x3c2404a59340e0542542a45c23f932af126e67ac': 43.0092119018539, - '0x3c30765cae26cc563411e08f3084387bdd557e74': 0.10174626884045734, - '0x3cdc6f91d41f1738e8e1cbd2a06f64dc6da5b0c0': 13.547533869929294, - '0x3cf7d336b496730e8c90a9880a0fc0702c15fc09': 2.8516915869416164, - '0x3cfcb7285f685a46079abf3ccadfbb8190bcf49a': 5.265820782131995, - '0x3d27ac860065e1106d876d0c61d2a56725a54ffe': 5.834469283355591, - '0x3daa621c29e52cd44248be1398fa6c3af713cc00': 2.8516915869416164, - '0x3eb8b2be69ef8c409d54cf3afab74a41009ef323': 12.288411574754278, - '0x3ece982cf573c53b383cb95bdc29a2781b7d5a83': 31.64843392392799, - '0x3f154c00c3a98087908b9e810c795cee4e6db64b': 57.04255459785386, - '0x3fd86f868aa096d976396e192f37a23f27f22b5e': 0.7129228967354041, - '0x3fe1b920cc74dbb56bad69ddf016ac9957be7c5c': 1.8012179362200675, - '0x4006b2828b597cf6085acccea06ce10ddbabd7f1': 2.8516915869416164, - '0x401918351b997816f802db30de7b4a21518a79b9': 1.2857762510979316, - '0x40333e612339aade0f824009b40208b9badf55dd': 260.961879681435, - '0x40425480630f9c63fd326872aea78d00451abfa0': 6514.6915052771, - '0x40ac62d5aa80ceddab0de954c29bd62c75d514d2': 2.7246766592251084, - '0x4176e4a8b1fa998da1f18440a312d434f8bf1a5f': 0.14258457934708083, - '0x417f07daabcb952b982261670e1a401800ee3c4b': 10.786649679725791, - '0x41c2caf5145d2ff9ddd5acd890bb18a8f55a4adb': 7.178658158533267, - '0x42c8532935471193badc66195f1e7062f118afb7': 0.10107868593843786, - '0x42dd7de577fb5caf3e41135c71c8f535f9995b27': 39.366209959560976, - '0x42e38d11a3b04c70af09fb0548a70f12807d4645': 3.4694490265186024, - '0x42e6c4051e7f4f509c42fd48cbe3fbf4d81a829b': 12.119689244501869, - '0x430542b222cf5018e95f1bf8527794f25cab075f': 9.751121111163908, - '0x4348279588bbff29574c01461b976892f5249268': 2.8516915869416164, - '0x43ae4f2a78770c95a2826315a676918a0b6bcaa3': 6.006058597582305, - '0x43f24bb977311a100efb20ac70ffc08960fa3421': 21.610377650509122, - '0x43fe5b2079036116adc0b5f0aaec1cebc1a1fa08': 52.00179667602602, - '0x44572e3acf92f55ff70fb5833f9229b715cda4cd': 2.8516915869416164, - '0x447111242f55fcd3e4ff5eb99bdb37cebc8cc0f7': 2.8516915869416164, - '0x447d0bdcec7ddc8acdff5bbf61034ad7d259795c': 1.6902243170369855, - '0x45424a2e4130c099bf58717328521823ee6892a9': 0.6876974350483792, - '0x45817906afb3373ae786af259cd5139dbf9df4ab': 2.8516915869416164, - '0x45a4495ae308436c86f9e99dd61659eaa6773a65': 5.703383173883233, - '0x45db097692e7f90a3ccc1cce95b0fc3b39758f85': 10.038586523796672, - '0x465f302c87d19fad8d0f3c5156ecfbee2b97d342': 23.838279987317527, - '0x46aa04699cd31f6714163bce110c664881c7b39d': 41.609971483077494, - '0x475541f588cee2537d8f71eb591641241029b249': 0.6611024881061979, - '0x478a221ffee846e890396a1fa3c856647babd408': 11.454627102194554, - '0x47c384c415f87a59c587aef3ddce0ed46c46b63c': 2.8516915869416164, - '0x484cf83d33551f2abad064006a97aad734ee9b85': 33.55215718855885, - '0x48668c452bf11d536ce5bae22746983e54218fd6': 7.1566956421320524, - '0x48acba02922198a765d24f8625d7a6b9d711fe5e': 2.8516915869416164, - '0x48d3ba3e63330d0f3a882b14e94a07b7c2cb9e1b': 2.8516915869416164, - '0x493d2d58aa7a9e0700b8d0471389e368729cedf9': 2.8516915869416164, - '0x497f5e5b868cdf63bb07b1372b7fc0ecea293deb': 2.003249240137475, - '0x49a5492fdfe5acc966dd5f41310dfdfe8daa349c': 1.977364924667128, - '0x4a23b9aa94faf2634ab81dedfb3cbc2eab296f61': 0.3400646482993137, - '0x4ab843de3ea5899090648ec7f8ef96cb82cff38f': 36.725199319426, - '0x4ae8b5d94101c0b58cf351c6477d9dff916959d5': 0.7115551975750217, - '0x4b5e86738576feb0587e807ee169979a311d9896': 0.35646144836770205, - '0x4b6d4e870c88bfccf4dfdeab222ad709a9115cb2': 38.4685051144214, - '0x4b72c9c525883395d90b9b5979da7b74d9332904': 8.385206435290296, - '0x4b8b0f5db94c31892a8a5d8cd568acaab8a80d15': 2.8516915869416164, - '0x4b97b8e54f5dad36b02f557f3e6b974da9e89241': 122.69230378204566, - '0x4bf5b1cb35528cfab57fe4794548b2d8a79303ab': 2.0819642409921593, - '0x4c16720ab90708330f441ea65cb7859245025d81': 38.88618882385333, - '0x4c3ca99ee80875df854a95f7b23131c50cd66520': 2.8516915869416164, - '0x4c9e859b98e3ce55b522325041f896ae9770ce72': 0.2049402411375891, - '0x4cc1090cf9dd0dccf3f19c7b0af77ccd42c22176': 2.8516915869416164, - '0x4cf2b3cc56db65e90245c7962a099f586322bc96': 2.184395755597277, - '0x4d00af255c2886da69287c6fadf059ac874e1933': 3.3596245281131365, - '0x4d42dce280bd00548594b5b04d98e6e19947dd08': 2.8516915869416164, - '0x4daf1f3e75d724ee09871a8464dc67e294997c53': 15.680074613356025, - '0x4dbbe328ba0cb08997ffcfaf351c4d4344747165': 0.35646144836770205, - '0x4df5eab795e7ecb93d81aea7ccddcee13211e99b': 0.14824276571476663, - '0x4df81782ab31f2799e75cff434625ac6314f4e67': 0.7354371297496268, - '0x4e82121a933242081fe6a8387bfe2d238227a695': 1.1176499661660273, - '0x4eb701475303495e19018e91d9d31796c3f5d83f': 3.6125532753302565, - '0x506cc4485a7fd42fea6f2acc97d7de697b88419d': 0.9772228454157732, - '0x510a5053c7ceb19bc833b1525f75895e1f07bdff': 2.8516915869416164, - '0x514960472a42a3140f046db815bd0b484c4f02da': 2.8516915869416164, - '0x5195c443be00eaacbf2b25da7a4911eeded3b741': 6.436675296239649, - '0x52070bb9ff835f77d5304ae59a354321f3875b9e': 1.721416300637006, - '0x52b8188d823b9c5a2e42b8c3f16e207c68dd853e': 0.14611103052831112, - '0x52b942410dac4a39cc8689d9bb2c3a4a4b028341': 0.4572309017331712, - '0x52f27e57fcbc568c0447f03a4eb18bae5522c691': 61.01075608728893, - '0x5352f31737be2ca2562f04945dd7fb88652b0039': 10.02173995211712, - '0x53537bbce395fe29ca5bcaca6a573f43cfa4de0a': 2.8516915869416164, - '0x53d8b37522b3e5a24767fb82fd6f7b12406631e3': 36.356984519893, - '0x53e5ffa1aba19a774df82b235b9eedf06c82057e': 7.842151864089445, - '0x53feaefeae8d84f96e38489b2d195f00691f99af': 0.3376769016915247, - '0x541d520426563449b359e6252252d6b16b754de5': 2.8516915869416164, - '0x5455faf3ed437335eae10b7847d4cca8d3c7b7e2': 0.07295214662117497, - '0x5463186f3615fd54e289813b5ee0c35b244ca46a': 0.6455903489428152, - '0x54af6859c8537634e77b569df67577828e88a486': 26.281297593085295, - '0x54bd59bfb158d83feaf77f7340e72ebb7b3fb543': 0.19024086351047134, - '0x5544dc156a84e7f07469e8c16aeea6398db9d485': 2.8516915869416164, - '0x554c4402a7671ff959e7312e9a2bc8ada0fb22c7': 0.1903110248002442, - '0x5582dd0de52ff5410946460d897b9efaa79dc4dd': 1.1133736304746469, - '0x56133df64c9ced418d30d7f1cb40632e4a02e74b': 0.08892495349299838, - '0x563abee70f1b59f018503021cb26ea4e82e56c03': 0.41783569293107525, - '0x5645e0da624bc36af67d6702ce18899667cd1b0a': 3.915765460778531, - '0x564fe76ba3544c70b91ab03609a7757648d562f5': 0.42511947185716964, - '0x573042eaadd869f1b60aacacbef6c12c8e2228ad': 16.333460628886748, - '0x573f78947c5d05b6a47c3d10b5359a283f269ce1': 14.74095729073284, - '0x5790301769048eecca5976541d33a1c7d0826e35': 3.5979657319442744, - '0x57c191389cb4cf776830564e35d2ce3c5b744531': 40.91795347535768, - '0x57d39d887bb98db39957a1564c76ce65f69e09da': 0.961619119537104, - '0x57f6bcbd0ed3128d1d9b30630c775605d4a420e7': 2.8516915869416164, - '0x585ae605dd802c3dce3403b5c306941f77a794b4': 6.578388024183136, - '0x587b2523cd96c134e248667ef0219b51e5f05166': 31.775332142198177, - '0x589ea336092184d9ed74b8263c4eeca73ed0ce7a': 9.506113597891137, - '0x58b9ca547bade96ffc1b12cd4813187bbdf6bc61': 119.37175100614063, - '0x58e3a6f1b8e94ae1b93c8eceb6481060eaa4d706': 4.053765217450296, - '0x59207cfeda73d3b9cb297d187446c7189d8e2bdc': 312.3585495698575, - '0x594480bb13cb30185f2b7198aedce7e3beda91cb': 18.14815173682775, - '0x5992463fbfb0364176e2236c447d55be6939d5b2': 2.8516915869416164, - '0x59a5e379ebdafb57b0fe5cc9b3167198b171cdae': 2.8516915869416164, - '0x59adfc9d511a3709c098a1a2858a40ff42e7fd57': 2.5193967003484485, - '0x5a47666bd56f706079a12d757566c484ccc7c13b': 2.8516915869416164, - '0x5a65341fd7d8c78fa5a8d9255627f6f7e60699a6': 2.8516915869416164, - '0x5a756d9c7caa740e0342f755fa8ad32e6f83726b': 2.9859261137270225, - '0x5afa98e73465bdeb404276576651dadc5db21cdf': 2.8516915869416164, - '0x5b18d0bf4ded65bfb43ca2b4922b50a5e1622222': 2.8516915869416164, - '0x5b78f06123ee99dc8b21d4e1ef51afe08059d5ec': 4.712469264303546, - '0x5c80d8c179b172eca8afd3e8ce086462cd3aeea9': 0.13430091400327207, - '0x5c8d5f018eafa10912db4d85025d935c1186a497': 6.718497191328808, - '0x5c98a3da27c087dd981089c9af30ffa234ae0679': 2.8516915869416164, - '0x5ca12484073a163a4676a5cd677c0fb78079e880': 2.8516915869416164, - '0x5ce0f9561ed16dde75f34b27e8642afd358c5930': 37.23420232792244, - '0x5ce9f6b0a09d8872f852464a77a9169971d11704': 52.359671254891694, - '0x5cf22756cabdd4bd8df9cf38c8b9e74ee5430d03': 13.445933394501564, - '0x5cff5d1ecd2808013cdb94e8b0dd5a965cb6a656': 55.101790435521, - '0x5d1d6b76e3f07e87799ffa9b0cb073569d7dcdf9': 2.8641211336844936, - '0x5d1eb292ddcb16ef63f4e21a1784cf30fe5dfc27': 17.521097847967162, - '0x5e057960ccdd59eac87252353b2a0892b0966562': 1.767369879426977, - '0x5ea1b42b4360409ead820dae8aa0ce96fcf36334': 0.6211315935486064, - '0x5ed27cb91a658cdf50b3b16f589340e6f58676bb': 38.23441252384175, - '0x5ef28cf02374a99c35e4c62056e236fb9f35620f': 2.8516915869416164, - '0x5ef3b8ddbe7deacf89d561ad734a55f01745307e': 2.8516915869416164, - '0x5f45bdf46d2099380ceb221e2e41a3704523f048': 0.2357042976088536, - '0x5f67abe0a2a673536e5a57af8e00b28f289f419e': 2038.6361347439379, - '0x5f6aa3fdbd4b16fb6fa26c843d757ecb32ec04c9': 2.8516915869416164, - '0x5f9aa64ac50b89810a8d70cc88cfbcf75c47529f': 60.46282122596798, - '0x607bba0ec038cd4717bc4cd28cf01daa16771c7d': 21.510726545622063, - '0x616695cdb8d782ee6673d0a45ecb6bb56e5ab25d': 2.8516915869416164, - '0x61b1ace74308654a8e600fc3d8b90be8c0bbeba0': 1.2832612141237274, - '0x61c69757da005a066f411aaaaefcb13ca2cd1655': 1.3978502068813607, - '0x6214e263a0181793c203970b79cd1ba8091bd280': 59.39008039754665, - '0x6242b7feb86abbde106144c2a24bcf0cb1154803': 2.2971479087656386, - '0x62efdf7503fdbd493b7ce08899fa9820ec1310f6': 16.097782861730405, - '0x62ff035d44785829693164694737da0e56926150': 1.2832612141237274, - '0x630afbf1fce0581d0140b4857b9423e18d33101c': 2.8516915869416164, - '0x6359b350ace096b5d9979161be666c93575c796f': 0.6093925891927912, - '0x636f79207a4e72bdc401de5618d88d1a46d5cf79': 0.8375970364418425, - '0x63def4c1f182b45ea7f50b36c9746e14cc4327e2': 100.60073560973531, - '0x63f1be2154303d2b783ef6a101d12026a6ef00bc': 0.4504519628636772, - '0x64766f7fb8ccc99c5fdba54e2e968d1d244b83be': 64.97983949713378, - '0x648eb9128c9a6a60c3260155b030b8d078b42881': 2.0529413132371106, - '0x652c17b2a1ce494df75b7c89baec985cb9994d18': 4.820615978035064, - '0x6556cf38bc47be2475a191de845f617b03aa0a73': 7.129228967354041, - '0x6557328a68965238935c1754a27d98e93deb4343': 0.09911319884223843, - '0x65848fe93eb9b05f6ddc896ead1150db5331e425': 2.8516915869416164, - '0x65ab19584d22723c2c742d74637e1904c11373ce': 2.8516915869416164, - '0x65cbbc0bbc90a48347b7066e67ad184a914c748e': 51.86617479530268, - '0x65cebe9e334255d9a79b576cbdfad2d5805d6624': 2.8516915869416164, - '0x6601ed537a6ee9499f12195642298214398b336c': 2.8516915869416164, - '0x6603772ff77034066ef21a59b2fafe4ee489b974': 1.8249435799781755, - '0x6677fe9d450945a2d33df6662135ade3c874837f': 2.423937848900374, - '0x668fb2f38e41fe00f8eb47fae8d048aefa189ec0': 148.14107386549776, - '0x66907de460905cb2fc07d10e2c0031d610247684': 2.8516915869416164, - '0x669820e542ecb772abbd3c1cfe1fe32ef4dcb365': 2.8516915869416164, - '0x66eab3ea4d9e41fce799b7ea1b123d53fe418d04': 36.781610133350156, - '0x66ec9f8eff153333b81be559c2cbc98e2a303370': 0.7366843670560634, - '0x66f6924a28086d7719c642fbc0eb2e57558d01e6': 2.8516915869416164, - '0x67627d5043943b2c8f0ef11ba54955ca3339539c': 2.4505463000466614, - '0x677903e6f91ae0a320639afe48384d07cd458770': 0.13115960554573727, - '0x67b24a1cb7e8860fed91357ebd1af7a445a366e5': 0.4271241950167619, - '0x684f87bbba7a4ae4dedaa3094ee4e0269bd37327': 12.052608454764734, - '0x6883f05751aae6de026163a0cddda17070a61de1': 7.917789949613425, - '0x68882cc879f215d0fc862d0e304d6f27676fd327': 1203.0573882409944, - '0x68e399512b8bfacb9644769c8763454afe2e9d84': 0.2515150515922232, - '0x696b528a13185af83e05fb512ee9687f49368409': 0.11111199709134359, - '0x69729918d2645a93477e1f29000d39b6e658f034': 2.8516915869416164, - '0x69d7fc18a4d682d8566930da5714fa6617d53de1': 0.34389414539017843, - '0x6b1037d21c55162c4a2d348e77cb294fd51cde36': 2.8516915869416164, - '0x6b66b2e4d6e071f804220340d719c6d285c5ac8d': 2.8516915869416164, - '0x6bf7550bf182b8428e2cf4fc640ed884ff8c7a57': 6.866955793120481, - '0x6c98d6f8db9745681e87a3a3766b9f5bc7fcca25': 0.7129228967354041, - '0x6ce7b4955d7cdd7760243af73f6f0b54a49d730f': 10.424100664022424, - '0x6cf51fdef74d02296017a1129086ee9c3477dc01': 13.876623132396109, - '0x6d5beb66b781137658f8a8ef5994dc4ae41ff2af': 1.333785425401042, - '0x6daf13aab3eae078ef9517899f2f683144ae7d52': 5.703383173883233, - '0x6dbfc2a62df38298e18df5ca4d4cfbea5a761213': 56.884757462091116, - '0x6e3e4725252eb256026fe930cc4a9cbe1a5b7784': 2.2737176441542957, - '0x6e9eef4bfb79d7d5c41b6b7d1b3e0053e004b614': 1.198644111379059, - '0x6f03a2d5eb06d583fda7ce5947ae563af7561a50': 2.8516915869416164, - '0x6f16224bf1ed50a1a9e146339bf10d7f19367d80': 0.24353799125231526, - '0x6f2b45488a285936e5dc27a7549d6a2492c4a2b6': 37.388320171819636, - '0x6f324fed875745bbc5116e549262244bbc216033': 3.0172801477986204, - '0x6f69286d7c51de0f0cf5f3c03c8ca3eda8a322f9': 0.14258457934708083, - '0x6f75a24edcd085e4fbe83bcf83aac4c88a793e20': 159.19696957309537, - '0x6fb848d5bf8ce669da92d7d44ba6455bd35eabcf': 0.21387686902062122, - '0x6fe35a0299a3c7ff4a85393cabc895210c1b5f37': 32.081530353093186, - '0x6fe5bca431ec3a996cb2198051c596ab033f04d5': 2.780399297268076, - '0x7041a3916b6ae8a068ada901189da01c61c19e92': 6.960509466845529, - '0x704b9aef9db248b9edd729245466b614c2a90750': 0.43183265832334833, - '0x707ef49d32acaec3b66b6f6d44a83669d3cb0ae7': 59.779708434620375, - '0x70e13b0a059e1f3f6097a9858fa14fa6bb45fd6d': 11.045450579597455, - '0x7181a112871e56fc5f5ef9202e0218f51ab9f772': 2.8516915869416164, - '0x720dff3dba56b8e2713e8c71f50f210b732a05f8': 5.6962539449158776, - '0x7244cfa8b5c7cc4b500f486b5603f9e522dc2b7d': 1.170560885645936, - '0x72f422435a18fbe535979e3754c4a65b7708fa84': 11.36632543180028, - '0x73f785641302d9c725fb3eca67c0b45f1ad21c8b': 2.8516915869416164, - '0x73f9036bcc116bc067b00605108894f1cd27bd1a': 3.5646144836770204, - '0x740bce223349b68b9c0ef9164eea85b924e9630b': 2.8516915869416164, - '0x75a83d35dd8339fdf128cfa67c1e1ab9ba24ad75': 2.8516915869416164, - '0x75aaa4ffc3d1b17bb4bbd1b2f74d3686c55d44f1': 2.8516915869416164, - '0x760497bffaed0850eb7db38b5a28abc3b1c656e7': 185.71641459957277, - '0x76286bfd9fe1df9388c9ac529fd4cb9e5a5152e6': 0.19016792254893602, - '0x7635b2ff264c47c27b34af18bc17b22e010f7571': 3.2449736221926258, - '0x767830d313d39f4b30449cfaf893b20c6e2330b1': 1.5273998197732759, - '0x76bbb22230c7b130302ad8bb7bae891bced6cb8a': 0.35643593468605894, - '0x76bc2fdd1a8fd2c40422e4fcfe48cf4d31db8bec': 25.73277263345923, - '0x78102bc1c65d5a82b4d8cbc8f8773cb4afaf220a': 10.590879516134523, - '0x78191a55faf0642167fc1f569527e7239909a7f9': 7.548044090818589, - '0x783c602761e7e5c4e7119e9a60d0c75cbbcd5e5b': 216.56446001519222, - '0x7843619c8e22640bef85370e4cd7779603f3bbd4': 0.21797726385426458, - '0x7951baf427c2729a9e54766243b544c0cdbccb3b': 0.7842151864089445, - '0x79e9a4606176715455718f177976f5846f9bd263': 45.88251964222971, - '0x79f1d64a18008652fca2a97bb59807e14d82cb4c': 12.468773960853436, - '0x7a3873ff2d890d856e1f255f844fae2835b1b9ca': 2.8516915869416164, - '0x7a49f5bff8cbdd72883f3107f9624dd2ad54e696': 5.2954271634340015, - '0x7ad44b5483987e482a6400f2250eb742aa20f6bb': 8.65570421172723, - '0x7b24314e00c9cb15e0b67969c3cf5ab8329a8599': 0.32652604901739096, - '0x7b96ac7af2b2e5f1e4d94a44fe70d59803cf217f': 2.604305502504936, - '0x7bbb0b014d843a0bab3f6e19a292dc2eb92dac03': 2.8516915869416164, - '0x7bc37a7afd66bc92a25979ae20fa0d197d027a5d': 3.5047859292862817, - '0x7c35bb6762dbdbb8731140d72142f603db99ceea': 0.29547788128230407, - '0x7c7d1c027cc0c87a3c0a9dc5dd01182a1e325d7f': 0.3381640678102975, - '0x7c9d488c043c24f7c2a9dce2d88ff02cf8241dec': 7.508389729848575, - '0x7d3bf2cb39f5ceeeca91ecc8201dc01616ad089f': 0.14258457934708083, - '0x7dc99437246fd2c6259cbda1cd94f218f8fb904b': 6.059844622250934, - '0x7e0e2554dcd5d3255c0c141e5ac697636ce6789c': 2.8516915869416164, - '0x7e329fe5221ec0485d2ef2961429e37e7dc960ec': 4.433703502810183, - '0x7e50ddae009dd0fc26c0a6e6823b0aa26db55c31': 39.23646969077393, - '0x7e89d66ffdd66d85adfc2feffc8f65805b7a626d': 356.5002020074115, - '0x7e90938597972b7a175217111ad21219b0c26bf5': 2.0362810247202483, - '0x7e9db8db8b6e8967127092afa28b59ccc5b50417': 2.8516915869416164, - '0x7f0e39f407d6b75eb9c22e5cc1c5aeb93b9d6836': 3.4282366583790838, - '0x7fbfb3d9c5fb76d4a1f7a2249af12bd12e323142': 1.4258457934708082, - '0x7fd3cdc63cf777cb2fba5ebd9c552363fc46b7bb': 5.5412184555833, - '0x8017c7e6cfc982e07bd17592d7c25a2339fc05c9': 3.5646144836770204, - '0x80d5e3593eed4c60bbf5b7f76ad06663cfd87556': 10.037844692115554, - '0x814fc9298548a68562c254d04aa9175aa7bb822a': 1.2653162477851867, - '0x81681e8d17d4f1d08dda5f5d87d0d792fae2a3b1': 18.683405697322648, - '0x81ddba74daa0b03227a962c149628a8494068451': 2.8516915869416164, - '0x81e6614fd977fe5da99cc9c871024c9c0471c929': 0.11358289159556471, - '0x8202e7d99de1118e045e9240ca1dba9f4a130a1a': 2.8516915869416164, - '0x82059552d4fa627490cffe2d0bd161127022eb5a': 35.643447589049636, - '0x826f2575de69937919df77f0c272376dfacd4511': 17.304709397972516, - '0x8271084c47eb082bbf06f34720b85b0c1f3c6c3d': 22.679043975711377, - '0x834159a808e89ead9233f96c3ddf117184005e13': 24.65643881904404, - '0x838e9be27b7dcacfa40c9149a98f35361d47070d': 10.308865086793942, - '0x83abfc41d681553687bd0dace49a57b71270ab27': 28.952150911746635, - '0x83b285e802d76055169b1c5e3bf21702b85b89cb': 4997.92559833793, - '0x846d4aa0a9a2c9b6c3472ef23c97d4213c5f0d9f': 2.8516915869416164, - '0x84c22073ab3916d659a57f8d974473068b4b14e9': 2.0131636327354636, - '0x853d709885ec169187e77a545f1460a61f757e07': 81.75536921879294, - '0x85850720eca466990ffa18a12e7b63f57cf6c5ff': 1.6600318711148412, - '0x85f85ff6a7be662ca1c8e5dda485b082edb37bb0': 19.849593382488894, - '0x8600b41474a9d410fdf11cc543084c84a80a430d': 0.5092306405252887, - '0x8613d0eca789a26c41624c1fc50a0745af5800cf': 5.60515626345546, - '0x8635690923ea3fa32ccc796b7d2505604b6fe621': 47.44436191133535, - '0x8677dd76dc9808c2bff28ca32303d0e45229b291': 0.8860862293045987, - '0x867d6935b624c695319d701e7342b4c3b6e5cdb9': 2.797106952865389, - '0x86dbd383c02de10770c9bf3b0deb54ac5f1d4517': 0.21387686902062122, - '0x86ea7258705cb00a5662890655467ab3f2fed323': 28.516915869416163, - '0x86ecee4a88a46db75b3f8658e5ed49335331b106': 67.72767518986339, - '0x873dcfc3a413aa93617447f469e554698207cf57': 0.0802816071639272, - '0x876d41b83cbc2db1054fbcd0e0bcde88d5f99c7c': 2.8516915869416164, - '0x877efbbcea950a7c7f02606f49132c5978ac7314': 2.8516915869416164, - '0x879ff4eb0a7c695006cbedfcb25ab914c0a5293f': 2.8516915869416164, - '0x8815a4a9413c27430be5966f9d595811b5bd2e37': 1.9769198622699136, - '0x88194bb04d3ff63b5d542004a481798c17ffed6a': 2.8516915869416164, - '0x886d5186be0255ed4b7dacb4c493af6f8cd1ed04': 4.460952785086731, - '0x88a84b4031c85975d2cf46f1bc48b3daa74e131a': 2.8516915869416164, - '0x88bd0b4026af3bc601fff74ed4798b0388406310': 0.21443438450974628, - '0x88dc59e6c1f9563fd4bb6919ea96092ae9a72760': 19.084707373912792, - '0x88ff9a130ff500ec04a9a2c93f3cec4a3d4e96d0': 50.0361424144521, - '0x894d75da0c3f50ffe7da1f4d77d11edbcde2c008': 58.45967753230313, - '0x896e2b364488951157b2e929a4595afb94493112': 2.8516915869416164, - '0x89ac06a8ccade27e29b754d0ae1ebe5650c2cd9b': 2.8516915869416164, - '0x89b98139a3d58ed05964007b658104ad10fb4cc0': 2.8516915869416164, - '0x89c2021f1bc673672e705deecca965d8c4d15a33': 2.8516915869416164, - '0x89efbd82b0b2a249d4c4e7f36965d0d1611edcbd': 5.703383173883233, - '0x8a5634c797fbb451468f5682bdb77979cd5871c0': 5.703383173883233, - '0x8a854a22affe9139d26909749b2e209ef53fdb09': 45.27060394269816, - '0x8b3f14f0582fbf275be87d265c931b4dfd5f13b7': 5.122157223974385, - '0x8b6b8bd80836e7c2982207f3f6f3c69c7b1638b1': 3.0396114635143787, - '0x8c5b56c9475c4bf22a7892d1fb7bd773a64d2c4e': 2.8516915869416164, - '0x8c651cc6cc07abe69f14b776eaefeb5c40172894': 464.3216734710131, - '0x8c9abb2514f0fc95610733a0c4eb23194fe05206': 1.0825691967923612, - '0x8d0a5c09f194051fc7a32aada29d335dccadc5c3': 2.8516915869416164, - '0x8d106c747cd21272d4c9ff0af8d53a9c9aca25d2': 1.7823072418385102, - '0x8d7738cc912d4dc6d1f8e1879433b6cb078dbc7f': 0.14258457934708083, - '0x8dc9dcc98f857d7f17ed15095d27f0fe7d14b33c': 0.17239800708890482, - '0x8ddc49240a5be3bb32064130e6bda23a0bac1275': 2.8516915869416164, - '0x8df5ce5c62535fc2f431f9e2528809db33293b25': 29.195955439804752, - '0x8e2935b1965eec0a2c4619c65f286eb7b10e2a35': 1.7313841777859813, - '0x8e2b23d32ce46d61bad5cb8ce1cc8de811866f15': 9.679633424422239, - '0x8e970324677451dc4e06fcdcc70e677d55ff351a': 21.465038526432327, - '0x8edf50447bb83eb7ebce46e093dd195578a3f1fb': 13.422767544448488, - '0x8ee31c87d0e2e15a254237877cf03f9b5f813fc3': 0.7129228967354041, - '0x8ee5451cbadfb5fefd1f68fafe8e297d5f0ad906': 5.703383173883233, - '0x8f20156b17b7030b4fc73567c1e1f65cbccccd0c': 2.8516915869416164, - '0x8f27e0b90afd9e5385fa7373a742a81b4950d03b': 5.632090884209692, - '0x903814b9b6d8ba22ff78b0f814d82a8992e35b48': 18.575244877028318, - '0x90acd8833171dd2a6b32922613e6075f482d7c6e': 0.7129228967354041, - '0x9100ffdf05ea6898002caf643d3bd0433abc1d15': 7.2511883347364465, - '0x9110251f2d716000471a35895808e0ea1c48c57a': 2.8516915869416164, - '0x9175a64882d239cd35d88aef071e1657c6e03351': 2.000170927745094, - '0x939dcc61ca062115542bf7a367bc1f9900c68933': 0.7842151864089445, - '0x93a048873b60cd339c67199a4685002a468e61fb': 2.8516915869416164, - '0x940dbd89e5e2fa0f0a4ebfddea8e5aaa37d6c96a': 57.08325083741783, - '0x9413da1bc1797179e5d019a9420ceec44680a4bf': 206.46247089457302, - '0x942967cec3e1037539e657c7ff97541a5deb7a0c': 16.01319091333531, - '0x942d3170584e6c77f064049800e75926da5a9123': 0.4545191555341835, - '0x94a14774ffa8ac3122d2a57c2cc5886dd6288923': 101.81419679481733, - '0x94a8ec4903d74ace4f0f22226b85a833277ca0b1': 0.19038590724362378, - '0x94c14e04d54c8bbbee83c48b991763cd146a3571': 0.12730766013132216, - '0x952f0dd300faffb011185906cdab4d05f466899e': 0.5344283115526245, - '0x957a67915440287e2aa47479c5601e7c19c9b1cb': 0.2815264928652883, - '0x95b273c46fdbdf8fe5b91471ed35f59cf69eb743': 10.812950552278755, - '0x966382e204676e0138596d58ba3d1794ab9362bd': 0.35646144836770205, - '0x9697dc489953afc14fdd05d61377191272364858': 16.431580446337733, - '0x96d7f4b077451a9f4538ae95a417d75c9c4708d8': 2.567156583899621, - '0x976f21b8365a53c1391c5e5d0f5c1eccf7ce1c64': 2.8516915869416164, - '0x97786225a3db2787a823b670303df50a095ffdea': 0.3991809803381217, - '0x978060c0b17d74d27cb1a01f8bec225e5b846aa7': 1.4258457934708082, - '0x97e2e170acc64c24d4118e81e7f3f0c2fb334f0c': 1.5117491692304017, - '0x97e9a5a026f49de07bd61554a4df91371e6a3c00': 75.60964662010956, - '0x98000f240f63364e5849e32f9d14f1f5733ccb26': 17.131500190890698, - '0x982d1dc2e9550546636662dfe40af03d6cf0d28e': 0.07129228967637567, - '0x98b71f1c4469dcb5d4519ca1ea253c5220b48c11': 7.974210620537078, - '0x98db5a1eacecb7c0d829a71cbf6d91bf51e41177': 0.7068864497687949, - '0x98f9c022be4f2cc0e74c44d231b072a0c34d90ce': 0.30107189451094724, - '0x990a43fa665ce8b3d61b106c24094136da5878e2': 11.413322498340692, - '0x9914898b206d0346c7fbf1d1903c63f40f930794': 6.1816165327926536, - '0x997367082a07b06ec70e36a8e414ff3b2b3d6296': 2.8516915869416164, - '0x9a1636f2705acb3e357bd4be05f2b3152e22be82': 3.370232217609594, - '0x9ac3b7eaeb0f7b4070fb01717db00aba2f911152': 2.8516915869416164, - '0x9acfd360f5c39f2f174ec8b0eacb9d6f067cd07d': 6.95604190440494, - '0x9affca7181e70e26ac999abfc8b6ce6bf3c23177': 15.710631583954159, - '0x9b0b3aa80f6699f3ed33ec8f2bb96b2ad6d490a1': 7.129228967354041, - '0x9b16447db5a390c3e489611500267aa44a05a79c': 2.860741656471202, - '0x9b2289fb8c51225f849a2cdff118bfe0653f1620': 2.1387686902062124, - '0x9b3f4f5a062a8c3dab9ca674839b8f06aec5d869': 0.1429017829683432, - '0x9c585eab5e4fd38946fa1ad50a7c3bc32a4ff6fe': 0.93860212878127, - '0x9c7734276904b499e5c5dd99147c18c53c6333a3': 3.5646144836770204, - '0x9cc928dff6f29d4074c438053c21021eeab0863c': 19.06137181421466, - '0x9d9e4d5fe687b89446554baa161be85c7db56f1d': 2.8516915869416164, - '0x9dc94f95ebab6cd591d62e2d44663d739070545b': 1.5541719148831816, - '0x9dfb41f1b6c6c1cad13b50fe0674cb42a839836b': 2.8516915869416164, - '0x9dff7bfa952eb00460ccac6020e476fe026d5b57': 2.8516915869416164, - '0x9e363a6f110a0020443c500df742ecb08a5dfac9': 2.7226525426325083, - '0x9e7b74aa3cd1bedeea476578ad401bf43e31c932': 0.19680848428530062, - '0x9ec57fadee437af2714f56eb2a47b8a9ec05489f': 1.501564149975498, - '0x9ed5507070dc38fe1c8d64039f8aac5a9d720aff': 297.32188971016, - '0x9eed35cd5ac3be8ec8a121515db0a97e56ecc8ac': 0.10786609342131594, - '0x9f071bf429cb9e9ca10abfba7a793d387c388028': 20.675733268629592, - '0x9f909b6fd4439ca992dd05a9bd87e9b0cb0ccf88': 66.95695346530479, - '0x9fa6ba8ab60e882e7c7bb9268b8dfd2c6e388839': 4.3537896659518305, - '0x9fffab251fd02e4241c19765e167030a3f83dcd3': 56.21270425912759, - '0xa166713cb5aa9036a46eb39fff4baa83abc5befa': 20.19765452065411, - '0xa1764cf60178da523ce0aa22e05994579d7ef8ba': 2.8516915869416164, - '0xa1bdb727aff8f57f4081ffccf6818eaddd6d1246': 13.331658168952057, - '0xa1dcb6462883e886d75f24d9e5a8b5fd8f5ae1af': 3.0553838431517315, - '0xa22b5c2110255af9179f18216f4493abe8db4ac6': 24.83359049403247, - '0xa275cf5c9dbfec813d48342e26e1315d2e01d5d6': 2.8516915869416164, - '0xa27c28c7d4c82f5f31afaf7cc2e9d7ca70d3fc76': 0.2210584485143967, - '0xa2ca40dbe72028d3ac78b5250a8cb8c404e7fb8c': 37.59419311974845, - '0xa30305e3300faefcf76cf921fea11d0a73745fbc': 6.849940627234446, - '0xa310e5470cc646ee22cd60d29acb63c196034ef2': 0.19226062793095428, - '0xa3137308814e31ec03372a6b74eb0203b776af48': 5.097235529144099, - '0xa392a1832a3a8b66915a77a1b1f5525d80711b06': 7.47320311910058, - '0xa3cdad986765fb4d6dba35f960d094dafbc56ea2': 852.5042722900087, - '0xa43bd90cc34a840e3ded3c9886534197c36fec63': 26.696751571096847, - '0xa4499934efef4de2679d453fc80fbc2b3d2e8458': 0.23447484060771281, - '0xa45c26ed57c42f90bbf2c26297721266ce01e8a0': 2.6490195397328478, - '0xa480f325d9015dc8fff1b0724accaacaa0a8f95d': 1.4525886051982577, - '0xa57c927df5b836d203560a5b568af75831939eed': 52.5186594035699, - '0xa5a4f690f9eb5590b40300a5c4439c69ffca90de': 0.22588255283730999, - '0xa611dfd1349317000ad628d1665a2c0645bd9c51': 0.35646144836770205, - '0xa61c4d958c5a5c913df1d79603252cda2de1c5a3': 23.297301819587766, - '0xa625b2de93e1dd152aa0d56f601fb6fc4939d99c': 203.80489468615838, - '0xa6727194570d5fe6463dcfae3bf550748282c70a': 0.6110767686303463, - '0xa6a1539ac96d8917f70190379a4e6fa8a1ce7a50': 3.8607085421492515, - '0xa6b49397ce21bb62200e914f41bf371e5940bb41': 4.204145844380317, - '0xa71b5baf388788d83338204b93b0ff494360c0ba': 26.697205091487838, - '0xa75613421be58e27dc97a89531548d28447ec4d7': 3.8530639973652496, - '0xa80c05d726a57f009a9b9fd2569e150d33ea1ddc': 1036.9967730883984, - '0xa8172a3a34fdb1ef39ab4ebcfc8af096d7b583a4': 1.1312293568418195, - '0xa824c396ebe35d8ddef73288dcd1cf01d9a38dbe': 0.09499041094114673, - '0xa825c0390fbcabc53d1d6674fefdafb8d940e678': 0.14258457934708083, - '0xa85872abc64d6906d03af5fa6c5ea59a94a75354': 1.5760167153276659, - '0xa8fe4420e9adcc56a630f0a0c802f6e47c02c330': 91.56812496037652, - '0xa9be664123a531cb528de6e2345b170933c063e6': 0.9897127499388877, - '0xa9cdcbd04368414a81a226d5bb90d66cd71f1e8b': 13.548422143067235, - '0xaa8a7b9c3ab7214d82c6513c7c526bce66257d78': 0.8648091742778885, - '0xaaa79b08be3431ec2eba79af10e2e2270fc0874c': 0.35646144836770205, - '0xaabf7b396f3dfcc4ddbff29ed41c43159a2599c1': 0.14258457934708083, - '0xaad91a685943878a6bac26d22f6f9e034c031110': 2.581152855899793, - '0xab21658f0544db4044756045295da232d88d2d3a': 0.14258457934708083, - '0xabdcc9fc25e72ee0ce7bd58e1e4f16d4c44d350b': 10.74036012014488, - '0xac0656c83055743ded93600b67fd5296d9a9ec83': 1.2910798488986768, - '0xac0f3aec219453f35b755562e5d839bc3f07ec51': 1.4258457934708082, - '0xac5875d7b49b6df11b8e8488d26e20e4def0ef66': 0.24889760090119073, - '0xaccd9c334a6b73b934613586cdcc03bd709a3748': 1.6002704312470937, - '0xacd4db380851e823756ad0a34ec722a7925b0e73': 62.691682552572644, - '0xacea6782cb250b9deca215dcc8e3791d96cf5e12': 35.646144836770205, - '0xad108d7ab3a713e0cacea9166581e5ed39b72779': 146.84663087659138, - '0xada81adfabf01d3dc210478dd89cc45efa52beb6': 7.042169878588555, - '0xae96abf831107cb57635e74167d42c19fe9f83eb': 36.972898760389015, - '0xae9adfa9294d5b2b7c58aa717405a39a9d026d0f': 9.223302267111094, - '0xaebba0fb090e6a742e7c0e651f44c93f42946b08': 2.9294278968574, - '0xaeec0a1fd416b651cadf1ff0f622dabe6bb5d54d': 36.35383339343491, - '0xafc3072c3ceea8898b95cb0275ed191d9efa13ce': 2.8516915869416164, - '0xb012b817287c4088a0419ab916b76eec4be70bfe': 0.237668977591342, - '0xb01d8eaa4d192cbdc5eff21c588c0f2e32dd0348': 100.37102579412931, - '0xb05821d98471f46bdf67edf7bbdb70a2922cc99d': 37.16014688150621, - '0xb061749c5fc5d7056b84681066fc09ee5b43a120': 46.445174272280646, - '0xb0c36cdc1e9bff41049ed0f60270a19850bef1b3': 14.59948896182808, - '0xb0c709b50822aca38076f17e59b702188b62a583': 7.086476834757729, - '0xb0fb4f19b4876ea60a7e9c508b8d8647be963cd4': 0.15804690151681394, - '0xb1986e2a3115da452b61872c24eee423a2366c4f': 2.5222981907497903, - '0xb1bb42f4cd3a4a303e3509b476562e9293cb2cf5': 0.4294531887163568, - '0xb1c0f0d1c54802ce9d29abb543f278d192826d2a': 37.10872316796053, - '0xb1fff670aed5a3ac4ec02a0dde2667452554e23e': 3.942430505135132, - '0xb27daba294dcfd2fa8e2a16fb667eb787409bc86': 0.16432324140465226, - '0xb28227ac95c940cf1353e4cbe8373be37005d6ff': 1.9790739613374813, - '0xb2caa5ebf1381f2567a9d4f6e24602e360f8eb41': 0.07135332930170175, - '0xb2dc41ef1a3b154191b36f1a6a9fc2089b07d19c': 12.967521611702773, - '0xb2e0fc459545d4377530e2e3fba21ab2550b0658': 1.3267096610902365, - '0xb34a1a42984b1163959b86df03e1abf2d0efdc69': 11.084033457566667, - '0xb3b8f2b41055209faac70b2b661e414bf0e0881b': 2.545060086263697, - '0xb3e1b74963301d2ebd72eceae539007c3aff3424': 18.149349990319358, - '0xb474d73c453127817d5c2dfb512fa24195b86abf': 62.492401424595755, - '0xb480bf6c8bd3e319826a7a7f1db9d2686d44518b': 22.516091441904084, - '0xb52951e4a724623d1092b2466dcca590289b0e35': 2.0558673420540923, - '0xb57bc9b9a0b021103052ccd8c7ca30acc4f41612': 8.864689878928836, - '0xb5a48fed4d5aba3e52cfc81b21356857a7b48b4c': 0.07393225236769484, - '0xb66c5eab8a26c3f02b95858553e730c794d1cf23': 4.026063910612631, - '0xb68500baacbc546e72c3fa304ab0529e5c4fd104': 0.4815074806144239, - '0xb6e81350775a4691ddb39e0b97b5cbc61d7d3b0f': 29.15781065695458, - '0xb73f8abc0371b1ab67f9daaedb7ecbc1b1dd7e79': 2107.4357288946912, - '0xb75ca39783b5148e283343f801a0df86560fe29e': 1.2158046054298843, - '0xb76724aa6fcf91fed9c2b761678313667c42140b': 49.15405172234846, - '0xb80d9f56c799ba4f3e11ff418c3cf4bc574a135d': 0.28766239398525956, - '0xb88055edb5c215ce0d572586ce53e051d5817a77': 2.210060979879753, - '0xb965c7fb1b69c40cf796579ed33865a2593382d4': 0.3758738823804147, - '0xbaee035c0c13e3b022d9d662e820cb7117d481f9': 3.402466434790616, - '0xbaffdd9a94fc3f00818604f22600a0422d1f4346': 5.033076851707661, - '0xbb0d3c8f4b362fbf7e0b109dabd3fd85b61bf439': 186.57830148807534, - '0xbb1c4c4238bb96ad589d30c50b273e19b04dcd82': 2.516281804067352, - '0xbb24808abc25f0afe395853dea824005f722f01c': 0.432002418007604, - '0xbb8022ab25988b58b22c83aa23190a5c51c1c668': 273.5898650053853, - '0xbbccfbbd0a2fdf6be944b44fcc6485f90a9ea756': 0.4060368846890298, - '0xbbd6e8b4a644a1a511fd95f6a0e81db3c03a7e16': 186.57781356779407, - '0xbbd8ab09df216d45d5a6e183a65ff9a31e86553d': 45.390542944022904, - '0xbc34a94bf9d2f87816e56529bd16dfe9096cffee': 1.7376883536496117, - '0xbc63219a3a5453db9ccd7096c6009c1ed4e69b45': 2.8802521697073815, - '0xbcae65851d4d372a066bb9f377bd8efece6dffd6': 0.691495630057092, - '0xbce27139ae237e2cec200dbf9ec4e1e3cc7368f1': 35.64620641493637, - '0xbd62192ee9ac2299400ab663c8d1d63e6d0b63fd': 5.5221923837248506, - '0xbd7839a1289175cd9e58a46820267272491081ed': 1.7241069549069952, - '0xbdee7d55fc71c1a7489f8aa25271465fe2bbaa64': 0.30038972446169554, - '0xbe1b81ae55725d805a9c2d9e3974a8c1746882e5': 47.8743242802147, - '0xbe2cd135ea851781ea03b7c701152e344b0ef28d': 5.736002945328442, - '0xbe47cae911f34dc4b21aa6ffa5af885417bdb2a9': 3.9923682217182628, - '0xbea282f98df962c54be80a2050a211b64ff1aee0': 108.4375432924217, - '0xbea6e129b88e8c563b5c36b81b34fb5678a360b1': 2.27184480819732, - '0xbec2027dd208e21e8d25821506562aa658c0ebd0': 1.5589991368473894, - '0xbf86d3a4fba4cc56c47a76afbe61fdd5b64180e9': 19.570587487439173, - '0xc02eff2184e36743cc88c90bd5c534b321320248': 0.07200521257027581, - '0xc03b1ba956b349d78fa5a9fa4ff87ac1e1b03e0e': 35.646144836770205, - '0xc05fb092c2064e1bf632d322889e826e34cbf771': 0.35646144836770205, - '0xc157566a6f8375037902ff51e7b086d07e66e7b8': 72.32570892676041, - '0xc15bd2616abf78b479e178d6c75408a300df8a65': 20.18581938704818, - '0xc18a0bcd3c597b5f6be70d1ac1d30d42c390b4d8': 49.27040896112532, - '0xc1d0ae1a88a8accbed7dd37873b0852323171b05': 39.504972768862636, - '0xc232276308036e0b2be15fad63c09619b6ebe339': 0.34568931377739354, - '0xc2c9583276d6c7454c073b6b03cad11e167382d0': 35.64621003214356, - '0xc2fc9e7bdf48cfa44a7c70960a33e538d6626780': 2.851303264997098, - '0xc3b9fc1b020f48ab82651d47d1c42a2fbdcd75fc': 0.10693843451031061, - '0xc3dac456532c54f5ae0f5bb8630fca6d5b7cce2f': 10.512287988767923, - '0xc45abdd2d4f67279af4630e4cae551f0caca87f6': 0.28516915869416165, - '0xc47b1bd45cf81fbc08bfd6440e19aae698d6b269': 24.61994704304086, - '0xc523795a4929f69298a9bd43a94e5a51735a95da': 293.32534289070156, - '0xc5cf8d4bef8c4897bb596c8e2a671767ad691964': 7.129228967354041, - '0xc6284372a338562a958a9fe4a164ad5d184f9854': 24.996568000442508, - '0xc673fb846da43bac67748c22ee0649c958392dc3': 3.5646144836770204, - '0xc7ff28dfef80bfc65fe48e387281f4064d7345e3': 0.7037480127432905, - '0xc8bec1abc57f001114c7cbe8669347cd40389448': 189.84788437275267, - '0xc97075f27f623639332db7357775f4d80c8e4f81': 0.24327313988510352, - '0xc9fe5edb52609cc16b282d74852e9c2ef7c34c91': 0.2798645138463916, - '0xca1e3a936d501a775db6dbac03c97649d89e2749': 2.9645433814274536, - '0xca294db7bcdfd0dbcf9e6b78318f179ce1055106': 1.8535995315120506, - '0xca38718983f8ae7314f8431ab726922d8f374108': 2.603350108017264, - '0xca486848d7253ee566c74163b219540312a709c8': 6.565876048749093, - '0xca6a36ca3e6b32483f0e486e9dd324d455fd5b44': 2.2377403782935277, - '0xca7a6a53d5576102765a0281c723f863d881dc96': 0.3559041917460759, - '0xcb008c1d09ce5d9976f1a1fcb400d3f995756012': 0.37033794258780434, - '0xcb07b7b82bbfb4aefc33c6d4997fbf40579e0612': 0.7129228967354041, - '0xcb1b8b35f4974e60f1a6d95ff35d88511700dc17': 31.332278649942268, - '0xcba101fca8c90a51a7b1e8137ba4e548e32133bb': 35.24690801459837, - '0xcc8e7cd2bcda858ba4b8d352b06f9b85d239513a': 35.2961135290167, - '0xcca7d72f353e840c866e3c92060c798f1a29c8df': 4.005461272217839, - '0xcceef1fada236f52c453ec3979a350516de0528f': 5.718418675755216, - '0xcd062a23dde709690c188db4213d1e6aeee612c6': 10.967356986942802, - '0xcd964ddefbde3057ea16f866f44118ed0a0eaa5b': 5.351620940180995, - '0xce0d229d6dd09c2c92947294884cb9596bf42735': 1316.637823052737, - '0xce17d555486b5318d140a59f2282584eab601c19': 3.1281630476934295, - '0xce29f96db84e108905b42dc8b5897ea632433c1b': 2.867147560984152, - '0xce2bbd5155d2eae9c5a1b8ae07493b99c8d31c25': 1.5932495261569115, - '0xce471910c99a4febbbea7bf5f309d0b493e9fdcd': 112.85170022566746, - '0xcebc485088031030febef8e39f198ab071b71a55': 1.4775927531899793, - '0xcefe936bc021de7d873714fad9e678c83da99524': 1.3692722401568145, - '0xcf43c27302278c76f4f06e7f5d704bb2e48af671': 190.9994667252797, - '0xcf82a374d21f0043b1ba0e57e90e31869ac17dd8': 8.160890651603612, - '0xcf8d740a99d3b4a433585998d6d2968f1526f3bf': 48.69611668394118, - '0xcfcb93ce20500518697e731a961b76c429b66a92': 2.8516915869416164, - '0xcfce3eeb6bb6526c2faddf28036741b0ed09f829': 1.0793555040249212, - '0xd039cf5ce471de3d10007abf0438fc7d2ff5c5fc': 2.62710753701765, - '0xd11e3e8815ab3bc592a032bd1b56b01a89d83a66': 4.284372121898529, - '0xd1305381069485f70295ad36190cce28d8ba3c6a': 0.7532451660996148, - '0xd136c1a2cf7b033093e449f72062b835254ab23e': 0.47673144557156755, - '0xd188b4996b5c459b7f96a391a010296d83b9ec87': 0.8006124130338588, - '0xd1b9f7e3b171c11dda454d4c02da296897ca6f0f': 1.2832612141237274, - '0xd21e75f9848fab8f6d135f5e61a53017f3f0bf67': 12.69031720311598, - '0xd22f3dce9b3f89583b4e457c232aac59813c9947': 3.2081530353093184, - '0xd2405a7fbdfc3ffbaab54e600db0e752a556ac21': 35.75053310711368, - '0xd26419cb0ad7bcda190f0d01f6d82a8fcfd3829e': 201.17509085653134, - '0xd33590920ea9c3fc08d3af4053d7a76a19854b04': 0.28516915869416165, - '0xd4cd5ace0301e28d292d0b1382cc283aa3de85b1': 0.1234798967732111, - '0xd568e05e9c5ba38700bf440c619238ebd2ba2473': 1.7720898493601087, - '0xd5e02f750d3339d3abe6c0a41ce37b42159013da': 2.5415885978439876, - '0xd6097148a5d9c8adb38a8a6479b012ac64674529': 2.1387686902062124, - '0xd60ee9b62f11ea6b2c5e40c5966a94e9078f10cd': 25.44256934159813, - '0xd6748b80710d5555305f0f960c19250e84aeb3f1': 3.5646144836770204, - '0xd73d2e6c4e92ca6849c888fab32ba323698b4ecb': 0.17912288549693633, - '0xd8d058f2f679c8228f1258b453b4fdeb470b4477': 5.087437875700222, - '0xd977b9de2cd5e444d8a57d5781c6c938bdbe2d31': 0.7244389140332026, - '0xd987011baea80443668691a4890227eb4ebc59e8': 1.7801948184664838, - '0xd999074f947f9813bdd161fb2452332ac6a4d695': 457.4367043072542, - '0xd9a409eb3980b585dffa8798dad57c695e20d0aa': 10.847025956339067, - '0xda0aee902add5df303c547fe1e076717d8ccf648': 9.069896125147965, - '0xda42e7de344fc9a505026529b1386aa07403fc62': 2.9140542625342465, - '0xdabb3e9ad789767f7f53783305ab806819cdc7fb': 128.38460707677766, - '0xdacfb3a677e2373361873adbd973351a5a0dc207': 0.827504602077832, - '0xdb2c288dc6d2a5109495e48433f089521e6a4f65': 3.0609772325072617, - '0xdb8935b2e0002e7927fb7a109f31e5f7f2e73f70': 1.226967273820821, - '0xdc92edb9d24ee93387a1ca52c3d2a20a80ce491f': 9.097512224620672, - '0xdd4e69bb73efdf7bf96f04966bf53fa80c3cc791': 2.8516915869416164, - '0xdd976aebaeaae0617572ba8f3afaaed78716f164': 8.895781295130366, - '0xddc7d2ea63b7cc85d88cd99be12bc7c5208b5578': 4.919167987474288, - '0xddcbdc24d1d1ddb22ea50a0eb6b0af55f73117b9': 3.2391592715436692, - '0xddfcf9c8b6888a82d0043969955fa2e9ecdf43b7': 17.99083930879995, - '0xde410523fbbbbc9a953c8cf4d15bbaab57e3c49d': 0.7138004309928507, - '0xde63fad76a0ca6d21b7d4473c8a6e59742e4243b': 0.12404858403196029, - '0xdea4fafeecd651f5623f7449cbede483de3f42f9': 2.8516915869416164, - '0xdfbaf7d00ae8178a8e59c0725c0c89caea266638': 7.757382846125733, - '0xe04cfe36224e8b98d5a08203786d108f7f7cd5e3': 97.04101539312687, - '0xe0a8c845da4f82b85aa9b7729335de77e8919667': 2.8516915869416164, - '0xe0dde4a186fc66b3cf139725ab313ba9f658e7b0': 1.0693843451031062, - '0xe126d569349e5d03aad5fa28e1cd2ea962c07f5a': 4.424619315435865, - '0xe155db2fb950ebf2368a38c5db82919efbf945d6': 0.21742334392420484, - '0xe1d850218b11887b4ce1d8a4d7d9ed37c6e1610b': 0.5511531424561887, - '0xe1db73b92dd6b28f8fc8c839f40a5ac88859415b': 6.463589635913503, - '0xe259ee56f5d07b346a9015da08b8de01e31798f5': 75.91917804461448, - '0xe28f41871208d8019d8a5aff1e28d777f5a8f76f': 0.4358352320263561, - '0xe29e5af1d375ed5c7ecf1908f3a16ff55de70725': 14.993269089866711, - '0xe2a0eaa99e0cb479afa93a11350937c5f626b72c': 19.675813304623567, - '0xe2a6770b2b58f1a08c4675d994c81231145483be': 3.235427707251068, - '0xe3921277177e0b9acd49f90d6d02a155d6b3a894': 0.16379683543981996, - '0xe3a8cc3f0ecdde227f970d5c0aa7d1cc1d7fb8ee': 45.187393626100416, - '0xe3da64951147c04ff873b3ed8e2f9c8d6350b283': 375.00646666073146, - '0xe408f784458ea8becf9f12872ea78f10e06cfba8': 8.773993280950295, - '0xe415409e8a95a3a73bdee2c1de2b3e7654980a1b': 19.32877455047372, - '0xe47a53aa53610e41e9c18ea9b65524d1d86899d3': 38.97446911203725, - '0xe4e81a38ea6d480e4f21abdbe34df076621b9113': 767.1142473316567, - '0xe50087c597ff3c4a7dd8e0c234be561f38f6c02a': 40.006786923480426, - '0xe514d7b9f5fc4cd3ce9ed726d07013fe043b22de': 712.922896735404, - '0xe52513c21e0e08d51de6e7a1e3d3c30fa596a35d': 14.258457934708082, - '0xe5a7f08333834473e3fc814022d6891a1d19e6d4': 6.840293538842555, - '0xe6dec6218b5ed641dc1e27267a3e10b340dcb0bf': 2.857849489038005, - '0xe744d7cf838cadfa0e2e5d697b9265a14de2d3c0': 7.485816658901465, - '0xe74acf3b57d092db0e2f71f0435bab6ed95c3a72': 4.277537380412425, - '0xe79867cdcf57dc517a3adb30a6c5dc78728f7833': 135.4946135720417, - '0xe79b63df2c06b33c837312bac288edb53778ac73': 2.8516915869416164, - '0xe7d2e040b988dae5eb1fd88427dce9ea6329f617': 4.271996212006831, - '0xe82f5ad41125e4d9af3d5232d67c2c3142bde20c': 0.40786666568429203, - '0xe84bc548f196d4af536a4a9b296ebd6a25f71b02': 0.35646144836770205, - '0xe855bcc670ea4da67c0451e3f7404e1d29335e99': 0.6602023523439683, - '0xe8b2000d0fe428d164f73c33932113b1899a5d9d': 36.806995956147475, - '0xe8d1f22ca447be1ff6bf86243935cb81a445ecc7': 0.25846345169094204, - '0xe982bcffe6a148814d07ff99b46e230798807402': 30.949467293872576, - '0xe9c5f16ec048ed0185dbe6cbd670a2c55670dc7c': 0.09756454038074595, - '0xe9d375f8a1547df153f1d0290ce7b3abfaf7775e': 0.560049094572708, - '0xea05aa7db2ecce16bc8d8e5127aedeb4d1e4575f': 14.373047411138895, - '0xea1d80d3888b34ccdbe9b2b3b8b0e9fff62450da': 0.7384469707754853, - '0xea8a0b3a336c625e179332a9d424e952789b3185': 69.97694192883019, - '0xeae7966fe56f0f5401c4ffd68ac8d0e85b2cd462': 0.7129228967354041, - '0xeb10a1bd46e15e36a25bae13c49283518a000cdf': 0.5703383173883233, - '0xeb6db1553de00af9322be69522b61fb1f0c56f69': 0.19022354673402733, - '0xebc298abd7ccbc0432717dd3350909fba1ff47ad': 40.76793109649385, - '0xebce0f0e40c55e8a36691b27fe0145d7cea431b5': 2.088990127328324, - '0xebf21f1a19b17bf9d8546217509f91aca6811a38': 1.0786895085730053, - '0xed137525f2b646022be370519c0b8c9888a3aaa3': 56.736775171824924, - '0xed169cb8451f6a36312717cfe9c2c1774ff938b5': 6.503500326295932, - '0xed39573a45a20cd262984db7c3f08f11021337a2': 36.08609696539753, - '0xedadbf006526f66e478bac016313adc9bfb12346': 0.35646144836770205, - '0xee1244bbeddc01b63c9f6870f5a877b290b624df': 41.45572068002334, - '0xee72f5c17a8d29cbe9394bed1bd0e88ead7d7900': 1.753890974667532, - '0xee90b3ca8362e64370365dfed128cae466d0c7ce': 0.4840796287950943, - '0xeec6e4d71ff7a4982acfa8a386807057b0bef9dd': 3.110910831784671, - '0xefb8cff2ec58967181b92a03ccf27c36f7783336': 14.971514958695721, - '0xefcc8d5788fba37ced16c747574f9d4fb2e91fc6': 168.25745576638, - '0xf008e9787fa0cf41451a954b83e4493a68d035e9': 0.17099128069213243, - '0xf0445538a9adc22c8a4a368cd742bd1b9e687c5f': 0.30276063667249853, - '0xf0e07e4e88d3a094e321a535d0043fcb781ffa95': 13.893873698910145, - '0xf13c8ced955ee515190d40119fd621a11e4eb336': 59.297928987036634, - '0xf1af9ee66da35b1224f26764c798ba72d429d8ef': 71.29228967354041, - '0xf1be02f166d160fa7f378fa329bfea4f7dd9c424': 2.8516915869416164, - '0xf1fefcd032e5e2bbb55f9fd7d9412e3c01c590fd': 15.276919215758658, - '0xf2bdf9aa9f82fab3d4eb637bc4c820bcda066b4c': 1.1535678613709768, - '0xf32d473da97b831c1025ba7eee80e57d4013c99b': 1.94618211748562, - '0xf37c3fbe0a404f848c38a31fdbbc37294531363b': 24.323699122494805, - '0xf3a935a406c7727c052d7526804507935323d7d8': 2.7680119562703087, - '0xf3cdb3ffc1aeccc20358b75a5470e5b7c34d122b': 5.1738400710041095, - '0xf405f2fc344bdb94f00541c03289a8add9d97238': 1.1682699217450647, - '0xf41f439851b607e5dcfe9b2fbdf2fd3e025dd5ea': 3.161091416222957, - '0xf43fbe2feac3bd8bbd4c28b35daef20ad1351a2c': 7.208221887755668, - '0xf48f0287550f880e76066efb9acd32a2c0d64f10': 2.8516915869416164, - '0xf4c293fac665321d4be77907b83f73961cd46ea7': 0.8374010615703961, - '0xf4d7bdee03f9eef82f90f437388734690d08b942': 107.60640414402819, - '0xf4e8bf0aa52e6efb8b33cc3590d1b48c064239dc': 2.1482936829273993, - '0xf5215169f0a3550c986e4f1022e582b8110ff48f': 0.9834350413009307, - '0xf5776e89ae12f90a6fe285479ad9dbb9055c982c': 0.35646144836770205, - '0xf59742b240426fdc41d61954a49f55f2a377313d': 0.4586218604642697, - '0xf5991b5d93707dc0881fbf8a523ae1cf01f33ecd': 41.39311952158185, - '0xf604556e7d829240424d51d2c5f2c1861adb3a26': 67.04680355702904, - '0xf6641fa88c0ec21706117668e787527da1902125': 0.16286422148550958, - '0xf6b4c2645101226e57c8ac64ba108cbd334a25a2': 4.097748845835876, - '0xf6bbce702a8e647f3627e11be3ce449fda3cd0ba': 0.25940127351455705, - '0xf7b8bfb1c2d7185bd804584d15104b71b695840c': 61.75006785431064, - '0xf7c2b3d6a2d3b46ceccc193e630e1166ea885a2e': 1.5827771107934034, - '0xf7f3eb4fc5abe68f5b269b8dd0b588e57ddfb00b': 1.8841533699435677, - '0xf80c0a95474e471ef5a64452415ae0ef02920229': 56.78394550128826, - '0xf85d5e3b75222280588144158a51e52b2a04ab77': 30.32819701283187, - '0xf872a768aeb4abc3fd5829044fa467de80098d18': 21.38768690206212, - '0xf8bd01a0393b87e4947c66ab9729dc180532e201': 1.7872585920617945, - '0xf906b7156a87f1f8170670e8bd9c14b999386d9f': 0.36474660134297665, - '0xf923463521a4b2377ef2401ed54e650ec6454806': 190.2345991037783, - '0xf97664376416e9379f2354db444bfe3f00b6936b': 4.691154657685105, - '0xf97a914ee8c89a4a2d849682e2e73f6b79af024c': 0.8373771903820155, - '0xf98cb0fe7b4d0ad08ad4b175b9f47a5407619fff': 4.964202426006323, - '0xf9b0fef45f8ecb956538769ad65ee9652084a04a': 0.7541587044528056, - '0xfa3b1d683f1c14a77911cbfc1ddcc377eb65155c': 0.615727952564287, - '0xfa4937670686c09f180c71a9b93e2ffcc3a79f47': 81.53752978894782, - '0xfa49aa2efb37aaec1f2583ca80b2caf4415f695b': 3.414094173207288, - '0xfa8b4269ecd574ccf5a39698bbfa90667a1c2600': 3.5646144836770204, - '0xface0529525a64f5b94cf47f6a8d91f566e2ded4': 0.27695502680845585, - '0xfb136ddca6fb963554bfbd651497f9a38b168c1f': 43.833626649304335, - '0xfb25dd458aa0b6f8b842dec26b84e9d479b47efb': 0.11246964196428502, - '0xfb290ec65f0cd2066279887381a103f7875fc83a': 0.6467209995799543, - '0xfb8abbbb89f419b6db847a2eb70678fd40b769aa': 15.012131504220884, - '0xfbfded53a02a3dca9dbe13d8424356490d9c03fb': 18.07579218574406, - '0xfd390ee74d075dc5ec900810255d98f9db30f276': 1.1832715848679072, - '0xfd884af1ada1864a88492134ef814354bd4aeb7c': 72.0980976285247, - '0xfe2e4d5957e3c3b5bcf8aa54335fe00c15741cd2': 24.186992914551617, - '0xfe586dca4b7f002acf8dc5523e8efa5805410f5d': 1.3545535037972678, - '0xfe5e219c8a1c3350896d101b72c8dbcf154dfa4f': 0.08248110839795107, - '0xfe91af2a316c8ffc281f62ec2526d8f464073ee6': 0.6143189286719113, - '0xfe9b1c284c4dd5be08cfcecdbb018d64d37a0c84': 13.967228931391668, - '0xfeebb7251827a89143049d400573f71f54676adf': 7.339859593473909, - '0xff09ca002b9c2f6a6801d7bbf6da205884c3a55d': 37.488570478127414, - '0xff1fe3fbd4b95f838f2ded1ebb7a32aa214686c4': 49.72514976348656, - '0xff26869e489fd8a564e0903ee86fc0f8ab877137': 2.8516915869416164, - '0xff333282cbc206ea5128f7cb8a810c47b2aab40b': 4.073845156297058, - '0xff536f23d12c103bde620bc301be1296239053f7': 0.08724843960745514, - '0xff5663a64a9b1d928e8be7de6a626adf01dfb8cb': 53.890022280293074, - '0x111142ba1a96b17c0657c6f164d476a033fca399': 4.398394654397114, - '0x16846b75ae10e5ac12f57eab261b10223a0e5d8a': 0.23271992362570226, - '0x522e1eec355831c9e32e23c2de15371912ea579f': 3.7951333831127454, - '0x595f34183b3b96f7fe33620c2a9b4b5c9fd9eca0': 1.414055924667212, - '0x67ae28021ca9e6ac751858a81b2b3c7eebdd4864': 2.8114134286537937, - '0x73e1c4a448c811c2d6daa296de17b2dcd5d7a6e8': 93.78937656700394, - '0x9b420d7b78605083467b916837fb9c37205cd029': 2.2666624754911218, - '0xd44e8820251dd20b4893c436181aa231ca11e7ff': 2.906466261277429, - '0x0000000000000000000000000000000000000001': 2.575888263030765, - '0x002cd2707daccbd5f3f192a565fca0a2cea021a6': 0.2522986944666978, - '0x0241441aa95e6f991131ca00d760dc678f481acb': 0.20794453016390227, - '0x03bb8a79f1216d8f8204c480bf91f032d1d1c7ef': 38.29331401089165, - '0x0791b6a49ee8833e5a12f646bed7d1454394ffa8': 38.54259873175776, - '0x0b5fe588e5738a0bb9df4491a1529256d6a11c1b': 3.5666587336138607, - '0x2304d3d24a29d4da2748673d4f2f4aa09b89a39e': 24.883784358802938, - '0x324138c5c580e2e3b3eb33a35bd5cdcef6b6bd74': 1.3607448980393242, - '0x45afd33e4811c4ef1aef129823e0fd92c6bf1e2d': 18.76727496602817, - '0x56b0a21c49f361098603c0b370466bdd1f853011': 36.57943419182957, - '0x7500acedc9b4d81a448b82913f7043b437e3d7e1': 1.0611770742912559, - '0x79674363a0332e528a4fc2cb847a6d55a03be4a1': 0.9839354436229627, - '0x85464b86371455f490de08e7bc379a6bd9533f43': 21.13854268888656, - '0x9d7541690f7537cd414a6581377187ed014f33a1': 0.5649108522352697, - '0xafdcd81ed039f50611c9e136ad32b7c5ec420895': 0.275312726801018, - '0xdb52943ec33bc9e3a2e2fe19d2de0929e5a61900': 1.0187549122141975, - '0xe1fe39a7bfeaf42b78c35a27deb7a3861345b47c': 0.6243865544424297, - '0xe60bb32eaddb3dd01a77ba01ceba374603f39b3b': 15.513929989254892, - '0x05df2735f118a622201392aba5805e91c3091f00': 19.459698104500507, - '0x240b1ca712649d567bd751d616696f9b6ac2df1b': 2.8776707885476522, - '0x2c59900b9442b7a865f93219c04f553a0d7bd003': 10.063323693182888, - '0x42d12d2b6a3daabd2a459e7113d019d4457b926f': 44.27388770458127, - '0x452ef8c3b43dfbff6acf49072893ef0852b4922d': 4.103464812678568, - '0x49dbf3cb9a5e8cd64444a1d0dfadbcb7cb3f65d7': 2.381137640756454, - '0x78070f147b194f3d8b23e4b762e03266c94e5aa8': 0.31508598179812713, - '0x9bbd0ccfeadfda665d939776d4cd5c17bf87b82d': 28.00768522889087, - '0x0019fcd6821687aa7b2522d16cf939daaf8fb2fa': 26.168327442759903, - '0x0c33efcf1aee31c1d1537872719cfd6616cb5968': 162.99684454801846, - '0x6353bf20c11fe341536b3ad38c9c6fe37de4f431': 35.75121134355544, - '0xaf413a9bc1ddbdcd9d3445107aba77601949b9ec': 1.9878506768159265, - '0xbdac4cf4a0b261c383049dc692aede5360a08752': 9.060422815840017, - '0xdb95d308b64b74fc6e02cf3187ea52e251b47c04': 162.26220685995813, - '0x012c1cd65b787d9f5dee939fb6780ffe1a672bb0': 35.69072419427249, - '0x18cc0e7226d03ca5c780c45f720596e6795e3576': 35.828591723051815, - '0x219aa7a1994844460634851e570de7a017758bcc': 35.68837791229869, - '0x82a57e1f6b80dfcdf8e0fdf48441b983f9e39b4a': 0.564001348544872, - '0xf71c4d85a7ea91e7aa65e928b4ac0430a5eefefa': 38.19229803939665, - '0x00b97fa8b11433f9b93bb7bcf438f98a2b77a3cc': 7.486018570198154, - '0x4442cd0139be158d2077e07e56ec604e95dfd829': 11.372702954325312, - '0xa1eccf56c1beb9c0f2710a333f908e77184c8eb3': 1.4784993179368646, - '0x0fefe34a4491da4b8334f9f2e041b69375b6a5ca': 35.80006093425279, - '0x10ac93ade7d80f85e76f6a8788a427a8f1f40217': 35.64617197132858, - '0x2820316fa2fdad36fdef544251bec0688ebb259e': 0.11957603567771104, - '0x5406f409bc19b5523c433c10f8fc0462fd4c3a16': 35.66271259558576, - '0x9799aa135706a0d60d58793281c3b915cd2aa31c': 35.78692175519847, - '0xbfc212245bc11f5fefa82041984443b46faa5442': 35.78222919125086, - '0xd6d27c78be6ee9d9ffcab3846fb50025bb06891e': 36.46959595831249, - '0xf935a2a8afef5bc6c4842bfc9b4556edaf514810': 0.5166575374475163, - '0x00bcb0d504844c4b17f1027e8be1de458f7bbae0': 9.922900696498713, - '0x4e5458ad940d39155a2b9663ffbfd464ca56b728': 1.3786191367637233, - '0xc56eaa77b5eea884d73ba874a207951aa8abf1b4': 0.19922252843312876, - '0xd6aeac7421f2b579f85854aefc98f355b40bfee3': 35.68879499592342, - '0xe52a91895d601ce6971448c0f2aa211bc4b9c25c': 0.24443070745213852, - '0x0700a5e321244fadab5b474e2606c4142897b0d3': 14.49289421740596, - '0x61c98f7110ddce29680cd7eb6e1cd77a81d7587a': 0.819779580924903, - '0x845bd11e4e57f22580b22fe4aa0faeca67ba5155': 13.016315561207776, - '0x85f0072b0046744d3a68ae1b330597c8039407c5': 21.302283813147866, - '0x87a6087764ffbc7d785176f03846d1793be31494': 0.45283851025227634, - '0xa92c0a687f640bd5e9ec7459ed8da91fe6e88468': 2.2192787831085243, - '0xd0c4b0fc4d43b6391ff54064fced32f9712a8ef7': 19.66594753380834, - '0xd368a983ece19165b14eac825bbe0d6fbd339f16': 0.47799332987604565, - '0xd53e04245a43266f10b1256cb11a04d72bbf1a1c': 73.76205828008806, - '0xdb739cfbadd0a3422e31aaa34af6fcea13b1d3a7': 0.2713093561854486, - '0x00c0b4e0369dc910896300fb0a66d5091009af6c': 13.945285211712376, - '0x680a6cacc6f28dea7a0bb010e5955015c73dfd53': 0.8202649140516824, - '0x885898744f71bbe0f0e704dfb368c2457c4f0bba': 0.08813705543434325, - '0x94b2e058ef4e4c56a7105ac5a6784774b18df25c': 0.4132270619958073, - '0xb42c59ac99015741afd909bf6d9a1ba734d4c22e': 2.546153202626443, - '0xd8997d72688edd39dde2c3c19505fbcd840e890e': 48.12777301250763, - '0x4e8dc8d5e68a08e2b3749b2abb77d6cab25f26cc': 0.5602532753567266, - '0x5e9ee5ebb467268a277ca81934a289eef408e7c2': 41.7389246860929, - '0x62cdbb4380c1dd7a9afd777038785e1ab3c384ed': 0.6916000946395913, - '0xcb209fce57ab588f1cf6c776612d770a18636c6b': 31.108599589477727, - '0x01db6d25765ddeec01052e8cdec8363b403e0544': 0.22725215850074598, - '0x06961f9bee9891b0a6bb94dc77456863663c840f': 0.6008921558198406, - '0x99b32a7aa5a353b42b92fa58d7f0d1b98b2d93d5': 1.4271316334542246, - '0xae6ca36047d122b50efadcc0f70e988a59c3d530': 0.19342324933747568, - '0x0695e8b9e4c5e3c3869341590cd7d6f04c63f78b': 3.7788418085300197, - '0x457ac08ece4df40914f6e8f54ba5293ab0ce54cd': 3.1534148653355367, - '0x5149ba50273995ab8cb9aa07aabd9affa1f46c69': 0.2331871769133641, - '0x5842aa91fde70566883c12b07ec700792630e9c5': 3.4993779469340027, - '0x65d77c4c24a938efb718de5f9736e7a01bc0e074': 9.21299687482273, - '0xaf98ae477c5c2394b92ac75767753cbdaf152f12': 1.4868007011416853, - '0x3BA1fdF7054376439780f47aD27Af609cBe39313': 6.915352098333419, - '0x6E3Eb5b3Ea3f7Fe6b70AF685D82d11FB1bE637EB': 35.646144836770205, - '0xc71ba8DbC8c5b7870b803ab3279f0419CE16402a': 35.646144836770205, - '0x48698dA1b9755eA288bF131AAFf2916BE893abE8': 35.646144836770205, - '0x462785301Dc4f77d0858fd6297fe788e361B2165': 35.646144836770205, - '0x1a179b8c11d3c61F85b851741Aa18Aa3f6352151': 35.646144836770205, - '0xdc2a127567787541D80B480a4AF9c2667f3D1d16': 35.646144836770205, - '0x036848d590DBD70Ac709De3c44fa63FbA8E40CE1': 35.646144836770205, - '0xf1b1A63E1c02858109521F44AdA2c466603A8aF8': 35.646144836770205, - '0x6B806449CbcA6efAeb38e9Fbb974Eac097814E0d': 35.646144836770205, - '0x636Aa7E8a46823762C9F86829F66bdc018c574d8': 35.646144836770205, - '0xb091aDd049a38E6ceF30335DD566f2C34A1e6bDB': 35.646144836770205, - '0xd5dA151B6ffa41c7d36221057D9Ce4Dedff311b3': 35.2896833884025, - '0x2c9acd7A958C129d472155ab40ae40807B2e5f9B': 0.37749267382139645, - '0x7E5De1dc0Fd950BcA922fF8DEA934E7213bf00da': 35.646144836770205, - '0x63826726e3d6999f804DeBf9E7eF1f6ba5E39106': 35.646144836770205, - '0xc6D912E0DC261AA024Ae93838eFeA7Fc647B8019': 35.646144836770205, - '0x3091B77173a39d237143d9fd917B87444D271542': 35.646144836770205, - '0x067F78e0a0f4226eA38Aea1B8a185D074aca5c12': 35.646144836770205, - '0x0a93E884dc51184254de9d678cDE5A44CB4Fc2C7': 35.646144836770205, - '0x98Bc20596Df8371D46e43303F3B4c83F61F044C5': 35.646144836770205, - '0x7449a2c10041ADD4Ba1De89dbd0FD89fcD26145d': 35.646144836770205, - '0x9AD75E8b3841Ac0C57235E7310460BE5d6A3D86D': 35.646144836770205, - '0xD7322841277C5d1466d9205f16Cca36433daBaF3': 35.646144836770205, - '0x46D109B3629F73C093Db25Afa782872c1Fa628A8': 35.646144836770205, - '0xD27F7099D370d90420e94c5973314C99dD3c2a95': 35.646144836770205, - '0x092Dbb4475F47a6267f433CDf95aa75a369c0EFD': 35.646144836770205, - '0x98f464a62B7c3c16f67Ba46C73D3f732E1F41522': 35.646144836770205, - '0x88A5bEC3971705114e1884C46a6bF33FbAEb7c7F': 35.646144836770205, - '0xD2374b75E871A94E02A3eB411b0969a24153fC97': 35.646144836770205, - '0x5873Da5b1fAE687136C00C804933d79eC486C5c4': 35.646144836770205, - '0x9f0f27dcd4d4B06453B8734add915266805E4717': 35.646144836770205, - '0x9D6B4304b1665ec30eD1d3f483A2296023a658aa': 35.646144836770205, - '0x71858b48Cfb225C1F9A6C92E7682Db32748B5f9F': 5.128467668122221 -} - -const ABI_balances = [ - { - inputs: [{ internalType: 'address', name: '', type: 'address' }], - name: 'balances', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function' - } -] - -const ABI_totalBalance = [ - { - inputs: [], - name: 'totalBalance', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function' - } -] - -const IDO_PARTICIPANT_TOKENS = 3000000 - -// TODO: change to main network - -const chainMap = { - ETH: 4, - BSC: 97, - MATIC: 80001 -} -const MRC20Presale = { - [chainMap.ETH]: '0x344f0bbFbDeB4D4dBdA4defe4A21deaaE1f222bd', - [chainMap.BSC]: '0x3f8F21bcABE70230Db6cBC16624C3d6D9f772D2D', - [chainMap.MATIC]: '0x3f8F21bcABE70230Db6cBC16624C3d6D9f772D2D' -} - -const presaleToken = { - decimals: 18, - price: 0.1 -} - -const LockType = { - ALLOCATION: 'ALLOCATION', - COOL_DOWN: 'COOL_DOWN' -} -const DEPOSIT_LOCK = 'mrc20-deposit-lock' -const START_TIME = 1642412718 -const HOLDER_PUBLIC_TIME = START_TIME * 1000 + 24 * 3600 * 1000 -const PUBLIC_TIME = START_TIME * 1000 + 2 * 24 * 3600 * 1000 - -module.exports = { - APP_NAME: 'fear_presale', - APP_ID: 6, - - readOnlyMethods: ['checkLock'], - - checkLock: async function (params) { - const { - params: { forAddress } - } = params - const allocationForAddress = allocation[forAddress] - let currentTime = Date.now() - - if (!allocationForAddress && currentTime < PUBLIC_TIME) { - return { - message: `Allocation is 0 for your address.`, - lockType: LockType.ALLOCATION, - lock: true, - lockTime: PUBLIC_TIME, - expireAt: PUBLIC_TIME, - PUBLIC_TIME, - HOLDER_PUBLIC_TIME - } - } - - let lock = await this.readNodeMem({ - 'data.name': DEPOSIT_LOCK, - 'data.value': forAddress - }) - - if (lock) { - return { - message: `Your address is locked. Please wait.`, - lock: true, - lockType: LockType.COOL_DOWN, - lockTime: 6 * 60, - expireAt: lock.expireAt, - PUBLIC_TIME, - HOLDER_PUBLIC_TIME - } - } - return { - message: `Not locked.`, - lock: false, - PUBLIC_TIME, - HOLDER_PUBLIC_TIME - } - }, - - onArrive: async function (request) { - const { - method, - data: { params } - } = request - switch (method) { - case 'deposit': - const { forAddress } = params - let memory = [ - { type: 'uint256', name: DEPOSIT_LOCK, value: forAddress } - ] - let lock = await this.readNodeMem({ - 'data.name': DEPOSIT_LOCK, - 'data.value': forAddress - }) - if (lock) { - throw { - message: { - message: `Your address is locked. Please wait.`, - lockTime: 6 * 60, - expireAt: lock.expireAt - } - } - } - await this.writeNodeMem(memory, 6 * 60) - return - - default: - break - } - }, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'deposit': - let { token, forAddress, amount, sign, chainId, hashTimestamp } = params - if (!token) throw { message: 'Invalid token' } - if (!amount) throw { message: 'Invalid deposit amount' } - if (!forAddress) throw { message: 'Invalid sender address' } - if (!sign) throw { message: 'Invalid signature.' } - if (!chainId) throw { message: 'Invalid chainId' } - let allocationForAddress = allocation[forAddress] - let currentTime = Date.now() - - if (allocationForAddress === undefined && currentTime < PUBLIC_TIME) - throw { message: 'Allocation is 0 for your address.' } - - let tokenList = await getTokens() - if (!Object.keys(tokenList).includes(token.toLowerCase())) - throw { message: 'Invalid token.' } - - token = tokenList[token.toLowerCase()] - if (!token.chains.includes(chainId)) - throw { message: 'Token and chain is not matched.' } - - let typedData = { - types: { - EIP712Domain: [{ name: 'name', type: 'string' }], - Message: [{ type: 'address', name: 'forAddress' }] - }, - domain: { name: 'MRC20 Presale' }, - primaryType: 'Message', - message: { forAddress: forAddress } - } - - let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') - - if (signer.toLowerCase() !== forAddress.toLowerCase()) - throw { message: 'Request signature mismatch' } - - let tokenPrice = toBaseUnit(token.price.toString(), 18) - let presaleTokenPrice = toBaseUnit( - presaleToken.price.toString(), - 18 - ).toString() - let finalMaxCap - if (currentTime < PUBLIC_TIME) { - let maxCap = new BN( - toBaseUnit(allocationForAddress.toString(), 18).toString() - ) - let allPurchase = {} - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - let purchase = await ethCall( - MRC20Presale[chainId], - 'balances', - [forAddress], - ABI_balances, - chainId - ) - allPurchase = { ...allPurchase, [chainId]: new BN(purchase) } - } - let sum = Object.keys(allPurchase) - .filter((chain) => chain != chainId) - .reduce((sum, chain) => sum.add(allPurchase[chain]), new BN(0)) - finalMaxCap = maxCap.sub(sum).toString() - } else { - let totalBalance = {} - for (let index = 0; index < Object.keys(chainMap).length; index++) { - const chainId = chainMap[Object.keys(chainMap)[index]] - let purchase = await ethCall( - MRC20Presale[chainId], - 'totalBalance', - [], - ABI_totalBalance, - chainId - ) - totalBalance = { ...totalBalance, [chainId]: new BN(purchase) } - } - let sum = Object.keys(totalBalance).reduce( - (sum, chain) => sum.add(totalBalance[chain]), - new BN(0) - ) - - let baseToken = new BN(10).pow(new BN(token.decimals)) - let usdAmount = new BN(amount).mul(tokenPrice).div(baseToken) - let usdMaxCap = IDO_PARTICIPANT_TOKENS * 0.1 - if ( - Number(Web3.utils.fromWei(usdAmount, 'ether')) + - Number(Web3.utils.fromWei(sum, 'ether')) > - usdMaxCap - ) - throw { message: 'Amount is not valid' } - finalMaxCap = toBaseUnit(usdMaxCap.toString(), 18).toString() - } - - const data = { - token: token.address, - presaleTokenPrice, - forAddress, - extraParameters: [ - finalMaxCap, - chainId, - tokenPrice.toString(), - amount, - ...(hashTimestamp ? [request.data.timestamp] : []) - ] - } - - let lock = await this.readNodeMem( - { 'data.name': DEPOSIT_LOCK, 'data.value': forAddress }, - { distinct: 'owner' } - ) - if (lock.length !== 1) throw { message: 'Atomic run failed.' } - - return data - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - - switch (method) { - case 'deposit': - let { hashTimestamp } = params - let { token, presaleTokenPrice, forAddress, extraParameters } = result - return soliditySha3([ - { type: 'address', value: token }, - { type: 'uint256', value: presaleTokenPrice }, - { type: 'uint256', value: extraParameters[3] }, - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []), - { type: 'address', value: forAddress }, - { type: 'uint256', value: extraParameters[0] }, - { type: 'uint256', value: extraParameters[1] }, - { type: 'uint256', value: extraParameters[2] }, - { type: 'uint8', value: this.APP_ID } - ]) - - default: - return null - } - } -} diff --git a/general/gamestarter.js b/general/gamestarter.js deleted file mode 100644 index d5eb4db..0000000 --- a/general/gamestarter.js +++ /dev/null @@ -1,61 +0,0 @@ -const { axios, soliditySha3, floatToBN } = MuonAppUtils - -const APP_ID = 12 - -function getBalance(address) { - return axios - .get( - 'https://dfapiuat.cosmicops.com/crafting/balance/'+address - ) - .then(({ data }) => data) - .catch((err) => { - return err?.response?.data - }) -} - -module.exports = { - APP_NAME: 'gamestarter', - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - switch (method) { - case 'claim': - let { address } = params - - let result = await getBalance(address); - - if (!result.balance || result.balance == 0) { - throw { message: 'Invalid address' } - } - - return { - appId: APP_ID, - address, - balance: floatToBN(result.balance, 8).toString(10) - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { method } = request - switch (method) { - case 'claim': - let { address } = result - return soliditySha3([ - { type: 'uint32', value: APP_ID }, - { type: 'address', value: address }, - { type: 'uint256', value: request.data.result.balance} - ]) - - default: - break - } - } -} diff --git a/general/mmac_bridge.js b/general/mmac_bridge.js deleted file mode 100644 index fa9b98f..0000000 --- a/general/mmac_bridge.js +++ /dev/null @@ -1,83 +0,0 @@ -const { ethCall, soliditySha3 } = MuonAppUtils - -const ABI_txs = [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "txs", - "outputs": [ - { - "internalType": "address", - "name": "wallet", - "type": "address" - }, - { - "internalType": "uint256", - "name": "txId", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] - - -module.exports = { - APP_NAME: 'mmac_bridge', - APP_ID: 33, - - onRequest: async function (request) { - let { - method, - data: { params } - } = request - switch (method) { - case 'burn': - let { contractAddress, txId } = params - //TODO: check chain - if (!contractAddress) throw { message: 'Invalid contarct address' } - if (!txId) throw { message: 'Invalid deposit Tx Id' } - const network = 137 - let result = await ethCall( - contractAddress, - 'txs', - [txId], - ABI_txs, - network - ) - - return result - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - - switch (method) { - case 'burn': - - let { txId, wallet } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'uint256', value: txId }, - { type: 'address', value: wallet } - ]) - - default: - return null - } - } -} diff --git a/general/muon-bridge.js b/general/muon-bridge.js deleted file mode 100644 index 76f3b39..0000000 --- a/general/muon-bridge.js +++ /dev/null @@ -1,155 +0,0 @@ -const { soliditySha3, ethCall, ethGetTokenInfo, ethHashCallOutput } = - MuonAppUtils - -const MuonBridge = { - 3: '0x54b33C420dC1430e3200004529c45AEdbDe17a40', - 4: '0x68F9191Fe8853eb5662466F270869EAf297596a9', - 97: '0xfAB83A73BEb73c2a6AEcB2D94593C58C893771b6', - 80001: '0xE607AEF8Ebe06fC81Aad55311eD6d540d5906366' -} -const ABI_getTx = [ - { - inputs: [ - { - internalType: 'uint256', - name: '_txId', - type: 'uint256' - } - ], - name: 'getTx', - outputs: [ - { - internalType: 'uint256', - name: 'txId', - type: 'uint256' - }, - { - internalType: 'uint256', - name: 'tokenId', - type: 'uint256' - }, - { - internalType: 'uint256', - name: 'amount', - type: 'uint256' - }, - { - internalType: 'uint256', - name: 'fromChain', - type: 'uint256' - }, - { - internalType: 'uint256', - name: 'toChain', - type: 'uint256' - }, - { - internalType: 'address', - name: 'user', - type: 'address' - } - ], - stateMutability: 'view', - type: 'function' - } -] - -const ABI_getTokenId = [ - { - inputs: [{ internalType: 'address', name: '_addr', type: 'address' }], - name: 'getTokenId', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - stateMutability: 'view', - type: 'function' - } -] - -module.exports = { - APP_NAME: 'bridge', - APP_ID: 3, - - onRequest: async function (request) { - let { - method, - data: { params } - } = request - switch (method) { - case 'claim': { - let { depositAddress, depositTxId, depositNetwork = 'eth' } = params - - if (!depositAddress) throw { message: 'Invalid contract "address"' } - if (!depositTxId) throw { message: 'Invalid depositTxId' } - - let result = await ethCall( - depositAddress, - 'getTx', - [depositTxId], - ABI_getTx, - depositNetwork - ) - return result - } - case 'addBridgeToken': { - let { mainTokenAddress, mainNetwork } = params - let [currentId, token] = await Promise.all([ - await ethCall( - MuonBridge[mainNetwork], - 'getTokenId', - [mainTokenAddress], - ABI_getTokenId, - mainNetwork - ), - await ethGetTokenInfo(mainTokenAddress, mainNetwork) - ]) - - // let sourceChain = await findSourceChain(mainTokenAddress, mainNetwork) - - let result = { - token: { - symbol: token.symbol.replace('μ-', ''), - name: token.name.replace('Muon ', ''), - decimals: token.decimals - }, - tokenId: currentId == 0 ? mainTokenAddress : currentId - // sourceChain - } - return result - } - - default: - throw { message: `Unknown method ${method}` } - } - }, - - hashRequestResult: function (request, result) { - switch (request.method) { - case 'claim': { - let { depositAddress } = request.data.params - let { txId, tokenId, amount, fromChain, toChain, user } = result - - return soliditySha3([ - { type: 'uint8', value: this.APP_ID }, - { type: 'address', value: depositAddress }, - { type: 'uint256', value: txId }, - { type: 'uint256', value: tokenId }, - { type: 'uint256', value: amount }, - { type: 'uint256', value: fromChain }, - { type: 'uint256', value: toChain }, - { type: 'address', value: user } - ]) - } - case 'addBridgeToken': { - let { token, tokenId } = result - return soliditySha3([ - { type: 'uint8', value: this.APP_ID }, - { type: 'uint256', value: tokenId }, - { type: 'string', value: token.name }, - { type: 'string', value: token.symbol }, - { type: 'uint8', value: token.decimals } - ]) - } - default: - return null - } - } -} diff --git a/general/nft_oracles_opensea.js b/general/nft_oracles_opensea.js deleted file mode 100644 index 5b86295..0000000 --- a/general/nft_oracles_opensea.js +++ /dev/null @@ -1,271 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const SCALE = new BN('1000000000000000000') -const GRAPH_URL = - 'https://api.thegraph.com/subgraphs/name/kowsaratz/nfts-price-v1-test' -const GRAPH_DEPLOYMENT_ID = 'QmVHBkatRPaafxR1Rxi3kjMZobAEbbuDnWaMRgTyu8HHcc' -const PRICE_TOLERANCE = '0.05' -const ETH_ID = "0x0000000000000000000000000000000000000000"; -const WETH_ID = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; - -async function getSaleTxs(collection, - graphUrl, deploymentID, period) { - let currentTimestamp = getTimestamp() - let periodCond = "" - if(period) - { - periodCond = "timestamp_gt: " + (currentTimestamp - period) - } - let skip = 0 - let saleTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - sales_last_rows:sales( - first: 1, - where: { - collection: "${collection.toLowerCase()}", - paymentToken_in: [ - "${ETH_ID}", - "${WETH_ID}" - ] - }, - orderBy: timestamp, - orderDirection: desc - ) { - usdtPrice - tokenId - timestamp - } - ` - : '' - const query = ` - { - sales( - first: 1000, - skip: ${skip}, - where: { - collection: "${collection.toLowerCase()}", - ${periodCond}, - timestamp_lt: ${currentTimestamp}, - paymentToken_in: [ - "${ETH_ID}", - "${WETH_ID}" - ] - }, - orderBy: timestamp, - orderDirection: desc - ) { - usdtPrice - tokenId - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - sales, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!sales.length) { - if (queryIndex === 1) { - saleTxs = saleTxs.concat(data.sales_last_rows) - } - break - } - saleTxs = saleTxs.concat(sales) - if (skip > 5000) { - currentTimestamp = sales[sales.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { - message: `SUBGRAPH_QUERY_FAILED: ${error.message}` - } - } - } - return saleTxs -} - -async function collectionFloorPrice(collection, period) { - return getSaleTxs( - collection, - GRAPH_URL, - GRAPH_DEPLOYMENT_ID, - period - ).then((saleTxs) => { - if(!saleTxs.length) - { - throw { message: "INVALID_SALES_LENGTH" } - } - return saleTxs.reduce((floorPrice, tx) => { - const priceDecimal = new BN('1000000') - let salePrice = new BN(tx.usdtPrice) - let price = salePrice.mul(SCALE).div(priceDecimal) - if(!floorPrice || price.lt(floorPrice)) - { - floorPrice = price - } - return floorPrice - }, undefined) - }) -} - -async function collectionAvgPrice(collection, period) { - return getSaleTxs( - collection, - GRAPH_URL, - GRAPH_DEPLOYMENT_ID, - period - ).then((saleTxs) => { - if(!saleTxs.length) - { - throw { message: "INVALID_SALES_LENGTH" } - } - let sumPrice = saleTxs.reduce((sum, tx) => { - const priceDecimal = new BN('1000000') - let salePrice = new BN(tx.usdtPrice) - let price = salePrice.mul(SCALE).div(priceDecimal) - return sum.add(price) - }, new BN(0)) - return sumPrice.div(new BN(saleTxs.length)) - }) -} - -module.exports = { - APP_NAME: 'nft_oracles_opensea', - APP_ID: 24, - REMOTE_CALL_TIMEOUT: 30000, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'collection_floor_price': - let { collection, period, hashTimestamp } = params - if(period < 0) - { - throw { message: "INVALID_PERIOD" } - } - let floorPrice = await collectionFloorPrice(collection, period) - return { - collection: collection, - period: period, - price: floorPrice.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - case 'collection_avg_price': { - let { collection, period, hashTimestamp } = params - if(period < 0) - { - throw { message: "INVALID_PERIOD" } - } - let avgPrice = await collectionAvgPrice(collection, period) - return { - collection: collection, - period: period, - price: avgPrice.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp } = params - switch (method) { - case 'collection_floor_price': { - if ( - !this.isPriceToleranceOk( - result.price, - request.data.result.price - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { collection, period } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: collection }, - { type: 'uint32', value: period }, - { type: 'uint256', value: request.data.result.price }, - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'collection_avg_price': { - if ( - !this.isPriceToleranceOk( - result.price, - request.data.result.price - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { collection, period } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: collection }, - { type: 'uint32', value: period }, - { type: 'uint256', value: request.data.result.price }, - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/parent_oracles.constant.json b/general/parent_oracles.constant.json deleted file mode 100644 index 6aa3098..0000000 --- a/general/parent_oracles.constant.json +++ /dev/null @@ -1,586 +0,0 @@ -{ - "TOKEN": "token", - "TOTAL_SUPPLY": "totalSupply", - "PAIRS": "pairs", - "STABLE_EXCHANGES": ["solidly"], - "PRICING_ASSETS": ["WETH", "WBTC", "USDC", "DAI", "BAL"], - "STABLE": "stable", - "WEIGHTED": "weighted", - "GRAPH_URL": { - "beets": "https://api.thegraph.com/subgraphs/name/shayanshiravani/beetsfi-minimal", - "solidly": "https://api.thegraph.com/subgraphs/name/shayanshiravani/solidly", - "spirit": "https://api.thegraph.com/subgraphs/name/shayanshiravani/spiritswap", - "uniswap": "https://api.studio.thegraph.com/query/21879/uniswapv2/0.0.1", - "spooky": "https://api.thegraph.com/subgraphs/name/shayanshiravani/spookyswap", - "traderjoe": "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/exchange", - "sushi": { - "1": "https://api.thegraph.com/subgraphs/name/sushiswap/exchange", - "137": "https://api.thegraph.com/subgraphs/name/sushiswap/matic-exchange", - "42161": "https://api.thegraph.com/subgraphs/name/sushiswap/arbitrum-exchange", - "43114": "https://api.thegraph.com/subgraphs/name/sushiswap/avalanche-exchange", - "250": "https://api.thegraph.com/subgraphs/name/sushiswap/fantom-exchange", - "56": "https://api.thegraph.com/subgraphs/name/sushiswap/bsc-exchange" - } - }, - "GRAPH_DEPLOYMENT_ID": { - "beets": "QmYqJ4a6BFjxGDgjN4oaGDdB31n1v2jvXyPZTcQ6TDEbZ3", - "solidly": "QmY4uUc7kjAC2sCbviZGoTwttbJ6dXezWELyrn9oebAr58", - "spirit": "QmUptbhTmAVCUTNeK2afecQJ3DFLgk9m4dBerfpqkTEJvi", - "uniswap": "QmYpb9UBs4k533aDhH8Z9STjyr3WADC3NNtUzSbni4Ezfu", - "spooky": "QmQnteZnJmshPHuUbYNxSCVTEyKunncwCUgYiyqEFQeDV7", - "traderjoe": "QmW62QDNJriA73HeyDAwnEaFyDNLZc7o8m5ewSALDRedoM", - "sushi": { - "1": "QmbxC2AYMvnTq6UBAvkAch6KUsRy3VaGHgt6s6c8nfa1hm", - "137": "QmWANhcqU1Fn9UsGWCzNzcURPJM9f3egyz14GF7jxKFJQG", - "42161": "QmeBQRHngJLJ2r84Vvp3mgKbgYXHmAqc3dWkXoywU9ze3d", - "43114": "QmTbmXhUr67gAt5eLy5zUo7dRqATG8S8QgPEcdVhmenRNU", - "250": "QmSpAjYK1DxDvVhiSKK3M7wV1yaukSuV6UzKhrSsrKvf53", - "56": "QmeVMMA1rUfF5y93NmQuJDWbXCapNpw4kyUNretC62NRhA" - } - }, - "CHAINS_AVG_BLOCK_TIME": { - "250": 1.5 - }, - "CHAINS_BLOCK_COUNT_FOR_30_MINS": { - "250": 1200 - }, - "GET_POOL_INFO_ABI": [ - { - "inputs": [], - "name": "getPoolId", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getVault", - "outputs": [ - { "internalType": "contract IVault", "name": "", "type": "address" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAmplificationParameter", - "outputs": [ - { "internalType": "uint256", "name": "value", "type": "uint256" }, - { "internalType": "bool", "name": "isUpdating", "type": "bool" }, - { "internalType": "uint256", "name": "precision", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNormalizedWeights", - "outputs": [ - { "internalType": "uint256[]", "name": "", "type": "uint256[]" } - ], - "stateMutability": "view", - "type": "function" - } - ], - - "POOL_TOKENS_ABI": [ - { - "inputs": [ - { "internalType": "bytes32", "name": "poolId", "type": "bytes32" } - ], - "name": "getPoolTokens", - "outputs": [ - { - "internalType": "contract IERC20[]", - "name": "tokens", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "balances", - "type": "uint256[]" - }, - { - "internalType": "uint256", - "name": "lastChangeBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - - "EVENTS_ABI": { - "solidly": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "reserve0", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reserve1", - "type": "uint256" - } - ], - "name": "Sync", - "type": "event" - } - ], - "spirit": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - } - ], - "uniswap": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - } - ], - "spooky": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - } - ], - "traderjoe": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - } - ], - "sushi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1In", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount0Out", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount1Out", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint112", - "name": "reserve0", - "type": "uint112" - }, - { - "indexed": false, - "internalType": "uint112", - "name": "reserve1", - "type": "uint112" - } - ], - "name": "Sync", - "type": "event" - } - ] - }, - - "ERC20_TOTAL_SUPPLY_ABI": [ - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "payable": false, - "stateMutability": "view", - "type": "function" - } - ], - "ERC20_DECIMALS_ABI": [ - { - "inputs": [], - "name": "decimals", - "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], - "stateMutability": "view", - "type": "function" - } - ], - - "Info_ABI": [ - { - "inputs": [], - "name": "getReserves", - "outputs": [ - { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, - { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, - { - "internalType": "uint32", - "name": "_blockTimestampLast", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token0", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token1", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stable", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - } - ], - "EVENT_TOPICS": { - "solidly": [ - "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", - "0xcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a" - ], - "spirit": [ - "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", - "0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1" - ], - "uniswap": [ - "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", - "0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1" - ], - "spooky": [ - "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", - "0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1" - ], - "traderjoe": [ - "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", - "0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1" - ], - "sushi": [ - "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822", - "0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1" - ] - } -} diff --git a/general/parent_oracles_v2.js b/general/parent_oracles_v2.js deleted file mode 100644 index c8144de..0000000 --- a/general/parent_oracles_v2.js +++ /dev/null @@ -1,794 +0,0 @@ -const { - axios, - toBaseUnit, - soliditySha3, - BN, - BNSqrt, - multiCall, - groupBy, - flatten -} = MuonAppUtils - -const { - Info_ABI, - TOKEN, - TOTAL_SUPPLY, - PAIRS, - STABLE_EXCHANGES, - GRAPH_URL, - GRAPH_DEPLOYMENT_ID, - ERC20_TOTAL_SUPPLY_ABI, - ERC20_DECIMALS_ABI -} = require('./parent_oracles.constant.json') -const getTimestamp = () => Math.floor(Date.now() / 1000) - -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - APP_NAME: 'parent_oracles_v2', - APP_ID: 19, - config: APP_CONFIG, - // REMOTE_CALL_TIMEOUT: 60000, - SCALE: new BN('1000000000000000000'), - PRICE_TOLERANCE: '0.05', - VALID_CHAINS: ['250'], - - getTokenTxs: async function (pairAddr, graphUrl, deploymentID, start, end) { - const currentTimestamp = getTimestamp() - const timestamp_lt = end ? end : currentTimestamp - const timestamp_gt = start ? start : currentTimestamp - 1800 - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - pair: "${pairAddr.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - reserve0 - reserve1 - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - pair: "${pairAddr.toLowerCase()}", - timestamp_gt: ${timestamp_gt}, - timestamp_lt: ${timestamp_lt} - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - reserve0 - reserve1 - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: `SUBGRAPH_QUERY_FAILED:${error.message}` } - } - } - return tokenTxs - }, - - getReturnValue: function (info, methodName) { - return info.find((item) => item.methodName === methodName)?.returnValues - }, - - getInfoContract: function (multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) - }, - - makeCallContextDecimal: function (metadata, prefix) { - let callContext = metadata.map((item) => [ - { - reference: prefix + ':' + 't0' + ':' + item.t0, - contractAddress: item.t0, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't0' + ':' + item.t0, - methodName: 'decimals' - } - ], - context: { - exchange: item.exchange, - chainId: item.chainId - } - }, - { - reference: prefix + ':' + 't1' + ':' + item.t1, - contractAddress: item.t1, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't1' + ':' + item.t1, - methodName: 'decimals' - } - ], - context: { - exchange: item.exchange, - chainId: item.chainId - } - } - ]) - - callContext = [].concat.apply([], callContext) - return callContext - }, - - getFinalMetaData: function (resultDecimals, prevMetaData, prefix) { - let metadata = prevMetaData.map((item) => { - let t0 = this.getInfoContract( - resultDecimals, - prefix + ':' + 't0' + ':' + item.t0 - ) - let t1 = this.getInfoContract( - resultDecimals, - prefix + ':' + 't1' + ':' + item.t1 - ) - return { - ...item, - dec0: new BN(10) - .pow( - new BN(this.getReturnValue(t0[0].callsReturnContext, 'decimals')[0]) - ) - .toString(), - dec1: new BN(10) - .pow( - new BN(this.getReturnValue(t1[0].callsReturnContext, 'decimals')[0]) - ) - .toString() - } - }) - return metadata - }, - prepareTokenTx: async function (pair, exchange, start, end, chainId) { - const tokenTxs = await this.getTokenTxs( - pair, - GRAPH_URL[exchange], - GRAPH_DEPLOYMENT_ID[exchange], - start, - end - ) - - return tokenTxs - }, - - tokenPrice: function (isStable, index, reserve0, reserve1) { - let [reserveA, reserveB] = - index == 0 ? [reserve0, reserve1] : [reserve1, reserve0] - if (isStable) { - let xy = this._k(reserve0, reserve1) - let y = reserveB.sub(this._get_y(reserveA.add(this.SCALE), xy, reserveB)) - return y - } else { - return reserveB.mul(this.SCALE).div(reserveA) - } - }, - - _k: function (x, y) { - let _a = x.mul(y).div(this.SCALE) // xy - let _b = x.mul(x).div(this.SCALE).add(y.mul(y).div(this.SCALE)) // x^2 + y^2 - return _a.mul(_b).div(this.SCALE) // xy(x^2 + y^2) = x^3(y) + y^3(x) - }, - - _get_y: function (x0, xy, y) { - for (let i = 0; i < 255; i++) { - let y_prev = y - let k = this._f(x0, y) - if (k.lt(xy)) { - let dy = xy.sub(k).mul(this.SCALE).div(this._d(x0, y)) - y = y.add(dy) - } else { - let dy = k.sub(xy).mul(this.SCALE).div(this._d(x0, y)) - y = y.sub(dy) - } - if (y.gt(y_prev)) { - if (y.sub(y_prev).lte(new BN('1'))) { - return y - } - } else { - if (y_prev.sub(y).lte(new BN('1'))) { - return y - } - } - } - }, - - _f: function (x0, y) { - let x0y3 = x0 - .mul(y.mul(y).div(this.SCALE).mul(y).div(this.SCALE)) - .div(this.SCALE) - let x03y = x0 - .mul(x0) - .div(this.SCALE) - .mul(x0) - .div(this.SCALE) - .mul(y) - .div(this.SCALE) - return x0y3.add(x03y) - }, - - _d: function (x0, y) { - let y2 = y.mul(y).div(this.SCALE) - let x03 = x0.mul(x0).div(this.SCALE).mul(x0).div(this.SCALE) - - return x0.mul(new BN('3')).mul(y2).div(this.SCALE).add(x03) - }, - - pairVWAP: async function (pair, index, isStable, start, end) { - const tokenTxs = await this.prepareTokenTx( - pair.address, - pair.exchange, - start, - end, - pair.chainId - ) - if (tokenTxs) { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - if ( - (swap.amount0In != 0 && swap.amount1In != 0) || - (swap.amount0Out != 0 && swap.amount1Out != 0) || - (swap.amount0In != 0 && swap.amount0Out != 0) || - (swap.amount1In != 0 && swap.amount1Out != 0) - ) { - continue - } - let reserve0 = toBaseUnit(swap.reserve0, '18') - let reserve1 = toBaseUnit(swap.reserve1, '18') - let price = this.tokenPrice(isStable, index, reserve0, reserve1) - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - volume = toBaseUnit(swap.amount0In, '18') - } else { - volume = toBaseUnit(swap.amount0Out, '18') - } - break - case 1: - if (swap.amount0In != 0) { - volume = toBaseUnit(swap.amount1Out, '18') - } else { - volume = toBaseUnit(swap.amount1In, '18') - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { pair, tokenPrice, sumVolume } - } - return { pair, tokenPrice: new BN('0'), sumVolume: new BN('0') } - } - }, - - makeCallContextInfo: function (pair, prefix) { - let calls = [] - let pairCache = [] - - pair.forEach((item) => { - if (!pairCache.includes(item.address)) { - pairCache.push(item.address) - const stableCall = STABLE_EXCHANGES.includes(item.exchange) - ? [ - { - reference: prefix + ':' + item.address, - methodName: 'stable' - } - ] - : [] - calls.push({ - reference: prefix + '_' + item.exchange + ':' + item.address, - contractAddress: item.address, - abi: Info_ABI, - calls: [ - { - reference: prefix + ':' + item.address, - methodName: 'getReserves' - }, - { - reference: prefix + ':' + item.address, - methodName: 'token0' - }, - { - reference: prefix + ':' + item.address, - methodName: 'token1' - }, - ...stableCall - ], - // TODO if it's possible remove pairIndex we need it in aggregate - context: { - // pairIndex: 0, - pair: item.address, - exchange: item.exchange, - chainId: item.chainId - } - }) - } - }) - - return calls - }, - - prepareCallContext: function (token, pairs0, pairs1, chainId) { - const contractCallContextToken = [ - { - reference: TOKEN + '_' + ':' + token, - contractAddress: token, - abi: Info_ABI, - calls: [ - { - reference: TOKEN + ':' + token, - methodName: 'getReserves' - }, - { - reference: TOKEN + ':' + token, - methodName: 'token0' - }, - { - reference: TOKEN + ':' + token, - methodName: 'token1' - } - ], - context: { - chainId: chainId - } - } - ] - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_TOTAL_SUPPLY_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ], - context: { - chainId: chainId - } - } - ] - - const contractCallContextPairs = this.makeCallContextInfo( - [...pairs0, ...pairs1], - PAIRS - ) - - return [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs - ] - }, - - runMultiCall: async function (contractCallContext) { - let groupByChainId = groupBy(contractCallContext, 'context.chainId') - - let multiCallPromises = Object.keys(groupByChainId).map((chainId) => - multiCall(Number(chainId), groupByChainId[chainId]) - ) - let result = await Promise.all(multiCallPromises) - return flatten(result) - }, - - getMetadata: function (multiCallInfo, filterBy) { - const info = this.getInfoContract(multiCallInfo, filterBy) - let metadata = info.map((item) => { - const reserves = this.getReturnValue( - item.callsReturnContext, - 'getReserves' - ) - - const stable = this.getReturnValue(item.callsReturnContext, 'stable') - - return { - reference: item.reference, - pair: item.context.pair, - // pairIndex: item.context.pairIndex, - exchange: item.context.exchange, - chainId: item.context.chainId, - r0: reserves[0], - r1: reserves[1], - - t0: this.getReturnValue(item.callsReturnContext, 'token0')[0], - t1: this.getReturnValue(item.callsReturnContext, 'token1')[0], - stable: stable ? stable[0] : false - } - }) - return metadata - }, - - prepareData: async function (multiCallResult) { - let metadata = this.getMetadata(multiCallResult, TOKEN) - let pairsMetadata = this.getMetadata(multiCallResult, PAIRS) - const callContextDecimalToken = this.makeCallContextDecimal(metadata, TOKEN) - - let callContextPairs = this.makeCallContextDecimal(pairsMetadata, PAIRS) - - const contractCallContextDecimal = [ - ...callContextDecimalToken, - ...callContextPairs - ] - let resultDecimals = await this.runMultiCall(contractCallContextDecimal) - - metadata = this.getFinalMetaData(resultDecimals, metadata, TOKEN)[0] - pairsMetadata = this.getFinalMetaData(resultDecimals, pairsMetadata, PAIRS) - - return { metadata, pairsMetadata } - }, - - prepareMetadataForTokenVWAP: async function (pairs) { - const contractCallContext = this.makeCallContextInfo(pairs, PAIRS) - let result = await this.runMultiCall(contractCallContext) - - let metadata = this.getMetadata(result, PAIRS) - - let callContextPairs = this.makeCallContextDecimal(metadata, PAIRS) - let resultDecimals = await this.runMultiCall(callContextPairs) - metadata = this.getFinalMetaData(resultDecimals, metadata, PAIRS) - return metadata - }, - - preparePromisePair: function (token, pairs, metadata, start, end) { - return this.makePromisePair(token, pairs, metadata, start, end) - }, - makePromisePair: function (token, pairs, metadata, start, end) { - let inputToken = token - return pairs.map((pair) => { - let currentMetadata = metadata.find( - (item) => - item.reference === PAIRS + '_' + pair.exchange + ':' + pair.address - ) - let index = - inputToken.toLowerCase() == currentMetadata.t0.toLowerCase() ? 0 : 1 - if (inputToken.toLowerCase() == currentMetadata.t0.toLowerCase()) { - inputToken = currentMetadata.t1 - } else if (inputToken.toLowerCase() == currentMetadata.t1.toLowerCase()) { - inputToken = currentMetadata.t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - return this.pairVWAP( - pair, - index, - // pair.exchange, - currentMetadata.stable, - start, - end - ) - }) - }, - calculatePriceToken: function (pairVWAPs, pairs) { - let volume = pairVWAPs.reduce((previousValue, currentValue) => { - return previousValue.add(currentValue.sumVolume) - }, new BN(0)) - let price = pairVWAPs.reduce((price, currentValue) => { - return price.mul(currentValue.tokenPrice).div(this.SCALE) - }, new BN(this.SCALE)) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } - }, - - tokenVWAP: async function (token, pairs, metadata, start, end) { - if (!metadata) { - metadata = await this.prepareMetadataForTokenVWAP(pairs) - } - let pairVWAPPromises = this.preparePromisePair( - token, - pairs, - metadata, - start, - end - ) - - pairVWAPPromises = flatten(pairVWAPPromises) - let pairVWAPs = await Promise.all(pairVWAPPromises) - let { price, volume } = this.calculatePriceToken(pairVWAPs, pairs) - - return { price, volume } - }, - - calculatePrice: function ( - reserveA, - reserveB, - pairs0, - pairs1, - _tokenVWAPResults, - totalSupply - ) { - let sumVolume = new BN('0') - - let priceA, priceB - priceA = priceB = new BN(this.SCALE) - - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - sumVolume = sumVolume.add(volume) - priceA = price - } - - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - sumVolume = sumVolume.add(volume) - priceB = price - } - - let sqrtK = BNSqrt(reserveA.mul(reserveB)) - let sqrtP = BNSqrt(priceA.mul(priceB)) - const fairPrice = sqrtK.mul(sqrtP).mul(new BN('2')).div(totalSupply) - - return { price: fairPrice, sumVolume } - }, - - LPTokenPrice: async function (token, pairs0, pairs1, chainId, start, end) { - const contractCallContext = this.prepareCallContext( - token, - pairs0, - pairs1, - chainId - ) - let result = await this.runMultiCall(contractCallContext) - if (result) { - const { metadata, pairsMetadata } = await this.prepareData(result) - let totalSupply = this.getInfoContract(result, TOTAL_SUPPLY)[0] - .callsReturnContext - totalSupply = new BN(totalSupply[0].returnValues[0]) - - let reserveA = new BN(metadata.r0) - .mul(this.SCALE) - .div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1) - .mul(this.SCALE) - .div(new BN(metadata.dec1)) - - let _tokenVWAPResults = await Promise.all([ - pairs0.length - ? this.tokenVWAP(metadata.t0, pairs0, pairsMetadata, start, end) - : null, - pairs1.length - ? this.tokenVWAP(metadata.t1, pairs1, pairsMetadata, start, end) - : null - ]) - - const { price, sumVolume } = this.calculatePrice( - reserveA, - reserveB, - pairs0, - pairs1, - _tokenVWAPResults, - totalSupply - ) - return { - price: price.toString(), - sumVolume - } - } - }, - - onRequest: async function (request) { - // throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - // Input validation or constraint - let { token, pairs, hashTimestamp, chainId, start, end } = params - // TODO do we need check valid chainId if yes whats the valid chain for aggregate - if (chainId) { - // if (!this.VALID_CHAINS.includes(chainId)) { - // throw { message: 'INVALID_CHAIN' } - // } - this.config = { ...this.config, chainId } - } - let { price, volume } = await this.tokenVWAP( - token, - pairs, - null, - start, - end - ) - return { - token: token, - tokenPrice: price.toString(), - // pairs: pairs, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}), - ...(chainId ? { chainId } : {}), - ...(start ? { start } : {}), - ...(end ? { end } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, hashTimestamp, chainId, start, end } = - params - - if (chainId) { - // if (!this.VALID_CHAINS.includes(chainId)) { - // throw { message: 'INVALID_CHAIN' } - // } - this.config = { ...this.config, chainId } - } - // TODO :which will be send for pairs in sig array of address or obj - const { price, sumVolume } = await this.LPTokenPrice( - token, - pairs0, - pairs1, - chainId, - start, - end - ) - - return { - token: token, - tokenPrice: price, - // pairs0: pairs0, - // pairs1: pairs1, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}), - ...(chainId ? { chainId } : {}), - ...(start ? { start } : {}), - ...(end ? { end } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(this.PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - // TODO set type of pairs based on sig - - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, chainId, start, end } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - // { type: 'address[]', value: pairs }, - ...(chainId ? [{ type: 'string', value: chainId }] : []), - ...(start ? [{ type: 'uint256', value: start }] : []), - ...(end ? [{ type: 'uint256', value: end }] : []), - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, chainId, start, end } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - // { type: 'address[]', value: pairs0 }, - // { type: 'address[]', value: pairs1 }, - ...(chainId ? [{ type: 'string', value: chainId }] : []), - ...(start ? [{ type: 'uint256', value: start }] : []), - ...(end ? [{ type: 'uint256', value: end }] : []), - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/parent_oracles_v3.js b/general/parent_oracles_v3.js deleted file mode 100644 index 2805448..0000000 --- a/general/parent_oracles_v3.js +++ /dev/null @@ -1,785 +0,0 @@ -const { - axios, - toBaseUnit, - soliditySha3, - BN, - BNSqrt, - multiCall, - groupBy, - flatten, - ethGetBlock, - ethGetBlockNumber, - ethGetPastEvents -} = MuonAppUtils - -const { - Info_ABI, - TOKEN, - TOTAL_SUPPLY, - PAIRS, - STABLE_EXCHANGES, - ERC20_TOTAL_SUPPLY_ABI, - ERC20_DECIMALS_ABI, - CHAINS_AVG_BLOCK_TIME, - CHAINS_BLOCK_COUNT_FOR_30_MINS, - EVENTS_ABI, - EVENT_TOPICS -} = require('./parent_oracles.constant.json') -const getTimestamp = () => Math.floor(Date.now() / 1000) - -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - APP_NAME: 'parent_oracles_v3', - APP_ID: 27, - config: APP_CONFIG, - // REMOTE_CALL_TIMEOUT: 60000, - SCALE: new BN('1000000000000000000'), - PRICE_TOLERANCE: '0.05', - VALID_CHAINS: ['250'], - - getEvents: async function (chainId, pair, exchange) { - try { - const latestBlock = await ethGetBlockNumber(chainId) - let startBlock = latestBlock - 1200 - let events = await ethGetPastEvents( - chainId, - pair, - EVENTS_ABI[exchange], - 'allEvents', - { - fromBlock: startBlock.toString(), - toBlock: latestBlock.toString(), - topics: [EVENT_TOPICS[exchange]] - } - ) - - // console.log(events) - return events - } catch (error) { - throw { message: `GET_EVENTS_ERROR: ${error.message}` } - } - }, - - getTokenTxs: async function (pair, exchange, chainId) { - let events = await this.getEvents(chainId, pair, exchange) - let result = [] - console.log(!events.length, events.length) - - if (!events.length) { - throw { message: 'NO_EVENTS_EXIST' } - } - const firstBlockNumber = events[events.length - 1].blockNumber - const firstBlock = await ethGetBlock(chainId, firstBlockNumber) - const firstBlockTimestamp = firstBlock.timestamp - await Promise.all( - events.map(async (item, i) => { - if (item.event == 'Swap' && !item.removed) { - const sync = events[i - 1] - if ( - i == 0 || - !sync || - sync.event != 'Sync' || - item.blockNumber != sync.blockNumber || - item.transactionHash != sync.transactionHash || - item.logIndex != sync.logIndex + 1 - ) { - throw { message: 'SYNC_EVENT_NOT_FOUND' } - } - let timestamp = Math.floor( - firstBlockTimestamp + - (item.blockNumber - firstBlockNumber) * - CHAINS_AVG_BLOCK_TIME[chainId] - ) - result.push({ - blockNumber: item.blockNumber, - transactionHash: item.transactionHash, - amount0In: item.returnValues.amount0In, - amount1In: item.returnValues.amount1In, - amount0Out: item.returnValues.amount0Out, - amount1Out: item.returnValues.amount1Out, - reserve0: sync.returnValues.reserve0, - reserve1: sync.returnValues.reserve1, - timestamp: timestamp - }) - } - }) - ) - return result - }, - - getReturnValue: function (info, methodName) { - return info.find((item) => item.methodName === methodName)?.returnValues - }, - - getInfoContract: function (multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) - }, - - makeCallContextDecimal: function (metadata, prefix) { - let callContext = metadata.map((item) => [ - { - reference: prefix + ':' + 't0' + ':' + item.t0, - contractAddress: item.t0, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't0' + ':' + item.t0, - methodName: 'decimals' - } - ], - context: { - exchange: item.exchange, - chainId: item.chainId - } - }, - { - reference: prefix + ':' + 't1' + ':' + item.t1, - contractAddress: item.t1, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't1' + ':' + item.t1, - methodName: 'decimals' - } - ], - context: { - exchange: item.exchange, - chainId: item.chainId - } - } - ]) - - callContext = [].concat.apply([], callContext) - return callContext - }, - - getFinalMetaData: function (resultDecimals, prevMetaData, prefix) { - let metadata = prevMetaData.map((item) => { - let t0 = this.getInfoContract( - resultDecimals, - prefix + ':' + 't0' + ':' + item.t0 - ) - let t1 = this.getInfoContract( - resultDecimals, - prefix + ':' + 't1' + ':' + item.t1 - ) - return { - ...item, - dec0: new BN(10) - .pow( - new BN(this.getReturnValue(t0[0].callsReturnContext, 'decimals')[0]) - ) - .toString(), - dec1: new BN(10) - .pow( - new BN(this.getReturnValue(t1[0].callsReturnContext, 'decimals')[0]) - ) - .toString() - } - }) - return metadata - }, - prepareTokenTx: async function (pair, exchange, chainId, start, end) { - const tokenTxs = await this.getTokenTxs(pair, exchange, chainId, start, end) - - return tokenTxs - }, - - tokenPrice: function (isStable, index, reserve0, reserve1) { - let [reserveA, reserveB] = - index == 0 ? [reserve0, reserve1] : [reserve1, reserve0] - if (isStable) { - let xy = this._k(reserve0, reserve1) - let y = reserveB.sub(this._get_y(reserveA.add(this.SCALE), xy, reserveB)) - return y - } else { - return reserveB.mul(this.SCALE).div(reserveA) - } - }, - - _k: function (x, y) { - let _a = x.mul(y).div(this.SCALE) // xy - let _b = x.mul(x).div(this.SCALE).add(y.mul(y).div(this.SCALE)) // x^2 + y^2 - return _a.mul(_b).div(this.SCALE) // xy(x^2 + y^2) = x^3(y) + y^3(x) - }, - - _get_y: function (x0, xy, y) { - for (let i = 0; i < 255; i++) { - let y_prev = y - let k = this._f(x0, y) - if (k.lt(xy)) { - let dy = xy.sub(k).mul(this.SCALE).div(this._d(x0, y)) - y = y.add(dy) - } else { - let dy = k.sub(xy).mul(this.SCALE).div(this._d(x0, y)) - y = y.sub(dy) - } - if (y.gt(y_prev)) { - if (y.sub(y_prev).lte(new BN('1'))) { - return y - } - } else { - if (y_prev.sub(y).lte(new BN('1'))) { - return y - } - } - } - }, - - _f: function (x0, y) { - let x0y3 = x0 - .mul(y.mul(y).div(this.SCALE).mul(y).div(this.SCALE)) - .div(this.SCALE) - let x03y = x0 - .mul(x0) - .div(this.SCALE) - .mul(x0) - .div(this.SCALE) - .mul(y) - .div(this.SCALE) - return x0y3.add(x03y) - }, - - _d: function (x0, y) { - let y2 = y.mul(y).div(this.SCALE) - let x03 = x0.mul(x0).div(this.SCALE).mul(x0).div(this.SCALE) - - return x0.mul(new BN('3')).mul(y2).div(this.SCALE).add(x03) - }, - - pairVWAP: async function ( - pair, - index, - exchange, - chainId, - metadata, - start, - end - ) { - const tokenTxs = await this.prepareTokenTx( - pair, - exchange, - chainId, - start, - end - ) - if (tokenTxs) { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - if ( - (swap.amount0In != 0 && swap.amount1In != 0) || - (swap.amount0Out != 0 && swap.amount1Out != 0) || - (swap.amount0In != 0 && swap.amount0Out != 0) || - (swap.amount1In != 0 && swap.amount1Out != 0) - ) { - continue - } - let dec0 = new BN(metadata.dec0) - let dec1 = new BN(metadata.dec1) - let reserve0 = new BN(swap.reserve0).mul(this.SCALE).div(dec0) - let reserve1 = new BN(swap.reserve1).mul(this.SCALE).div(dec1) - let price = this.tokenPrice(metadata.stable, index, reserve0, reserve1) - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - volume = new BN(swap.amount0In).mul(this.SCALE).div(dec0) - } else { - volume = new BN(swap.amount0Out).mul(this.SCALE).div(dec0) - } - break - case 1: - if (swap.amount0In != 0) { - volume = new BN(swap.amount1Out).mul(this.SCALE).div(dec1) - } else { - volume = new BN(swap.amount1In).mul(this.SCALE).div(dec1) - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { pair, tokenPrice, sumVolume } - } - return { pair, tokenPrice: new BN('0'), sumVolume: new BN('0') } - } - }, - - makeCallContextInfo: function (pair, prefix) { - let calls = [] - let pairCache = [] - - pair.forEach((item) => { - if (!pairCache.includes(item.address)) { - pairCache.push(item.address) - const stableCall = STABLE_EXCHANGES.includes(item.exchange) - ? [ - { - reference: prefix + ':' + item.address, - methodName: 'stable' - } - ] - : [] - calls.push({ - reference: prefix + '_' + item.exchange + ':' + item.address, - contractAddress: item.address, - abi: Info_ABI, - calls: [ - { - reference: prefix + ':' + item.address, - methodName: 'getReserves' - }, - { - reference: prefix + ':' + item.address, - methodName: 'token0' - }, - { - reference: prefix + ':' + item.address, - methodName: 'token1' - }, - ...stableCall - ], - // TODO if it's possible remove pairIndex we need it in aggregate - context: { - // pairIndex: 0, - pair: item.address, - exchange: item.exchange, - chainId: item.chainId - } - }) - } - }) - - return calls - }, - - prepareCallContext: function (token, pairs0, pairs1, chainId) { - const contractCallContextToken = [ - { - reference: TOKEN + '_' + ':' + token, - contractAddress: token, - abi: Info_ABI, - calls: [ - { - reference: TOKEN + ':' + token, - methodName: 'getReserves' - }, - { - reference: TOKEN + ':' + token, - methodName: 'token0' - }, - { - reference: TOKEN + ':' + token, - methodName: 'token1' - } - ], - context: { - chainId: chainId - } - } - ] - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_TOTAL_SUPPLY_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ], - context: { - chainId: chainId - } - } - ] - - const contractCallContextPairs = this.makeCallContextInfo( - [...pairs0, ...pairs1], - PAIRS - ) - - return [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs - ] - }, - - runMultiCall: async function (contractCallContext) { - let groupByChainId = groupBy(contractCallContext, 'context.chainId') - let multiCallPromises = Object.keys(groupByChainId).map((chainId) => - multiCall(Number(chainId), groupByChainId[chainId]) - ) - let result = await Promise.all(multiCallPromises) - return flatten(result) - }, - - getMetadata: function (multiCallInfo, filterBy) { - const info = this.getInfoContract(multiCallInfo, filterBy) - let metadata = info.map((item) => { - const reserves = this.getReturnValue( - item.callsReturnContext, - 'getReserves' - ) - - const stable = this.getReturnValue(item.callsReturnContext, 'stable') - - return { - reference: item.reference, - pair: item.context.pair, - // pairIndex: item.context.pairIndex, - exchange: item.context.exchange, - chainId: item.context.chainId, - r0: reserves[0], - r1: reserves[1], - - t0: this.getReturnValue(item.callsReturnContext, 'token0')[0], - t1: this.getReturnValue(item.callsReturnContext, 'token1')[0], - stable: stable ? stable[0] : false - } - }) - return metadata - }, - - prepareData: async function (multiCallResult) { - let metadata = this.getMetadata(multiCallResult, TOKEN) - let pairsMetadata = this.getMetadata(multiCallResult, PAIRS) - const callContextDecimalToken = this.makeCallContextDecimal(metadata, TOKEN) - - let callContextPairs = this.makeCallContextDecimal(pairsMetadata, PAIRS) - - const contractCallContextDecimal = [ - ...callContextDecimalToken, - ...callContextPairs - ] - let resultDecimals = await this.runMultiCall(contractCallContextDecimal) - - metadata = this.getFinalMetaData(resultDecimals, metadata, TOKEN)[0] - pairsMetadata = this.getFinalMetaData(resultDecimals, pairsMetadata, PAIRS) - - return { metadata, pairsMetadata } - }, - - prepareMetadataForTokenVWAP: async function (pairs) { - const contractCallContext = this.makeCallContextInfo(pairs, PAIRS) - let result = await this.runMultiCall(contractCallContext) - - let metadata = this.getMetadata(result, PAIRS) - - let callContextPairs = this.makeCallContextDecimal(metadata, PAIRS) - let resultDecimals = await this.runMultiCall(callContextPairs) - metadata = this.getFinalMetaData(resultDecimals, metadata, PAIRS) - return metadata - }, - - preparePromisePair: function (token, pairs, metadata, start, end) { - return this.makePromisePair(token, pairs, metadata, start, end) - }, - makePromisePair: function (token, pairs, metadata, start, end) { - let inputToken = token - return pairs.map((pair) => { - let currentMetadata = metadata.find( - (item) => - item.reference === PAIRS + '_' + pair.exchange + ':' + pair.address - ) - let index = - inputToken.toLowerCase() == currentMetadata.t0.toLowerCase() ? 0 : 1 - if (inputToken.toLowerCase() == currentMetadata.t0.toLowerCase()) { - inputToken = currentMetadata.t1 - } else if (inputToken.toLowerCase() == currentMetadata.t1.toLowerCase()) { - inputToken = currentMetadata.t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - return this.pairVWAP( - pair.address, - index, - pair.exchange, - pair.chainId, - currentMetadata, - start, - end - ) - }) - }, - calculatePriceToken: function (pairVWAPs, pairs) { - let volume = pairVWAPs.reduce((previousValue, currentValue) => { - return previousValue.add(currentValue.sumVolume) - }, new BN(0)) - let price = pairVWAPs.reduce((price, currentValue) => { - return price.mul(currentValue.tokenPrice).div(this.SCALE) - }, new BN(this.SCALE)) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } - }, - - tokenVWAP: async function (token, pairs, metadata, start, end) { - if (!metadata) { - metadata = await this.prepareMetadataForTokenVWAP(pairs) - } - let pairVWAPPromises = this.preparePromisePair( - token, - pairs, - metadata, - start, - end - ) - - pairVWAPPromises = flatten(pairVWAPPromises) - let pairVWAPs = await Promise.all(pairVWAPPromises) - // TODO remove p it's test for beets - let { p, price, volume } = this.calculatePriceToken(pairVWAPs, pairs) - - return { p, price, volume } - }, - - calculatePrice: function ( - reserveA, - reserveB, - pairs0, - pairs1, - _tokenVWAPResults, - totalSupply - ) { - let sumVolume = new BN('0') - - let priceA, priceB - priceA = priceB = new BN(this.SCALE) - - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - sumVolume = sumVolume.add(volume) - priceA = price - } - - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - sumVolume = sumVolume.add(volume) - priceB = price - } - - let sqrtK = BNSqrt(reserveA.mul(reserveB)) - let sqrtP = BNSqrt(priceA.mul(priceB)) - const fairPrice = sqrtK.mul(sqrtP).mul(new BN('2')).div(totalSupply) - - return { price: fairPrice, sumVolume } - }, - - LPTokenPrice: async function (token, pairs0, pairs1, chainId, start, end) { - const contractCallContext = this.prepareCallContext( - token, - pairs0, - pairs1, - chainId - ) - let result = await this.runMultiCall(contractCallContext) - if (result) { - const { metadata, pairsMetadata } = await this.prepareData(result) - let totalSupply = this.getInfoContract(result, TOTAL_SUPPLY)[0] - .callsReturnContext - totalSupply = new BN(totalSupply[0].returnValues[0]) - - let reserveA = new BN(metadata.r0) - .mul(this.SCALE) - .div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1) - .mul(this.SCALE) - .div(new BN(metadata.dec1)) - - let _tokenVWAPResults = await Promise.all([ - pairs0.length - ? this.tokenVWAP(metadata.t0, pairs0, pairsMetadata, start, end) - : null, - pairs1.length - ? this.tokenVWAP(metadata.t1, pairs1, pairsMetadata, start, end) - : null - ]) - - const { price, sumVolume } = this.calculatePrice( - reserveA, - reserveB, - pairs0, - pairs1, - _tokenVWAPResults, - totalSupply - ) - return { - price: price.toString(), - sumVolume - } - } - }, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - // Input validation or constraint - let { token, pairs, hashTimestamp, chainId, start, end } = params - // TODO do we need check valid chainId if yes whats the valid chain for aggregate - if (chainId) { - // if (!this.VALID_CHAINS.includes(chainId)) { - // throw { message: 'INVALID_CHAIN' } - // } - this.config = { ...this.config, chainId } - } - // TODO remove p it's for test beets - let { p, price, volume } = await this.tokenVWAP( - token, - pairs, - null, - start, - end - ) - // TODO remove tokenPriceByAmount it's for test beets - - return { - token: token, - tokenPrice: price.toString(), - // tokenPriceByAmount: p.toString(), - - // pairs: pairs, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}), - ...(chainId ? { chainId } : {}), - ...(start ? { start } : {}), - ...(end ? { end } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, hashTimestamp, chainId, start, end } = - params - - if (chainId) { - // if (!this.VALID_CHAINS.includes(chainId)) { - // throw { message: 'INVALID_CHAIN' } - // } - this.config = { ...this.config, chainId } - } - // TODO :which will be send for pairs in sig array of address or obj - const { price, sumVolume } = await this.LPTokenPrice( - token, - pairs0, - pairs1, - chainId, - start, - end - ) - - return { - token: token, - tokenPrice: price, - // pairs0: pairs0, - // pairs1: pairs1, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}), - ...(chainId ? { chainId } : {}), - ...(start ? { start } : {}), - ...(end ? { end } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(this.PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - // TODO set type of pairs based on sig - - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, chainId, start, end } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - // { type: 'address[]', value: pairs }, - ...(chainId ? [{ type: 'string', value: chainId }] : []), - ...(start ? [{ type: 'uint256', value: start }] : []), - ...(end ? [{ type: 'uint256', value: end }] : []), - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, chainId, start, end } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - // { type: 'address[]', value: pairs0 }, - // { type: 'address[]', value: pairs1 }, - ...(chainId ? [{ type: 'string', value: chainId }] : []), - ...(start ? [{ type: 'uint256', value: start }] : []), - ...(end ? [{ type: 'uint256', value: end }] : []), - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/permissionless_oracles_vwap_v2.js b/general/permissionless_oracles_vwap_v2.js deleted file mode 100644 index 38a06b1..0000000 --- a/general/permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,36 +0,0 @@ -const ParentOraclesV2 = require('./parent_oracles_v2') -const { - GRAPH_URL, - GRAPH_DEPLOYMENT_ID -} = require('./parent_oracles.constant.json') -const APP_CONFIG = {} - -// TODO: subgraphs for sushi and uniswap don't work so this app only work if our exchange was not those - it's obvious that doesn't work for beetsfi too and it's completely different -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'permissionless_oracles_vwap_v2', - config: APP_CONFIG, - - prepareTokenTx: async function (pair, exchange, start, end, chainId) { - if (exchange === 'sushi') { - const tokenTxs = await this.getTokenTxs( - pair, - GRAPH_URL[exchange][chainId], - GRAPH_DEPLOYMENT_ID[exchange][chainId], - start, - end - ) - return tokenTxs - } - const tokenTxs = await this.getTokenTxs( - pair, - GRAPH_URL[exchange], - GRAPH_DEPLOYMENT_ID[exchange], - start, - end - ) - - return tokenTxs - } -} diff --git a/general/permissionless_oracles_vwap_v3.js b/general/permissionless_oracles_vwap_v3.js deleted file mode 100644 index 0a709ea..0000000 --- a/general/permissionless_oracles_vwap_v3.js +++ /dev/null @@ -1,13 +0,0 @@ -const ParentOraclesV3 = require('./parent_oracles_v3') - -const APP_CONFIG = { - chainId: 250 -} - -// TODO: this app is for all exchange except beetsfi but if there aren't any events we throw error instead of giving price -module.exports = { - ...ParentOraclesV3, - - APP_NAME: 'permissionless_oracles_vwap_v3', - config: APP_CONFIG -} diff --git a/general/random_nft.js b/general/random_nft.js deleted file mode 100644 index 6242fcd..0000000 --- a/general/random_nft.js +++ /dev/null @@ -1,85 +0,0 @@ -const { axios, soliditySha3, floatToBN } = MuonAppUtils - -const APP_ID = 14 -const MIN = 1; -const MAX = 20; - -// Random seed function -// More Info: -// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript -Math.seed = function(s) { - var mask = 0xffffffff; - var m_w = (123456789 + s) & mask; - var m_z = (987654321 - s) & mask; - - return function() { - m_z = (36969 * (m_z & 65535) + (m_z >>> 16)) & mask; - m_w = (18000 * (m_w & 65535) + (m_w >>> 16)) & mask; - - var result = ((m_z << 16) + (m_w & 65535)) >>> 0; - result /= 4294967296; - return result; - } -} - -function getRandomNumber(seed, min, max){ - var rngFunction = Math.seed(seed); - return Math.floor(rngFunction() * (max-min)) + min; -} - -module.exports = { - APP_NAME: 'random_nft', - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - switch (method) { - case 'randint': - let { address, nftId, blockHash, blockNumber, txHash} = params; - - /* - We are int(blockHash+nftId) as the seed to generate a deterministic - random number - */ - - //TODO: validate that blockhash is correct and - // the NFT is minted on that block - - let seed = parseInt(blockHash) + parseInt(nftId); - - // all nodes will use the same seed and the random - // number will be the same on all nodes - let randomNumber = getRandomNumber(seed, - MIN, MAX - ); - - return { - appId: APP_ID, - nftId, - number: randomNumber - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { method } = request; - switch (method) { - case 'randint': - let { nftId } = result; - return soliditySha3([ - { type: 'uint32', value: APP_ID }, - { type: 'uint256', value: nftId }, - { type: 'uint256', value: result.number} - ]) - - default: - break - } - } -} diff --git a/general/redeem-oracle.js b/general/redeem-oracle.js deleted file mode 100644 index 9fff269..0000000 --- a/general/redeem-oracle.js +++ /dev/null @@ -1,94 +0,0 @@ -const { axios, soliditySha3, ethCall } = MuonAppUtils - -const ORACLE_ADDRESS = '0x1Bc270B2bE5c361784044ccE3f55c896fB5Fdf5A' -const DEI_POOL_ADDRESS = '0x9bd5CC542Bc922e95BA41c0702555e830F2C1cB4' -const TOKEN_ADDRESS = '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44' -const AMOUNT = BigInt(1e18); -const DURATION = 8 * 60 * 60; // 8 hours - -const ORACLE_ABI = [{ "inputs": [{ "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }], "name": "twap", "outputs": [{ "internalType": "uint256", "name": "_twap", "type": "uint256" }], "stateMutability": "view", "type": "function" }]; -const DEI_POOL_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }], "name": "redeemPositions", "outputs": [{ "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" }], "stateMutability": "view", "type": "function" }]; - -module.exports = { - APP_NAME: 'redeem', - APP_ID: 20, - - onRequest: async function (request) { - let { - method, - data: { params } - } = request - - switch (method) { - case 'signature': - const { userAddress, redeemId, chainId } = params - - let timestamp; - try { - timestamp = (await ethCall( - DEI_POOL_ADDRESS, - 'redeemPositions', - [ - userAddress, - redeemId - ], - DEI_POOL_ABI, - 'ftm' - ))['timestamp'] - } catch { - throw { message: 'Error on pool contract' } - } - - let price; - try { - price = await ethCall( - ORACLE_ADDRESS, - 'twap', - [ - TOKEN_ADDRESS, - AMOUNT, - timestamp, - DURATION - ], - ORACLE_ABI, - 'ftm' - ) - } catch { - throw { message: `You should wait ${(DURATION / 60 / 60).toFixed(0)} hours for redeem` } - } - - return { - userAddress, - redeemId, - price, - chainId - } - - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - switch (method) { - case 'signature': { - let { userAddress, redeemId, price, chainId } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: userAddress }, - { type: 'uint256', value: redeemId }, - { type: 'uint256', value: price }, - { type: 'uint256', value: chainId } - ]) - } - default: - return null - } - } -} diff --git a/general/solidly_permissionless_oracles_vwap.js b/general/solidly_permissionless_oracles_vwap.js deleted file mode 100644 index e649814..0000000 --- a/general/solidly_permissionless_oracles_vwap.js +++ /dev/null @@ -1,469 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const TOKEN_META_DATA = 'tokenMetaData' -const TOTAL_SUPPLY = 'totalSupply' -const PAIRS0_META_DATA = 'pairs0MetaData' -const PAIRS1_META_DATA = 'pairs1MetaData' -const PAIRS_META_DATA = 'pairsMetaData' - -const BASE_PAIR_METADATA = [ - { - inputs: [], - name: 'metadata', - outputs: [ - { internalType: 'uint256', name: 'dec0', type: 'uint256' }, - { internalType: 'uint256', name: 'dec1', type: 'uint256' }, - { internalType: 'uint256', name: 'r0', type: 'uint256' }, - { internalType: 'uint256', name: 'r1', type: 'uint256' }, - { internalType: 'bool', name: 'st', type: 'bool' }, - { internalType: '', name: 't0', type: 'address' }, - { internalType: 'address', name: 't1', type: 'address' } - ], - stateMutability: 'view', - type: 'function' - } -] - -const ERC20_ABI = [ - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function' - } -] - -const PRICE_TOLERANCE = '0.05' -const FANTOM_ID = 250 -const SCALE = new BN('1000000000000000000') -const GRAPH_URL = - 'https://api.thegraph.com/subgraphs/name/shayanshiravani/solidly' -const GRAPH_DEPLOYMENT_ID = 'QmY4uUc7kjAC2sCbviZGoTwttbJ6dXezWELyrn9oebAr58' - -async function getTokenTxs(pairAddr, graphUrl, deploymentID) { - let currentTimestamp = getTimestamp() - const last30Min = currentTimestamp - 1800 - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - pair: "${pairAddr.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - pair: "${pairAddr.toLowerCase()}" - timestamp_gt: ${last30Min} - timestamp_lt: ${currentTimestamp} - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: 'SUBGRAPH_QUERY_FAILED' } - } - } - return tokenTxs -} - -function makeCallContext(info, prefix) { - const contractCallContext = info.map((item) => ({ - reference: prefix + ':' + item, - contractAddress: item, - abi: BASE_PAIR_METADATA, - calls: [ - { - reference: prefix + ':' + item, - methodName: 'metadata' - } - ] - })) - - return contractCallContext -} - -function getInfoContract(multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) -} - -function getMetadata(multiCallInfo, filterBy) { - const info = getInfoContract(multiCallInfo, filterBy) - let metadata = info.map(({ callsReturnContext }) => { - return { - dec0: callsReturnContext[0].returnValues[0], - dec1: callsReturnContext[0].returnValues[1], - r0: callsReturnContext[0].returnValues[2], - r1: callsReturnContext[0].returnValues[3], - st: callsReturnContext[0].returnValues[4], - t0: callsReturnContext[0].returnValues[5], - t1: callsReturnContext[0].returnValues[6] - } - }) - return metadata -} - -async function tokenVWAP(token, pairs, metadata) { - let pairPrices = [] - let pairVolume = [] - let inputToken = token - if (!metadata) { - const contractCallContext = makeCallContext(pairs, PAIRS_META_DATA) - let result = await multiCall(FANTOM_ID, contractCallContext) - metadata = getMetadata(result, PAIRS_META_DATA) - } - let pairVWAPPromises = [] - for (let i = 0; i < pairs.length; i++) { - let index = inputToken.toLowerCase() == metadata[i].t0.toLowerCase() ? 0 : 1 - - if (inputToken.toLowerCase() == metadata[i].t0.toLowerCase()) { - inputToken = metadata[i].t1 - } else if (inputToken.toLowerCase() == metadata[i].t1.toLowerCase()) { - inputToken = metadata[i].t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - pairVWAPPromises.push(pairVWAP(pairs[i], index)) - } - - let pairVWAPs = await Promise.all(pairVWAPPromises) - - pairVWAPs.map((pairVWAP) => { - pairPrices.push(pairVWAP.tokenPrice) - pairVolume.push(pairVWAP.sumVolume) - }) - let volume = pairVolume.reduce( - (previousValue, currentValue) => previousValue.add(currentValue), - new BN(0) - ) - let price = pairPrices.reduce( - (price, x) => price.mul(x).div(SCALE), - new BN(SCALE) - ) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } -} - -async function pairVWAP(pair, index) { - return getTokenTxs(pair, GRAPH_URL, GRAPH_DEPLOYMENT_ID).then((tokenTxs) => { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - if( - (swap.amount0In != 0 && swap.amount1In != 0) || - (swap.amount0Out != 0 && swap.amount1Out != 0) || - - (swap.amount0In != 0 && swap.amount0Out != 0) || - (swap.amount1In != 0 && swap.amount1Out != 0) - ) - { - continue - } - let price = new BN('0') - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount1Out.mul(SCALE).div(amount0In) - volume = amount0In - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount1In.mul(SCALE).div(amount0Out) - volume = amount0Out - } - break - case 1: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount0In.mul(SCALE).div(amount1Out) - volume = amount1Out - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount0Out.mul(SCALE).div(amount1In) - volume = amount1In - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { tokenPrice, sumVolume } - } - return { tokenPrice: new BN('0'), sumVolume: new BN('0') } - }) -} - -async function LPTokenPrice(token, pairs0, pairs1) { - const contractCallContextToken = makeCallContext([token], TOKEN_META_DATA) - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ] - } - ] - const contractCallContextPairs0 = makeCallContext(pairs0, PAIRS0_META_DATA) - - const contractCallContextPairs1 = makeCallContext(pairs1, PAIRS1_META_DATA) - const contractCallContext = [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs0, - ...contractCallContextPairs1 - ] - - return multiCall(FANTOM_ID, contractCallContext).then(async (result) => { - let metadata = getMetadata(result, TOKEN_META_DATA)[0] - - let totalSupply = result.find((item) => item.reference === TOTAL_SUPPLY) - totalSupply = new BN(totalSupply.callsReturnContext[0].returnValues[0]) - - let reserveA = new BN(metadata.r0).mul(SCALE).div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1).mul(SCALE).div(new BN(metadata.dec1)) - - let totalUSDA = reserveA - let sumVolume = new BN('0') - - let _tokenVWAPResults = await Promise.all([ - pairs0.length - ? tokenVWAP(metadata.t0, pairs0, getMetadata(result, PAIRS0_META_DATA)) - : null, - pairs1.length - ? tokenVWAP(metadata.t1, pairs1, getMetadata(result, PAIRS1_META_DATA)) - : null - ]) - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - totalUSDA = price.mul(reserveA).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSDB = reserveB - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - totalUSDB = price.mul(reserveB).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSD = totalUSDA.add(totalUSDB) - - return { - price: totalUSD.mul(SCALE).div(totalSupply).toString(), - sumVolume - } - }) -} - -module.exports = { - APP_NAME: 'solidly_permissionless_oracles_vwap', - APP_ID: 15, - REMOTE_CALL_TIMEOUT: 30000, - - onRequest: async function (request) { - //throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - let { token, pairs, hashTimestamp } = params - if (typeof pairs === 'string' || pairs instanceof String) { - pairs = pairs.split(',') - } - let { price, volume } = await tokenVWAP(token, pairs) - return { - token: token, - tokenPrice: price.toString(), - pairs: pairs, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, hashTimestamp } = params - if (typeof pairs0 === 'string' || pairs0 instanceof String) { - pairs0 = pairs0.split(',').filter((x) => x) - } - if (typeof pairs1 === 'string' || pairs1 instanceof String) { - pairs1 = pairs1.split(',').filter((x) => x) - } - const { price, sumVolume } = await LPTokenPrice(token, pairs0, pairs1) - return { - token: token, - tokenPrice: price, - pairs0: pairs0, - pairs1: pairs1, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs }, - { type: 'uint256', value: request.data.result.tokenPrice }, - - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs0, pairs1 } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs0 }, - { type: 'address[]', value: pairs1 }, - { type: 'uint256', value: request.data.result.tokenPrice }, - - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/solidly_permissionless_oracles_vwap_fair.js b/general/solidly_permissionless_oracles_vwap_fair.js deleted file mode 100644 index 2b97759..0000000 --- a/general/solidly_permissionless_oracles_vwap_fair.js +++ /dev/null @@ -1,473 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall, BNSqrt } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const TOKEN_META_DATA = 'tokenMetaData' -const TOTAL_SUPPLY = 'totalSupply' -const PAIRS0_META_DATA = 'pairs0MetaData' -const PAIRS1_META_DATA = 'pairs1MetaData' -const PAIRS_META_DATA = 'pairsMetaData' - -const BASE_PAIR_METADATA = [ - { - inputs: [], - name: 'metadata', - outputs: [ - { internalType: 'uint256', name: 'dec0', type: 'uint256' }, - { internalType: 'uint256', name: 'dec1', type: 'uint256' }, - { internalType: 'uint256', name: 'r0', type: 'uint256' }, - { internalType: 'uint256', name: 'r1', type: 'uint256' }, - { internalType: 'bool', name: 'st', type: 'bool' }, - { internalType: '', name: 't0', type: 'address' }, - { internalType: 'address', name: 't1', type: 'address' } - ], - stateMutability: 'view', - type: 'function' - } -] - -const ERC20_ABI = [ - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function' - } -] - -const PRICE_TOLERANCE = '0.05' -const FANTOM_ID = 250 -const SCALE = new BN('1000000000000000000') -const GRAPH_URL = - 'https://api.thegraph.com/subgraphs/name/shayanshiravani/solidly' -const GRAPH_DEPLOYMENT_ID = 'QmY4uUc7kjAC2sCbviZGoTwttbJ6dXezWELyrn9oebAr58' - -async function getTokenTxs(pairAddr, graphUrl, deploymentID) { - let currentTimestamp = getTimestamp() - const last30Min = currentTimestamp - 1800 - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - pair: "${pairAddr.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - pair: "${pairAddr.toLowerCase()}" - timestamp_gt: ${last30Min} - timestamp_lt: ${currentTimestamp} - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: 'SUBGRAPH_QUERY_FAILED' } - } - } - return tokenTxs -} - -function makeCallContext(info, prefix) { - const contractCallContext = info.map((item) => ({ - reference: prefix + ':' + item, - contractAddress: item, - abi: BASE_PAIR_METADATA, - calls: [ - { - reference: prefix + ':' + item, - methodName: 'metadata' - } - ] - })) - - return contractCallContext -} - -function getInfoContract(multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) -} - -function getMetadata(multiCallInfo, filterBy) { - const info = getInfoContract(multiCallInfo, filterBy) - let metadata = info.map(({ callsReturnContext }) => { - return { - dec0: callsReturnContext[0].returnValues[0], - dec1: callsReturnContext[0].returnValues[1], - r0: callsReturnContext[0].returnValues[2], - r1: callsReturnContext[0].returnValues[3], - st: callsReturnContext[0].returnValues[4], - t0: callsReturnContext[0].returnValues[5], - t1: callsReturnContext[0].returnValues[6] - } - }) - return metadata -} - -async function tokenVWAP(token, pairs, metadata) { - let pairPrices = [] - let pairVolume = [] - let inputToken = token - if (!metadata) { - const contractCallContext = makeCallContext(pairs, PAIRS_META_DATA) - let result = await multiCall(FANTOM_ID, contractCallContext) - metadata = getMetadata(result, PAIRS_META_DATA) - } - let pairVWAPPromises = [] - for (let i = 0; i < pairs.length; i++) { - let index = inputToken.toLowerCase() == metadata[i].t0.toLowerCase() ? 0 : 1 - - if (inputToken.toLowerCase() == metadata[i].t0.toLowerCase()) { - inputToken = metadata[i].t1 - } else if (inputToken.toLowerCase() == metadata[i].t1.toLowerCase()) { - inputToken = metadata[i].t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - pairVWAPPromises.push(pairVWAP(pairs[i], index)) - } - - let pairVWAPs = await Promise.all(pairVWAPPromises) - - pairVWAPs.map((pairVWAP) => { - pairPrices.push(pairVWAP.tokenPrice) - pairVolume.push(pairVWAP.sumVolume) - }) - let volume = pairVolume.reduce( - (previousValue, currentValue) => previousValue.add(currentValue), - new BN(0) - ) - let price = pairPrices.reduce( - (price, x) => price.mul(x).div(SCALE), - new BN(SCALE) - ) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } -} - -async function pairVWAP(pair, index) { - return getTokenTxs(pair, GRAPH_URL, GRAPH_DEPLOYMENT_ID).then((tokenTxs) => { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - if( - (swap.amount0In != 0 && swap.amount1In != 0) || - (swap.amount0Out != 0 && swap.amount1Out != 0) || - - (swap.amount0In != 0 && swap.amount0Out != 0) || - (swap.amount1In != 0 && swap.amount1Out != 0) - ) - { - continue - } - let price = new BN('0') - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount1Out.mul(SCALE).div(amount0In) - volume = amount0In - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount1In.mul(SCALE).div(amount0Out) - volume = amount0Out - } - break - case 1: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount0In.mul(SCALE).div(amount1Out) - volume = amount1Out - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount0Out.mul(SCALE).div(amount1In) - volume = amount1In - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { tokenPrice, sumVolume } - } - return { tokenPrice: new BN('0'), sumVolume: new BN('0') } - }) -} - -async function LPTokenPrice(token, pairs0, pairs1) { - const contractCallContextToken = makeCallContext([token], TOKEN_META_DATA) - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ] - } - ] - const contractCallContextPairs0 = makeCallContext(pairs0, PAIRS0_META_DATA) - - const contractCallContextPairs1 = makeCallContext(pairs1, PAIRS1_META_DATA) - const contractCallContext = [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs0, - ...contractCallContextPairs1 - ] - - return multiCall(FANTOM_ID, contractCallContext).then(async (result) => { - let metadata = getMetadata(result, TOKEN_META_DATA)[0] - - let totalSupply = result.find((item) => item.reference === TOTAL_SUPPLY) - totalSupply = new BN(totalSupply.callsReturnContext[0].returnValues[0]) - - let reserveA = new BN(metadata.r0).mul(SCALE).div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1).mul(SCALE).div(new BN(metadata.dec1)) - - let sumVolume = new BN('0') - - let _tokenVWAPResults = await Promise.all([ - pairs0.length - ? tokenVWAP(metadata.t0, pairs0, getMetadata(result, PAIRS0_META_DATA)) - : null, - pairs1.length - ? tokenVWAP(metadata.t1, pairs1, getMetadata(result, PAIRS1_META_DATA)) - : null - ]) - - let priceA, priceB - priceA = priceB = new BN(SCALE) - - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - sumVolume = sumVolume.add(volume) - priceA = price - } - - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - sumVolume = sumVolume.add(volume) - priceB = price - } - - let sqrtK = BNSqrt(reserveA.mul(reserveB)) - let sqrtP = BNSqrt(priceA.mul(priceB)) - const fairPrice = sqrtK.mul(sqrtP).mul(new BN('2')).div(totalSupply) - - return { - price: fairPrice.toString(), - sumVolume - } - }) -} - -module.exports = { - APP_NAME: 'solidly_permissionless_oracles_vwap_fair', - APP_ID: 23, - REMOTE_CALL_TIMEOUT: 30000, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - let { token, pairs, hashTimestamp } = params - if (typeof pairs === 'string' || pairs instanceof String) { - pairs = pairs.split(',') - } - let { price, volume } = await tokenVWAP(token, pairs) - return { - token: token, - tokenPrice: price.toString(), - pairs: pairs, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, hashTimestamp } = params - if (typeof pairs0 === 'string' || pairs0 instanceof String) { - pairs0 = pairs0.split(',').filter((x) => x) - } - if (typeof pairs1 === 'string' || pairs1 instanceof String) { - pairs1 = pairs1.split(',').filter((x) => x) - } - const { price, sumVolume } = await LPTokenPrice(token, pairs0, pairs1) - return { - token: token, - tokenPrice: price, - pairs0: pairs0, - pairs1: pairs1, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs }, - { type: 'uint256', value: request.data.result.tokenPrice }, - - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs0, pairs1 } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs0 }, - { type: 'address[]', value: pairs1 }, - { type: 'uint256', value: request.data.result.tokenPrice }, - - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/solidly_permissionless_oracles_vwap_fair_v2.js b/general/solidly_permissionless_oracles_vwap_fair_v2.js deleted file mode 100644 index 98c0731..0000000 --- a/general/solidly_permissionless_oracles_vwap_fair_v2.js +++ /dev/null @@ -1,8 +0,0 @@ -const Solidly = require('./solidly_permissionless_oracles_vwap_v2') - -module.exports = { - ...Solidly, - - APP_NAME: 'solidly_permissionless_oracles_vwap_fair_v2', - APP_ID: 27 -} diff --git a/general/solidly_permissionless_oracles_vwap_v2.js b/general/solidly_permissionless_oracles_vwap_v2.js deleted file mode 100644 index fa8e635..0000000 --- a/general/solidly_permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,15 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall } = MuonAppUtils - -const ParentOraclesV2 = require('./parent_oracles_v2') - -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'solidly_permissionless_oracles_vwap_v2', - APP_ID: 26, - config: APP_CONFIG -} diff --git a/general/spirit_permissionless_oracles_vwap.js b/general/spirit_permissionless_oracles_vwap.js deleted file mode 100644 index 264b41a..0000000 --- a/general/spirit_permissionless_oracles_vwap.js +++ /dev/null @@ -1,568 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const TOKEN_INFO = 'tokenInfo' -const TOTAL_SUPPLY = 'totalSupply' -const PAIRS0_INFO = 'pairs0INFO' -const PAIRS1_INFO = 'pairs1INFO' -const PAIRS_INFO = 'pairsINFO' - -const Info_ABI = [ - { - inputs: [], - name: 'getReserves', - outputs: [ - { internalType: 'uint112', name: '_reserve0', type: 'uint112' }, - { internalType: 'uint112', name: '_reserve1', type: 'uint112' }, - { internalType: 'uint32', name: '_blockTimestampLast', type: 'uint32' } - ], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token0', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token1', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - } -] - -const ERC20_TOTAL_SUPPLY_ABI = [ - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function' - } -] -const ERC20_DECIMALS_ABI = [ - { - inputs: [], - name: 'decimals', - outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], - stateMutability: 'view', - type: 'function' - } -] - -const PRICE_TOLERANCE = '0.05' -const SCALE = new BN('1000000000000000000') - -async function getTokenTxs(pairAddr, graphUrl, deploymentID) { - console.log({graphUrl, deploymentID}) - let currentTimestamp = getTimestamp() - const last30Min = currentTimestamp - 1800; - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - pair: "${pairAddr.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - pair: "${pairAddr.toLowerCase()}" - timestamp_gt: ${last30Min} - timestamp_lt: ${currentTimestamp} - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: 'SUBGRAPH_QUERY_FAILED' } - } - } - return tokenTxs -} - -function getReturnValue(info, methodName) { - return info.find((item) => item.methodName === methodName).returnValues -} - -function getInfoContract(multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) -} - -function getMetadata(multiCallInfo, filterBy) { - const info = getInfoContract(multiCallInfo, filterBy) - let metadata = info.map((item) => { - const reserves = getReturnValue(item.callsReturnContext, 'getReserves') - - return { - r0: reserves[0], - r1: reserves[1], - - t0: getReturnValue(item.callsReturnContext, 'token0')[0], - t1: getReturnValue(item.callsReturnContext, 'token1')[0] - } - }) - return metadata -} - -function makeCallContextInfo(info, prefix) { - const contractCallContext = info.map((item) => ({ - reference: prefix + ':' + item, - contractAddress: item, - abi: Info_ABI, - calls: [ - { - reference: prefix + ':' + item, - methodName: 'getReserves' - }, - { - reference: prefix + ':' + item, - methodName: 'token0' - }, - { - reference: prefix + ':' + item, - methodName: 'token1' - } - ] - })) - - return contractCallContext -} - -function makeCallContextDecimal(metadata, prefix) { - let callContext = metadata.map((item) => [ - { - reference: prefix + ':' + 't0' + ':' + item.t0, - contractAddress: item.t0, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't0' + ':' + item.t0, - methodName: 'decimals' - } - ] - }, - { - reference: prefix + ':' + 't1' + ':' + item.t1, - contractAddress: item.t1, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't1' + ':' + item.t1, - methodName: 'decimals' - } - ] - } - ]) - - callContext = [].concat.apply([], callContext) - return callContext -} - -function getFinalMetaData(resultDecimals, prevMetaData, prefix) { - let metadata = prevMetaData.map((item) => { - let t0 = getInfoContract( - resultDecimals, - prefix + ':' + 't0' + ':' + item.t0 - ) - let t1 = getInfoContract( - resultDecimals, - prefix + ':' + 't1' + ':' + item.t1 - ) - return { - ...item, - dec0: new BN(10) - .pow(new BN(getReturnValue(t0[0].callsReturnContext, 'decimals')[0])) - .toString(), - dec1: new BN(10) - .pow(new BN(getReturnValue(t1[0].callsReturnContext, 'decimals')[0])) - .toString() - } - }) - return metadata -} - -async function tokenVWAP(token, pairs, metadata, config) { - let pairPrices = [] - let pairVolume = [] - let inputToken = token - if (!metadata) { - const contractCallContext = makeCallContextInfo(pairs, PAIRS_INFO) - let result = await multiCall(config.chainId, contractCallContext) - - metadata = getMetadata(result, PAIRS_INFO) - - let callContextPairs = makeCallContextDecimal(metadata, PAIRS_INFO) - let resultDecimals = await multiCall(config.chainId, callContextPairs) - metadata = getFinalMetaData(resultDecimals, metadata, PAIRS_INFO) - } - let pairVWAPPromises = [] - for (let i = 0; i < pairs.length; i++) { - let index = inputToken.toLowerCase() == metadata[i].t0.toLowerCase() ? 0 : 1 - - if (inputToken.toLowerCase() == metadata[i].t0.toLowerCase()) { - inputToken = metadata[i].t1 - } else if (inputToken.toLowerCase() == metadata[i].t1.toLowerCase()) { - inputToken = metadata[i].t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - pairVWAPPromises.push(pairVWAP(pairs[i], index, config)) - } - - let pairVWAPs = await Promise.all(pairVWAPPromises) - - pairVWAPs.map((pairVWAP) => { - pairPrices.push(pairVWAP.tokenPrice) - pairVolume.push(pairVWAP.sumVolume) - }) - let volume = pairVolume.reduce( - (previousValue, currentValue) => previousValue.add(currentValue), - new BN(0) - ) - let price = pairPrices.reduce( - (price, x) => price.mul(x).div(SCALE), - new BN(SCALE) - ) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } -} - -async function pairVWAP(pair, index, config) { - return getTokenTxs(pair, config.graphUrl, config.graphDeploymentId).then((tokenTxs) => { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - let price = new BN('0') - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount1Out.mul(SCALE).div(amount0In) - volume = amount0In - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount1In.mul(SCALE).div(amount0Out) - volume = amount0Out - } - break - case 1: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount0In.mul(SCALE).div(amount1Out) - volume = amount1Out - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount0Out.mul(SCALE).div(amount1In) - volume = amount1In - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { tokenPrice, sumVolume } - } - return { tokenPrice: new BN('0'), sumVolume: new BN('0') } - }) -} - -async function LPTokenPrice(token, pairs0, pairs1, config) { - const contractCallContextToken = makeCallContextInfo([token], TOKEN_INFO) - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_TOTAL_SUPPLY_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ] - } - ] - - const contractCallContextPairs0 = makeCallContextInfo(pairs0, PAIRS0_INFO) - - const contractCallContextPairs1 = makeCallContextInfo(pairs1, PAIRS1_INFO) - - const contractCallContext = [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs0, - ...contractCallContextPairs1 - ] - - let result = await multiCall(config.chainId, contractCallContext) - - let metadata = getMetadata(result, TOKEN_INFO) - - let pairs0Metadata = getMetadata(result, PAIRS0_INFO) - - let pairs1Metadata = getMetadata(result, PAIRS1_INFO) - - const callContextDecimalToken = makeCallContextDecimal(metadata, TOKEN_INFO) - - let callContextPairs0 = makeCallContextDecimal(pairs0Metadata, PAIRS0_INFO) - - let callContextPairs1 = makeCallContextDecimal(pairs1Metadata, PAIRS1_INFO) - - const contractCallContextDecimal = [ - ...callContextDecimalToken, - ...callContextPairs0, - ...callContextPairs1 - ] - - let resultDecimals = await multiCall(config.chainId, contractCallContextDecimal) - - metadata = getFinalMetaData(resultDecimals, metadata, TOKEN_INFO)[0] - pairs0Metadata = getFinalMetaData(resultDecimals, pairs0Metadata, PAIRS0_INFO) - pairs1Metadata = getFinalMetaData(resultDecimals, pairs1Metadata, PAIRS1_INFO) - - let totalSupply = getInfoContract(result, TOTAL_SUPPLY)[0].callsReturnContext - totalSupply = new BN(totalSupply[0].returnValues[0]) - - let reserveA = new BN(metadata.r0).mul(SCALE).div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1).mul(SCALE).div(new BN(metadata.dec1)) - - let totalUSDA = reserveA - let sumVolume = new BN('0') - - let _tokenVWAPResults = await Promise.all([ - pairs0.length ? tokenVWAP(metadata.t0, pairs0, pairs0Metadata, config) : null, - pairs1.length ? tokenVWAP(metadata.t1, pairs1, pairs1Metadata, config) : null - ]) - - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - totalUSDA = price.mul(reserveA).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSDB = reserveB - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - totalUSDB = price.mul(reserveB).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSD = totalUSDA.add(totalUSDB) - - return { price: totalUSD.mul(SCALE).div(totalSupply).toString(), sumVolume } -} - -const APP_CONFIG = { - chainId: 250, - graphUrl: "https://api.thegraph.com/subgraphs/name/shayanshiravani/spiritswap", - graphDeploymentId: "QmUptbhTmAVCUTNeK2afecQJ3DFLgk9m4dBerfpqkTEJvi" -}; - -module.exports = { - APP_NAME: 'spirit_permissionless_oracles_vwap', - APP_ID: 16, - config: APP_CONFIG, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - let { token, pairs, hashTimestamp } = params - if (typeof pairs === 'string' || pairs instanceof String) { - pairs = pairs.split(',') - } - let { price, volume } = await tokenVWAP(token, pairs, null, this.config) - return { - token: token, - tokenPrice: price.toString(), - pairs: pairs, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, hashTimestamp } = params - if (typeof pairs0 === 'string' || pairs0 instanceof String) { - pairs0 = pairs0.split(',').filter((x) => x) - } - if (typeof pairs1 === 'string' || pairs1 instanceof String) { - pairs1 = pairs1.split(',').filter((x) => x) - } - - console.log(this.config) - const { price, sumVolume } = await LPTokenPrice(token, pairs0, pairs1, this.config) - - return { - token: token, - tokenPrice: price, - pairs0: pairs0, - pairs1: pairs1, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs }, - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs0, pairs1 } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs0 }, - { type: 'address[]', value: pairs1 }, - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/spirit_permissionless_oracles_vwap_v2.js b/general/spirit_permissionless_oracles_vwap_v2.js deleted file mode 100644 index 5bab322..0000000 --- a/general/spirit_permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,13 +0,0 @@ -const ParentOraclesV2 = require('./parent_oracles_v2') - -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'spirit_permissionless_oracles_vwap_v2', - APP_ID: 25, - config: APP_CONFIG -} diff --git a/general/spirit_permissionless_oracles_vwap_v3.js b/general/spirit_permissionless_oracles_vwap_v3.js deleted file mode 100644 index 831f482..0000000 --- a/general/spirit_permissionless_oracles_vwap_v3.js +++ /dev/null @@ -1,13 +0,0 @@ -const ParentOraclesV3 = require('./parent_oracles_v3') - -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - ...ParentOraclesV3, - - APP_NAME: 'spirit_permissionless_oracles_vwap_v3', - APP_ID: 31, - config: APP_CONFIG -} diff --git a/general/spooky_permissionless_oracles_vwap.js b/general/spooky_permissionless_oracles_vwap.js deleted file mode 100644 index b01b03c..0000000 --- a/general/spooky_permissionless_oracles_vwap.js +++ /dev/null @@ -1,16 +0,0 @@ -const SpriteVWAP = require('./spirit_permissionless_oracles_vwap') - -const APP_CONFIG = { - chainId: 250, - graphUrl: - 'https://api.thegraph.com/subgraphs/name/shayanshiravani/spookyswap', - graphDeploymentId: 'QmQnteZnJmshPHuUbYNxSCVTEyKunncwCUgYiyqEFQeDV7' -} - -module.exports = { - ...SpriteVWAP, - - APP_NAME: 'spooky_permissionless_oracles_vwap', - APP_ID: 17, - config: APP_CONFIG -} diff --git a/general/spooky_permissionless_oracles_vwap_v2.js b/general/spooky_permissionless_oracles_vwap_v2.js deleted file mode 100644 index bd5483f..0000000 --- a/general/spooky_permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,15 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall } = MuonAppUtils - -const ParentOraclesV2 = require('./parent_oracles_v2') - -const APP_CONFIG = { - chainId: 250 -} - -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'spooky_permissionless_oracles_vwap_v2', - APP_ID: 28, - config: APP_CONFIG -} diff --git a/general/sushi_permissionless_oracles_vwap.js b/general/sushi_permissionless_oracles_vwap.js deleted file mode 100644 index 667000c..0000000 --- a/general/sushi_permissionless_oracles_vwap.js +++ /dev/null @@ -1,591 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const TOKEN_INFO = 'tokenInfo' -const TOTAL_SUPPLY = 'totalSupply' -const PAIRS0_INFO = 'pairs0INFO' -const PAIRS1_INFO = 'pairs1INFO' -const PAIRS_INFO = 'pairsINFO' - -const Info_ABI = [ - { - inputs: [], - name: 'getReserves', - outputs: [ - { internalType: 'uint112', name: '_reserve0', type: 'uint112' }, - { internalType: 'uint112', name: '_reserve1', type: 'uint112' }, - { internalType: 'uint32', name: '_blockTimestampLast', type: 'uint32' } - ], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token0', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token1', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - } -] - -const ERC20_TOTAL_SUPPLY_ABI = [ - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function' - } -] -const ERC20_DECIMALS_ABI = [ - { - inputs: [], - name: 'decimals', - outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], - stateMutability: 'view', - type: 'function' - } -] - -const PRICE_TOLERANCE = '0.05' -const VALID_CHAINS = [ - '1', '137', '42161', '43114', '250', '56' -] -const SCALE = new BN('1000000000000000000') -const GRAPH_URL_MAPPING = { - '1': 'https://api.thegraph.com/subgraphs/name/sushiswap/exchange', - '137': 'https://api.thegraph.com/subgraphs/name/sushiswap/matic-exchange', - '42161': 'https://api.thegraph.com/subgraphs/name/sushiswap/arbitrum-exchange', - '43114': 'https://api.thegraph.com/subgraphs/name/sushiswap/avalanche-exchange', - '250': 'https://api.thegraph.com/subgraphs/name/sushiswap/fantom-exchange', - '56': 'https://api.thegraph.com/subgraphs/name/sushiswap/bsc-exchange', -} -const GRAPH_DEPLOYMENT_MAPPING = { - '1': 'QmbxC2AYMvnTq6UBAvkAch6KUsRy3VaGHgt6s6c8nfa1hm', - '137': 'QmWANhcqU1Fn9UsGWCzNzcURPJM9f3egyz14GF7jxKFJQG', - '42161': 'QmeBQRHngJLJ2r84Vvp3mgKbgYXHmAqc3dWkXoywU9ze3d', - '43114': 'QmTbmXhUr67gAt5eLy5zUo7dRqATG8S8QgPEcdVhmenRNU', - '250': 'QmSpAjYK1DxDvVhiSKK3M7wV1yaukSuV6UzKhrSsrKvf53', - '56': 'QmeVMMA1rUfF5y93NmQuJDWbXCapNpw4kyUNretC62NRhA', -} - -async function getTokenTxs(pairAddr, graphUrl, deploymentID) { - let currentTimestamp = getTimestamp() - const last30Min = currentTimestamp - 1800 - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - pair: "${pairAddr.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - pair: "${pairAddr.toLowerCase()}" - timestamp_gt: ${last30Min} - timestamp_lt: ${currentTimestamp} - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: 'SUBGRAPH_QUERY_FAILED' } - } - } - return tokenTxs -} - -function getReturnValue(info, methodName) { - return info.find((item) => item.methodName === methodName).returnValues -} - -function getInfoContract(multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) -} - -function getMetadata(multiCallInfo, filterBy) { - const info = getInfoContract(multiCallInfo, filterBy) - let metadata = info.map((item) => { - const reserves = getReturnValue(item.callsReturnContext, 'getReserves') - return { - r0: reserves[0], - r1: reserves[1], - - t0: getReturnValue(item.callsReturnContext, 'token0')[0], - t1: getReturnValue(item.callsReturnContext, 'token1')[0] - } - }) - return metadata -} - -function makeCallContextInfo(info, prefix) { - const contractCallContext = info.map((item) => ({ - reference: prefix + ':' + item, - contractAddress: item, - abi: Info_ABI, - calls: [ - { - reference: prefix + ':' + item, - methodName: 'getReserves' - }, - { - reference: prefix + ':' + item, - methodName: 'token0' - }, - { - reference: prefix + ':' + item, - methodName: 'token1' - } - ] - })) - - return contractCallContext -} - -function makeCallContextDecimal(metadata, prefix) { - let callContext = metadata.map((item) => [ - { - reference: prefix + ':' + 't0' + ':' + item.t0, - contractAddress: item.t0, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't0' + ':' + item.t0, - methodName: 'decimals' - } - ] - }, - { - reference: prefix + ':' + 't1' + ':' + item.t1, - contractAddress: item.t1, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't1' + ':' + item.t1, - methodName: 'decimals' - } - ] - } - ]) - - callContext = [].concat.apply([], callContext) - return callContext -} - -function getFinalMetaData(resultDecimals, prevMetaData, prefix) { - let metadata = prevMetaData.map((item) => { - let t0 = getInfoContract( - resultDecimals, - prefix + ':' + 't0' + ':' + item.t0 - ) - let t1 = getInfoContract( - resultDecimals, - prefix + ':' + 't1' + ':' + item.t1 - ) - return { - ...item, - dec0: new BN(10) - .pow(new BN(getReturnValue(t0[0].callsReturnContext, 'decimals')[0])) - .toString(), - dec1: new BN(10) - .pow(new BN(getReturnValue(t1[0].callsReturnContext, 'decimals')[0])) - .toString() - } - }) - return metadata -} - -async function tokenVWAP(token, pairs, chainId, metadata) { - let pairPrices = [] - let pairVolume = [] - let inputToken = token - if (!metadata) { - const contractCallContext = makeCallContextInfo(pairs, PAIRS_INFO) - let result = await multiCall(chainId, contractCallContext) - - metadata = getMetadata(result, PAIRS_INFO) - - let callContextPairs = makeCallContextDecimal(metadata, PAIRS_INFO) - let resultDecimals = await multiCall(chainId, callContextPairs) - metadata = getFinalMetaData(resultDecimals, metadata, PAIRS_INFO) - } - let pairVWAPPromises = [] - for (let i = 0; i < pairs.length; i++) { - let index = inputToken.toLowerCase() == metadata[i].t0.toLowerCase() ? 0 : 1 - - if (inputToken.toLowerCase() == metadata[i].t0.toLowerCase()) { - inputToken = metadata[i].t1 - } else if (inputToken.toLowerCase() == metadata[i].t1.toLowerCase()) { - inputToken = metadata[i].t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - pairVWAPPromises.push(pairVWAP(pairs[i], index, chainId)) - } - - let pairVWAPs = await Promise.all(pairVWAPPromises) - - pairVWAPs.map((pairVWAP) => { - pairPrices.push(pairVWAP.tokenPrice) - pairVolume.push(pairVWAP.sumVolume) - }) - let volume = pairVolume.reduce( - (previousValue, currentValue) => previousValue.add(currentValue), - new BN(0) - ) - let price = pairPrices.reduce( - (price, x) => price.mul(x).div(SCALE), - new BN(SCALE) - ) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } -} - -async function pairVWAP(pair, index, chainId) { - return getTokenTxs( - pair, - GRAPH_URL_MAPPING[chainId], - GRAPH_DEPLOYMENT_MAPPING[chainId] - ).then((tokenTxs) => { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - let price = new BN('0') - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount1Out.mul(SCALE).div(amount0In) - volume = amount0In - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount1In.mul(SCALE).div(amount0Out) - volume = amount0Out - } - break - case 1: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount0In.mul(SCALE).div(amount1Out) - volume = amount1Out - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount0Out.mul(SCALE).div(amount1In) - volume = amount1In - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { tokenPrice, sumVolume } - } - return { tokenPrice: new BN('0'), sumVolume: new BN('0') } - }) -} - -async function LPTokenPrice(token, pairs0, pairs1, chainId) { - const contractCallContextToken = makeCallContextInfo([token], TOKEN_INFO) - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_TOTAL_SUPPLY_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ] - } - ] - - const contractCallContextPairs0 = makeCallContextInfo(pairs0, PAIRS0_INFO) - - const contractCallContextPairs1 = makeCallContextInfo(pairs1, PAIRS1_INFO) - - const contractCallContext = [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs0, - ...contractCallContextPairs1 - ] - - let result = await multiCall(chainId, contractCallContext) - - let metadata = getMetadata(result, TOKEN_INFO) - - let pairs0Metadata = getMetadata(result, PAIRS0_INFO) - - let pairs1Metadata = getMetadata(result, PAIRS1_INFO) - - const callContextDecimalToken = makeCallContextDecimal(metadata, TOKEN_INFO) - - let callContextPairs0 = makeCallContextDecimal(pairs0Metadata, PAIRS0_INFO) - - let callContextPairs1 = makeCallContextDecimal(pairs1Metadata, PAIRS1_INFO) - - const contractCallContextDecimal = [ - ...callContextDecimalToken, - ...callContextPairs0, - ...callContextPairs1 - ] - - let resultDecimals = await multiCall(chainId, contractCallContextDecimal) - - metadata = getFinalMetaData(resultDecimals, metadata, TOKEN_INFO)[0] - pairs0Metadata = getFinalMetaData(resultDecimals, pairs0Metadata, PAIRS0_INFO) - pairs1Metadata = getFinalMetaData(resultDecimals, pairs1Metadata, PAIRS1_INFO) - - let totalSupply = getInfoContract(result, TOTAL_SUPPLY)[0].callsReturnContext - totalSupply = new BN(totalSupply[0].returnValues[0]) - - let reserveA = new BN(metadata.r0).mul(SCALE).div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1).mul(SCALE).div(new BN(metadata.dec1)) - - let totalUSDA = reserveA - let sumVolume = new BN('0') - - let _tokenVWAPResults = await Promise.all([ - pairs0.length ? tokenVWAP(metadata.t0, pairs0, chainId, pairs0Metadata) : null, - pairs1.length ? tokenVWAP(metadata.t1, pairs1, chainId, pairs1Metadata) : null - ]) - - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - totalUSDA = price.mul(reserveA).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSDB = reserveB - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - totalUSDB = price.mul(reserveB).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSD = totalUSDA.add(totalUSDB) - - return { price: totalUSD.mul(SCALE).div(totalSupply).toString(), sumVolume } -} - -module.exports = { - APP_NAME: 'sushi_permissionless_oracles_vwap', - APP_ID: 22, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - let { token, pairs, chainId, hashTimestamp } = params - if (typeof pairs === 'string' || pairs instanceof String) { - pairs = pairs.split(',') - } - if(!VALID_CHAINS.includes(chainId)) - { - throw { message: 'INVALID_CHAIN' } - } - let { price, volume } = await tokenVWAP(token, pairs, chainId) - return { - token: token, - tokenPrice: price.toString(), - pairs: pairs, - chainId, chainId, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, chainId, hashTimestamp } = params - if(!VALID_CHAINS.includes(chainId)) - { - throw { message: 'INVALID_CHAIN' } - } - if (typeof pairs0 === 'string' || pairs0 instanceof String) { - pairs0 = pairs0.split(',').filter((x) => x) - } - if (typeof pairs1 === 'string' || pairs1 instanceof String) { - pairs1 = pairs1.split(',').filter((x) => x) - } - const { price, sumVolume } = await LPTokenPrice(token, pairs0, pairs1, chainId) - return { - token: token, - tokenPrice: price, - pairs0: pairs0, - pairs1: pairs1, - chainId: chainId, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs, chainId } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs }, - { type: 'string', value: chainId }, - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs0, pairs1, chainId } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs0 }, - { type: 'address[]', value: pairs1 }, - { type: 'string', value: chainId }, - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/sushi_permissionless_oracles_vwap_v2.js b/general/sushi_permissionless_oracles_vwap_v2.js deleted file mode 100644 index 51c7194..0000000 --- a/general/sushi_permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,26 +0,0 @@ -const ParentOraclesV2 = require('./parent_oracles_v2') -const { - GRAPH_URL, - GRAPH_DEPLOYMENT_ID -} = require('./parent_oracles.constant.json') -const APP_CONFIG = {} -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'sushi_permissionless_oracles_vwap_v2', - APP_ID: 28, - config: APP_CONFIG, - - VALID_CHAINS: ['1', '137', '42161', '43114', '250', '56'], - - prepareTokenTx: async function (pair, exchange, start, end) { - const tokenTxs = await this.getTokenTxs( - pair, - GRAPH_URL[exchange][this.config.chainId], - GRAPH_DEPLOYMENT_ID[exchange][this.config.chainId], - start, - end - ) - return tokenTxs - } -} diff --git a/general/synchronizer-oracle.js b/general/synchronizer-oracle.js deleted file mode 100644 index 322f6cc..0000000 --- a/general/synchronizer-oracle.js +++ /dev/null @@ -1,105 +0,0 @@ -const { axios, soliditySha3, ethCall, Web3: web3 } = MuonAppUtils - -const SYNCHRONIZER_SERVER = 'https://oracle1.deus.finance' - -const MIN_RATIO = 10; -const MIN_BUY_RATIO = 15; - -const ACTIONS = { - close: 0, - sell: 0, - open: 1, - buy: 1 -} - -const CHAINS = { - mainnet: 1, - rinkeby: 4, - polygon: 137, - xdai: 100, - bsc: 56, - fantom: 250, - heco: 128 -} - -module.exports = { - APP_NAME: 'synchronizer', - APP_ID: 9, - REMOTE_CALL_TIMEOUT: 30000, - - onRequest: async function (request) { - let { - method, - data: { params } - } = request - - switch (method) { - case 'signature': - let { tokenId, action, chain, id } = params - - if (!Object.keys(ACTIONS).includes(action)) { - throw { message: "Invalid Action" } - } - - const address = web3.utils.toChecksumAddress(tokenId); - - const priceInfo = await axios - .get(`${SYNCHRONIZER_SERVER}/v2/price?address=${address}&network=${chain}&id=${id}`) - .then(({ data }) => data) - - if ('error' in priceInfo) { - throw { message: priceInfo['error'] } - } - - const marketStatus = priceInfo['market_status'] - - - if (marketStatus == 'closed') { - throw { message: "market is closed" } - } else if (marketStatus == 'frozen') { - throw { message: "token is frozen" } - } else if (marketStatus == 'open') { - if (priceInfo.ratio <= MIN_RATIO) { - throw { message: "invalid price range" } - } - if (['buy', 'open'].includes(action) && priceInfo.ratio <= MIN_BUY_RATIO) { - throw { message: "invalid price range for buying" } - } - - return { - chain: chain, - action: action, - address: address, - price: priceInfo.price - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - switch (method) { - case 'signature': { - let { price, address, action, chain } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: String(address) }, - { type: 'uint256', value: String(price) }, - { type: 'uint256', value: String(ACTIONS[action]) }, - { type: 'uint256', value: String(CHAINS[chain]) }, - { type: 'uint256', value: request.data.timestamp } - ]) - - } - default: - return null - } - } -} diff --git a/general/test_rng.js b/general/test_rng.js deleted file mode 100644 index 0da6ca8..0000000 --- a/general/test_rng.js +++ /dev/null @@ -1,83 +0,0 @@ -const { axios, soliditySha3, floatToBN } = MuonAppUtils - -const APP_ID = 13 - -// Random seed function -// More Info: -// https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript -Math.seed = function(s) { - var mask = 0xffffffff; - var m_w = (123456789 + s) & mask; - var m_z = (987654321 - s) & mask; - - return function() { - m_z = (36969 * (m_z & 65535) + (m_z >>> 16)) & mask; - m_w = (18000 * (m_w & 65535) + (m_w >>> 16)) & mask; - - var result = ((m_z << 16) + (m_w & 65535)) >>> 0; - result /= 4294967296; - return result; - } -} - -function getRandomNumber(seed, min, max){ - var rngFunction = Math.seed(seed); - return Math.floor(rngFunction() * (max-min)) + min; -} - -module.exports = { - APP_NAME: 'test_rng', - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - switch (method) { - case 'randint': - let { address, min, max} = params - - /* - We are using the timestamp as the seed. - To make it more secure, we can use another deterministic random number. For example: - - Solana’s block hash at timestamp+1 second - - BTC price at timestamp+1 second - … - */ - - let seed = request.data.timestamp; - - // all nodes will use the same seed and the random - // number will be the same on all nodes - let randomNumber = getRandomNumber(seed, - parseInt(min), parseInt(max) - ); - - return { - appId: APP_ID, - address, - number: randomNumber - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - hashRequestResult: function (request, result) { - let { method } = request; - switch (method) { - case 'randint': - let { address } = result; - return soliditySha3([ - { type: 'uint32', value: APP_ID }, - { type: 'address', value: address }, - { type: 'uint256', value: result.number} - ]) - - default: - break - } - } -} diff --git a/general/traderjoe_permissionless_oracles_vwap.js b/general/traderjoe_permissionless_oracles_vwap.js deleted file mode 100644 index e2af6e0..0000000 --- a/general/traderjoe_permissionless_oracles_vwap.js +++ /dev/null @@ -1,15 +0,0 @@ -const SpriteVWAP = require('./spirit_permissionless_oracles_vwap'); - -const APP_CONFIG = { - chainId: 43114, - graphUrl: "https://api.thegraph.com/subgraphs/name/traderjoe-xyz/exchange", - graphDeploymentId: "QmW62QDNJriA73HeyDAwnEaFyDNLZc7o8m5ewSALDRedoM" -}; - -module.exports = { - ...SpriteVWAP, - - APP_NAME: 'traderjoe_permissionless_oracles_vwap', - APP_ID: 21, - config: APP_CONFIG -} diff --git a/general/traderjoe_permissionless_oracles_vwap_v2.js b/general/traderjoe_permissionless_oracles_vwap_v2.js deleted file mode 100644 index 2ccbc79..0000000 --- a/general/traderjoe_permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,14 +0,0 @@ -const ParentOraclesV2 = require('./parent_oracles_v2') - -const APP_CONFIG = { - chainId: 43114 -} - -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'traderjoe_permissionless_oracles_vwap_v2', - APP_ID: 29, - config: APP_CONFIG, - VALID_CHAINS: ['43114'] -} diff --git a/general/tron-sample-app.js b/general/tron-sample-app.js deleted file mode 100644 index 8b3ca62..0000000 --- a/general/tron-sample-app.js +++ /dev/null @@ -1,60 +0,0 @@ -const {tron} = MuonAppUtils -const TssApp = { - APP_NAME: 'tron-sample', - // APP_ID: '5007', - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let {method, data: {params={}}} = request; - switch (method) { - case 'verify_string': - if(!params.str) - throw "params[str]: undefined" - return params.str; - case 'verify_string_int': - if(!params.str || !params.int) - throw "params[str|int]: undefined" - return { - str: params.str, - int: params.int - }; - case 'verify_string_int_address': - if(!params.str || !params.int || !params.address) - throw "params[str|int|address]: undefined" - return { - str: params.str, - int: params.int, - address: params.address, - }; - default: - throw {message: `invalid method ${method}`} - } - }, - - hashRequestResult: function (request, result){ - switch (request.method) { - case 'verify_string': - return tron.soliditySha3([ - {type: 'uint32', value: this.APP_ID}, - {type: 'string', value: result.toString()}, - ]); - case 'verify_string_int': - return tron.soliditySha3([ - {type: 'uint32', value: this.APP_ID}, - {type: 'string', value: result.str}, - {type: 'uint256', value: result.int}, - ]); - case 'verify_string_int_address': - return tron.soliditySha3([ - {type: 'uint32', value: this.APP_ID}, - {type: 'string', value: result.str}, - {type: 'uint256', value: result.int}, - {type: 'address', value: result.address}, - ]); - default: - throw { message: `Unknown method: ${request.method}` } - } - }, -} - -module.exports = TssApp diff --git a/general/uniswapv2_permissionless_oracles_vwap.js b/general/uniswapv2_permissionless_oracles_vwap.js deleted file mode 100644 index 051c20d..0000000 --- a/general/uniswapv2_permissionless_oracles_vwap.js +++ /dev/null @@ -1,559 +0,0 @@ -const { axios, toBaseUnit, soliditySha3, BN, multiCall } = MuonAppUtils - -const getTimestamp = () => Math.floor(Date.now() / 1000) -const TOKEN_INFO = 'tokenInfo' -const TOTAL_SUPPLY = 'totalSupply' -const PAIRS0_INFO = 'pairs0INFO' -const PAIRS1_INFO = 'pairs1INFO' -const PAIRS_INFO = 'pairsINFO' - -const Info_ABI = [ - { - inputs: [], - name: 'getReserves', - outputs: [ - { internalType: 'uint112', name: '_reserve0', type: 'uint112' }, - { internalType: 'uint112', name: '_reserve1', type: 'uint112' }, - { internalType: 'uint32', name: '_blockTimestampLast', type: 'uint32' } - ], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token0', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - }, - { - inputs: [], - name: 'token1', - outputs: [{ internalType: 'address', name: '', type: 'address' }], - stateMutability: 'view', - type: 'function' - } -] - -const ERC20_TOTAL_SUPPLY_ABI = [ - { - constant: true, - inputs: [], - name: 'totalSupply', - outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], - payable: false, - stateMutability: 'view', - type: 'function' - } -] -const ERC20_DECIMALS_ABI = [ - { - inputs: [], - name: 'decimals', - outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], - stateMutability: 'view', - type: 'function' - } -] - -const PRICE_TOLERANCE = '0.05' -const MAINNET_ID = 1 -const SCALE = new BN('1000000000000000000') -const GRAPH_URL = 'https://api.thegraph.com/subgraphs/name/ianlapham/uniswapv2' -const GRAPH_DEPLOYMENT_ID = 'Qmc7K8dKoadu1VcHfAV45pN4sPnwZcU2okV6cuU4B7qQp1' - -async function getTokenTxs(pairAddr, graphUrl, deploymentID) { - let currentTimestamp = getTimestamp() - const last30Min = currentTimestamp - 1800 - let skip = 0 - let tokenTxs = [] - let queryIndex = 0 - while (true) { - queryIndex += 1 - let lastRowQuery = - queryIndex === 1 - ? ` - swaps_last_rows:swaps( - first: 1, - where: { - pair: "${pairAddr.toLowerCase()}" - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ` - : '' - const query = ` - { - swaps( - first: 1000, - skip: ${skip}, - where: { - pair: "${pairAddr.toLowerCase()}" - timestamp_gt: ${last30Min} - timestamp_lt: ${currentTimestamp} - }, - orderBy: timestamp, - orderDirection: desc - ) { - amount0In - amount1In - amount0Out - amount1Out - timestamp - } - ${lastRowQuery} - _meta { - deployment - } - } - ` - skip += 1000 - try { - const { - data: { data }, - status - } = await axios.post(graphUrl, { - query: query - }) - if (status == 200 && data) { - const { - swaps, - _meta: { deployment } - } = data - if (deployment != deploymentID) { - throw { message: 'SUBGRAPH_IS_UPDATED' } - } - if (!swaps.length) { - if (queryIndex == 1) { - tokenTxs = tokenTxs.concat(data.swaps_last_rows) - } - break - } - tokenTxs = tokenTxs.concat(swaps) - if (skip > 5000) { - currentTimestamp = swaps[swaps.length - 1]['timestamp'] - skip = 0 - } - } else { - throw { message: 'INVALID_SUBGRAPH_RESPONSE' } - } - } catch (error) { - throw { message: 'SUBGRAPH_QUERY_FAILED' } - } - } - return tokenTxs -} - -function getReturnValue(info, methodName) { - return info.find((item) => item.methodName === methodName).returnValues -} - -function getInfoContract(multiCallInfo, filterBy) { - return multiCallInfo.filter((item) => item.reference.startsWith(filterBy)) -} - -function getMetadata(multiCallInfo, filterBy) { - const info = getInfoContract(multiCallInfo, filterBy) - let metadata = info.map((item) => { - const reserves = getReturnValue(item.callsReturnContext, 'getReserves') - return { - r0: reserves[0], - r1: reserves[1], - - t0: getReturnValue(item.callsReturnContext, 'token0')[0], - t1: getReturnValue(item.callsReturnContext, 'token1')[0] - } - }) - return metadata -} - -function makeCallContextInfo(info, prefix) { - const contractCallContext = info.map((item) => ({ - reference: prefix + ':' + item, - contractAddress: item, - abi: Info_ABI, - calls: [ - { - reference: prefix + ':' + item, - methodName: 'getReserves' - }, - { - reference: prefix + ':' + item, - methodName: 'token0' - }, - { - reference: prefix + ':' + item, - methodName: 'token1' - } - ] - })) - - return contractCallContext -} - -function makeCallContextDecimal(metadata, prefix) { - let callContext = metadata.map((item) => [ - { - reference: prefix + ':' + 't0' + ':' + item.t0, - contractAddress: item.t0, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't0' + ':' + item.t0, - methodName: 'decimals' - } - ] - }, - { - reference: prefix + ':' + 't1' + ':' + item.t1, - contractAddress: item.t1, - abi: ERC20_DECIMALS_ABI, - calls: [ - { - reference: 't1' + ':' + item.t1, - methodName: 'decimals' - } - ] - } - ]) - - callContext = [].concat.apply([], callContext) - return callContext -} - -function getFinalMetaData(resultDecimals, prevMetaData, prefix) { - let metadata = prevMetaData.map((item) => { - let t0 = getInfoContract( - resultDecimals, - prefix + ':' + 't0' + ':' + item.t0 - ) - let t1 = getInfoContract( - resultDecimals, - prefix + ':' + 't1' + ':' + item.t1 - ) - return { - ...item, - dec0: new BN(10) - .pow(new BN(getReturnValue(t0[0].callsReturnContext, 'decimals')[0])) - .toString(), - dec1: new BN(10) - .pow(new BN(getReturnValue(t1[0].callsReturnContext, 'decimals')[0])) - .toString() - } - }) - return metadata -} - -async function tokenVWAP(token, pairs, metadata) { - let pairPrices = [] - let pairVolume = [] - let inputToken = token - if (!metadata) { - const contractCallContext = makeCallContextInfo(pairs, PAIRS_INFO) - let result = await multiCall(MAINNET_ID, contractCallContext) - - metadata = getMetadata(result, PAIRS_INFO) - - let callContextPairs = makeCallContextDecimal(metadata, PAIRS_INFO) - let resultDecimals = await multiCall(MAINNET_ID, callContextPairs) - metadata = getFinalMetaData(resultDecimals, metadata, PAIRS_INFO) - } - let pairVWAPPromises = [] - for (let i = 0; i < pairs.length; i++) { - let index = inputToken.toLowerCase() == metadata[i].t0.toLowerCase() ? 0 : 1 - - if (inputToken.toLowerCase() == metadata[i].t0.toLowerCase()) { - inputToken = metadata[i].t1 - } else if (inputToken.toLowerCase() == metadata[i].t1.toLowerCase()) { - inputToken = metadata[i].t0 - } else { - throw { message: 'INVALID_PAIRS' } - } - pairVWAPPromises.push(pairVWAP(pairs[i], index)) - } - - let pairVWAPs = await Promise.all(pairVWAPPromises) - - pairVWAPs.map((pairVWAP) => { - pairPrices.push(pairVWAP.tokenPrice) - pairVolume.push(pairVWAP.sumVolume) - }) - let volume = pairVolume.reduce( - (previousValue, currentValue) => previousValue.add(currentValue), - new BN(0) - ) - let price = pairPrices.reduce( - (price, x) => price.mul(x).div(SCALE), - new BN(SCALE) - ) - - if (volume.toString() == '0' || price.toString() == '0') { - throw { message: 'INVALID_PRICE' } - } - return { price, volume } -} - -async function pairVWAP(pair, index) { - return getTokenTxs(pair, GRAPH_URL, GRAPH_DEPLOYMENT_ID).then((tokenTxs) => { - let sumWeightedPrice = new BN('0') - let sumVolume = new BN('0') - for (let i = 0; i < tokenTxs.length; i++) { - let swap = tokenTxs[i] - let price = new BN('0') - let volume = new BN('0') - switch (index) { - case 0: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount1Out.mul(SCALE).div(amount0In) - volume = amount0In - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount1In.mul(SCALE).div(amount0Out) - volume = amount0Out - } - break - case 1: - if (swap.amount0In != 0) { - let amount0In = toBaseUnit(swap.amount0In, '18') - let amount1Out = toBaseUnit(swap.amount1Out, '18') - price = amount0In.mul(SCALE).div(amount1Out) - volume = amount1Out - } else { - let amount1In = toBaseUnit(swap.amount1In, '18') - let amount0Out = toBaseUnit(swap.amount0Out, '18') - price = amount0Out.mul(SCALE).div(amount1In) - volume = amount1In - } - break - default: - break - } - sumWeightedPrice = sumWeightedPrice.add(price.mul(volume)) - sumVolume = sumVolume.add(volume) - } - if (sumVolume > new BN('0')) { - let tokenPrice = sumWeightedPrice.div(sumVolume) - return { tokenPrice, sumVolume } - } - return { tokenPrice: new BN('0'), sumVolume: new BN('0') } - }) -} - -async function LPTokenPrice(token, pairs0, pairs1) { - const contractCallContextToken = makeCallContextInfo([token], TOKEN_INFO) - const contractCallContextSupply = [ - { - reference: TOTAL_SUPPLY, - contractAddress: token, - abi: ERC20_TOTAL_SUPPLY_ABI, - calls: [ - { - reference: TOTAL_SUPPLY, - methodName: 'totalSupply' - } - ] - } - ] - - const contractCallContextPairs0 = makeCallContextInfo(pairs0, PAIRS0_INFO) - - const contractCallContextPairs1 = makeCallContextInfo(pairs1, PAIRS1_INFO) - - const contractCallContext = [ - ...contractCallContextToken, - ...contractCallContextSupply, - ...contractCallContextPairs0, - ...contractCallContextPairs1 - ] - - let result = await multiCall(MAINNET_ID, contractCallContext) - - let metadata = getMetadata(result, TOKEN_INFO) - - let pairs0Metadata = getMetadata(result, PAIRS0_INFO) - - let pairs1Metadata = getMetadata(result, PAIRS1_INFO) - - const callContextDecimalToken = makeCallContextDecimal(metadata, TOKEN_INFO) - - let callContextPairs0 = makeCallContextDecimal(pairs0Metadata, PAIRS0_INFO) - - let callContextPairs1 = makeCallContextDecimal(pairs1Metadata, PAIRS1_INFO) - - const contractCallContextDecimal = [ - ...callContextDecimalToken, - ...callContextPairs0, - ...callContextPairs1 - ] - - let resultDecimals = await multiCall(MAINNET_ID, contractCallContextDecimal) - - metadata = getFinalMetaData(resultDecimals, metadata, TOKEN_INFO)[0] - pairs0Metadata = getFinalMetaData(resultDecimals, pairs0Metadata, PAIRS0_INFO) - pairs1Metadata = getFinalMetaData(resultDecimals, pairs1Metadata, PAIRS1_INFO) - - let totalSupply = getInfoContract(result, TOTAL_SUPPLY)[0].callsReturnContext - totalSupply = new BN(totalSupply[0].returnValues[0]) - - let reserveA = new BN(metadata.r0).mul(SCALE).div(new BN(metadata.dec0)) - - let reserveB = new BN(metadata.r1).mul(SCALE).div(new BN(metadata.dec1)) - - let totalUSDA = reserveA - let sumVolume = new BN('0') - - let _tokenVWAPResults = await Promise.all([ - pairs0.length ? tokenVWAP(metadata.t0, pairs0, pairs0Metadata) : null, - pairs1.length ? tokenVWAP(metadata.t1, pairs1, pairs1Metadata) : null - ]) - - if (pairs0.length) { - const { price, volume } = _tokenVWAPResults[0] - totalUSDA = price.mul(reserveA).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSDB = reserveB - if (pairs1.length) { - const { price, volume } = _tokenVWAPResults[1] - totalUSDB = price.mul(reserveB).div(SCALE) - sumVolume = sumVolume.add(volume) - } - - let totalUSD = totalUSDA.add(totalUSDB) - - return { price: totalUSD.mul(SCALE).div(totalSupply).toString(), sumVolume } -} - -module.exports = { - APP_NAME: 'uniswapv2_permissionless_oracles_vwap', - APP_ID: 18, - - onRequest: async function (request) { - throw { message: `MuonApp disabled.` } - let { - method, - data: { params } - } = request - - switch (method) { - case 'price': - let { token, pairs, hashTimestamp } = params - if (typeof pairs === 'string' || pairs instanceof String) { - pairs = pairs.split(',') - } - let { price, volume } = await tokenVWAP(token, pairs) - return { - token: token, - tokenPrice: price.toString(), - pairs: pairs, - volume: volume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - case 'lp_price': { - let { token, pairs0, pairs1, hashTimestamp } = params - if (typeof pairs0 === 'string' || pairs0 instanceof String) { - pairs0 = pairs0.split(',').filter((x) => x) - } - if (typeof pairs1 === 'string' || pairs1 instanceof String) { - pairs1 = pairs1.split(',').filter((x) => x) - } - const { price, sumVolume } = await LPTokenPrice(token, pairs0, pairs1) - return { - token: token, - tokenPrice: price, - pairs0: pairs0, - pairs1: pairs1, - volume: sumVolume.toString(), - ...(hashTimestamp ? { timestamp: request.data.timestamp } : {}) - } - } - - default: - throw { message: `Unknown method ${params}` } - } - }, - - isPriceToleranceOk: function (price, expectedPrice) { - let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs() - if ( - new BN(priceDiff) - .div(new BN(expectedPrice)) - .gt(toBaseUnit(PRICE_TOLERANCE, '18')) - ) { - return false - } - return true - }, - - hashRequestResult: function (request, result) { - let { - method, - data: { params } - } = request - let { hashTimestamp, hashVolume } = params - switch (method) { - case 'price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs } = result - - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs }, - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - case 'lp_price': { - if ( - !this.isPriceToleranceOk( - result.tokenPrice, - request.data.result.tokenPrice - ) - ) { - throw { message: 'Price threshold exceeded' } - } - let { token, pairs0, pairs1 } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, - { type: 'address', value: token }, - { type: 'address[]', value: pairs0 }, - { type: 'address[]', value: pairs1 }, - { type: 'uint256', value: request.data.result.tokenPrice }, - ...(hashVolume - ? [{ type: 'uint256', value: request.data.result.volume }] - : []), - - ...(hashTimestamp - ? [{ type: 'uint256', value: request.data.timestamp }] - : []) - ]) - } - default: - return null - } - } -} diff --git a/general/uniswapv2_permissionless_oracles_vwap_v2.js b/general/uniswapv2_permissionless_oracles_vwap_v2.js deleted file mode 100644 index 28db698..0000000 --- a/general/uniswapv2_permissionless_oracles_vwap_v2.js +++ /dev/null @@ -1,14 +0,0 @@ -const ParentOraclesV2 = require('./parent_oracles_v2') - -const APP_CONFIG = { - chainId: 1 -} - -module.exports = { - ...ParentOraclesV2, - - APP_NAME: 'uniswapv2_permissionless_oracles_vwap_v2', - APP_ID: 29, - config: APP_CONFIG, - VALID_CHAINS: ['1'] -} diff --git a/general/webpack-test.js b/general/webpack-test.js deleted file mode 100644 index d3d1693..0000000 --- a/general/webpack-test.js +++ /dev/null @@ -1,958 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else { - var a = factory(); - for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; - } -})(global, () => { -return /******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 577: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const axios = __webpack_require__(167) -const Web3 = __webpack_require__(519) -const tron = __webpack_require__(623) -const { flatten, groupBy } = __webpack_require__(517) -const { BigNumber } = __webpack_require__(215) - -const { toBaseUnit } = __webpack_require__(144) -const { timeout, floatToBN } = __webpack_require__(528) -const util = __webpack_require__(567) -const ws = __webpack_require__(352) -const ethSigUtil = __webpack_require__(685) -const { - getBlock: ethGetBlock, - getBlockNumber: ethGetBlockNumber, - getPastEvents: ethGetPastEvents, - read: ethRead, - call: ethCall, - getTokenInfo: ethGetTokenInfo, - getNftInfo: ethGetNftInfo, - hashCallOutput: ethHashCallOutput -} = __webpack_require__(775) - -const soliditySha3 = __webpack_require__(108); - -const { multiCall } = __webpack_require__(834) -const { BNSqrt } = __webpack_require__(196) - -module.exports = { - axios, - Web3, - flatten, - groupBy, - tron, - ws, - timeout, - BN: Web3.utils.BN, - BigNumber, - toBN: Web3.utils.toBN, - floatToBN, - multiCall, - ethGetBlock, - ethGetBlockNumber, - ethGetPastEvents, - ethRead, - ethCall, - ethGetTokenInfo, - ethGetNftInfo, - ethHashCallOutput, - toBaseUnit, - soliditySha3, - ecRecover: util.ecrecover, - recoverTypedSignature: ethSigUtil.recoverTypedSignature, - recoverTypedMessage: ethSigUtil.recoverTypedMessage, - BNSqrt: BNSqrt -} - - -/***/ }), - -/***/ 196: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const Web3 = __webpack_require__(519) - -const BNSqrt = (num) => { - const BN = Web3.utils.BN - if(num.lt(new BN(0))) { - throw { message: "Sqrt only works on non-negtiave inputs" } - } - if(num.lt(new BN(2))) { - return num - } - - const smallCand = BNSqrt(num.shrn(2)).shln(1) - const largeCand = smallCand.add(new BN(1)) - - if (largeCand.mul(largeCand).gt(num)) { - return smallCand - } else { - return largeCand - } -} - -module.exports = { BNSqrt } - -/***/ }), - -/***/ 144: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const ethers = __webpack_require__(982) -const Web3 = __webpack_require__(519) -const {hashCallOutput} = __webpack_require__(775) -const BN = Web3.utils.BN -const web3 = new Web3(); - -// const PRIVATE_KEY = process.env.SIGN_WALLET_PRIVATE_KEY -// const account = web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY) -// web3.eth.accounts.wallet.add(account) - -function soliditySha3(params){ - return web3.utils.soliditySha3(...params); -} - -function sign(hash) { - let sig = web3.eth.accounts.sign(hash, PRIVATE_KEY) - return sig.signature; -} - -function recover(hash, signature){ - let signer = web3.eth.accounts.recover(hash, signature) - return signer; -} - -function toFixedHex(bigNum){ - return ethers.utils.hexZeroPad('0x' + bigNum.toString(16), 32); -} - -function isString(s) { - return (typeof s === 'string' || s instanceof String) -} - -function toBaseUnit(value, decimals) { - if (!isString(value)) { - throw new Error('Pass strings to prevent floating point precision issues.') - } - const ten = new BN(10); - const base = ten.pow(new BN(decimals)); - - // Is it negative? - let negative = (value.substring(0, 1) === '-'); - if (negative) { - value = value.substring(1); - } - - if (value === '.') { - throw new Error( - `Invalid value ${value} cannot be converted to` - + ` base unit with ${decimals} decimals.`); - } - - // Split it into a whole and fractional part - let comps = value.split('.'); - if (comps.length > 2) { throw new Error('Too many decimal points'); } - - let whole = comps[0], fraction = comps[1]; - - if (!whole) { whole = '0'; } - if (!fraction) { fraction = '0'; } - if (fraction.length > decimals) { - throw new Error('Too many decimal places'); - } - - while (fraction.length < decimals) { - fraction += '0'; - } - - whole = new BN(whole); - fraction = new BN(fraction); - let wei = (whole.mul(base)).add(fraction); - - if (negative) { - wei = wei.neg(); - } - - return new BN(wei.toString(10), 10); -} - -module.exports = { - hashCallOutput, - toFixedHex, - soliditySha3, - sign, - recover, - toBaseUnit, -} - - -/***/ }), - -/***/ 775: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const Web3 = __webpack_require__(519) -const EventEmbitter = __webpack_require__(239) -const HttpProvider = Web3.providers.HttpProvider -const WebsocketProvider = Web3.providers.WebsocketProvider -const { sortObject, getTimestamp } = __webpack_require__(528) -const crypto = __webpack_require__(144) -const ERC20_ABI = __webpack_require__(920) -const ERC721_ABI = __webpack_require__(329) - -const _generalWeb3Instance = new Web3() -const soliditySha3 = _generalWeb3Instance.utils.soliditySha3 - -const _networksWeb3 = { - ganache: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_GANACHE)), - // ethereum mani net - 1: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), - 3: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ROPSTEN)), - 4: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_RINKEBY)), - 56: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC)), - 97: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSCTEST)), - 250: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), - 4002: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTMTEST)), - 100: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_XDAI_MAINNET || 'https://rpc.xdaichain.com/')), - 77: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_XDAI_SOKOL_TESTNET || 'https://sokol.poa.network')), - 137: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON)), - 80001: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_MUMBAI)), - 43113: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVALANCHE_FUJI_TESTNET || 'https://api.avax-test.network/ext/bc/C/rpc')), - 43114: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVALANCHE_MAINNET || 'https://api.avax.network/ext/bc/C/rpc')), - 421611: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ARBITRUM_TESTNET || 'https://rinkeby.arbitrum.io/rpc')), - 42161: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ARBITRUM_MAINNET || 'https://arb1.arbitrum.io/rpc')), - 1088: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_METIS || 'https://andromeda.metis.io/?owner=1088')), - 10: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_OPTIMISM || 'https://rpc.ankr.com/optimism')), - 420: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_OPTIMISM_TESTNET || 'https://rpc.ankr.com/optimism_testnet')), -} - -const nameToChainIdMap = { - local: 'ganache', - eth: 1, // Ethereum mainnet - ropsten: 3, // Ethereum ropsten testnet - rinkeby: 4, // Ethereum rinkeby testnet - bsc: 56, // Binance Smart Chain mainnet - bsctest: 97, // Binance Smart Chain testnet - ftm: 250, // Fantom mainnet - ftmtest: 4002, // Fantom testnet - xdai: 100, // Xdai mainnet - sokol: 77, // Xdai testnet - polygon: 137, // polygon mainnet - mumbai: 80001, // Polygon mumbai testnet - fuji: 43113, // Avalanche Fuji Testnet - avax: 43114, // Avalanche Mainnet - arbitrumTestnet: 421611, //Arbitrum Testnet - arbitrum: 42161, // Arbitrum - metis: 1088, // Metis - optimism: 10, // Optimism - optimismTestnet: 420, // Optimism Testnet -} - -function getWeb3(network) { - if (_networksWeb3[network]) return Promise.resolve(_networksWeb3[network]) - else if (_networksWeb3[nameToChainIdMap[network]]) - return Promise.resolve(_networksWeb3[nameToChainIdMap[network]]) - else return Promise.reject({ message: `invalid network "${network}"` }) -} - -function getWeb3Sync(network) { - if (_networksWeb3[network]) return _networksWeb3[network] - else if (_networksWeb3[nameToChainIdMap[network]]) - return _networksWeb3[nameToChainIdMap[network]] - else throw { message: `invalid network "${network}"` } -} - -function hashCallOutput( - address, - method, - abi, - result, - outputFilter = [], - extraParams = [] -) { - let methodAbi = abi.find( - ({ name, type }) => name === method && type === 'function' - ) - if (!methodAbi) { - throw { message: `Abi of method (${method}) not found` } - } - let abiOutputs = methodAbi.outputs - if (!!outputFilter && outputFilter.length > 0) { - abiOutputs = outputFilter.map((key) => { - return methodAbi.outputs.find(({ name }) => name === key) - }) - } - // console.log('signing:',abiOutputs) - let params = abiOutputs.map(({ name, type }) => ({ - type, - value: !name || typeof result === 'string' ? result : result[name] - })) - params = [{ type: 'address', value: address }, ...params, ...extraParams] - let hash = _generalWeb3Instance.utils.soliditySha3(...params) - return hash -} - -function getTokenInfo(address, network) { - return getWeb3(network).then(async (web3) => { - let contract = new web3.eth.Contract(ERC20_ABI, address) - return { - symbol: await contract.methods.symbol().call(), - name: await contract.methods.name().call(), - decimals: await contract.methods.decimals().call() - } - }) -} -function getNftInfo(address, network) { - return getWeb3(network).then(async (web3) => { - let contract = new web3.eth.Contract(ERC721_ABI, address) - return { - symbol: await contract.methods.symbol().call(), - name: await contract.methods.name().call() - } - }) -} - -function getTransaction(txHash, network) { - return getWeb3(network).then((web3) => web3.eth.getTransaction(txHash)) -} - -function getTransactionReceipt(txHash, network) { - return getWeb3(network).then((web3) => web3.eth.getTransactionReceipt(txHash)) -} - -function call(contractAddress, methodName, params, abi, network) { - return getWeb3(network).then((web3) => { - let contract = new web3.eth.Contract(abi, contractAddress) - return contract.methods[methodName](...params).call() - }) -} - -function read(contractAddress, property, params, abi, network) { - return getWeb3(network).then((web3) => { - let contract = new web3.eth.Contract(abi, contractAddress) - return contract.methods[property].call(...params) - }) -} - -function getBlock(network, blockHashOrBlockNumber) { - return getWeb3(network).then((web3) => { - return web3.eth.getBlock(blockHashOrBlockNumber) - }) -} - -function getBlockNumber(network) { - return getWeb3(network).then((web3) => { - return web3.eth.getBlockNumber() - }) -} - -function getPastEvents(network, contractAddress, abi, event, options) { - return getWeb3(network).then((web3) => { - let contract = new web3.eth.Contract(abi, contractAddress) - return contract.getPastEvents(event, options) - }) -} - -const subscribeLogEvent = ( - network, - contractAddress, - contractAbi, - eventName, - interval = 5000 -) => { - let subscribe = new Subscribe( - network, - contractAddress, - contractAbi, - eventName, - interval - ) - return subscribe -} - -class Subscribe extends EventEmbitter { - constructor(network, contractAddress, abi, eventName, interval = 15000) { - super() - let web3 = getWeb3Sync(network) - let contract = new web3.eth.Contract(abi, contractAddress) - - this.web3 = web3 - this.network = network - this.interval = interval - this.contract = contract - this.lastBlock = -1 - this.eventName = eventName - this._handler = this._handler.bind(this) - - this.timeout = setTimeout(this._handler, interval) - } - - async _handler() { - if (this.lastBlock < 0) { - let lastBlock = (await this.web3.eth.getBlockNumber()) - 9000 - console.log( - `watch ${this.network}:${this.contract._address} (${this.eventName}) from block ${lastBlock}` - ) - this.lastBlock = lastBlock - } - - let { contract, eventName, lastBlock, network } = this - contract.getPastEvents( - eventName, - { - // filter: {id: id}, - fromBlock: lastBlock, - toBlock: 'latest' - }, - (error, result) => { - if (!error) { - let txs = [] - if (result.length > 0) { - let lastBlock = Math.max( - ...result.map(({ blockNumber }) => blockNumber) - ) - this.lastBlock = lastBlock + 1 - txs = result.map( - ({ transactionHash, returnValues, blockNumber }) => ({ - blockNumber, - transactionHash, - returnValues - }) - ) - this.emit('event', txs, network, contract._address) - } - } else { - this.emit('error', error, network, contract._address) - } - } - ) - setTimeout(this._handler, this.interval) - } -} - -module.exports = { - getWeb3, - getBlock, - getBlockNumber, - getPastEvents, - getWeb3Sync, - hashCallOutput, - soliditySha3, - getTransaction, - getTransactionReceipt, - call, - read, - subscribeLogEvent, - getTokenInfo, - getNftInfo -} - - -/***/ }), - -/***/ 528: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const BigNumber = __webpack_require__(215); -BigNumber.set({DECIMAL_PLACES: 26}) -const toBN = (__webpack_require__(519).utils.toBN); - -module.exports.timeout = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); -module.exports.getTimestamp = () => Math.floor(Date.now() / 1000); -module.exports.newCallId = () => { - return Date.now().toString(32) + Math.floor(Math.random()*999999999).toString(32); -} -module.exports.sortObject = o => Object.keys(o).sort().reduce((r, k) => (r[k] = o[k], r), {}) -module.exports.floatToBN = (num, decimals) => { - let n0 = new BigNumber(num).multipliedBy(`1e${decimals}`); - let n1 = n0.decimalPlaces(decimals).integerValue(); - return toBN(`0x${n1.toString(16)}`); -} -module.exports.parseBool = v => { - if(typeof v === 'string') - v = v.toLowerCase(); - return v === '1' || v==='true' || v === true || v === 1; -} - -const flattenObject = (obj, prefix="") => { - let result = {} - if(Array.isArray(obj)){ - for(let i=0 ; i (typeof fn === 'function') && !/^(?:(?:\/\*[^(?:\*\/)]*\*\/\s*)|(?:\/\/[^\r\n]*))*\s*(?:(?:(?:async\s(?:(?:\/\*[^(?:\*\/)]*\*\/\s*)|(?:\/\/[^\r\n]*))*\s*)?function|class)(?:\s|(?:(?:\/\*[^(?:\*\/)]*\*\/\s*)|(?:\/\/[^\r\n]*))*)|(?:[_$\w][\w0-9_$]*\s*(?:\/\*[^(?:\*\/)]*\*\/\s*)*\s*\()|(?:\[\s*(?:\/\*[^(?:\*\/)]*\*\/\s*)*\s*(?:(?:['][^']+['])|(?:["][^"]+["]))\s*(?:\/\*[^(?:\*\/)]*\*\/\s*)*\s*\]\())/.test(fn.toString()); - -module.exports.deepFreeze = function deepFreeze (object) { - // Retrieve the property names defined on object - const propNames = Object.getOwnPropertyNames(object); - - // Freeze properties before freezing self - - for (const name of propNames) { - const value = object[name]; - - if (value && typeof value === "object") { - deepFreeze(value); - } - } - - return Object.freeze(object); -} - -module.exports.stackTrace = function() { - let err = new Error(); - return err.stack; -} - - -/***/ }), - -/***/ 834: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const { Multicall } = __webpack_require__(317) -const { getWeb3 } = __webpack_require__(775) - -async function multiCall(chainId, contractCallContext, tryAggregate = false) { - try { - const web3 = await getWeb3(chainId) - const multicall = new Multicall({ web3Instance: web3, tryAggregate }) - let { results } = await multicall.call(contractCallContext) - results = contractCallContext.map((item) => ({ - reference: item.reference, - contractAddress: item.contractAddress, - context: item.context, - callsReturnContext: results[item.reference]['callsReturnContext'].map( - (callReturn) => ({ - ...callReturn, - returnValues: callReturn['returnValues'].map((value) => { - if (typeof value === 'object' && 'hex' in value) - return web3.utils.hexToNumberString(value.hex) - else return value - }) - }) - ) - })) - return results - } catch (error) { - throw { - message: `MULTICALL_ERROR. ${error.message}`, - error: error.message - } - } -} - -module.exports = { multiCall } - -// Example - -// const contractCallContext = [ -// { -// reference: 'BloodToken', -// contractAddress: '0xc3b99c2a46b8DC82C96B8b61ED3A4c5E271164D7', -// abi: [ -// { -// inputs: [ -// { internalType: 'address', name: 'account', type: 'address' } -// ], -// name: 'balanceOf', -// outputs: [ -// { internalType: 'uint256', name: '', type: 'uint256' } -// ], -// stateMutability: 'view', -// type: 'function' -// } -// ], -// calls: [ -// { -// reference: 'bloodTokenBalance', -// methodName: 'balanceOf', -// methodParameters: [account] -// } -// ] -// }, -// { -// reference: 'MuonSwapPair', -// contractAddress: '0xC233Cce22a0E7a5697D01Dcc6be93DA14BfB3761', -// abi: [ -// { -// inputs: [ -// { internalType: 'address', name: 'account', type: 'address' } -// ], -// name: 'balanceOf', -// outputs: [ -// { internalType: 'uint256', name: '', type: 'uint256' } -// ], -// stateMutability: 'view', -// type: 'function' -// }, -// { -// inputs: [], -// name: 'symbol', -// outputs: [{ internalType: 'string', name: '', type: 'string' }], -// stateMutability: 'view', -// type: 'function' -// } -// ], -// calls: [ -// { -// reference: 'muonSwapBalance', -// methodName: 'balanceOf', -// methodParameters: [account] -// }, -// { -// reference: 'muonSwapSymbol', -// methodName: 'symbol' -// } -// ] -// } -// ] - - -/***/ }), - -/***/ 108: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const Web3 = __webpack_require__(519) -const web3Instance = new Web3() - -module.exports = function soliditySha3(params) { - return web3Instance.utils.soliditySha3(...params) -} - - -/***/ }), - -/***/ 623: -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -//It is recommended to use ethers4.0.47 version -var ethers = __webpack_require__(982) -const TronWeb = __webpack_require__(643) -const Web3 = __webpack_require__(519); - -// console.log(TronWeb.utils) - -const AbiCoder = ethers.utils.AbiCoder; -const ADDRESS_PREFIX_REGEX = /^(41)/; -const ADDRESS_PREFIX = "41"; - -function encodeParams(inputs){ - let typesValues = inputs - let parameters = '' - - if (typesValues.length == 0) - return parameters - const abiCoder = new AbiCoder(); - let types = []; - const values = []; - - for (let i = 0; i < typesValues.length; i++) { - let {type, value} = typesValues[i]; - if (type == 'address') - value = value.replace(ADDRESS_PREFIX_REGEX, '0x'); - else if (type == 'address[]') - value = value.map(v => toHex(v).replace(ADDRESS_PREFIX_REGEX, '0x')); - types.push(type); - values.push(value); - } - - // console.log(types, values) - try { - parameters = abiCoder.encode(types, values).replace(/^(0x)/, ''); - } catch (ex) { - console.log(ex); - } - return parameters - -} - -/** - types:Parameter type list, if the function has multiple return values, the order of the types in the list should conform to the defined order - output: Data before decoding - ignoreMethodHash:Decode the function return value, fill falseMethodHash with false, if decode the data field in the gettransactionbyid result, fill ignoreMethodHash with true - - Sample: await decodeParams(['address', 'uint256'], data, true) - */ - -async function decodeParams(types, output, ignoreMethodHash) { - - if (!output || typeof output === 'boolean') { - ignoreMethodHash = output; - output = types; - } - - if (ignoreMethodHash && output.replace(/^0x/, '').length % 64 === 8) - output = '0x' + output.replace(/^0x/, '').substring(8); - - const abiCoder = new AbiCoder(); - - if (output.replace(/^0x/, '').length % 64) - throw new Error('The encoded string is not valid. Its length must be a multiple of 64.'); - return abiCoder.decode(types, output).reduce((obj, arg, index) => { - if (types[index] == 'address') - arg = ADDRESS_PREFIX + arg.substr(2).toLowerCase(); - obj.push(arg); - return obj; - }, []); -} - -function encodeSignature(signature, owner, nonce) { - return "0x" + encodeParams([ - {type: "uint256", value: signature}, - {type: "uint256", value: owner}, - {type: "address", value: nonce}, - ]) -} - -function toEthAddress(address) { - if(Web3.utils.isAddress(address)) - return address; - if(!TronWeb.utils.crypto.isAddressValid(address)) - throw {message: `Invalid tron or eth address ${address}`} - if(!TronWeb.utils.isHex(address)) - return Web3.utils.toChecksumAddress("0x" + TronWeb.address.toHex(address).substr(2, 40)); - else - return address; -} - -function soliditySha3(inputs) { - inputs = inputs.map(({type, value}) => { - if(type === 'address') - return {type, value: toEthAddress(value)} - else - return {type, value} - }) - return Web3.utils.soliditySha3(...inputs) -} - -module.exports = { - TronWeb, - soliditySha3, - encodeParams, - toEthAddress, - decodeParams, - encodeSignature, -}; - - -/***/ }), - -/***/ 492: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -global.MuonAppUtils = __webpack_require__(577); -const { axios, soliditySha3, floatToBN } = global.MuonAppUtils; -exports["default"] = { - APP_NAME: "webpack-test", - onRequest: function (request) { - return __awaiter(this, void 0, void 0, function* () { - let { method, data: { params }, } = request; - let message = params.message; - switch (method) { - case "echo": - // to test axios - let json = yield axios.get("http://echo.jsontest.com/key/" + message); - let value = json.data.key; - return { value }; - default: - throw { message: `Unknown method ${params}` }; - } - }); - }, - signParams: function (request, result) { - switch (request.method) { - case "echo": - let { value } = result; - return [{ type: "string", value: value }]; - default: - throw { message: "Nothing to sign" }; - } - }, -}; - - -/***/ }), - -/***/ 167: -/***/ ((module) => { - -"use strict"; -module.exports = require("axios"); - -/***/ }), - -/***/ 215: -/***/ ((module) => { - -"use strict"; -module.exports = require("bignumber.js"); - -/***/ }), - -/***/ 685: -/***/ ((module) => { - -"use strict"; -module.exports = require("eth-sig-util"); - -/***/ }), - -/***/ 317: -/***/ ((module) => { - -"use strict"; -module.exports = require("ethereum-multicall"); - -/***/ }), - -/***/ 567: -/***/ ((module) => { - -"use strict"; -module.exports = require("ethereumjs-util"); - -/***/ }), - -/***/ 982: -/***/ ((module) => { - -"use strict"; -module.exports = require("ethers"); - -/***/ }), - -/***/ 239: -/***/ ((module) => { - -"use strict"; -module.exports = require("events"); - -/***/ }), - -/***/ 517: -/***/ ((module) => { - -"use strict"; -module.exports = require("lodash"); - -/***/ }), - -/***/ 643: -/***/ ((module) => { - -"use strict"; -module.exports = require("tronweb"); - -/***/ }), - -/***/ 519: -/***/ ((module) => { - -"use strict"; -module.exports = require("web3"); - -/***/ }), - -/***/ 352: -/***/ ((module) => { - -"use strict"; -module.exports = require("ws"); - -/***/ }), - -/***/ 920: -/***/ ((module) => { - -"use strict"; -module.exports = JSON.parse('[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]'); - -/***/ }), - -/***/ 329: -/***/ ((module) => { - -"use strict"; -module.exports = JSON.parse('[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_tokenAddr","type":"address"}],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_active","type":"bool"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]'); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ -/******/ // startup -/******/ // Load entry module and return exports -/******/ // This entry module is referenced by other modules so it can't be inlined -/******/ var __webpack_exports__ = __webpack_require__(492); -/******/ __webpack_exports__ = __webpack_exports__["default"]; -/******/ -/******/ return __webpack_exports__; -/******/ })() -; -}); \ No newline at end of file diff --git a/general_test/aggregate_oracles_dei_test.js b/general_test/aggregate_oracles_dei_test.js deleted file mode 100644 index d9ed46a..0000000 --- a/general_test/aggregate_oracles_dei_test.js +++ /dev/null @@ -1,31 +0,0 @@ -// require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -// require('../../core/global') - -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../src/core/global') -// const { onRequest } = require('../general/muon_pvrb'); - -const { dynamicExtend } = require('../../src/core/utils') -const AggregateOracles = dynamicExtend( - class {}, - require('../general/aggregate_oracles_dei') -) - -const app = new AggregateOracles() - -const testPrice = async (tokenName) => { - let method = 'price' - - return app - .onRequest({ - method, - data: {} - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for PRICE ${tokenName}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testPrice('DEI') diff --git a/general_test/aggregate_oracles_test.js b/general_test/aggregate_oracles_test.js deleted file mode 100644 index 4daf062..0000000 --- a/general_test/aggregate_oracles_test.js +++ /dev/null @@ -1,256 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../src/core/global') -const { dynamicExtend } = require('../../src/core/utils') -const AggregateOracles = dynamicExtend( - class {}, - require('../general/aggregate_oracles') -) - -// ————————- POLYGON——————————- -// DEI-DEUS LP 0x2Bc3ce6D7cfc0B476E60aDaA1B27DE76DB95EE4e -// DEI-USDC LP 0xD4F9134ba896FB6901CD6A5EA4EEB683eb1c15c6 -// DEUS-MATIC LP 0x6152943b506211ce1FA872702a1b0bc594Cfa2d2 - -// ————————- UniSwap——————————- -// DEI-DEUS LP 0xd6dd359B8C9d18CCB3FE8627060F88D1776d2993 -// DEI-USDC LP 0x6870F9b4DD5d34C7FC53D0d85D9dBd1aAB339BF7 -// DEUS-ETH LP 0x367E2D443988E4b222FBFdAFDb35eeB7ddA9FBB7 - -const app = new AggregateOracles() - -const testLP = async (params, token, tokenName) => { - let method = 'lp_price' - - return app - .onRequest({ - method, - data: { - params - } - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for LP_PRICE ${tokenName}: ${token}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async (params, token, tokenName) => { - let method = 'price' - - return app - .onRequest({ - method, - data: { - params - } - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for PRICE ${tokenName}: ${token}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const tokenName = 'DEUS' -const token = '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44' // token:deus -const example_1 = { - token, - pairs: [ - [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ], - [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ], - [ - { - exchange: 'spirit', - chainId: '250', - address: '0x2599eba5fd1e49f294c76d034557948034d6c96e' // WFTM/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0xe7e90f5a767406eff87fdad7eb07ef407922ec1d' // USDC/WFTM - } - ] - // [ - // { - // exchange: 'uniswap', - // chainId: '1', - // address: '0x367E2D443988E4b222FBFdAFDb35eeB7ddA9FBB7' // WETH/DEUS - // }, - // { - // exchange: 'uniswap', - // chainId: '1', - // address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' // WETH/USDC - // } - // ] - ] -} - -const tokenName2 = 'WETH' -const token2 = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' //WETH -const example_2 = { - token: token2, - pairs: [ - [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11' // WETH/DAI - } - ], - [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xBb2b8038a1640196FbE3e38816F3e67Cba72D940' // WETH/WBTC - }, - { - exchange: 'uniswap', - chainId: '1', - address: '0x231B7589426Ffe1b75405526fC32aC09D44364c4' //WBTC/DAI - } - ] - ] -} - -const tokenNameLP = 'vAMM-DEI/DEUS' -const tokenLP = '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // vAMM-DEI/DEUS -const LP_Params = { - token: tokenLP, - chainId: '250', - pairs0: [ - [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - [ - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI-USDC - } - ] - ], - pairs1: [ - [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' //DEI - DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' //DEI - USDC - } - ], - [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' //DEI-DEUS - }, - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ] - ] -} - -const tokenNameLP2 = 'DEUS/WETH' -const tokenLP2 = '0x367E2D443988E4b222FBFdAFDb35eeB7ddA9FBB7' // DEUS/WETH -const LP_Params2 = { - token: tokenLP2, - chainId: '1', - pairs0: [ - [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11' // WETH/DAI - } - ], - [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xBb2b8038a1640196FbE3e38816F3e67Cba72D940' // WETH/WBTC - }, - { - exchange: 'uniswap', - chainId: '1', - address: '0x231B7589426Ffe1b75405526fC32aC09D44364c4' //WBTC/DAI - } - ] - ], - pairs1: [ - [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' //DEI - DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' //DEI - USDC - } - ], - [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' //DEI-DEUS - }, - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - [ - { - exchange: 'uniswap', - chainId: '1', - address: '0x367E2D443988E4b222FBFdAFDb35eeB7ddA9FBB7' // WETH/DEUS - }, - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' // WETH/USDC - } - ] - ] -} -testLP(LP_Params, tokenLP, tokenNameLP) -// testLP(LP_Params2, tokenLP2, tokenNameLP2) - -testPrice(example_1, token, tokenName) -// testPrice(example_2, token2, tokenName2) diff --git a/general_test/deus_twap_test.js b/general_test/deus_twap_test.js deleted file mode 100644 index ce4a6da..0000000 --- a/general_test/deus_twap_test.js +++ /dev/null @@ -1,20 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { onRequest } = require('../general/deus_twap') - -const test= async () => { - return onRequest({ - method:'price', - data: { - params: { - timestamp: 1652724015 - } - } - }) - .then((response) => { - console.log(response); - }) - .catch((error) => console.log(error)) -} - -test() diff --git a/general_test/nft_oracles_opensea_test.js b/general_test/nft_oracles_opensea_test.js deleted file mode 100644 index 0fae417..0000000 --- a/general_test/nft_oracles_opensea_test.js +++ /dev/null @@ -1,42 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { onRequest } = require('../general/nft_oracles_opensea') - -const testFp = async () => { - let method = 'collection_floor_price' - return onRequest({ - method, - data: { - params: { - collection: '0x11450058d796B02EB53e65374be59cFf65d3FE7f', - period: 36000 - } - } - }) - .then((result) => { - console.log('\n\nResult for collection_floor_price:') - console.log(result) - }) - .catch((error) => console.log(error)) -} - -const testAp = async () => { - let method = 'collection_avg_price' - return onRequest({ - method, - data: { - params: { - collection: '0x11450058d796B02EB53e65374be59cFf65d3FE7f', - period: 36000 - } - } - }) - .then((result) => { - console.log('\n\nResult for collection_avg_price:') - console.log(result) - }) - .catch((error) => console.log(error)) -} - -testFp() -testAp() \ No newline at end of file diff --git a/general_test/permissionless_oracles_vwap_v2_test.js b/general_test/permissionless_oracles_vwap_v2_test.js deleted file mode 100644 index bbb709f..0000000 --- a/general_test/permissionless_oracles_vwap_v2_test.js +++ /dev/null @@ -1,221 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const Oracles = dynamicExtend( - class {}, - require('../general/permissionless_oracles_vwap_v2') -) - -const app = new Oracles() - -const testLP = async (params, token, tokenName) => { - let method = 'lp_price' - - return app - .onRequest({ - method, - data: { - params - } - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for LP_PRICE ${tokenName}: ${token}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async (params, token, tokenName) => { - let method = 'price' - - return app - .onRequest({ - method, - data: { - params - } - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for PRICE ${tokenName}: ${token}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const tokenNameLP = 'vAMM-DEI/DEUS' -const tokenLP = '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // vAMM-DEI/DEUS -const LP_Params = { - token: tokenLP, - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' //DEI - DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' //DEI - USDC - } - ] -} -const tokenNameLP2 = 'vAMM-DEI/DEUS' -const tokenLP2 = '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // vAMM-DEI/DEUS -const LP_Params2 = { - token: tokenLP2, - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' //DEI-DEUS - }, - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ] -} - -const tokenName = 'DEUS' -const token = '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44' // token:deus -const params = { - token, - pairs: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ] -} - -const tokenName2 = 'Wrapped Fantom (WFTM)' -const token2 = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83' -const params2 = { - token: token2, - pairs: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] -} - -const tokenName3 = 'Wrapped Ether (WETH)' -const token3 = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' -const params3 = { - token: token3, - pairs: [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' - } - ] -} - -const tokenName4 = 'Wrapped Ether (WETH)' -const token4 = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83' -const params4 = { - token: token4, - pairs: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] -} - -const tokenName5 = 'Wrapped Ether (WETH)' -const token5 = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' -const params5 = { - token: token5, - pairs: [ - { - exchange: 'sushi', - chainId: 1, - address: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' - } - ] -} - -const tokenNameLP3 = 'Spooky LP' -const tokenLP3 = '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' -const LP_Params3 = { - token: tokenLP3, - chainId: 250, - pairs0: [], - pairs1: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] -} - -const tokenNameLP4 = 'SushiSwap LP Token (SLP)' -const tokenLP4 = '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' -const LP_Params4 = { - token: tokenLP4, - pairs0: [], - pairs1: [ - { - exchange: 'sushi', - chainId: 1, - address: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' - } - ], - chainId: 1 -} - -const tokenNameLP5 = 'Uniswap V2 (UNI-V2)' -const tokenLP5 = '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' -const LP_Params5 = { - token: tokenLP5, - chainId: 1, - pairs0: [], - pairs1: [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' - } - ] -} - -testLP(LP_Params, tokenLP, tokenNameLP) -testLP(LP_Params2, tokenLP2, tokenNameLP2) -testLP(LP_Params3, tokenLP3, tokenNameLP3) -testLP(LP_Params4, tokenLP4, tokenNameLP4) -testLP(LP_Params5, tokenLP5, tokenNameLP5) - -// testPrice(params, token, tokenName) -// testPrice(params2, token2, tokenName2) -// testPrice(params3, token3, tokenName3) -// testPrice(params4, token4, tokenName4) -// testPrice(params5, token5, tokenName5) diff --git a/general_test/permissionless_oracles_vwap_v3_test.js b/general_test/permissionless_oracles_vwap_v3_test.js deleted file mode 100644 index dd374ff..0000000 --- a/general_test/permissionless_oracles_vwap_v3_test.js +++ /dev/null @@ -1,220 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const Oracles = dynamicExtend( - class {}, - require('../general/permissionless_oracles_vwap_v3') -) - -const app = new Oracles() - -const testLP = async (params, token, tokenName) => { - let method = 'lp_price' - - return app - .onRequest({ - method, - data: { - params - } - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for LP_PRICE ${tokenName}: ${token}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async (params, token, tokenName) => { - let method = 'price' - - return app - .onRequest({ - method, - data: { - params - } - }) - .then(({ tokenPrice, volume }) => { - console.log(`\n \nResult for PRICE ${tokenName}: ${token}`) - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const tokenNameLP = 'vAMM-DEI/DEUS' -const tokenLP = '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // vAMM-DEI/DEUS -const LP_Params = { - token: tokenLP, - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' //DEI - DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' //DEI - USDC - } - ] -} -const tokenNameLP2 = 'vAMM-DEI/DEUS' -const tokenLP2 = '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // vAMM-DEI/DEUS -const LP_Params2 = { - token: tokenLP2, - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' //DEI-DEUS - }, - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ] -} - -const tokenName = 'DEUS' -const token = '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44' // token:deus -const params = { - token, - pairs: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ] -} - -const tokenName2 = 'Wrapped Fantom (WFTM)' -const token2 = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83' -const params2 = { - token: token2, - pairs: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] -} - -const tokenName3 = 'Wrapped Ether (WETH)' -const token3 = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' -const params3 = { - token: token3, - pairs: [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' - } - ] -} - -const tokenName4 = 'Wrapped Ether (WETH)' -const token4 = '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83' -const params4 = { - token: token4, - pairs: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] -} - -const tokenNameLP3 = 'Spooky LP' -const tokenLP3 = '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' -const LP_Params3 = { - token: tokenLP3, - chainId: 250, - pairs0: [], - pairs1: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] -} - -const tokenNameLP4 = 'SushiSwap LP Token (SLP)' -const tokenLP4 = '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' -const LP_Params4 = { - token: tokenLP4, - pairs0: [], - pairs1: [ - { - exchange: 'sushi', - chainId: 1, - address: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' - } - ], - chainId: 1 -} - -const tokenNameLP5 = 'Uniswap V2 (UNI-V2)' -const tokenLP5 = '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' -const LP_Params5 = { - token: tokenLP5, - chainId: 1, - pairs0: [], - pairs1: [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' - } - ] -} - -const tokenName5 = 'Wrapped Ether (WETH)' -const token5 = '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' -const params5 = { - token: token5, - pairs: [ - { - exchange: 'sushi', - chainId: 1, - address: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' - } - ] -} -testLP(LP_Params, tokenLP, tokenNameLP) -testLP(LP_Params2, tokenLP2, tokenNameLP2) -testLP(LP_Params3, tokenLP3, tokenNameLP3) -testLP(LP_Params4, tokenLP4, tokenNameLP4) -testLP(LP_Params5, tokenLP5, tokenNameLP5) - -testPrice(params, token, tokenName) -testPrice(params2, token2, tokenName2) -testPrice(params3, token3, tokenName3) -testPrice(params4, token4, tokenName4) -testPrice(params5, token5, tokenName5) diff --git a/general_test/solidly_permissionless_oracles_vwap_fair_test.js b/general_test/solidly_permissionless_oracles_vwap_fair_test.js deleted file mode 100644 index 0c4fab2..0000000 --- a/general_test/solidly_permissionless_oracles_vwap_fair_test.js +++ /dev/null @@ -1,45 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { onRequest } = require('../general/solidly_permissionless_oracles_vwap_fair') - -const testLP = async () => { - let method = 'lp_price' - return onRequest({ - method, - data: { - params: { - token: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058', - pairs0: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0', - pairs1: - '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058,0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', - pairs: - '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058,0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/solidly_permissionless_oracles_vwap_fair_v2_test.js b/general_test/solidly_permissionless_oracles_vwap_fair_v2_test.js deleted file mode 100644 index 7099d58..0000000 --- a/general_test/solidly_permissionless_oracles_vwap_fair_v2_test.js +++ /dev/null @@ -1,81 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') - -const { dynamicExtend } = require('../../core/utils') -const SolidlyFairApp = dynamicExtend( - class {}, - require('../general/solidly_permissionless_oracles_vwap_fair_v2') -) - -const app = new SolidlyFairApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058', - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' //DEI-DEUS - }, - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', - pairs: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/solidly_permissionless_oracles_vwap_test.js b/general_test/solidly_permissionless_oracles_vwap_test.js deleted file mode 100644 index e75fb69..0000000 --- a/general_test/solidly_permissionless_oracles_vwap_test.js +++ /dev/null @@ -1,45 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../src/core/global') -const { onRequest } = require('../general/solidly_permissionless_oracles_vwap') - -const testLP = async () => { - let method = 'lp_price' - return onRequest({ - method, - data: { - params: { - token: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058', - pairs0: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0', - pairs1: - '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058,0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', - pairs: - '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058,0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/solidly_permissionless_oracles_vwap_v2_test.js b/general_test/solidly_permissionless_oracles_vwap_v2_test.js deleted file mode 100644 index 51d35bc..0000000 --- a/general_test/solidly_permissionless_oracles_vwap_v2_test.js +++ /dev/null @@ -1,80 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const Solidly = dynamicExtend( - class {}, - require('../general/solidly_permissionless_oracles_vwap_v2') -) - -const app = new Solidly() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058', - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'spirit', - chainId: '250', - address: '0xdDC92fcEd95e913728CBc8f197A4E058062Bd4b6' //DEI-DEUS - }, - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', - pairs: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/spirit_permissionless_oracles_vwap_test.js b/general_test/spirit_permissionless_oracles_vwap_test.js deleted file mode 100644 index 812cd80..0000000 --- a/general_test/spirit_permissionless_oracles_vwap_test.js +++ /dev/null @@ -1,52 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const SpiritApp = dynamicExtend( - class {}, - require('../general/spirit_permissionless_oracles_vwap') -) - -const app = new SpiritApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D', - pairs0: '', - pairs1: '0xe7E90f5a767406efF87Fdad7EB07ef407922EC1D' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', - pairs: - '0x2599eba5fd1e49f294c76d034557948034d6c96e,0xe7e90f5a767406eff87fdad7eb07ef407922ec1d' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/spirit_permissionless_oracles_vwap_v2_test.js b/general_test/spirit_permissionless_oracles_vwap_v2_test.js deleted file mode 100644 index f5d7944..0000000 --- a/general_test/spirit_permissionless_oracles_vwap_v2_test.js +++ /dev/null @@ -1,80 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const SpiritApp = dynamicExtend( - class {}, - require('../general/spirit_permissionless_oracles_vwap_v2') -) - -const app = new SpiritApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058', // vAMM-DEI/DEUS - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' //DEI - DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' //DEI - USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', // DEUS - pairs: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/spirit_permissionless_oracles_vwap_v3_test.js b/general_test/spirit_permissionless_oracles_vwap_v3_test.js deleted file mode 100644 index 9f82c79..0000000 --- a/general_test/spirit_permissionless_oracles_vwap_v3_test.js +++ /dev/null @@ -1,80 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const SpiritApp = dynamicExtend( - class {}, - require('../general/spirit_permissionless_oracles_vwap_v3') -) - -const app = new SpiritApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058', // vAMM-DEI/DEUS - chainId: '250', - pairs0: [ - { - exchange: 'solidly', - chainId: '250', - address: '0x5821573d8F04947952e76d94f3ABC6d7b43bF8d0' // DEI-USDC - } - ], - pairs1: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' //DEI - DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' //DEI - USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xDE5ed76E7c05eC5e4572CfC88d1ACEA165109E44', // DEUS - pairs: [ - { - exchange: 'solidly', - chainId: '250', - address: '0xF42dBcf004a93ae6D5922282B304E2aEFDd50058' // DEI/DEUS - }, - { - exchange: 'spirit', - chainId: '250', - address: '0x8eFD36aA4Afa9F4E157bec759F1744A7FeBaEA0e' // DEI/USDC - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/spooky_permissionless_oracles_vwap_test.js b/general_test/spooky_permissionless_oracles_vwap_test.js deleted file mode 100644 index deba543..0000000 --- a/general_test/spooky_permissionless_oracles_vwap_test.js +++ /dev/null @@ -1,43 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { onRequest } = require('../general/spooky_permissionless_oracles_vwap') - -const testLP = async () => { - let method = 'lp_price' - return onRequest({ - method, - data: { - params: { - token: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c', - pairs0: '', - pairs1: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return onRequest({ - method, - data: { - params: { - token: '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', - pairs: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/spooky_permissionless_oracles_vwap_v2_test.js b/general_test/spooky_permissionless_oracles_vwap_v2_test.js deleted file mode 100644 index 65a1987..0000000 --- a/general_test/spooky_permissionless_oracles_vwap_v2_test.js +++ /dev/null @@ -1,64 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const SpookyApp = dynamicExtend( - class {}, - require('../general/spooky_permissionless_oracles_vwap_v2') -) - -const app = new SpookyApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c', - chainId: 250, - pairs0: [], - pairs1: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83', - pairs: [ - { - exchange: 'spooky', - chainId: '250', - address: '0x2b4C76d0dc16BE1C31D4C1DC53bF9B45987Fc75c' - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/sushi_permissionless_oracles_vwap_v2_test.js b/general_test/sushi_permissionless_oracles_vwap_v2_test.js deleted file mode 100644 index 92c50db..0000000 --- a/general_test/sushi_permissionless_oracles_vwap_v2_test.js +++ /dev/null @@ -1,65 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const SushiApp = dynamicExtend( - class {}, - require('../general/sushi_permissionless_oracles_vwap_v2') -) - -const app = new SushiApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0', - pairs0: [], - pairs1: [ - { - exchange: 'sushi', - chainId: 1, - address: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' - } - ], - chainId: '1' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - pairs: [ - { - exchange: 'sushi', - chainId: 1, - address: '0x397FF1542f962076d0BFE58eA045FfA2d347ACa0' - } - ], - chainId: '1' - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() diff --git a/general_test/uniswapv2_permissionless_oracles_vwap_v2_test.js b/general_test/uniswapv2_permissionless_oracles_vwap_v2_test.js deleted file mode 100644 index fadb851..0000000 --- a/general_test/uniswapv2_permissionless_oracles_vwap_v2_test.js +++ /dev/null @@ -1,64 +0,0 @@ -require('dotenv').config({ path: './dev-chain/dev-node-1.env' }) -require('../../core/global') -const { dynamicExtend } = require('../../core/utils') -const uniswapApp = dynamicExtend( - class {}, - require('../general/uniswapv2_permissionless_oracles_vwap_v2') -) - -const app = new uniswapApp() - -const testLP = async () => { - let method = 'lp_price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc', - chainId: 1, - pairs0: [], - pairs1: [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for LP_PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -const testPrice = async () => { - let method = 'price' - return app - .onRequest({ - method, - data: { - params: { - token: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', - pairs: [ - { - exchange: 'uniswap', - chainId: '1', - address: '0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc' - } - ] - } - } - }) - .then(({ tokenPrice, volume }) => { - console.log('\n \nResult for PRICE:') - console.log({ tokenPrice, volume }) - }) - .catch((error) => console.log(error)) -} - -testLP() -testPrice() From 1db3868dbe92d41e80dd5ceb0cceb5745862b9d4 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 19 Apr 2023 13:47:36 +0330 Subject: [PATCH 219/406] Add `dibsGlobal` file --- general/dibsGlobal.js | 223 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 general/dibsGlobal.js diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js new file mode 100644 index 0000000..2617d6e --- /dev/null +++ b/general/dibsGlobal.js @@ -0,0 +1,223 @@ +const { axios, ethCall, BN, recoverTypedMessage } = MuonAppUtils + +const DRSG_ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", "type": "uint32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] +const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] + +module.exports = { + APP_NAME: 'dibsGlobal', + + postQuery: async function (query) { + const { + data: { data } + } = await axios.post(subgraphUrl, { + query: query + }) + + return data + }, + + getUserBalance: async function (user, token) { + const query = `{ + userBalance: accumulativeTokenBalances(where: {user: "${user}", token: "${token}"}) { + id + user + token + amount + } + }` + + const data = await this.postQuery(query) + + const userBalance = data.userBalance[0] + if (userBalance == undefined) throw { message: `Zero balance for this token` } + + return userBalance.amount + }, + + getSeed: async function (roundId) { + let data + try { + data = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], DRSG_ABI, 56) + } + catch (e) { + throw { message: 'FAILED_TO_FETCH_SEED', detail: e.message } + } + const { fulfilled, seed } = data + if (!fulfilled || new BN(seed).eq(new BN(0))) throw { message: `NO_SEED` } + return new BN(seed) + }, + + createTicketsQuery: function (roundId, lastUser) { + const query = `{ + userLotteries ( + first: 1000, where: { round: "${roundId}", user_not: "${Dibs}", user_gt: "${lastUser}", tickets_gt: "0"} + orderBy: user + ) { + user, + tickets + } + }` + + return query + }, + + getRoundTickets: async function (roundId) { + let lastUser = '0x0000000000000000000000000000000000000000' + let tickets = [] + let walletsCount = 0 + + do { + const query = this.createTicketsQuery(roundId, lastUser) + const data = await this.postQuery(query) + if (data.userLotteries.length == 0) break + data.userLotteries.forEach((el) => tickets.push(...Array(parseInt(el.tickets)).fill(el.user))) + lastUser = tickets.at(-1) + walletsCount += data.userLotteries.length + } while (walletsCount % 1000 == 0) + + if (tickets.length == 0) throw { message: 'NO_TICKETS' } + + return { tickets, walletsCount } + }, + + whoIsWinner: function (seed, tickets) { + const winnerTicket = seed.mod(new BN(tickets.length)) + return tickets[winnerTicket] + }, + + determineWinners: function (winnersPerRound, tickets, walletsCount, seed) { + if (walletsCount <= winnersPerRound) return [...new Set(tickets)] + let winners = [] + for (let i = 0; i < winnersPerRound; i++) { + const winner = this.whoIsWinner(seed, tickets) + winners.push(winner) + tickets = tickets.filter((value) => { return value != winner }) + } + + return winners + }, + + isValidSignature: function (forAddress, time, sign) { + let typedData = { + types: { + EIP712Domain: [{ name: 'name', type: 'string' }], + Message: [ + { type: 'address', name: 'user' }, + { type: 'uint256', name: 'timestamp' } + ] + }, + domain: { name: 'Dibs' }, + primaryType: 'Message', + message: { user: forAddress, timestamp: time } + } + let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + + return signer.toLowerCase() === forAddress.toLowerCase() + }, + + isValidUser: async function (user) { + const code = await ethCall(Dibs, 'addressToCode', [user], DIBS_ABI, 56) + if (code == '0x0000000000000000000000000000000000000000000000000000000000000000') return false + return true + }, + + getTopLeaderBoardN: async function (n, day) { + const query = `{ + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { + id + user + amountAsReferrer + day + } + }` + + const data = await this.postQuery(query) + + let topLeaderBoardN = [] + data.topLeaderBoardN.forEach((el) => topLeaderBoardN.push(el.user)) + + return topLeaderBoardN + + }, + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + switch (method) { + case 'claim': + let { user, token, time, sign } = params + + if (!sign) throw { message: 'Request signature undefined' } + if (!this.isValidSignature(user, time, sign)) throw { message: 'Request signature mismatch' } + + if (!await this.isValidUser(user)) throw { message: 'Not an active user' } + + const balance = await this.getUserBalance(user, token) + + return { + user, token, balance + } + + case 'lotteryWinner': + let { roundId } = params + const seed = await this.getSeed(roundId) + const { tickets, walletsCount } = await this.getRoundTickets(roundId) + const winnersPerRound = await ethCall(DibsLottery, 'winnersPerRound', [], DIBS_LOTTERY_ABI, 56) + const winners = this.determineWinners(winnersPerRound, tickets, walletsCount, seed) + + return { roundId, winners } + + case 'topLeaderBoardN': + let { n, day } = params + + const topLeaderBoardN = await this.getTopLeaderBoardN(n, day) + + return { n, day, topLeaderBoardN } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + case 'claim': + let { user, token, balance } = result + return [ + { type: 'address', value: user }, + { type: 'address', value: token }, + { type: 'uint256', value: balance }, + ] + + case 'lotteryWinner': + let { roundId, winners } = result + return [ + { type: 'uint32', value: roundId }, + { type: 'address[]', value: winners }, + ] + + case 'topLeaderBoardN': { + let { n, day, topLeaderBoardN } = result + return [ + { type: 'uint256', value: n }, + { type: 'uint256', value: day }, + { type: 'address[]', value: topLeaderBoardN }, + ] + + } + + default: + break + } + } +} \ No newline at end of file From 5a54e7027e625d5dc83dad0bee578ca369e9d332 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 19 Apr 2023 15:59:16 +0330 Subject: [PATCH 220/406] Fetch projects details from DibsRepository --- general/dibsGlobal.js | 78 +++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 2617d6e..0846208 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -1,23 +1,25 @@ const { axios, ethCall, BN, recoverTypedMessage } = MuonAppUtils -const DRSG_ABI = [{ "inputs": [{ "internalType": "uint32", "name": "roundId_", "type": "uint32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] +const DibsRepository = "0x1370Ff0e5CC846a95f34FE50aD90daad17022797" +const DIBS_REPO_ABI = [{ "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "name": "projects", "outputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "dibs", "type": "address" }, { "internalType": "string", "name": "subgraphEndpoint", "type": "string" }, { "internalType": "uint32", "name": "firstRoundStartTime", "type": "uint32" }, { "internalType": "uint32", "name": "roundDuration", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "roundId", "type": "bytes32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] + module.exports = { APP_NAME: 'dibsGlobal', - postQuery: async function (query) { + postQuery: async function (query, subgraphEndpoint) { const { data: { data } - } = await axios.post(subgraphUrl, { + } = await axios.post(subgraphEndpoint, { query: query }) return data }, - getUserBalance: async function (user, token) { + getUserBalance: async function (user, token, subgraphEndPoint) { const query = `{ userBalance: accumulativeTokenBalances(where: {user: "${user}", token: "${token}"}) { id @@ -27,7 +29,7 @@ module.exports = { } }` - const data = await this.postQuery(query) + const data = await this.postQuery(query, subgraphEndPoint) const userBalance = data.userBalance[0] if (userBalance == undefined) throw { message: `Zero balance for this token` } @@ -38,7 +40,7 @@ module.exports = { getSeed: async function (roundId) { let data try { - data = await ethCall(DibsRandomSeedGenerator, 'getSeed', [roundId], DRSG_ABI, 56) + data = await ethCall(DibsRepository, 'getSeed', [roundId], DIBS_REPO_ABI, 137) } catch (e) { throw { message: 'FAILED_TO_FETCH_SEED', detail: e.message } @@ -48,10 +50,10 @@ module.exports = { return new BN(seed) }, - createTicketsQuery: function (roundId, lastUser) { + createTicketsQuery: function (round, lastUser) { const query = `{ userLotteries ( - first: 1000, where: { round: "${roundId}", user_not: "${Dibs}", user_gt: "${lastUser}", tickets_gt: "0"} + first: 1000, where: { round: "${round}", user_not: "${dibs}", user_gt: "${lastUser}", tickets_gt: "0"} orderBy: user ) { user, @@ -62,14 +64,14 @@ module.exports = { return query }, - getRoundTickets: async function (roundId) { + getRoundTickets: async function (round, subgraphEndpoint) { let lastUser = '0x0000000000000000000000000000000000000000' let tickets = [] let walletsCount = 0 do { - const query = this.createTicketsQuery(roundId, lastUser) - const data = await this.postQuery(query) + const query = this.createTicketsQuery(round, lastUser) + const data = await this.postQuery(query, subgraphEndpoint) if (data.userLotteries.length == 0) break data.userLotteries.forEach((el) => tickets.push(...Array(parseInt(el.tickets)).fill(el.user))) lastUser = tickets.at(-1) @@ -116,15 +118,15 @@ module.exports = { return signer.toLowerCase() === forAddress.toLowerCase() }, - isValidUser: async function (user) { - const code = await ethCall(Dibs, 'addressToCode', [user], DIBS_ABI, 56) + isValidUser: async function (dibs, user, chainId) { + const code = await ethCall(dibs, 'addressToCode', [user], DIBS_ABI, chainId) if (code == '0x0000000000000000000000000000000000000000000000000000000000000000') return false return true }, - getTopLeaderBoardN: async function (n, day) { + getTopLeaderBoardN: async function (n, day, subgraphEndPoint) { const query = `{ - topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer @@ -132,7 +134,7 @@ module.exports = { } }` - const data = await this.postQuery(query) + const data = await this.postQuery(query, subgraphEndPoint) let topLeaderBoardN = [] data.topLeaderBoardN.forEach((el) => topLeaderBoardN.push(el.user)) @@ -141,41 +143,51 @@ module.exports = { }, + fetchProject: async function (projectId) { + const { dibs, chainId, subgraphEndPoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 137) + return { dibs, chainId, subgraphEndPoint } + }, + onRequest: async function (request) { let { method, data: { params } } = request switch (method) { - case 'claim': - let { user, token, time, sign } = params + case 'claim': { + let { projectId, user, token, time, sign } = params if (!sign) throw { message: 'Request signature undefined' } if (!this.isValidSignature(user, time, sign)) throw { message: 'Request signature mismatch' } - if (!await this.isValidUser(user)) throw { message: 'Not an active user' } + const { dibs, chainId, subgraphEndpoint } = await this.fetchProject(projectId) + if (!await this.isValidUser(dibs, user, chainId)) throw { message: 'Not an active user' } - const balance = await this.getUserBalance(user, token) + const balance = await this.getUserBalance(user, token, subgraphEndpoint) return { - user, token, balance + projectId, user, token, balance } + } - case 'lotteryWinner': - let { roundId } = params - const seed = await this.getSeed(roundId) - const { tickets, walletsCount } = await this.getRoundTickets(roundId) - const winnersPerRound = await ethCall(DibsLottery, 'winnersPerRound', [], DIBS_LOTTERY_ABI, 56) + case 'lotteryWinner': { + let { projectId, round } = params + const { dibs, chainId, subgraphEndpoint } = await this.fetchProject(projectId) + const { tickets, walletsCount } = await this.getRoundTickets(round, subgraphEndpoint) + const { seed, roundId } = await this.fetchSeed(projectNumber, round) + const winnersPerRound = await this.fetchWinnersPerRound(dibs, chainId) const winners = this.determineWinners(winnersPerRound, tickets, walletsCount, seed) return { roundId, winners } + } case 'topLeaderBoardN': - let { n, day } = params + let { projectId, n, day } = params - const topLeaderBoardN = await this.getTopLeaderBoardN(n, day) + const { subgraphEndpoint } = await this.fetchProject(projectId) + const topLeaderBoardN = await this.getTopLeaderBoardN(n, day, subgraphEndpoint) - return { n, day, topLeaderBoardN } + return { projectId, n, day, topLeaderBoardN } default: throw { message: `Unknown method ${params}` } @@ -192,8 +204,9 @@ module.exports = { let { method } = request; switch (method) { case 'claim': - let { user, token, balance } = result + let { projectId, user, token, balance } = result return [ + { type: 'bytes32', value: projectId }, { type: 'address', value: user }, { type: 'address', value: token }, { type: 'uint256', value: balance }, @@ -202,13 +215,14 @@ module.exports = { case 'lotteryWinner': let { roundId, winners } = result return [ - { type: 'uint32', value: roundId }, + { type: 'bytes32', value: roundId }, { type: 'address[]', value: winners }, ] case 'topLeaderBoardN': { - let { n, day, topLeaderBoardN } = result + let { projectId, n, day, topLeaderBoardN } = result return [ + { type: 'bytes32', value: projectId }, { type: 'uint256', value: n }, { type: 'uint256', value: day }, { type: 'address[]', value: topLeaderBoardN }, From cd1d08905adaeb6748aea2c56c7220ebfa82298b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 24 Apr 2023 09:14:01 +0330 Subject: [PATCH 221/406] Implement `fetchSeed` & `fetchWinnersPerRound` --- general/dibsGlobal.js | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 0846208..c7456ec 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -1,6 +1,6 @@ -const { axios, ethCall, BN, recoverTypedMessage } = MuonAppUtils +const { axios, ethCall, BN, recoverTypedMessage, soliditySha3 } = MuonAppUtils -const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] +const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dibsLottery", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }] const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] const DibsRepository = "0x1370Ff0e5CC846a95f34FE50aD90daad17022797" @@ -50,7 +50,7 @@ module.exports = { return new BN(seed) }, - createTicketsQuery: function (round, lastUser) { + createTicketsQuery: function (dibs, round, lastUser) { const query = `{ userLotteries ( first: 1000, where: { round: "${round}", user_not: "${dibs}", user_gt: "${lastUser}", tickets_gt: "0"} @@ -64,13 +64,13 @@ module.exports = { return query }, - getRoundTickets: async function (round, subgraphEndpoint) { + getRoundTickets: async function (dibs, round, subgraphEndpoint) { let lastUser = '0x0000000000000000000000000000000000000000' let tickets = [] let walletsCount = 0 do { - const query = this.createTicketsQuery(round, lastUser) + const query = this.createTicketsQuery(dibs, round, lastUser) const data = await this.postQuery(query, subgraphEndpoint) if (data.userLotteries.length == 0) break data.userLotteries.forEach((el) => tickets.push(...Array(parseInt(el.tickets)).fill(el.user))) @@ -124,7 +124,7 @@ module.exports = { return true }, - getTopLeaderBoardN: async function (n, day, subgraphEndPoint) { + getTopLeaderBoardN: async function (dibs, n, day, subgraphEndPoint) { const query = `{ topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { id @@ -144,8 +144,25 @@ module.exports = { }, fetchProject: async function (projectId) { - const { dibs, chainId, subgraphEndPoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 137) - return { dibs, chainId, subgraphEndPoint } + const { dibs, chainId, subgraphEndpoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 137) + return { dibs, chainId, subgraphEndpoint } + }, + + fetchSeed: async function (projectId, round) { + const roundId = soliditySha3([ + { type: 'bytes32', value: projectId }, + { type: 'uint32', value: round }, + ]) + const seed = await this.getSeed(roundId) + + return { seed, roundId } + }, + + fetchWinnersPerRound: async function (dibs, chainId) { + const dibsLottery = await ethCall(dibs, 'dibsLottery', [], DIBS_ABI, chainId) + const winnersPerRound = await ethCall(dibsLottery, 'winnersPerRound', [], DIBS_LOTTERY_ABI, chainId) + + return winnersPerRound }, onRequest: async function (request) { @@ -173,8 +190,8 @@ module.exports = { case 'lotteryWinner': { let { projectId, round } = params const { dibs, chainId, subgraphEndpoint } = await this.fetchProject(projectId) - const { tickets, walletsCount } = await this.getRoundTickets(round, subgraphEndpoint) - const { seed, roundId } = await this.fetchSeed(projectNumber, round) + const { tickets, walletsCount } = await this.getRoundTickets(dibs, round, subgraphEndpoint) + const { seed, roundId } = await this.fetchSeed(projectId, round) const winnersPerRound = await this.fetchWinnersPerRound(dibs, chainId) const winners = this.determineWinners(winnersPerRound, tickets, walletsCount, seed) @@ -184,8 +201,8 @@ module.exports = { case 'topLeaderBoardN': let { projectId, n, day } = params - const { subgraphEndpoint } = await this.fetchProject(projectId) - const topLeaderBoardN = await this.getTopLeaderBoardN(n, day, subgraphEndpoint) + const { dibs, subgraphEndpoint } = await this.fetchProject(projectId) + const topLeaderBoardN = await this.getTopLeaderBoardN(dibs, n, day, subgraphEndpoint) return { projectId, n, day, topLeaderBoardN } From 77668088631a048d29f38b107252f3110bfab18e Mon Sep 17 00:00:00 2001 From: Abram Symons <36688816+abramsymons@users.noreply.github.com> Date: Mon, 24 Apr 2023 12:34:37 +0330 Subject: [PATCH 222/406] Update simple_oracle.js --- general/simple_oracle.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/general/simple_oracle.js b/general/simple_oracle.js index c4904ea..e1eed27 100644 --- a/general/simple_oracle.js +++ b/general/simple_oracle.js @@ -4,13 +4,21 @@ module.exports = { APP_NAME: 'simple_oracle', onRequest: async function(request){ - let { method } = request + let { + method, + data: { params } + } = request switch (method) { case 'eth-price': const response = await axios .get('https://api.coinbase.com/v2/exchange-rates?currency=ETH') const price = parseInt(response.data.data.rates.USD) return { price } + case 'price': + let { token, unit } = params + const response = await axios.get(`https://api.coinbase.com/v2/exchange-rates?currency=${token}`) + const price = parseInt(response.data.data.rates[unit]) + return { price } default: throw `Unknown method ${method}` @@ -18,13 +26,24 @@ module.exports = { }, signParams: function(request, result){ - let { method } = request; + let { + method, + data: { params } + } = request let { price } = result; + let { token, unit } = params + switch (method) { case 'eth-price': return [ { type: 'uint32', value: price } ] + case 'price': + return [ + { type: 'uint32', value: price }, + { type: 'string', value: token }, + { type: 'string', value: unit }, + ] default: throw `Unknown method '${method}'` From 7a0d60b9c9a6275f0d0168c351633bcc9b85018f Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 24 Apr 2023 13:19:06 +0330 Subject: [PATCH 223/406] simple oracle --- general/simple_oracle.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/general/simple_oracle.js b/general/simple_oracle.js index e1eed27..a49a9ab 100644 --- a/general/simple_oracle.js +++ b/general/simple_oracle.js @@ -7,17 +7,17 @@ module.exports = { let { method, data: { params } - } = request + } = request; switch (method) { case 'eth-price': - const response = await axios + var response = await axios .get('https://api.coinbase.com/v2/exchange-rates?currency=ETH') - const price = parseInt(response.data.data.rates.USD) + var price = parseInt(response.data.data.rates.USD) return { price } case 'price': let { token, unit } = params - const response = await axios.get(`https://api.coinbase.com/v2/exchange-rates?currency=${token}`) - const price = parseInt(response.data.data.rates[unit]) + var response = await axios.get(`https://api.coinbase.com/v2/exchange-rates?currency=${token}`) + var price = parseInt(response.data.data.rates[unit]) return { price } default: From 86ff0e12f31eebb2179c62f1fdfbd159604e757f Mon Sep 17 00:00:00 2001 From: "farazfo@yahoo.com" <11iloveu005> Date: Mon, 24 Apr 2023 14:08:41 +0330 Subject: [PATCH 224/406] add test method to price test app --- general/price-test.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/general/price-test.js b/general/price-test.js index 5bf7948..6e9ba67 100644 --- a/general/price-test.js +++ b/general/price-test.js @@ -16,7 +16,8 @@ module.exports = { else throw `get price failed`; return {price}; - + case 'test': + return {test: "OK"}; default: throw `Unknown method ${method}` } @@ -24,12 +25,16 @@ module.exports = { signParams: function (request, result) { let {method} = request; - let {price} = result; + let {price, test} = result; switch (method) { case 'get_price': return [ {type: 'uint32', value: price} ]; + case 'test': + return [ + {type: 'string', value: test} + ]; default: throw `Unknown method '${method}'` } From bbec5894172bb99686995bf43020292bd3067ffe Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 10 May 2023 16:34:00 +0330 Subject: [PATCH 225/406] Exclude users with zero `amountAsReferrer` --- general/dibs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index 8f7dfe8..6f2e15d 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -128,7 +128,7 @@ module.exports = { getTopLeaderBoardN: async function (n, day) { const query = `{ - topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}", amountAsReferrer_gt: 0}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer From c22d64474846070afd4b37e935fb23fc02764a7c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 10 May 2023 16:42:20 +0330 Subject: [PATCH 226/406] Exclude users with zero `amountAsReferrer` --- general/dibs.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index 8f7dfe8..6f2e15d 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -128,7 +128,7 @@ module.exports = { getTopLeaderBoardN: async function (n, day) { const query = `{ - topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${Dibs}", amountAsReferrer_gt: 0}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer From 0bfdb4b4780e4495e918a9109785b898945637dc Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 20 May 2023 10:57:30 +0330 Subject: [PATCH 227/406] Add `timestamp` to `topLeaderBoardN` signature --- general/dibsGlobal.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index c7456ec..7be980d 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -243,6 +243,7 @@ module.exports = { { type: 'uint256', value: n }, { type: 'uint256', value: day }, { type: 'address[]', value: topLeaderBoardN }, + { type: 'uint256', value: request.data.timestamp }, ] } From 5f0bb558e172b7d0e2871f7bf196c45a0f325c91 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 24 May 2023 09:14:56 +0330 Subject: [PATCH 228/406] Add `timestamp` to `topLeaderBoardN` signature --- general/dibs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/dibs.js b/general/dibs.js index 6f2e15d..108e8eb 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -216,6 +216,7 @@ module.exports = { { type: 'uint256', value: n }, { type: 'uint256', value: day }, { type: 'address[]', value: topLeaderBoardN }, + { type: 'uint256', value: request.data.timestamp }, ] } From 441db09f207bf4abcd884d0f40822f3214d621c4 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 8 Jun 2023 11:42:02 +0330 Subject: [PATCH 229/406] Add `platformClaim` method (WIP) --- general/dibs.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/general/dibs.js b/general/dibs.js index 108e8eb..dac3b11 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -181,6 +181,12 @@ module.exports = { return { n, day, topLeaderBoardN } + case 'platfromClaim': { + let { token } = params + const balance = await this.getPlatformBalance(token) + return { token, balance } + } + default: throw { message: `Unknown method ${params}` } } @@ -221,6 +227,16 @@ module.exports = { } + case 'platfromClaim': { + let { token, balance } = result + return [ + { type: 'string', value: "PLATFORM" }, + { type: 'address', value: token }, + { type: 'uint256', value: balance }, + { type: 'uint256', value: request.data.timestamp }, + ] + } + default: break } From 23c3b9b46ed9a41df203e9670b2b5943c8b3d500 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 10 Jun 2023 15:08:46 +0330 Subject: [PATCH 230/406] Implement `getPlatformBalance` --- general/dibs.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index dac3b11..c145327 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,4 +1,4 @@ -const { axios, ethCall, BN, recoverTypedMessage } = MuonAppUtils +const { axios, ethCall, BN, recoverTypedMessage, toBaseUnit } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' const DibsRandomSeedGenerator = "0xfa200781a931c9F0ef3306092cd4e547772110Ae" @@ -7,7 +7,10 @@ const Dibs = "0x664cE330511653cB2744b8eD50DbA31C6c4C08ca" const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] const DibsLottery = "0x287ed50e4c158dac38e1b7e16c50cd1b2551a300" const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] - +const ERC20_ABI = [{ "constant": true, "inputs": [{ "name": "_owner", "type": "address" }], "name": "balanceOf", "outputs": [{ "name": "balance", "type": "uint256" }], "payable": false, "stateMutability": "view", "type": "function" }] +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) +const VALID_TOLERANCE = scaleUp('0.01') +const SCALE = new BN(toBaseUnit('1', '18')) module.exports = { APP_NAME: 'dibs', @@ -145,6 +148,24 @@ module.exports = { }, + getPlatformBalance: async function (token) { + const dibsBalance = await ethCall(token, 'balanceOf', [Dibs], ERC20_ABI, 56) + const query = `{ + notClaimed: totalNotClaimeds(where: {token: "${token}"}) { + id + token + amount + } + }` + + const data = await this.postQuery(query) + + const totalNotClaimed = data.notClaimed[0] + if (totalNotClaimed == undefined) throw { message: `Invalid token address` } + + return new BN(dibsBalance).sub(new BN(totalNotClaimed.amount)).toString() + }, + onRequest: async function (request) { let { method, From d3e7d1457867696b2c0877da3aa892caec113005 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 10 Jun 2023 15:09:11 +0330 Subject: [PATCH 231/406] Check result tolerance --- general/dibs.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/general/dibs.js b/general/dibs.js index c145327..2dc705a 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -11,9 +11,19 @@ const ERC20_ABI = [{ "constant": true, "inputs": [{ "name": "_owner", "type": "a const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) const VALID_TOLERANCE = scaleUp('0.01') const SCALE = new BN(toBaseUnit('1', '18')) + module.exports = { APP_NAME: 'dibs', + isToleranceOk: function (amount, expectedAmount, validTolerance) { + let diff = new BN(amount).sub(new BN(expectedAmount)).abs() + const diffPercentage = new BN(diff).mul(SCALE).div(new BN(expectedAmount)) + return { + isOk: !diffPercentage.gt(new BN(validTolerance)), + diffPercentage: diffPercentage.mul(new BN(100)).div(SCALE) + } + }, + postQuery: async function (query) { const { data: { data } @@ -250,10 +260,14 @@ module.exports = { case 'platfromClaim': { let { token, balance } = result + + if (!this.isToleranceOk(balance, request.data.result.balance, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error` } + return [ { type: 'string', value: "PLATFORM" }, { type: 'address', value: token }, - { type: 'uint256', value: balance }, + { type: 'uint256', value: request.data.result.balance }, { type: 'uint256', value: request.data.timestamp }, ] } From 002e1a5638513a2f8d8b62b84785ba1c824a63e8 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 12 Jun 2023 11:56:25 +0330 Subject: [PATCH 232/406] Update twaper --- general/pair.js | 39 ++++++++------- general/twaper.js | 123 ++++++++++++++++++++++------------------------ 2 files changed, 79 insertions(+), 83 deletions(-) diff --git a/general/pair.js b/general/pair.js index 31ed830..6a49b92 100644 --- a/general/pair.js +++ b/general/pair.js @@ -6,18 +6,24 @@ const CHAINS = { mainnet: 1, fantom: 250, polygon: 137, + bsc: 56, + avax: 43114, } const networksWeb3 = { - [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH)), - [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM)), - [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON)), + [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH) || "https://rpc.ankr.com/eth"), + [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM) || "https://rpc.ankr.com/fantom"), + [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON) || "https://rpc.ankr.com/polygon"), + [CHAINS.bsc]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC) || "https://rpc.ankr.com/bsc"), + [CHAINS.avax]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVAX) || "https://rpc.ankr.com/avalanche"), } const networksBlocksPerMinute = { [CHAINS.mainnet]: 5, [CHAINS.fantom]: 52, [CHAINS.polygon]: 29, + [CHAINS.bsc]: 12, + [CHAINS.avax]: 55, } const THRESHOLD = 2 @@ -26,7 +32,12 @@ const Q112 = new BN(2).pow(new BN(112)) const ETH = new BN(toBaseUnit('1', '18')) const UNISWAPV2_PAIR_ABI = [{ "constant": true, "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], "payable": false, "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] -const SOLIDLY_PAIR_ABI = [{ "inputs": [], "name": "observationLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" }], "name": "sample", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [{ "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const SOLIDLY_PAIR_ABI = [{ "inputs": [], "name": "observationLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" }], "name": "sample", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [{ "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "anonymous": false, "inputs": [{ "indexed": false, "internalType": "uint256", "name": "reserve0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "reserve1", "type": "uint256" }], "name": "Sync", "type": "event" }, { "inputs": [], "name": "getReserves", "outputs": [{ "internalType": "uint256", "name": "_reserve0", "type": "uint256" }, { "internalType": "uint256", "name": "_reserve1", "type": "uint256" }, { "internalType": "uint256", "name": "_blockTimestampLast", "type": "uint256" }], "stateMutability": "view", "type": "function" }] + +const ABIS = { + UniV2: UNISWAPV2_PAIR_ABI, + Solidly: SOLIDLY_PAIR_ABI, +} module.exports = { CHAINS, @@ -55,19 +66,19 @@ module.exports = { return price0 }, - getSeed: async function (chainId, pairAddress, blocksToSeed, toBlock) { + getSeed: async function (chainId, pairAddress, blocksToSeed, toBlock, abiStyle) { const w3 = networksWeb3[chainId] const seedBlockNumber = toBlock - blocksToSeed - const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const pair = new w3.eth.Contract(ABIS[abiStyle], pairAddress) const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) const price0 = this.calculateInstantPrice(_reserve0, _reserve1) return { price0: price0, blockNumber: seedBlockNumber } }, - getSyncEvents: async function (chainId, seedBlockNumber, pairAddress, blocksToSeed) { + getSyncEvents: async function (chainId, seedBlockNumber, pairAddress, blocksToSeed, abiStyle) { const w3 = networksWeb3[chainId] - const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + const pair = new w3.eth.Contract(ABIS[abiStyle], pairAddress) const options = { fromBlock: seedBlockNumber + 1, toBlock: seedBlockNumber + blocksToSeed @@ -243,14 +254,6 @@ module.exports = { const seedBlock = toBlock - blocksToFuse const fusePrice = await this.getFusePrice(w3, pairAddress, toBlock, seedBlock, abiStyle) - if (fusePrice.price0.eq(new BN(0))) - return { - isOk0: true, - isOk1: true, - priceDiffPercentage0: new BN(0), - priceDiffPercentage1: new BN(0), - block: fusePrice.blockNumber - } const checkResult0 = this.isPriceToleranceOk(price.price0, fusePrice.price0, fusePriceTolerance) const checkResult1 = this.isPriceToleranceOk(price.price1, Q112.mul(Q112).div(fusePrice.price0), fusePriceTolerance) @@ -267,9 +270,9 @@ module.exports = { const blocksToSeed = networksBlocksPerMinute[chainId] * pair.minutesToSeed const blocksToFuse = networksBlocksPerMinute[chainId] * pair.minutesToFuse // get seed price - const seed = await this.getSeed(chainId, pair.address, blocksToSeed, toBlock) + const seed = await this.getSeed(chainId, pair.address, blocksToSeed, toBlock, abiStyle) // get sync events that are emitted after seed block - const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pair.address, blocksToSeed) + const syncEventsMap = await this.getSyncEvents(chainId, seed.blockNumber, pair.address, blocksToSeed, abiStyle) // create an array contains a price for each block mined after seed block const prices = this.createPrices(seed, syncEventsMap, blocksToSeed) // remove outlier prices diff --git a/general/twaper.js b/general/twaper.js index 5271902..ec89c92 100644 --- a/general/twaper.js +++ b/general/twaper.js @@ -1,4 +1,4 @@ -const { ethCall, ethGetBlock, ethGetBlockNumber, BN } = MuonAppUtils +const { ethCall, ethGetBlock, BN } = MuonAppUtils const Pair = require('./pair') const { @@ -6,10 +6,12 @@ const { Q112, } = Pair -const blocksToAvoidReorg = { - [CHAINS.mainnet]: 3, - [CHAINS.fantom]: 26, - [CHAINS.polygon]: 15, +const chainNames = { + [CHAINS.mainnet]: 'ethereum', + [CHAINS.fantom]: 'fantom', + [CHAINS.polygon]: 'polygon', + [CHAINS.bsc]: 'bsc', + [CHAINS.avax]: 'avalanche', } const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] @@ -97,36 +99,6 @@ module.exports = { return { price: sumTokenPrice.div(sumWeights), removedPrices } }, - getReliableBlock: async function (chainId) { - const latestBlock = await ethGetBlockNumber(chainId) - const reliableBlock = latestBlock - blocksToAvoidReorg[chainId] - return reliableBlock - }, - - prepareToBlocks: async function (chainIds) { - const toBlocks = {} - for (let chainId of chainIds) { - // consider a few blocks before the current block as toBlock to avoid reorg - toBlocks[chainId] = await this.getReliableBlock(chainId) - } - - return toBlocks - }, - - getEarliestBlockTimestamp: async function (chainIds, toBlocks) { - const promises = [] - for (const chainId of chainIds) { - promises.push(ethGetBlock(chainId, toBlocks[chainId])) - } - - const blocks = await Promise.all(promises) - const timestamps = [] - blocks.forEach((block) => { - timestamps.push(block.timestamp) - }) - return Math.min(...timestamps) - }, - getLpTotalSupply: async function (pairAddress, chainId, toBlock) { const w3 = this.networksWeb3[chainId] const pair = new w3.eth.Contract(this.UNISWAPV2_PAIR_ABI, pairAddress) @@ -141,7 +113,13 @@ module.exports = { getLpMetaData: async function (config) { const { chainId, pair, config0, config1 } = await ethCall(config, 'getMetaData', [], LP_CONFIG_ABI, CHAINS.fantom) - return { chainId, pair, config0, config1 } + + let { routes: routes0, chainIds: chainIds0 } = this.formatRoutes(config0) + let { routes: routes1, chainIds: chainIds1 } = this.formatRoutes(config1) + + const chainIds = new Set([...chainIds0, ...chainIds1]) + + return { chainId, pair, routes0, routes1, chainIds } }, calculateLpPrice: async function (chainId, pair, routes0, routes1, toBlocks) { @@ -160,6 +138,36 @@ module.exports = { return price }, + _validateToBlock: async function (id, toBlock, timestamp) { + const promises = [ + ethGetBlock(id, toBlock), + ethGetBlock(id, toBlock + 1), + ] + const [block0, block1] = await Promise.all(promises) + + /* returns true if: + + 1. block0 <= timestamp < block + 2. (block0 <= timestamp && block0 == block1) => block0 = timestamp = block1 + + case No.2 happens in chains with low blockTime like fantom + */ + return block0.timestamp <= timestamp && (timestamp < block1.timestamp || block0.timestamp == block1.timestamp) + }, + + validateToBlocks: async function (chainIds, toBlocks, timestamp) { + const promises = [] + + chainIds.forEach((id) => { + if (toBlocks[id] == undefined) throw { message: `Undefined toBlock for ${chainNames[id]}(${id})` } + promises.push(this._validateToBlock(id, toBlocks[id], timestamp)) + }) + + const result = await Promise.all(promises) + + return !result.includes(false) + }, + onRequest: async function (request) { let { method, @@ -169,27 +177,22 @@ module.exports = { switch (method) { case 'price': - let { config, toBlocks } = params + let { config, timestamp, toBlocks } = params // get token route for calculating price const { routes, chainIds } = await this.getRoutes(config) if (!routes) throw { message: 'Invalid config' } - // prepare toBlocks - if (!toBlocks) { - if (!request.data.result) - toBlocks = await this.prepareToBlocks(chainIds) - else - toBlocks = request.data.result.toBlocks - } - else toBlocks = JSON.parse(toBlocks) + toBlocks = JSON.parse(toBlocks) + + // check if toBlocks are related to timestamp + // it also check if there are toBlock for each chain + const isValid = await this.validateToBlocks(chainIds, toBlocks, timestamp) + if (!isValid) throw { message: 'Invalid toBlocks' } // calculate price using the given route const { price, removedPrices } = await this.calculatePrice(routes.validPriceGap, routes.routes, toBlocks) - // get earliest block timestamp - const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) - return { config, routes, @@ -200,29 +203,19 @@ module.exports = { } case 'lp_price': { - let { config, toBlocks } = params - - let { chainId, pair, config0, config1 } = await this.getLpMetaData(config) + let { config, timestamp, toBlocks } = params - let { routes: routes0, chainIds: chainIds0 } = this.formatRoutes(config0) - let { routes: routes1, chainIds: chainIds1 } = this.formatRoutes(config1) + let { chainId, pair, routes0, routes1 } = await this.getLpMetaData(config) - const chainIds = new Set([...chainIds0, ...chainIds1]) + toBlocks = JSON.parse(toBlocks) - // prepare toBlocks - if (!toBlocks) { - if (!request.data.result) - toBlocks = await this.prepareToBlocks(chainIds) - else - toBlocks = request.data.result.toBlocks - } - else toBlocks = JSON.parse(toBlocks) + // check if toBlocks are related to timestamp + // it also check if there are toBlock for each chain + const isValid = await this.validateToBlocks(chainIds, toBlocks, timestamp) + if (!isValid) throw { message: 'Invalid toBlocks' } const price = await this.calculateLpPrice(chainId, pair, routes0, routes1, toBlocks) - // get earliest block timestamp - const timestamp = await this.getEarliestBlockTimestamp(chainIds, toBlocks) - return { config, price: price.toString(), From 2153739a37308887300402f9a5bf017db551ea0d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 15 Jun 2023 14:19:17 +0330 Subject: [PATCH 233/406] Fix default rpcs bug --- general/pair.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/general/pair.js b/general/pair.js index 6a49b92..baf44eb 100644 --- a/general/pair.js +++ b/general/pair.js @@ -11,11 +11,11 @@ const CHAINS = { } const networksWeb3 = { - [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH) || "https://rpc.ankr.com/eth"), - [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM) || "https://rpc.ankr.com/fantom"), - [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON) || "https://rpc.ankr.com/polygon"), - [CHAINS.bsc]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC) || "https://rpc.ankr.com/bsc"), - [CHAINS.avax]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVAX) || "https://rpc.ankr.com/avalanche"), + [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/eth")), + [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM || "https://rpc.ankr.com/fantom")), + [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON || "https://rpc.ankr.com/polygon")), + [CHAINS.bsc]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC || "https://rpc.ankr.com/bsc")), + [CHAINS.avax]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVAX || "https://rpc.ankr.com/avalanche")), } const networksBlocksPerMinute = { From e54bf9e03e699a0f7af47dacc211d39130aae8ea Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 24 Jun 2023 14:54:10 +0330 Subject: [PATCH 234/406] Fix configs ABIs & bsc default rpc --- general/pair.js | 2 +- general/twaper.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/general/pair.js b/general/pair.js index baf44eb..e9f7c97 100644 --- a/general/pair.js +++ b/general/pair.js @@ -14,7 +14,7 @@ const networksWeb3 = { [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/eth")), [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM || "https://rpc.ankr.com/fantom")), [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON || "https://rpc.ankr.com/polygon")), - [CHAINS.bsc]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC || "https://rpc.ankr.com/bsc")), + [CHAINS.bsc]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC || "https://1rpc.io/bnb")), [CHAINS.avax]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVAX || "https://rpc.ankr.com/avalanche")), } diff --git a/general/twaper.js b/general/twaper.js index ec89c92..841756d 100644 --- a/general/twaper.js +++ b/general/twaper.js @@ -14,8 +14,8 @@ const chainNames = { [CHAINS.avax]: 'avalanche', } -const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] -const LP_CONFIG_ABI = [{ "inputs": [], "name": "getMetaData", "outputs": [{ "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "pair", "type": "address" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config0", "type": "tuple" }, { "components": [{ "components": [{ "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config1", "type": "tuple" }], "internalType": "struct LpConfig.LpMetaData", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] +const CONFIG_ABI = [{ "inputs": [], "name": "getRoutes", "outputs": [{ "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }, { "components": [{ "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }], "stateMutability": "view", "type": "function" }] +const LP_CONFIG_ABI = [{ "inputs": [], "name": "getMetaData", "outputs": [{ "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "pair", "type": "address" }, { "components": [{ "components": [{ "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config0", "type": "tuple" }, { "components": [{ "components": [{ "internalType": "string", "name": "dex", "type": "string" }, { "internalType": "address[]", "name": "path", "type": "address[]" }, { "components": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "string", "name": "abiStyle", "type": "string" }, { "internalType": "bool[]", "name": "reversed", "type": "bool[]" }, { "internalType": "uint256[]", "name": "fusePriceTolerance", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToSeed", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "minutesToFuse", "type": "uint256[]" }, { "internalType": "uint256", "name": "weight", "type": "uint256" }, { "internalType": "bool", "name": "isActive", "type": "bool" }], "internalType": "struct IConfig.Config", "name": "config", "type": "tuple" }], "internalType": "struct IConfig.Route[]", "name": "routes_", "type": "tuple[]" }, { "internalType": "uint256", "name": "validPriceGap_", "type": "uint256" }], "internalType": "struct LpConfig.ConfigMetaData", "name": "config1", "type": "tuple" }], "internalType": "struct LpConfig.LpMetaData", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] module.exports = { ...Pair, @@ -205,7 +205,7 @@ module.exports = { case 'lp_price': { let { config, timestamp, toBlocks } = params - let { chainId, pair, routes0, routes1 } = await this.getLpMetaData(config) + let { chainId, pair, routes0, routes1, chainIds } = await this.getLpMetaData(config) toBlocks = JSON.parse(toBlocks) From 26a78627617d9d84dc0ce2422b2c614310bfbd01 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Fri, 30 Jun 2023 14:15:34 +0330 Subject: [PATCH 235/406] Add `platformClaim` method --- general/dibsGlobal.js | 53 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 7be980d..f08743a 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -1,4 +1,4 @@ -const { axios, ethCall, BN, recoverTypedMessage, soliditySha3 } = MuonAppUtils +const { axios, ethCall, BN, recoverTypedMessage, soliditySha3, toBaseUnit } = MuonAppUtils const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dibsLottery", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }] const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] @@ -6,9 +6,22 @@ const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": const DibsRepository = "0x1370Ff0e5CC846a95f34FE50aD90daad17022797" const DIBS_REPO_ABI = [{ "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "name": "projects", "outputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "dibs", "type": "address" }, { "internalType": "string", "name": "subgraphEndpoint", "type": "string" }, { "internalType": "uint32", "name": "firstRoundStartTime", "type": "uint32" }, { "internalType": "uint32", "name": "roundDuration", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "roundId", "type": "bytes32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) +const VALID_TOLERANCE = scaleUp('0.01') +const SCALE = scaleUp('1') + module.exports = { APP_NAME: 'dibsGlobal', + isToleranceOk: function (amount, expectedAmount, validTolerance) { + let diff = new BN(amount).sub(new BN(expectedAmount)).abs() + const diffPercentage = new BN(diff).mul(SCALE).div(new BN(expectedAmount)) + return { + isOk: !diffPercentage.gt(new BN(validTolerance)), + diffPercentage: diffPercentage.mul(new BN(100)).div(SCALE) + } + }, + postQuery: async function (query, subgraphEndpoint) { const { data: { data } @@ -165,6 +178,22 @@ module.exports = { return winnersPerRound }, + getPlatformBalance: async function (token, subgraphEndPoint) { + const query = `{ + platformBalance: accumulativeTokenBalances(where: {id: "${token}-PLATFORM"}) { + token + amount + } + }` + + const data = await this.postQuery(query, subgraphEndPoint) + + const platformBalance = data.platformBalance[0] + if (platformBalance == undefined) throw { message: `Invalid token address` } + + return platformBalance.amount + }, + onRequest: async function (request) { let { method, @@ -206,6 +235,13 @@ module.exports = { return { projectId, n, day, topLeaderBoardN } + case 'platformClaim': { + let { projectId, token } = params + const { subgraphEndpoint } = await this.fetchProject(projectId) + const balance = await this.getPlatformBalance(token, subgraphEndpoint) + return { projectId, token, balance } + } + default: throw { message: `Unknown method ${params}` } } @@ -248,6 +284,21 @@ module.exports = { } + case 'platformClaim': { + let { projectId, token, balance } = result + + if (!this.isToleranceOk(balance, request.data.result.balance, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error` } + + return [ + { type: 'bytes32', value: projectId }, + { type: 'string', value: "PLATFORM" }, + { type: 'address', value: token }, + { type: 'uint256', value: request.data.result.balance }, + { type: 'uint256', value: request.data.timestamp }, + ] + } + default: break } From 4751182e1b0793e4517740cb5cd2ace92df027d7 Mon Sep 17 00:00:00 2001 From: "farazfo@yahoo.com" <11iloveu005> Date: Sun, 30 Jul 2023 11:19:17 +0330 Subject: [PATCH 236/406] update recoverTypedSignature --- general/dibs.js | 4 ++-- general/dibsGlobal.js | 5 +++-- general/mrc20_presale.js | 4 ++-- general/muon-presale.js | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/general/dibs.js b/general/dibs.js index 2dc705a..6778b8c 100644 --- a/general/dibs.js +++ b/general/dibs.js @@ -1,4 +1,4 @@ -const { axios, ethCall, BN, recoverTypedMessage, toBaseUnit } = MuonAppUtils +const { axios, ethCall, BN, recoverTypedSignature, toBaseUnit } = MuonAppUtils const subgraphUrl = 'https://api.thegraph.com/subgraphs/name/spsina/dibs' const DibsRandomSeedGenerator = "0xfa200781a931c9F0ef3306092cd4e547772110Ae" @@ -128,7 +128,7 @@ module.exports = { primaryType: 'Message', message: { user: forAddress, timestamp: time } } - let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + let signer = recoverTypedSignature({data: typedData, signature: sign, version: "V4"}); return signer.toLowerCase() === forAddress.toLowerCase() }, diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index f08743a..fcd2154 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -1,4 +1,4 @@ -const { axios, ethCall, BN, recoverTypedMessage, soliditySha3, toBaseUnit } = MuonAppUtils +const { axios, ethCall, BN, recoverTypedSignature, soliditySha3, toBaseUnit } = MuonAppUtils const DIBS_ABI = [{ "inputs": [{ "internalType": "address", "name": "", "type": "address" }], "name": "addressToCode", "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "dibsLottery", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }] const DIBS_LOTTERY_ABI = [{ "inputs": [], "name": "winnersPerRound", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], "stateMutability": "view", "type": "function" }] @@ -126,7 +126,8 @@ module.exports = { primaryType: 'Message', message: { user: forAddress, timestamp: time } } - let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + + let signer = recoverTypedSignature({data: typedData, signature: sign, version: "V4"}); return signer.toLowerCase() === forAddress.toLowerCase() }, diff --git a/general/mrc20_presale.js b/general/mrc20_presale.js index bef2659..f586441 100644 --- a/general/mrc20_presale.js +++ b/general/mrc20_presale.js @@ -1,4 +1,4 @@ -const { toBaseUnit, soliditySha3, BN, recoverTypedMessage, Web3, ethCall } = +const { toBaseUnit, soliditySha3, BN, recoverTypedSignature, Web3, ethCall } = MuonAppUtils const { ABI_userInfo, @@ -170,7 +170,7 @@ module.exports = { message: { forAddress: forAddress } } - let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + let signer = recoverTypedSignature({data: typedData, signature: sign, version: "V4"}); if (signer.toLowerCase() !== forAddress.toLowerCase()) throw { message: 'Request signature mismatch' } diff --git a/general/muon-presale.js b/general/muon-presale.js index ec8e629..94f1f9e 100644 --- a/general/muon-presale.js +++ b/general/muon-presale.js @@ -1,4 +1,4 @@ -const { axios, toBaseUnit, soliditySha3, BN, recoverTypedMessage, ethCall } = +const { axios, toBaseUnit, soliditySha3, BN, recoverTypedSignature, ethCall } = MuonAppUtils const getTimestamp = () => Math.floor(Date.now() / 1000) @@ -110,7 +110,7 @@ module.exports = { message: { time: time, forAddress: forAddress } } - let signer = recoverTypedMessage({ data: typedData, sig: sign }, 'v4') + let signer = recoverTypedSignature({data: typedData, signature: sign, version: "V4"}); if (signer.toLowerCase() !== forAddress.toLowerCase()) throw { message: 'Request signature mismatch' } From 8c93969cc2aecd7ea0c96ada1d877b5d152e4798 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 1 Aug 2023 13:07:32 +0330 Subject: [PATCH 237/406] Convert token to lower case in `platformClaim` --- general/dibsGlobal.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index f08743a..b7325ef 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -180,7 +180,7 @@ module.exports = { getPlatformBalance: async function (token, subgraphEndPoint) { const query = `{ - platformBalance: accumulativeTokenBalances(where: {id: "${token}-PLATFORM"}) { + platformBalance: accumulativeTokenBalances(where: {id: "${token.toLowerCase()}-PLATFORM"}) { token amount } From 93e00878e3beea97322e82aaa714f11de1d78d7e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 5 Aug 2023 14:18:49 +0330 Subject: [PATCH 238/406] Throw subgraph errors --- general/dibsGlobal.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index b7325ef..17de33d 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -23,13 +23,17 @@ module.exports = { }, postQuery: async function (query, subgraphEndpoint) { - const { - data: { data } - } = await axios.post(subgraphEndpoint, { + const result = await axios.post(subgraphEndpoint, { query: query }) - return data + const data = result.data + + if (data.errors) { + throw data.errors + } + + return data.data }, getUserBalance: async function (user, token, subgraphEndPoint) { From bda6713cb7673fa0588bf6a3500b06ac16bc5858 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 8 Aug 2023 15:25:17 +0330 Subject: [PATCH 239/406] Upgrade to web3 v4.x --- general/pair.js | 121 ++++++++++++++++++++++++++++++---------------- general/twaper.js | 21 ++++---- 2 files changed, 90 insertions(+), 52 deletions(-) diff --git a/general/pair.js b/general/pair.js index e9f7c97..3573816 100644 --- a/general/pair.js +++ b/general/pair.js @@ -11,11 +11,11 @@ const CHAINS = { } const networksWeb3 = { - [CHAINS.mainnet]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/eth")), - [CHAINS.fantom]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_FTM || "https://rpc.ankr.com/fantom")), - [CHAINS.polygon]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_POLYGON || "https://rpc.ankr.com/polygon")), - [CHAINS.bsc]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_BSC || "https://1rpc.io/bnb")), - [CHAINS.avax]: new Web3(new HttpProvider(process.env.WEB3_PROVIDER_AVAX || "https://rpc.ankr.com/avalanche")), + [CHAINS.mainnet]: new Web3("https://rpc.ankr.com/eth"), + [CHAINS.fantom]: new Web3("https://rpc.ankr.com/fantom"), + [CHAINS.polygon]: new Web3("https://rpc.ankr.com/polygon"), + [CHAINS.bsc]: new Web3("https://rpc.ankr.com/bsc"), + [CHAINS.avax]: new Web3("https://rpc.ankr.com/avalanche"), } const networksBlocksPerMinute = { @@ -69,9 +69,8 @@ module.exports = { getSeed: async function (chainId, pairAddress, blocksToSeed, toBlock, abiStyle) { const w3 = networksWeb3[chainId] const seedBlockNumber = toBlock - blocksToSeed - const pair = new w3.eth.Contract(ABIS[abiStyle], pairAddress) - const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(seedBlockNumber) + const { _reserve0, _reserve1 } = await pair.methods.getReserves().call(undefined, seedBlockNumber) const price0 = this.calculateInstantPrice(_reserve0, _reserve1) return { price0: price0, blockNumber: seedBlockNumber } }, @@ -150,25 +149,48 @@ module.exports = { return averagePrice }, - makeBatchRequest: function (w3, calls) { + makeEthCallRequest: function (id, contract, method, inputs, toBlock) { + return { + jsonrpc: '2.0', + id, + method: 'eth_call', + params: [ + { + to: contract.address, + data: contract.methods[method](...inputs).encodeABI() + }, + "0x" + toBlock.toString(16), + ] + + } + }, + + makeEthGetBlockRequest: function (id, toBlock) { + return { + jsonrpc: '2.0', + id, + method: 'eth_getBlockByNumber', + params: ['0x' + toBlock.toString(16), false] + } + + }, + + makeBatchRequest: async function (w3, requests) { let batch = new w3.BatchRequest(); - let promises = calls.map(call => { - return new Promise((res, rej) => { - let req = call.req.request(call.block, (err, data) => { - if (err) rej(err); - else res(data) - }); - batch.add(req) - }) - }) - batch.execute() + requests.forEach((request) => batch.add(request.req)) + const responses = await batch.execute() - return Promise.all(promises) + let results = new Array(requests.length) + for (let res of responses) { + results[res.id] = requests[res.id].decoder ? requests[res.id].decoder(res.result) : res.result + } + + return results }, updatePriceCumulativeLasts: function (_price0CumulativeLast, _price1CumulativeLast, toBlockReserves, toBlockTimestamp) { - const timestampLast = toBlockTimestamp % 2 ** 32 + const timestampLast = BigInt(toBlockTimestamp) % 2n ** 32n if (timestampLast != toBlockReserves._blockTimestampLast) { const period = new BN(timestampLast - toBlockReserves._blockTimestampLast) const price0CumulativeLast = new BN(_price0CumulativeLast).add(this.calculateInstantPrice(toBlockReserves._reserve0, toBlockReserves._reserve1).mul(period)) @@ -179,8 +201,26 @@ module.exports = { }, getFusePrice: async function (w3, pairAddress, toBlock, seedBlock, abiStyle) { + const reservesDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], res) } + const priceCumulativeLastDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint256", "name": "", "type": "uint256" }], res) } const getFusePriceUniV2 = async (w3, pairAddress, toBlock, seedBlock) => { const pair = new w3.eth.Contract(UNISWAPV2_PAIR_ABI, pairAddress) + pair.address = pairAddress + + + const requests = [ + // reqs to get priceCumulativeLast of toBlock + { req: this.makeEthCallRequest(0, pair, 'price0CumulativeLast', [], toBlock), decoder: priceCumulativeLastDecoder }, + { req: this.makeEthCallRequest(1, pair, 'price1CumulativeLast', [], toBlock), decoder: priceCumulativeLastDecoder }, + { req: this.makeEthCallRequest(2, pair, 'getReserves', [], toBlock), decoder: reservesDecoder }, + { req: this.makeEthGetBlockRequest(3, toBlock) }, + // reqs to get priceCumulativeLast of seedBlock + { req: this.makeEthCallRequest(4, pair, 'price0CumulativeLast', [], seedBlock), decoder: priceCumulativeLastDecoder }, + { req: this.makeEthCallRequest(5, pair, 'price1CumulativeLast', [], seedBlock), decoder: priceCumulativeLastDecoder }, + { req: this.makeEthCallRequest(6, pair, 'getReserves', [], seedBlock), decoder: reservesDecoder }, + { req: this.makeEthGetBlockRequest(7, seedBlock) }, + ] + let [ _price0CumulativeLast, _price1CumulativeLast, @@ -190,23 +230,13 @@ module.exports = { _seedPrice1CumulativeLast, seedReserves, seed, - ] = await this.makeBatchRequest(w3, [ - // reqs to get priceCumulativeLast of toBlock - { req: pair.methods.price0CumulativeLast().call, block: toBlock }, - { req: pair.methods.price1CumulativeLast().call, block: toBlock }, - { req: pair.methods.getReserves().call, block: toBlock }, - { req: w3.eth.getBlock, block: toBlock }, - // reqs to get priceCumulativeLast of seedBlock - { req: pair.methods.price0CumulativeLast().call, block: seedBlock }, - { req: pair.methods.price1CumulativeLast().call, block: seedBlock }, - { req: pair.methods.getReserves().call, block: seedBlock }, - { req: w3.eth.getBlock, block: seedBlock }, - ]) + ] = await this.makeBatchRequest(w3, requests) + - const { price0CumulativeLast, price1CumulativeLast } = this.updatePriceCumulativeLasts(_price0CumulativeLast, _price1CumulativeLast, toReserves, to.timestamp) - const { price0CumulativeLast: seedPrice0CumulativeLast, price1CumulativeLast: seedPrice1CumulativeLast } = this.updatePriceCumulativeLasts(_seedPrice0CumulativeLast, _seedPrice1CumulativeLast, seedReserves, seed.timestamp) + const { price0CumulativeLast, price1CumulativeLast } = this.updatePriceCumulativeLasts(_price0CumulativeLast['0'], _price1CumulativeLast['0'], toReserves, to.timestamp) + const { price0CumulativeLast: seedPrice0CumulativeLast, price1CumulativeLast: seedPrice1CumulativeLast } = this.updatePriceCumulativeLasts(_seedPrice0CumulativeLast['0'], _seedPrice1CumulativeLast['0'], seedReserves, seed.timestamp) - const period = new BN(to.timestamp).sub(new BN(seed.timestamp)).abs() + const period = new BN(parseInt(to.timestamp)).sub(new BN(parseInt(seed.timestamp))).abs() return { price0: new BN(price0CumulativeLast).sub(new BN(seedPrice0CumulativeLast)).div(period), @@ -214,30 +244,35 @@ module.exports = { blockNumber: seedBlock } } + const metadataDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" }], res) } + const observationLengthDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint256", "name": "", "type": "uint256" }], res) } + const sampleDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], res) } const getFusePriceSolidly = async (w3, pairAddress, toBlock, seedBlock) => { const pair = new w3.eth.Contract(SOLIDLY_PAIR_ABI, pairAddress) + pair.address = pairAddress + let [ metadata, observationLength, seedObservationLength, ] = await this.makeBatchRequest(w3, [ - { req: pair.methods.metadata().call, block: toBlock }, + { req: this.makeEthCallRequest(0, pair, 'metadata', [], toBlock), decoder: metadataDecoder }, // reqs to get observationLength of toBlock - { req: pair.methods.observationLength().call, block: toBlock }, + { req: this.makeEthCallRequest(1, pair, 'observationLength', [], toBlock), decoder: observationLengthDecoder }, // reqs to get observationLength of seedBlock - { req: pair.methods.observationLength().call, block: seedBlock }, + { req: this.makeEthCallRequest(2, pair, 'observationLength', [], seedBlock), decoder: observationLengthDecoder }, ]) - const window = observationLength - seedObservationLength + const window = observationLength['0'] - seedObservationLength['0'] let [price0, price1] = await this.makeBatchRequest(w3, [ - { req: pair.methods.sample(metadata.t0, metadata.dec0, 1, window).call, block: toBlock }, - { req: pair.methods.sample(metadata.t1, metadata.dec1, 1, window).call, block: toBlock }, + { req: this.makeEthCallRequest(0, pair, 'sample', [metadata.t0, metadata.dec0, 1, window], toBlock), decoder: sampleDecoder }, + { req: this.makeEthCallRequest(1, pair, 'sample', [metadata.t1, metadata.dec1, 1, window], toBlock), decoder: sampleDecoder }, ]) return { - price0: new BN(price0[0]).mul(Q112).div(new BN(metadata.dec0)), - price1: new BN(price1[0]).mul(Q112).div(new BN(metadata.dec1)), + price0: new BN(price0['0'][0]).mul(Q112).div(new BN(metadata.dec0)), + price1: new BN(price1['0'][0]).mul(Q112).div(new BN(metadata.dec1)), blockNumber: seedBlock } } diff --git a/general/twaper.js b/general/twaper.js index 841756d..a8238a9 100644 --- a/general/twaper.js +++ b/general/twaper.js @@ -25,22 +25,22 @@ module.exports = { formatRoutes: function (metaData) { const chainIds = new Set() const routes = { - validPriceGap: metaData.validPriceGap_, + validPriceGap: String(metaData.validPriceGap_), routes: metaData.routes_.map((route) => { chainIds.add(route.config.chainId) return { - chainId: route.config.chainId, + chainId: parseInt(route.config.chainId), abiStyle: route.config.abiStyle, path: route.path.map((address, i) => { return { address: address, reversed: route.config.reversed[i], - fusePriceTolerance: route.config.fusePriceTolerance[i], - minutesToSeed: route.config.minutesToSeed[i], - minutesToFuse: route.config.minutesToFuse[i] + fusePriceTolerance: String(route.config.fusePriceTolerance[i]), + minutesToSeed: parseInt(route.config.minutesToSeed[i]), + minutesToFuse: parseInt(route.config.minutesToFuse[i]) } }), - weight: route.config.weight + weight: parseInt(route.config.weight) } }) } @@ -100,15 +100,18 @@ module.exports = { }, getLpTotalSupply: async function (pairAddress, chainId, toBlock) { + const reservesDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }], res) } + const totalSupplyDecoder = (res) => { return w3.eth.abi.decodeParameters([{ "internalType": "uint256", "name": "", "type": "uint256" }], res) } const w3 = this.networksWeb3[chainId] const pair = new w3.eth.Contract(this.UNISWAPV2_PAIR_ABI, pairAddress) + pair.address = pairAddress const [reserves, totalSupply] = await this.makeBatchRequest(w3, [ - { req: pair.methods.getReserves().call, block: toBlock }, - { req: pair.methods.totalSupply().call, block: toBlock }, + { req: this.makeEthCallRequest(0, pair, 'getReserves', [], toBlock), decoder: reservesDecoder }, + { req: this.makeEthCallRequest(1, pair, 'totalSupply', [], toBlock), decoder: totalSupplyDecoder }, ]) const K = new BN(reserves._reserve0).mul(new BN(reserves._reserve1)) - return { K, totalSupply: new BN(totalSupply) } + return { K, totalSupply: new BN(totalSupply['0']) } }, getLpMetaData: async function (config) { From 9f16e72957682b42720da558b78b0702368f4875 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 11:37:05 +0330 Subject: [PATCH 240/406] Return top leaderboard for pairs --- general/dibsGlobal.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 17de33d..addb6a3 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -141,9 +141,9 @@ module.exports = { return true }, - getTopLeaderBoardN: async function (dibs, n, day, subgraphEndPoint) { + getTopLeaderBoardN: async function (dibs, pair, n, day, subgraphEndPoint) { const query = `{ - topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {day: ${day}, user_not: "${dibs}"}, orderBy: amountAsReferrer, orderDirection: desc) { + topLeaderBoardN: dailyGeneratedVolumes(first: ${n}, where: {pair: "${pair.toLowerCase()}", day: ${day}, user_not: "${dibs}", amountAsReferrer_gt: "0"}, orderBy: amountAsReferrer, orderDirection: desc) { id user amountAsReferrer @@ -231,13 +231,16 @@ module.exports = { return { roundId, winners } } - case 'topLeaderBoardN': - let { projectId, n, day } = params + case 'topLeaderBoardN': { + let { projectId, pair, n, day } = params + + if (parseInt(day) <= 0) throw { message: 'NOT_POSITIVE_DAY' } const { dibs, subgraphEndpoint } = await this.fetchProject(projectId) - const topLeaderBoardN = await this.getTopLeaderBoardN(dibs, n, day, subgraphEndpoint) + const topLeaderBoardN = await this.getTopLeaderBoardN(dibs, pair, n, day, subgraphEndpoint) - return { projectId, n, day, topLeaderBoardN } + return { projectId, pair, n, day, topLeaderBoardN } + } case 'platformClaim': { let { projectId, token } = params @@ -277,9 +280,10 @@ module.exports = { ] case 'topLeaderBoardN': { - let { projectId, n, day, topLeaderBoardN } = result + let { projectId, pair, n, day, topLeaderBoardN } = result return [ { type: 'bytes32', value: projectId }, + { type: 'address', value: pair }, { type: 'uint256', value: n }, { type: 'uint256', value: day }, { type: 'address[]', value: topLeaderBoardN }, From 3d83a7128aed8aa6cd2e3219b3ed893e05c0187a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 11:45:23 +0330 Subject: [PATCH 241/406] Add `userVolume` method --- general/dibsGlobal.js | 53 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index addb6a3..78917c6 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -198,6 +198,8 @@ module.exports = { return platformBalance.amount }, + getDailyVolume: async function (user, pair, day, subgraphEndpoint) { }, + onRequest: async function (request) { let { method, @@ -249,6 +251,29 @@ module.exports = { return { projectId, token, balance } } + case 'userVolume': { + let { + projectId, + user, + pair, + day + } = params + + if (parseInt(day) <= 0) throw { message: 'NOT_POSITIVE_DAY' } + + const { subgraphEndpoint } = await this.fetchProject(projectId) + const { userVolume, totalVolume } = await this.getDailyVolume(user, pair, day, subgraphEndpoint) + + return { + projectId, + user, + pair, + day, + userVolume, + totalVolume, + } + } + default: throw { message: `Unknown method ${params}` } } @@ -296,7 +321,7 @@ module.exports = { let { projectId, token, balance } = result if (!this.isToleranceOk(balance, request.data.result.balance, VALID_TOLERANCE).isOk) - throw { message: `Tolerance Error` } + throw { message: `Tolerance Error - platform balance` } return [ { type: 'bytes32', value: projectId }, @@ -307,6 +332,32 @@ module.exports = { ] } + case 'userVolume': { + let { + projectId, + user, + pair, + day, + userVolume, + totalVolume, + } = result + + if (!this.isToleranceOk(userVolume, request.data.result.userVolume, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error - user volume` } + if (!this.isToleranceOk(totalVolume, request.data.result.totalVolume, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error - total volume` } + + return [ + { type: 'bytes32', value: projectId }, + { type: 'address', value: user }, + { type: 'address', value: pair }, + { type: 'uint256', value: day }, + { type: 'uint256', value: request.data.result.userVolume }, + { type: 'uint256', value: request.data.result.totalVolume }, + { type: 'uint256', value: request.data.timestamp }, + ] + } + default: break } From d291f843f92751790cebb25a2cd2a99fd48a9ae4 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 12:08:23 +0330 Subject: [PATCH 242/406] Implement `getDailyVolume` --- general/dibsGlobal.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 78917c6..3a26030 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -198,7 +198,36 @@ module.exports = { return platformBalance.amount }, - getDailyVolume: async function (user, pair, day, subgraphEndpoint) { }, + getDailyVolume: async function (user, pair, day, subgraphEndpoint) { + const totalQuery = `{ + totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair}"}) { + id + user + amountAsUser + day + } + }` + + const userQuery = `{ + userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user}", pair: "${pair}"}) { + id + user + amountAsUser + day + } + }` + + const totalData = await this.postQuery(totalQuery, subgraphEndpoint) + const userData = await this.postQuery(userQuery, subgraphEndpoint) + + const totalVolume = totalData.totalVolume[0].amountAsUser + const userVolume = userData.userVolume[0].amountAsUser + + return { + userVolume, + totalVolume, + } + }, onRequest: async function (request) { let { From 2b0c4fcd0f5f226a101eb68dcaddd05a72f14f4c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 12:47:54 +0330 Subject: [PATCH 243/406] Return result for day==0 --- general/dibsGlobal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 3a26030..648c3bd 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -265,7 +265,7 @@ module.exports = { case 'topLeaderBoardN': { let { projectId, pair, n, day } = params - if (parseInt(day) <= 0) throw { message: 'NOT_POSITIVE_DAY' } + if (parseInt(day) < 0) throw { message: 'NEGATIVE_DAY' } const { dibs, subgraphEndpoint } = await this.fetchProject(projectId) const topLeaderBoardN = await this.getTopLeaderBoardN(dibs, pair, n, day, subgraphEndpoint) @@ -288,7 +288,7 @@ module.exports = { day } = params - if (parseInt(day) <= 0) throw { message: 'NOT_POSITIVE_DAY' } + if (parseInt(day) < 0) throw { message: 'NEGATIVE_DAY' } const { subgraphEndpoint } = await this.fetchProject(projectId) const { userVolume, totalVolume } = await this.getDailyVolume(user, pair, day, subgraphEndpoint) From 2e5d23b241363b4ae838354f75a0804cf08a0f8a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 12:54:23 +0330 Subject: [PATCH 244/406] Exclude bad results --- general/dibsGlobal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 648c3bd..35ae94a 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -200,7 +200,7 @@ module.exports = { getDailyVolume: async function (user, pair, day, subgraphEndpoint) { const totalQuery = `{ - totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair}"}) { + totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair}", amountAsReferrer_gt: "0"}) { id user amountAsUser @@ -209,7 +209,7 @@ module.exports = { }` const userQuery = `{ - userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user}", pair: "${pair}"}) { + userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user}", pair: "${pair}", amountAsReferrer_gt: "0"}) { id user amountAsUser From 631f0376b514d35da8c6307dbc240b0305b0011e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 12:55:06 +0330 Subject: [PATCH 245/406] Throw result in case of no result --- general/dibsGlobal.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 35ae94a..8d0a4bd 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -217,11 +217,14 @@ module.exports = { } }` - const totalData = await this.postQuery(totalQuery, subgraphEndpoint) - const userData = await this.postQuery(userQuery, subgraphEndpoint) + const totalData = (await this.postQuery(totalQuery, subgraphEndpoint)).totalVolume + const userData = (await this.postQuery(userQuery, subgraphEndpoint)).userVolume - const totalVolume = totalData.totalVolume[0].amountAsUser - const userVolume = userData.userVolume[0].amountAsUser + if (userData.length == 0) throw { message: `NO_RECORD_FOR_USER` } + if (totalData.length == 0) throw { message: `NO_RECORD_FOR_PLATFORM` } + + const totalVolume = totalData[0].amountAsUser + const userVolume = userData[0].amountAsUser return { userVolume, From 0f20b76039ac8d9ef01337fd35c38dfe2add8183 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 12 Aug 2023 13:35:39 +0330 Subject: [PATCH 246/406] Use lowercase of inputs in queries --- general/dibsGlobal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/dibsGlobal.js b/general/dibsGlobal.js index 8d0a4bd..a701183 100644 --- a/general/dibsGlobal.js +++ b/general/dibsGlobal.js @@ -200,7 +200,7 @@ module.exports = { getDailyVolume: async function (user, pair, day, subgraphEndpoint) { const totalQuery = `{ - totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair}", amountAsReferrer_gt: "0"}) { + totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { id user amountAsUser @@ -209,7 +209,7 @@ module.exports = { }` const userQuery = `{ - userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user}", pair: "${pair}", amountAsReferrer_gt: "0"}) { + userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user.toLowerCase()}", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { id user amountAsUser From ca099bf22b37b878326b9bf3217edf55991cc89e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 16 Aug 2023 14:40:23 +0330 Subject: [PATCH 247/406] Add unitap app file --- general/unitap.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 general/unitap.js diff --git a/general/unitap.js b/general/unitap.js new file mode 100644 index 0000000..1e78a58 --- /dev/null +++ b/general/unitap.js @@ -0,0 +1,55 @@ +const UnitapApp = { + APP_NAME: 'unitap', + + getEntryDetail: async function (raffleEntryId) { + + }, + + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'raffle-entry': + let { + raffleEntryId + } = params + + const { chain, wallet, raffleId, multiplier } = await this.getEntryDetail(raffleEntryId) + + return { + chain, + wallet, + raffleId, + multiplier, + } + + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'raffle-entry': { + + let { + chain, + wallet, + raffleId, + multiplier, + } = result + + return [ + { type: 'uint256', value: chain }, + { type: 'address', value: wallet }, + { type: 'uint256', value: raffleId }, + { type: 'uint256', value: multiplier }, + ] + } + + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = UnitapApp From 90576eb1c136ff7b5a2972e5e8e0bf01893d854f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 16 Aug 2023 15:08:37 +0330 Subject: [PATCH 248/406] Implement `getEntryDetail` --- general/unitap.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/general/unitap.js b/general/unitap.js index 1e78a58..c753ff0 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -1,8 +1,28 @@ +const { axios } = MuonAppUtils + const UnitapApp = { APP_NAME: 'unitap', getEntryDetail: async function (raffleEntryId) { + const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` + let result + try { + result = await axios.get(url) + } + + catch (e) { + throw e.response.data + } + + const { chain, wallet, multiplier, raffle } = result.data.entry + const raffleId = raffle.raffleId + return { + chain, + wallet, + raffleId, + multiplier, + } }, onRequest: async function (request) { From 239e9d498d9b14b3b0efa4219ad6bae781ae54b2 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Wed, 16 Aug 2023 15:20:29 +0330 Subject: [PATCH 249/406] Check result existance --- general/unitap.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/general/unitap.js b/general/unitap.js index c753ff0..e6957b4 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -17,12 +17,16 @@ const UnitapApp = { const { chain, wallet, multiplier, raffle } = result.data.entry const raffleId = raffle.raffleId - return { - chain, - wallet, - raffleId, - multiplier, + if (chain && wallet && multiplier && raffleId) { + return { + chain, + wallet, + raffleId, + multiplier, + } } + + else throw { detail: 'CORRUPTED_ENTRY' } }, onRequest: async function (request) { From ecac09633fe438b0442bae3abd653021a63c9c6a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 21 Aug 2023 11:10:06 +0330 Subject: [PATCH 250/406] Add contract to signature --- general/unitap.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/general/unitap.js b/general/unitap.js index e6957b4..91b4979 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -15,11 +15,12 @@ const UnitapApp = { } const { chain, wallet, multiplier, raffle } = result.data.entry - const raffleId = raffle.raffleId + const { raffleId, contract } = raffle if (chain && wallet && multiplier && raffleId) { return { chain, + contract, wallet, raffleId, multiplier, @@ -37,10 +38,17 @@ const UnitapApp = { raffleEntryId } = params - const { chain, wallet, raffleId, multiplier } = await this.getEntryDetail(raffleEntryId) + const { + chain, + contract, + wallet, + raffleId, + multiplier, + } = await this.getEntryDetail(raffleEntryId) return { chain, + contract, wallet, raffleId, multiplier, @@ -57,6 +65,7 @@ const UnitapApp = { let { chain, + contract, wallet, raffleId, multiplier, @@ -64,6 +73,7 @@ const UnitapApp = { return [ { type: 'uint256', value: chain }, + { type: 'address', value: contract }, { type: 'address', value: wallet }, { type: 'uint256', value: raffleId }, { type: 'uint256', value: multiplier }, From b7eda5b47dddb2ee6e3c71b7b9fa1bdbad5e6892 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 16 Sep 2023 23:14:12 +0330 Subject: [PATCH 251/406] Fix unitap api url --- general/unitap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/unitap.js b/general/unitap.js index 91b4979..6abc6f9 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -4,7 +4,7 @@ const UnitapApp = { APP_NAME: 'unitap', getEntryDetail: async function (raffleEntryId) { - const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` + const url = `https://api.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` let result try { result = await axios.get(url) From ba5d32309416297c946c83b89fb8a16ead2de449 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 19 Sep 2023 18:55:17 +0330 Subject: [PATCH 252/406] Add `stage_unitap` app --- general/stage_unitap.js | 89 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 general/stage_unitap.js diff --git a/general/stage_unitap.js b/general/stage_unitap.js new file mode 100644 index 0000000..b804f73 --- /dev/null +++ b/general/stage_unitap.js @@ -0,0 +1,89 @@ +const { axios } = MuonAppUtils + +const StageUnitapApp = { + APP_NAME: 'stage_unitap', + + getEntryDetail: async function (raffleEntryId) { + const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` + let result + try { + result = await axios.get(url) + } + + catch (e) { + throw e.response.data + } + + const { chain, wallet, multiplier, raffle } = result.data.entry + const { raffleId, contract } = raffle + + if (chain && wallet && multiplier && raffleId) { + return { + chain, + contract, + wallet, + raffleId, + multiplier, + } + } + + else throw { detail: 'CORRUPTED_ENTRY' } + }, + + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'raffle-entry': + let { + raffleEntryId + } = params + + const { + chain, + contract, + wallet, + raffleId, + multiplier, + } = await this.getEntryDetail(raffleEntryId) + + return { + chain, + contract, + wallet, + raffleId, + multiplier, + } + + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'raffle-entry': { + + let { + chain, + contract, + wallet, + raffleId, + multiplier, + } = result + + return [ + { type: 'uint256', value: chain }, + { type: 'address', value: contract }, + { type: 'address', value: wallet }, + { type: 'uint256', value: raffleId }, + { type: 'uint256', value: multiplier }, + ] + } + + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = StageUnitapApp From e38396307b60998bb441b934f3926744323fedbd Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 1 Oct 2023 01:02:25 +0330 Subject: [PATCH 253/406] tss rewards app --- general/tss_reward_oracle.js | 279 +++++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 general/tss_reward_oracle.js diff --git a/general/tss_reward_oracle.js b/general/tss_reward_oracle.js new file mode 100644 index 0000000..b85dd18 --- /dev/null +++ b/general/tss_reward_oracle.js @@ -0,0 +1,279 @@ +const { axios, Web3, ethGetBlock } = MuonAppUtils; + +const HttpProvider = Web3.providers.HttpProvider; +const w3 = new Web3( + new HttpProvider( + process.env.WEB3_PROVIDER_BSCTEST || "https://bsc-testnet.publicnode.com", + ), +); + +const MUON_NODE_STAKING_ADDR = "0xd788C2276A6f75a8B9360E9695028329C925b0AB"; +const MUON_NODE_STAKING_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"}]; +const stakingContract = new w3.eth.Contract( + MUON_NODE_STAKING_ABI, + MUON_NODE_STAKING_ADDR, +); +stakingContract.address = MUON_NODE_STAKING_ADDR; + +const MUON_NODE_MANAGER_ADDR = "0x25B019d98CF6FBcD73C92C468A352449e2BB39C2"; +const MUON_NODE_MANAGER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"stakerAddressInfo","outputs":[{"components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"}],"internalType":"struct IMuonNodeManager.Node","name":"node","type":"tuple"}],"stateMutability":"view","type":"function"}]; +const nodeManagerContract = new w3.eth.Contract( + MUON_NODE_MANAGER_ABI, + MUON_NODE_MANAGER_ADDR, +); +nodeManagerContract.address = MUON_NODE_MANAGER_ADDR; + +const MONITORING_SERVERS = ["https://alice-v2.muon.net/monitor"]; + +module.exports = { + APP_NAME: "tss_reward_oracle", + + getOnlinePercent: async function (nodeId, startTime, endTime) { + let logs = []; + for (let monitoringServer of MONITORING_SERVERS) { + const resp = await axios + .get(`${monitoringServer}/nodes/${nodeId}/status`) + .then(({ data }) => data.result) + .catch((err) => { + console.log(err); + }); + logs.push(...resp["history"]); + } + + logs.sort((a, b) => a.timestamp - b.timestamp); + + // filter the extra logs + const filteredLogs = logs.filter((log, i) => + i == 0 ? true : logs[i - 1].isOnline != log.isOnline, + ); + + onlineTime = 0; + filteredLogs.map((log, i) => { + if (log.isOnline) { + onlineTime += + (filteredLogs[i + 1]?.timestamp || endTime) - log.timestamp; + } + }); + + const onlinePercent = + onlineTime > 0 + ? (onlineTime * 100) / (endTime - filteredLogs[0]["timestamp"]) + : 0; + + if (onlinePercent < 0 || onlinePercent > 100) { + throw { + message: "Online percent is out of range.", + }; + } + + return onlinePercent; + }, + + getRewardPercent: function (onlinePercent) { + if (onlinePercent >= 90) { + return 100; + } else if (onlinePercent >= 50 && onlinePercent < 90) { + return onlinePercent; + } else if (onlinePercent < 50) { + return 0; + } + }, + + makeEthCallRequest: function (id, contract, method, inputs, toBlock) { + return { + jsonrpc: "2.0", + id, + method: "eth_call", + params: [ + { + to: contract.address, + data: contract.methods[method](...inputs).encodeABI(), + }, + "0x" + toBlock.toString(16), + ], + }; + }, + + makeBatchRequest: async function (requests) { + let batch = new w3.BatchRequest(); + requests.forEach((request) => batch.add(request.req)); + const responses = await batch.execute(); + + let results = new Array(requests.length); + for (let res of responses) { + results[res.id] = requests[res.id].decoder + ? requests[res.id].decoder(res.result) + : res.result; + } + return results; + }, + + stakerAddressInfoDecoder: function (res) { + const data = w3.eth.abi.decodeParameters( + [ + { + components: [ + { internalType: "uint64", name: "id", type: "uint64" }, + { internalType: "address", name: "nodeAddress", type: "address" }, + { internalType: "address", name: "stakerAddress", type: "address" }, + { internalType: "string", name: "peerId", type: "string" }, + { internalType: "bool", name: "active", type: "bool" }, + { internalType: "uint8", name: "tier", type: "uint8" }, + { internalType: "uint64[]", name: "roles", type: "uint64[]" }, + { internalType: "uint256", name: "startTime", type: "uint256" }, + { internalType: "uint256", name: "endTime", type: "uint256" }, + { internalType: "uint256", name: "lastEditTime", type: "uint256" }, + ], + internalType: "struct IMuonNodeManager.Node", + name: "node", + type: "tuple", + }, + ], + res, + ); + return data["0"]; + }, + + rewardPerTokenDecoder: function (res) { + const data = w3.eth.abi.decodeParameters( + [{ internalType: "uint256", name: "", type: "uint256" }], + res, + ); + return data["0"]; + }, + + earnedDecoder: function (res) { + const data = w3.eth.abi.decodeParameters( + [{ internalType: "uint256", name: "", type: "uint256" }], + res, + ); + return data["0"]; + }, + + usersDecoder: function (res) { + const data = w3.eth.abi.decodeParameters( + [ + { internalType: "uint256", name: "balance", type: "uint256" }, + { internalType: "uint256", name: "paidReward", type: "uint256" }, + { + internalType: "uint256", + name: "paidRewardPerToken", + type: "uint256", + }, + { internalType: "uint256", name: "pendingRewards", type: "uint256" }, + { internalType: "uint256", name: "tokenId", type: "uint256" }, + ], + res, + ); + return data; + }, + + onRequest: async function (request) { + const { + method, + data: { params }, + } = request; + let { stakerAddress, blockNumber } = params; + blockNumber = Number(blockNumber); + + switch (method) { + case "reward": + let reward = 0; + + const requests = [ + { + req: this.makeEthCallRequest( + 0, + nodeManagerContract, + "stakerAddressInfo", + [stakerAddress], + blockNumber, + ), + decoder: this.stakerAddressInfoDecoder, + }, + { + req: this.makeEthCallRequest( + 1, + stakingContract, + "users", + [stakerAddress], + blockNumber, + ), + decoder: this.usersDecoder, + }, + { + req: this.makeEthCallRequest( + 2, + stakingContract, + "earned", + [stakerAddress], + blockNumber, + ), + decoder: this.earnedDecoder, + }, + { + req: this.makeEthCallRequest( + 3, + stakingContract, + "rewardPerToken", + [], + blockNumber, + ), + decoder: this.rewardPerTokenDecoder, + }, + ]; + let [node, user, earned, rewardPerToken] = + await this.makeBatchRequest(requests); + + const block = await ethGetBlock("bsctest", blockNumber); + // if the node is active the endTime is now otherwise endTime is the node exit time + endTime = + node.endTime > 0 ? Number(node.endTime) : Number(block.timestamp); + + const onlinePercent = await this.getOnlinePercent( + node.id, + node.startTime, + endTime, + ); + + const rewardPercent = this.getRewardPercent(onlinePercent); + + if (node.active) { + reward = Math.floor((Number(earned) * rewardPercent) / 100); + } else { + reward = Math.floor((Number(user.pendingRewards) * rewardPercent) / 100); + } + + return { + stakerAddress, + paidReward: user.paidReward.toString(), + rewardPerToken: rewardPerToken.toString(), + reward: reward.toString(), + }; + + default: + throw `Unknown method ${method}`; + } + }, + + signParams: function (request, result) { + let { method } = request; + let { stakerAddress, paidReward, rewardPerToken, reward } = result; + + switch (method) { + case "reward": + return [ + { type: "address", value: stakerAddress }, + { type: "uint256", value: paidReward }, + { + type: "uint256", + value: rewardPerToken, + }, + { type: "uint256", value: reward }, + ]; + + default: + throw `Unknown method ${method}`; + } + }, +}; From 2002466f8282b55f174990733deff420c06c80b3 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 2 Oct 2023 12:24:00 +0330 Subject: [PATCH 254/406] muon tss rewards app --- general/tss_reward_oracle.js | 191 +++++++++-------------------------- 1 file changed, 50 insertions(+), 141 deletions(-) diff --git a/general/tss_reward_oracle.js b/general/tss_reward_oracle.js index b85dd18..caa07b7 100644 --- a/general/tss_reward_oracle.js +++ b/general/tss_reward_oracle.js @@ -7,28 +7,16 @@ const w3 = new Web3( ), ); -const MUON_NODE_STAKING_ADDR = "0xd788C2276A6f75a8B9360E9695028329C925b0AB"; -const MUON_NODE_STAKING_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"}]; -const stakingContract = new w3.eth.Contract( - MUON_NODE_STAKING_ABI, - MUON_NODE_STAKING_ADDR, -); -stakingContract.address = MUON_NODE_STAKING_ADDR; - -const MUON_NODE_MANAGER_ADDR = "0x25B019d98CF6FBcD73C92C468A352449e2BB39C2"; -const MUON_NODE_MANAGER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"stakerAddressInfo","outputs":[{"components":[{"internalType":"uint64","name":"id","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"}],"internalType":"struct IMuonNodeManager.Node","name":"node","type":"tuple"}],"stateMutability":"view","type":"function"}]; -const nodeManagerContract = new w3.eth.Contract( - MUON_NODE_MANAGER_ABI, - MUON_NODE_MANAGER_ADDR, -); -nodeManagerContract.address = MUON_NODE_MANAGER_ADDR; +const HELPER_ADDR = "0x3216E93892093294Cd6051Bc11F43e32440D551d"; +const HELPER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"getData","outputs":[{"components":[{"internalType":"uint64","name":"nodeId","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"internalType":"struct Helper.NodeData","name":"nodeData","type":"tuple"}],"stateMutability":"view","type":"function"}]; +const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); const MONITORING_SERVERS = ["https://alice-v2.muon.net/monitor"]; module.exports = { APP_NAME: "tss_reward_oracle", - getOnlinePercent: async function (nodeId, startTime, endTime) { + getOnlinePercent: async function (nodeId, endTime) { let logs = []; for (let monitoringServer of MONITORING_SERVERS) { const resp = await axios @@ -43,8 +31,10 @@ module.exports = { logs.sort((a, b) => a.timestamp - b.timestamp); // filter the extra logs - const filteredLogs = logs.filter((log, i) => - i == 0 ? true : logs[i - 1].isOnline != log.isOnline, + const filteredLogs = logs.filter( + (log, i) => + (i == 0 || logs[i - 1].isOnline != log.isOnline) && + log.timestamp <= endTime, ); onlineTime = 0; @@ -61,9 +51,7 @@ module.exports = { : 0; if (onlinePercent < 0 || onlinePercent > 100) { - throw { - message: "Online percent is out of range.", - }; + throw "Online percent is out of range."; } return onlinePercent; @@ -79,41 +67,12 @@ module.exports = { } }, - makeEthCallRequest: function (id, contract, method, inputs, toBlock) { - return { - jsonrpc: "2.0", - id, - method: "eth_call", - params: [ - { - to: contract.address, - data: contract.methods[method](...inputs).encodeABI(), - }, - "0x" + toBlock.toString(16), - ], - }; - }, - - makeBatchRequest: async function (requests) { - let batch = new w3.BatchRequest(); - requests.forEach((request) => batch.add(request.req)); - const responses = await batch.execute(); - - let results = new Array(requests.length); - for (let res of responses) { - results[res.id] = requests[res.id].decoder - ? requests[res.id].decoder(res.result) - : res.result; - } - return results; - }, - - stakerAddressInfoDecoder: function (res) { + getDataDecoder: function (res) { const data = w3.eth.abi.decodeParameters( [ { components: [ - { internalType: "uint64", name: "id", type: "uint64" }, + { internalType: "uint64", name: "nodeId", type: "uint64" }, { internalType: "address", name: "nodeAddress", type: "address" }, { internalType: "address", name: "stakerAddress", type: "address" }, { internalType: "string", name: "peerId", type: "string" }, @@ -123,9 +82,28 @@ module.exports = { { internalType: "uint256", name: "startTime", type: "uint256" }, { internalType: "uint256", name: "endTime", type: "uint256" }, { internalType: "uint256", name: "lastEditTime", type: "uint256" }, + { internalType: "uint256", name: "balance", type: "uint256" }, + { internalType: "uint256", name: "paidReward", type: "uint256" }, + { + internalType: "uint256", + name: "paidRewardPerToken", + type: "uint256", + }, + { + internalType: "uint256", + name: "pendingRewards", + type: "uint256", + }, + { internalType: "uint256", name: "tokenId", type: "uint256" }, + { internalType: "uint256", name: "earned", type: "uint256" }, + { + internalType: "uint256", + name: "rewardPerToken", + type: "uint256", + }, ], - internalType: "struct IMuonNodeManager.Node", - name: "node", + internalType: "struct Helper.NodeData", + name: "nodeData", type: "tuple", }, ], @@ -134,40 +112,6 @@ module.exports = { return data["0"]; }, - rewardPerTokenDecoder: function (res) { - const data = w3.eth.abi.decodeParameters( - [{ internalType: "uint256", name: "", type: "uint256" }], - res, - ); - return data["0"]; - }, - - earnedDecoder: function (res) { - const data = w3.eth.abi.decodeParameters( - [{ internalType: "uint256", name: "", type: "uint256" }], - res, - ); - return data["0"]; - }, - - usersDecoder: function (res) { - const data = w3.eth.abi.decodeParameters( - [ - { internalType: "uint256", name: "balance", type: "uint256" }, - { internalType: "uint256", name: "paidReward", type: "uint256" }, - { - internalType: "uint256", - name: "paidRewardPerToken", - type: "uint256", - }, - { internalType: "uint256", name: "pendingRewards", type: "uint256" }, - { internalType: "uint256", name: "tokenId", type: "uint256" }, - ], - res, - ); - return data; - }, - onRequest: async function (request) { const { method, @@ -180,74 +124,39 @@ module.exports = { case "reward": let reward = 0; - const requests = [ - { - req: this.makeEthCallRequest( - 0, - nodeManagerContract, - "stakerAddressInfo", - [stakerAddress], - blockNumber, - ), - decoder: this.stakerAddressInfoDecoder, - }, - { - req: this.makeEthCallRequest( - 1, - stakingContract, - "users", - [stakerAddress], - blockNumber, - ), - decoder: this.usersDecoder, - }, - { - req: this.makeEthCallRequest( - 2, - stakingContract, - "earned", - [stakerAddress], - blockNumber, - ), - decoder: this.earnedDecoder, - }, - { - req: this.makeEthCallRequest( - 3, - stakingContract, - "rewardPerToken", - [], - blockNumber, - ), - decoder: this.rewardPerTokenDecoder, - }, - ]; - let [node, user, earned, rewardPerToken] = - await this.makeBatchRequest(requests); + const data = helperContract.methods.getData(stakerAddress).encodeABI(); + const callObject = { + to: HELPER_ADDR, + data: data, + }; + const resp = await w3.eth.call(callObject, blockNumber); + const node = this.getDataDecoder(resp); + + if (node.nodeId == 0) { + throw "It's not a staker address."; + } const block = await ethGetBlock("bsctest", blockNumber); // if the node is active the endTime is now otherwise endTime is the node exit time endTime = node.endTime > 0 ? Number(node.endTime) : Number(block.timestamp); - const onlinePercent = await this.getOnlinePercent( - node.id, - node.startTime, - endTime, - ); + const onlinePercent = await this.getOnlinePercent(node.nodeId, endTime); const rewardPercent = this.getRewardPercent(onlinePercent); if (node.active) { - reward = Math.floor((Number(earned) * rewardPercent) / 100); + reward = Math.floor((Number(node.earned) * rewardPercent) / 100); } else { - reward = Math.floor((Number(user.pendingRewards) * rewardPercent) / 100); + reward = Math.floor( + (Number(node.pendingRewards) * rewardPercent) / 100, + ); } return { stakerAddress, - paidReward: user.paidReward.toString(), - rewardPerToken: rewardPerToken.toString(), + paidReward: node.paidReward.toString(), + rewardPerToken: node.rewardPerToken.toString(), reward: reward.toString(), }; From b3014520aa1351e9e99d7e55346901e1efd6b940 Mon Sep 17 00:00:00 2001 From: "farazfo@yahoo.com" <11iloveu005> Date: Wed, 4 Oct 2023 13:00:30 +0330 Subject: [PATCH 255/406] batchRequest issue --- general/pair.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/general/pair.js b/general/pair.js index 3573816..5dc9b2d 100644 --- a/general/pair.js +++ b/general/pair.js @@ -178,8 +178,16 @@ module.exports = { makeBatchRequest: async function (w3, requests) { let batch = new w3.BatchRequest(); - requests.forEach((request) => batch.add(request.req)) + requests.forEach((request) => { + batch.add(request.req) + .catch(err => { + console.log(`Batch Request: ${err.message}`); + }); + }); const responses = await batch.execute() + .catch(e => { + throw {message: `Batch request failed: ${e.message}`}; + }); let results = new Array(requests.length) for (let res of responses) { From 38891ac0b550a69fa348dcd45ac75f79a21e7815 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 4 Oct 2023 20:18:02 +0330 Subject: [PATCH 256/406] make rewardPeriod editable --- general/tss_reward_oracle.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/general/tss_reward_oracle.js b/general/tss_reward_oracle.js index caa07b7..981f519 100644 --- a/general/tss_reward_oracle.js +++ b/general/tss_reward_oracle.js @@ -146,13 +146,14 @@ module.exports = { const rewardPercent = this.getRewardPercent(onlinePercent); if (node.active) { - reward = Math.floor((Number(node.earned) * rewardPercent) / 100); + reward = (Number(node.earned) * rewardPercent) / 100; } else { - reward = Math.floor( - (Number(node.pendingRewards) * rewardPercent) / 100, - ); + reward = (Number(node.pendingRewards) * rewardPercent) / 100; } + const divisor = 10 ** 8; + reward = Math.floor(reward / divisor) * divisor; + return { stakerAddress, paidReward: node.paidReward.toString(), From 3bdf45d9a97e56f0f2f5a6e944b10d0bc40636e9 Mon Sep 17 00:00:00 2001 From: "farazfo@yahoo.com" <11iloveu005> Date: Thu, 5 Oct 2023 09:38:42 +0330 Subject: [PATCH 257/406] batchRequest issue --- general/pair.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/pair.js b/general/pair.js index 5dc9b2d..9463305 100644 --- a/general/pair.js +++ b/general/pair.js @@ -181,7 +181,7 @@ module.exports = { requests.forEach((request) => { batch.add(request.req) .catch(err => { - console.log(`Batch Request: ${err.message}`); + return {success: false, message: err.message}; }); }); const responses = await batch.execute() From 39f20906430ecfb9673c3e5dea8c448b2e830978 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 11 Oct 2023 19:00:07 +0330 Subject: [PATCH 258/406] Add pion_tss_reward_oracle app --- general/pion_tss_reward_oracle.js | 190 ++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 general/pion_tss_reward_oracle.js diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js new file mode 100644 index 0000000..2a80fc4 --- /dev/null +++ b/general/pion_tss_reward_oracle.js @@ -0,0 +1,190 @@ +const { axios, Web3, ethGetBlock } = MuonAppUtils; + +const HttpProvider = Web3.providers.HttpProvider; +const w3 = new Web3( + new HttpProvider( + process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/eth", + ), +); + +const HELPER_ADDR = "0x453ec5bA69826D0d971AD1D8C4bC0DCEEE7bd161"; +const HELPER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"getData","outputs":[{"components":[{"internalType":"uint64","name":"nodeId","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"internalType":"struct Helper.NodeData","name":"nodeData","type":"tuple"}],"stateMutability":"view","type":"function"}]; +const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); + +const MONITORING_SERVERS = ["https://alice-v2.muon.net/monitor"]; + +module.exports = { + APP_NAME: "pion_tss_reward_oracle", + + getOnlinePercent: async function (nodeId, endTime) { + let logs = []; + for (let monitoringServer of MONITORING_SERVERS) { + const resp = await axios + .get(`${monitoringServer}/nodes/${nodeId}/status`) + .then(({ data }) => data.result) + .catch((err) => { + console.log(err); + }); + logs.push(...resp["history"]); + } + + logs.sort((a, b) => a.timestamp - b.timestamp); + + // filter the extra logs + const filteredLogs = logs.filter( + (log, i) => + (i == 0 || logs[i - 1].isOnline != log.isOnline) && + log.timestamp <= endTime, + ); + + onlineTime = 0; + filteredLogs.map((log, i) => { + if (log.isOnline) { + onlineTime += + (filteredLogs[i + 1]?.timestamp || endTime) - log.timestamp; + } + }); + + const onlinePercent = + onlineTime > 0 + ? (onlineTime * 100) / (endTime - filteredLogs[0]["timestamp"]) + : 0; + + if (onlinePercent < 0 || onlinePercent > 100) { + throw "Online percent is out of range."; + } + + return onlinePercent; + }, + + getRewardPercent: function (onlinePercent) { + if (onlinePercent >= 90) { + return 100; + } else if (onlinePercent >= 50 && onlinePercent < 90) { + return onlinePercent; + } else if (onlinePercent < 50) { + return 0; + } + }, + + getDataDecoder: function (res) { + const data = w3.eth.abi.decodeParameters( + [ + { + components: [ + { internalType: "uint64", name: "nodeId", type: "uint64" }, + { internalType: "address", name: "nodeAddress", type: "address" }, + { internalType: "address", name: "stakerAddress", type: "address" }, + { internalType: "string", name: "peerId", type: "string" }, + { internalType: "bool", name: "active", type: "bool" }, + { internalType: "uint8", name: "tier", type: "uint8" }, + { internalType: "uint64[]", name: "roles", type: "uint64[]" }, + { internalType: "uint256", name: "startTime", type: "uint256" }, + { internalType: "uint256", name: "endTime", type: "uint256" }, + { internalType: "uint256", name: "lastEditTime", type: "uint256" }, + { internalType: "uint256", name: "balance", type: "uint256" }, + { internalType: "uint256", name: "paidReward", type: "uint256" }, + { + internalType: "uint256", + name: "paidRewardPerToken", + type: "uint256", + }, + { + internalType: "uint256", + name: "pendingRewards", + type: "uint256", + }, + { internalType: "uint256", name: "tokenId", type: "uint256" }, + { internalType: "uint256", name: "earned", type: "uint256" }, + { + internalType: "uint256", + name: "rewardPerToken", + type: "uint256", + }, + ], + internalType: "struct Helper.NodeData", + name: "nodeData", + type: "tuple", + }, + ], + res, + ); + return data["0"]; + }, + + onRequest: async function (request) { + const { + method, + data: { params }, + } = request; + let { stakerAddress, blockNumber } = params; + blockNumber = Number(blockNumber); + + switch (method) { + case "reward": + let reward = 0; + + const data = helperContract.methods.getData(stakerAddress).encodeABI(); + const callObject = { + to: HELPER_ADDR, + data: data, + }; + const resp = await w3.eth.call(callObject, blockNumber); + const node = this.getDataDecoder(resp); + + if (node.nodeId == 0) { + throw "It's not a staker address."; + } + + const block = await ethGetBlock("eth", blockNumber); + // if the node is active the endTime is now otherwise endTime is the node exit time + endTime = + node.endTime > 0 ? Number(node.endTime) : Number(block.timestamp); + + // const onlinePercent = await this.getOnlinePercent(node.nodeId, endTime); + const onlinePercent = 100; + + const rewardPercent = this.getRewardPercent(onlinePercent); + + if (node.active) { + reward = (Number(node.earned) * rewardPercent) / 100; + } else { + reward = (Number(node.pendingRewards) * rewardPercent) / 100; + } + + const divisor = 10 ** 8; + reward = Math.floor(reward / divisor) * divisor; + + return { + stakerAddress, + paidReward: node.paidReward.toString(), + rewardPerToken: node.rewardPerToken.toString(), + reward: reward.toString(), + }; + + default: + throw `Unknown method ${method}`; + } + }, + + signParams: function (request, result) { + let { method } = request; + let { stakerAddress, paidReward, rewardPerToken, reward } = result; + + switch (method) { + case "reward": + return [ + { type: "address", value: stakerAddress }, + { type: "uint256", value: paidReward }, + { + type: "uint256", + value: rewardPerToken, + }, + { type: "uint256", value: reward }, + ]; + + default: + throw `Unknown method ${method}`; + } + }, +}; From c53a4ab5f87631b8181fed6ba7c3c430b897f253 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 12 Oct 2023 00:09:55 +0330 Subject: [PATCH 259/406] pion_tss_reward_oracle bugfix --- general/pion_tss_reward_oracle.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 2a80fc4..0d54fad 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -1,4 +1,4 @@ -const { axios, Web3, ethGetBlock } = MuonAppUtils; +const { axios, Web3, ethGetBlock, BN } = MuonAppUtils; const HttpProvider = Web3.providers.HttpProvider; const w3 = new Web3( @@ -7,6 +7,8 @@ const w3 = new Web3( ), ); +const bn = (num) => new BN(num) + const HELPER_ADDR = "0x453ec5bA69826D0d971AD1D8C4bC0DCEEE7bd161"; const HELPER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"getData","outputs":[{"components":[{"internalType":"uint64","name":"nodeId","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"internalType":"struct Helper.NodeData","name":"nodeData","type":"tuple"}],"stateMutability":"view","type":"function"}]; const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); @@ -122,7 +124,7 @@ module.exports = { switch (method) { case "reward": - let reward = 0; + let reward = bn(0); const data = helperContract.methods.getData(stakerAddress).encodeABI(); const callObject = { @@ -138,7 +140,7 @@ module.exports = { const block = await ethGetBlock("eth", blockNumber); // if the node is active the endTime is now otherwise endTime is the node exit time - endTime = + const endTime = node.endTime > 0 ? Number(node.endTime) : Number(block.timestamp); // const onlinePercent = await this.getOnlinePercent(node.nodeId, endTime); @@ -147,13 +149,13 @@ module.exports = { const rewardPercent = this.getRewardPercent(onlinePercent); if (node.active) { - reward = (Number(node.earned) * rewardPercent) / 100; + reward = bn(node.earned).mul(bn(rewardPercent)).div(bn(100)); } else { - reward = (Number(node.pendingRewards) * rewardPercent) / 100; + reward = bn(node.pendingRewards).mul(rewardPercent).div(bn(100)); } - const divisor = 10 ** 8; - reward = Math.floor(reward / divisor) * divisor; + const divisor = bn(10 ** 8); + reward = reward.div(divisor).mul(divisor); return { stakerAddress, From 2a8c275e54232496c0397a51fa234f978f08e88e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 14 Oct 2023 15:06:28 +0330 Subject: [PATCH 260/406] Add `random-words` method to `stage_unitap` app --- general/stage_unitap.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index b804f73..a60f771 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -1,4 +1,7 @@ -const { axios } = MuonAppUtils +const { axios, ethCall } = MuonAppUtils + +const PRIZE_TAP_VRF_CLIENT = "0xdf60b75E3974BBFD60CF0d7e05e09C9CdddC0994" +const PRIZE_TAP_VRF_CLIENT_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }] const StageUnitapApp = { APP_NAME: 'stage_unitap', @@ -30,6 +33,16 @@ const StageUnitapApp = { else throw { detail: 'CORRUPTED_ENTRY' } }, + getRandomWords: async function (requestId) { + const randomWords = await ethCall(PRIZE_TAP_VRF_CLIENT, 'getRandomWords', [requestId], PRIZE_TAP_VRF_CLIENT_ABI, 80001) + if (randomWords.length == 0) { + throw { + detail: 'NO_RECORD_FOUND', + } + } + return { randomWords } + }, + onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { @@ -54,6 +67,18 @@ const StageUnitapApp = { multiplier, } + case 'random-words': + let { + requestId, + } = params + + const { randomWords } = await this.getRandomWords(requestId) + + return { + requestId, + randomWords, + } + default: throw { message: `invalid method ${method}` } } @@ -80,6 +105,18 @@ const StageUnitapApp = { ] } + case 'random-words': + let { + requestId, + randomWords, + } = result + + + return [ + { type: 'uint256', value: requestId }, + { type: 'uint256[]', value: randomWords }, + ] + default: throw { message: `Unknown method: ${request.method}` } } From b0007564e88614a951a0ef965152520ee4bedb2d Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 16 Oct 2023 14:13:24 +0330 Subject: [PATCH 261/406] Get `winnersCount` & check if equals words count --- general/stage_unitap.js | 55 +++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index a60f771..3fd5e76 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -1,7 +1,12 @@ const { axios, ethCall } = MuonAppUtils -const PRIZE_TAP_VRF_CLIENT = "0xdf60b75E3974BBFD60CF0d7e05e09C9CdddC0994" -const PRIZE_TAP_VRF_CLIENT_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }] +const PRIZE_TAP_VRF_CLIENT = { + chainId: 80001, + address: "0xD1E7877A1C3F782dec76FB58C2B926365433d46F", + abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +} + +const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] const StageUnitapApp = { APP_NAME: 'stage_unitap', @@ -10,7 +15,9 @@ const StageUnitapApp = { const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` let result try { - result = await axios.get(url) + result = await axios.get(url, { + headers: { "Accept-Encoding": "gzip,deflate,compress" } + }) } catch (e) { @@ -33,14 +40,32 @@ const StageUnitapApp = { else throw { detail: 'CORRUPTED_ENTRY' } }, - getRandomWords: async function (requestId) { - const randomWords = await ethCall(PRIZE_TAP_VRF_CLIENT, 'getRandomWords', [requestId], PRIZE_TAP_VRF_CLIENT_ABI, 80001) + getWinnersCount: async function (chainId, raffelId, prizetapRaffle) { + const { winnersCount } = await ethCall(prizetapRaffle, 'raffles', [raffelId], PRIZE_TAP_RAFFLE, chainId) + if (winnersCount == 0) { + throw { detail: 'INVALID_RAFFLE_ID' } + } + return { winnersCount } + }, + + getRandomWords: async function (winnersCount) { + const lastRequestId = await ethCall(PRIZE_TAP_VRF_CLIENT.address, 'lastRequestId', [], PRIZE_TAP_VRF_CLIENT.abi, PRIZE_TAP_VRF_CLIENT.chainId) + const { expirationTime, numWords } = await ethCall(PRIZE_TAP_VRF_CLIENT.address, 'vrfRequests', [lastRequestId], PRIZE_TAP_VRF_CLIENT.abi, PRIZE_TAP_VRF_CLIENT.chainId) + + if (numWords != winnersCount) { + throw { detail: 'INVALID_RANDOM_WORDS_LENGTH' } + } + if (Math.floor(Date.now() / 1000) >= expirationTime) { + throw { detail: 'EXPIRED_RANDOM_WORDS' } + } + + const randomWords = await ethCall(PRIZE_TAP_VRF_CLIENT.address, 'getRandomWords', [lastRequestId], PRIZE_TAP_VRF_CLIENT.abi, PRIZE_TAP_VRF_CLIENT.chainId) if (randomWords.length == 0) { throw { - detail: 'NO_RECORD_FOUND', + detail: 'NO_RANDOM_WORDS_FOUND', } } - return { randomWords } + return { randomWords, expirationTime } }, onRequest: async function (request) { @@ -67,17 +92,21 @@ const StageUnitapApp = { multiplier, } - case 'random-words': + case 'random-words': { let { - requestId, + chainId, + prizetapRaffle, + raffleId, } = params - const { randomWords } = await this.getRandomWords(requestId) + const { winnersCount } = await this.getWinnersCount(chainId, raffleId, prizetapRaffle) + const { randomWords, expirationTime } = await this.getRandomWords(winnersCount) return { - requestId, randomWords, + expirationTime, } + } default: throw { message: `invalid method ${method}` } @@ -107,14 +136,14 @@ const StageUnitapApp = { case 'random-words': let { - requestId, randomWords, + expirationTime, } = result return [ - { type: 'uint256', value: requestId }, { type: 'uint256[]', value: randomWords }, + { type: 'uint256', value: expirationTime }, ] default: From 4d7b8ad272ebd7fbc5bd6510b4ecb482636e1306 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 16 Oct 2023 21:16:56 +0330 Subject: [PATCH 262/406] Update `unitap` app --- general/unitap.js | 78 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/general/unitap.js b/general/unitap.js index 6abc6f9..2b14c1f 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -1,13 +1,23 @@ -const { axios } = MuonAppUtils +const { axios, ethCall } = MuonAppUtils -const UnitapApp = { - APP_NAME: 'unitap', +const PRIZE_TAP_VRF_CLIENT = { + chainId: 80001, + address: "0xd713f3584EADc92848d64C31fD66CD50AdF272CD", + abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] +} + +const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] + +const StageUnitapApp = { + APP_NAME: 'stage_unitap', getEntryDetail: async function (raffleEntryId) { - const url = `https://api.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` + const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` let result try { - result = await axios.get(url) + result = await axios.get(url, { + headers: { "Accept-Encoding": "gzip,deflate,compress" } + }) } catch (e) { @@ -30,6 +40,34 @@ const UnitapApp = { else throw { detail: 'CORRUPTED_ENTRY' } }, + getWinnersCount: async function (chainId, raffelId, prizetapRaffle) { + const { winnersCount } = await ethCall(prizetapRaffle, 'raffles', [raffelId], PRIZE_TAP_RAFFLE, chainId) + if (winnersCount == 0) { + throw { detail: 'INVALID_RAFFLE_ID' } + } + return { winnersCount } + }, + + getRandomWords: async function (winnersCount) { + const lastRequestId = await ethCall(PRIZE_TAP_VRF_CLIENT.address, 'lastRequestId', [], PRIZE_TAP_VRF_CLIENT.abi, PRIZE_TAP_VRF_CLIENT.chainId) + const { expirationTime, numWords } = await ethCall(PRIZE_TAP_VRF_CLIENT.address, 'vrfRequests', [lastRequestId], PRIZE_TAP_VRF_CLIENT.abi, PRIZE_TAP_VRF_CLIENT.chainId) + + if (numWords != winnersCount) { + throw { detail: 'INVALID_RANDOM_WORDS_LENGTH' } + } + if (Math.floor(Date.now() / 1000) >= expirationTime) { + throw { detail: 'EXPIRED_RANDOM_WORDS' } + } + + const randomWords = await ethCall(PRIZE_TAP_VRF_CLIENT.address, 'getRandomWords', [lastRequestId], PRIZE_TAP_VRF_CLIENT.abi, PRIZE_TAP_VRF_CLIENT.chainId) + if (randomWords.length == 0) { + throw { + detail: 'NO_RANDOM_WORDS_FOUND', + } + } + return { randomWords, expirationTime } + }, + onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { @@ -54,6 +92,22 @@ const UnitapApp = { multiplier, } + case 'random-words': { + let { + chainId, + prizetapRaffle, + raffleId, + } = params + + const { winnersCount } = await this.getWinnersCount(chainId, raffleId, prizetapRaffle) + const { randomWords, expirationTime } = await this.getRandomWords(winnersCount) + + return { + randomWords, + expirationTime, + } + } + default: throw { message: `invalid method ${method}` } } @@ -80,10 +134,22 @@ const UnitapApp = { ] } + case 'random-words': + let { + randomWords, + expirationTime, + } = result + + + return [ + { type: 'uint256[]', value: randomWords }, + { type: 'uint256', value: expirationTime }, + ] + default: throw { message: `Unknown method: ${request.method}` } } } } -module.exports = UnitapApp +module.exports = StageUnitapApp From 1e1b19ecfe044f6a09756e46d49f007238ffc126 Mon Sep 17 00:00:00 2001 From: Seyed Date: Mon, 16 Oct 2023 23:56:56 +0330 Subject: [PATCH 263/406] Fix `chainId` --- general/unitap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/unitap.js b/general/unitap.js index 2b14c1f..2e019fe 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -1,7 +1,7 @@ const { axios, ethCall } = MuonAppUtils const PRIZE_TAP_VRF_CLIENT = { - chainId: 80001, + chainId: 137, address: "0xd713f3584EADc92848d64C31fD66CD50AdF272CD", abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] } From deb60546d0c7d870995276a8f05776e110b0e10b Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 17 Oct 2023 00:21:45 +0330 Subject: [PATCH 264/406] unitap --- general/unitap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/unitap.js b/general/unitap.js index 2e019fe..4459831 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -9,7 +9,7 @@ const PRIZE_TAP_VRF_CLIENT = { const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] const StageUnitapApp = { - APP_NAME: 'stage_unitap', + APP_NAME: 'unitap', getEntryDetail: async function (raffleEntryId) { const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` From c7752a488f671640eded8679c0f2eec355c74683 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 17 Oct 2023 00:38:28 +0330 Subject: [PATCH 265/406] Fix `unitap` app Fix mistakes in names and urls --- general/unitap.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/unitap.js b/general/unitap.js index 4459831..0af102d 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -8,11 +8,11 @@ const PRIZE_TAP_VRF_CLIENT = { const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] -const StageUnitapApp = { +const UnitapApp = { APP_NAME: 'unitap', getEntryDetail: async function (raffleEntryId) { - const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` + const url = `https://api.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` let result try { result = await axios.get(url, { @@ -152,4 +152,4 @@ const StageUnitapApp = { } } -module.exports = StageUnitapApp +module.exports = UnitapApp From 5740b6e01873eb3bae10af4918b5a8364a52df99 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Thu, 19 Oct 2023 15:25:00 +0330 Subject: [PATCH 266/406] Fix abi in `stage_unitap` --- general/stage_unitap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index 3fd5e76..a2bab31 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -6,7 +6,7 @@ const PRIZE_TAP_VRF_CLIENT = { abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] } -const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] +const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "lastParticipantIndex", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] const StageUnitapApp = { APP_NAME: 'stage_unitap', From e43d5f13d4a9c724f3c84ed278436f1bbdb58ab6 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 22 Oct 2023 14:36:46 +0330 Subject: [PATCH 267/406] Get winners count from `winnersCount` --- general/stage_unitap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index a2bab31..b0cc63e 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -6,7 +6,7 @@ const PRIZE_TAP_VRF_CLIENT = { abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] } -const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "lastParticipantIndex", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] +const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "raffleId", "type": "uint256" }], "name": "getWinnersCount", "outputs": [{ "internalType": "uint256", "name": "winnersCount", "type": "uint256" }], "stateMutability": "view", "type": "function" }] const StageUnitapApp = { APP_NAME: 'stage_unitap', @@ -41,7 +41,7 @@ const StageUnitapApp = { }, getWinnersCount: async function (chainId, raffelId, prizetapRaffle) { - const { winnersCount } = await ethCall(prizetapRaffle, 'raffles', [raffelId], PRIZE_TAP_RAFFLE, chainId) + const winnersCount = await ethCall(prizetapRaffle, 'getWinnersCount', [raffelId], PRIZE_TAP_RAFFLE, chainId) if (winnersCount == 0) { throw { detail: 'INVALID_RAFFLE_ID' } } From c6bab842639cc618a623eec460f242f4e72162af Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 25 Oct 2023 14:09:31 +0330 Subject: [PATCH 268/406] PION rewards disabled --- general/pion_tss_reward_oracle.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 0d54fad..1c97154 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -115,6 +115,7 @@ module.exports = { }, onRequest: async function (request) { + throw 'Disabled'; const { method, data: { params }, From 33ef16fdbb23b28b042c6a1ab21f78e89f8da36c Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 26 Nov 2023 09:54:43 +0330 Subject: [PATCH 269/406] Add app file --- general/thena_tc.js | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 general/thena_tc.js diff --git a/general/thena_tc.js b/general/thena_tc.js new file mode 100644 index 0000000..d5ca15e --- /dev/null +++ b/general/thena_tc.js @@ -0,0 +1,29 @@ +const { } = MuonAppUtils + +const ThenaTCApp = { + APP_NAME: 'thena_tc', + + onRequest: async function (request) { + let { method, data: { params } } = request; + + let { owner, idCounter } = params + + switch (method) { + case 'info': + return; + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'info': + return; + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = ThenaTCApp From 52672ed1d17139475073bee58571ea7f3e06cc48 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 26 Nov 2023 09:55:12 +0330 Subject: [PATCH 270/406] Implement `info` method --- general/thena_tc.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index d5ca15e..31f9fdb 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -10,7 +10,15 @@ const ThenaTCApp = { switch (method) { case 'info': - return; + await this.checkUser(owner, idCounter); + const finalBalance = await this.getFinalBalance(owner, idCounter); + const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, idCounter); + return { + finalBalance, + startingBalance, + depositFromOwner, + depositNotFromOwner, + }; default: throw { message: `invalid method ${method}` } } @@ -19,7 +27,18 @@ const ThenaTCApp = { signParams: function (request, result) { switch (request.method) { case 'info': - return; + const { + finalBalance, + startingBalance, + depositFromOwner, + depositNotFromOwner, + } = result; + return [ + { type: 'uint256', value: finalBalance }, + { type: 'uint256', value: startingBalance }, + { type: 'uint256', value: depositFromOwner }, + { type: 'uint256', value: depositNotFromOwner }, + ] default: throw { message: `Unknown method: ${request.method}` } } From b057ed2e25bfda3ee8e7bdf446e75b0705743e4b Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 26 Nov 2023 11:32:24 +0330 Subject: [PATCH 271/406] enable pion_tss_rewards --- general/pion_tss_reward_oracle.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 1c97154..1cfa479 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -3,13 +3,13 @@ const { axios, Web3, ethGetBlock, BN } = MuonAppUtils; const HttpProvider = Web3.providers.HttpProvider; const w3 = new Web3( new HttpProvider( - process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/eth", + process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/bsc", ), ); const bn = (num) => new BN(num) -const HELPER_ADDR = "0x453ec5bA69826D0d971AD1D8C4bC0DCEEE7bd161"; +const HELPER_ADDR = "0x6C23fdF1Bc96Da84dd7b64F457046b0c72A9a422"; const HELPER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"getData","outputs":[{"components":[{"internalType":"uint64","name":"nodeId","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"internalType":"struct Helper.NodeData","name":"nodeData","type":"tuple"}],"stateMutability":"view","type":"function"}]; const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); @@ -115,7 +115,6 @@ module.exports = { }, onRequest: async function (request) { - throw 'Disabled'; const { method, data: { params }, From c4dffef96c0e8b777d5703f6328eb7cf3fdc4da7 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 26 Nov 2023 13:01:02 +0330 Subject: [PATCH 272/406] re-deploy --- general/pion_tss_reward_oracle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 1cfa479..6a44ba3 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -3,7 +3,7 @@ const { axios, Web3, ethGetBlock, BN } = MuonAppUtils; const HttpProvider = Web3.providers.HttpProvider; const w3 = new Web3( new HttpProvider( - process.env.WEB3_PROVIDER_ETH || "https://rpc.ankr.com/bsc", + process.env.WEB3_PROVIDER_BSC || "https://rpc.ankr.com/bsc", ), ); From 5111b50b58f114c6ad2637cfb894da2125c04b2c Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sun, 26 Nov 2023 13:15:27 +0330 Subject: [PATCH 273/406] re-deploy --- general/pion_tss_reward_oracle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 6a44ba3..49ccf8b 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -138,7 +138,7 @@ module.exports = { throw "It's not a staker address."; } - const block = await ethGetBlock("eth", blockNumber); + const block = await ethGetBlock("bsc", blockNumber); // if the node is active the endTime is now otherwise endTime is the node exit time const endTime = node.endTime > 0 ? Number(node.endTime) : Number(block.timestamp); From 8c516fda55dd90379f2dbd0676a1d4dbfc4735c5 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 27 Nov 2023 18:31:15 +0330 Subject: [PATCH 274/406] apps updates --- general/pion_tss_reward_oracle.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 49ccf8b..b87395f 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -15,6 +15,18 @@ const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); const MONITORING_SERVERS = ["https://alice-v2.muon.net/monitor"]; +const BLACKLIST = [ + "0xD3796c121479f1a01A023B1B6E24a33f1476E78d", + "0xEf6C57b608Fa240bFBb1C16106dAc1f86C4CDc2f", + "0x54bDD54bd172ACfd80119338fa2F995f7A0858DE", + "0x8B0efE89C2cE4BDa805f91327640BC453e0445dc", + "0x5E3613AEb7417Ae80e850D19EC4540C44AeADFe5", + "0xE4b32Bcef3154F9d3D882ee8e1136b4EF28c47bd", + "0x1A384Cce14bc64296251448F2e185b5A107De549", + "0x54CF29103D683104a37E8C5486010aaEC8B30014" +] + + module.exports = { APP_NAME: "pion_tss_reward_oracle", @@ -122,6 +134,10 @@ module.exports = { let { stakerAddress, blockNumber } = params; blockNumber = Number(blockNumber); + if(BLACKLIST.map(x => x.toLowerCase()).includes(stakerAddress.toLowerCase())){ + throw "You are not able to claim rewards. Please, contact support."; + } + switch (method) { case "reward": let reward = bn(0); From 7688a196eaa26b25e5ed042951774b65e06aed25 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 28 Nov 2023 15:45:34 +0330 Subject: [PATCH 275/406] bugfix --- general/pion_tss_reward_oracle.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index b87395f..d6c01d6 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -13,7 +13,7 @@ const HELPER_ADDR = "0x6C23fdF1Bc96Da84dd7b64F457046b0c72A9a422"; const HELPER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"getData","outputs":[{"components":[{"internalType":"uint64","name":"nodeId","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"internalType":"struct Helper.NodeData","name":"nodeData","type":"tuple"}],"stateMutability":"view","type":"function"}]; const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); -const MONITORING_SERVERS = ["https://alice-v2.muon.net/monitor"]; +const MONITORING_SERVERS = ["https://monitor-pion.muon.net/monitor"]; const BLACKLIST = [ "0xD3796c121479f1a01A023B1B6E24a33f1476E78d", @@ -167,7 +167,7 @@ module.exports = { if (node.active) { reward = bn(node.earned).mul(bn(rewardPercent)).div(bn(100)); } else { - reward = bn(node.pendingRewards).mul(rewardPercent).div(bn(100)); + reward = bn(node.pendingRewards).mul(bn(rewardPercent)).div(bn(100)); } const divisor = bn(10 ** 8); @@ -205,4 +205,4 @@ module.exports = { throw `Unknown method ${method}`; } }, -}; +}; \ No newline at end of file From b1c8d6747aa50a50519b10da258cb53791c278a4 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 3 Dec 2023 09:14:56 +0330 Subject: [PATCH 276/406] Define `AccountManager` as class --- general/thena_tc.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 31f9fdb..342d1cb 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -10,9 +10,16 @@ const ThenaTCApp = { switch (method) { case 'info': - await this.checkUser(owner, idCounter); - const finalBalance = await this.getFinalBalance(owner, idCounter); + // gets AccountManager address and create instance of it + const accountManager = new AccountManager(await this.getAccountManager(idCounter)); + // checks if user is valid + const isValid = await accountManager.isAccountValid(owner); + if (!isValid) throw { message: "NOT_VALID_USER" } + // gets final balance of user + const finalBalance = await accountManager.getBalanceOfUser(owner); + // gets user info from subgraph const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, idCounter); + // returns outputs return { finalBalance, startingBalance, From bb3e5403158a3574f0689fa7d84c0dbe9b750456 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 3 Dec 2023 09:31:23 +0330 Subject: [PATCH 277/406] Implement `getAccountManager` --- general/thena_tc.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 342d1cb..3ed99df 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -1,4 +1,21 @@ -const { } = MuonAppUtils +const { ethCall } = MuonAppUtils + +class AccountManager { + static PERP_MANAGER_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "_id", "type": "uint256" }], "name": "idToTradingCompetition", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "entryFee", "type": "uint256" }, { "internalType": "uint256", "name": "MAX_PARTICIPANTS", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "tradingCompetition", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "components": [{ "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "endTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "registrationStart", "type": "uint256" }, { "internalType": "uint256", "name": "registrationEnd", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.TimestampInfo", "name": "timestamp", "type": "tuple" }, { "components": [{ "internalType": "bool", "name": "win_type", "type": "bool" }, { "internalType": "uint256[]", "name": "weights", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalPrize", "type": "uint256" }, { "internalType": "uint256", "name": "owner_fee", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "host_contribution", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.Prize", "name": "prize", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "starting_balance", "type": "uint256" }, { "internalType": "uint256[]", "name": "pairIds", "type": "uint256[]" }], "internalType": "struct ITradingCompetitionManager.CompetitionRules", "name": "competitionRules", "type": "tuple" }], "internalType": "struct ITradingCompetitionManager.TC", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] + static ACCOUNT_MANAGER_ABI = [] + + static perpManagerAddress = "0x09240b9c7977f7DCd65bf8A23B29f51f5381a64C" + static defaultChainId = 56 + + static async getAccountManager(idCounter) { + const { tradingCompetition } = await ethCall(perpManagerAddress, 'idToTradingCompetition', [idCounter], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); + return tradingCompetition; + } + + constructor(address) { + this.address = address; + } +} const ThenaTCApp = { APP_NAME: 'thena_tc', @@ -11,7 +28,7 @@ const ThenaTCApp = { switch (method) { case 'info': // gets AccountManager address and create instance of it - const accountManager = new AccountManager(await this.getAccountManager(idCounter)); + const accountManager = new AccountManager(await AccountManager.getAccountManager(idCounter)); // checks if user is valid const isValid = await accountManager.isAccountValid(owner); if (!isValid) throw { message: "NOT_VALID_USER" } From 9e7c1a0e68b0448f9bbd87e13b48dd1d91b98ce0 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 3 Dec 2023 09:50:21 +0330 Subject: [PATCH 278/406] Implement `isAccountValid`(WIP) --- general/thena_tc.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 3ed99df..582130e 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -2,7 +2,7 @@ const { ethCall } = MuonAppUtils class AccountManager { static PERP_MANAGER_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "_id", "type": "uint256" }], "name": "idToTradingCompetition", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "entryFee", "type": "uint256" }, { "internalType": "uint256", "name": "MAX_PARTICIPANTS", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "tradingCompetition", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "components": [{ "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "endTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "registrationStart", "type": "uint256" }, { "internalType": "uint256", "name": "registrationEnd", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.TimestampInfo", "name": "timestamp", "type": "tuple" }, { "components": [{ "internalType": "bool", "name": "win_type", "type": "bool" }, { "internalType": "uint256[]", "name": "weights", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalPrize", "type": "uint256" }, { "internalType": "uint256", "name": "owner_fee", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "host_contribution", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.Prize", "name": "prize", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "starting_balance", "type": "uint256" }, { "internalType": "uint256[]", "name": "pairIds", "type": "uint256[]" }], "internalType": "struct ITradingCompetitionManager.CompetitionRules", "name": "competitionRules", "type": "tuple" }], "internalType": "struct ITradingCompetitionManager.TC", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] - static ACCOUNT_MANAGER_ABI = [] + static ACCOUNT_MANAGER_ABI = [{ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], "name": "getQuotesLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "isAccountValid", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "view", "type": "function" }] static perpManagerAddress = "0x09240b9c7977f7DCd65bf8A23B29f51f5381a64C" static defaultChainId = 56 @@ -12,8 +12,25 @@ class AccountManager { return tradingCompetition; } - constructor(address) { + constructor(address, idCounter) { this.address = address; + this.idCounter = idCounter; + } + + async _isAccountValid(owner, start, size) { + const isValid = await ethCall(this.address, 'isAccountValid', [owner, start, size], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId) + return isValid + } + + async isAccountValid(owner) { + const quotesCount = await this.getQuotesCount(owner); + const size = 50; + + let isValid = true; + for (let start = 0; start < quotesCount & isValid; start += size) { + isValid = await this._isAccountValid(owner, start, size); + } + return isValid; } } @@ -28,7 +45,7 @@ const ThenaTCApp = { switch (method) { case 'info': // gets AccountManager address and create instance of it - const accountManager = new AccountManager(await AccountManager.getAccountManager(idCounter)); + const accountManager = new AccountManager(await AccountManager.getAccountManager(idCounter), idCounter); // checks if user is valid const isValid = await accountManager.isAccountValid(owner); if (!isValid) throw { message: "NOT_VALID_USER" } From 4c6cf662d87aa37b1315ec17d2059e8386c43af1 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 3 Dec 2023 10:09:20 +0330 Subject: [PATCH 279/406] Fix `getAccountManager` --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 582130e..787edda 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -8,7 +8,7 @@ class AccountManager { static defaultChainId = 56 static async getAccountManager(idCounter) { - const { tradingCompetition } = await ethCall(perpManagerAddress, 'idToTradingCompetition', [idCounter], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); + const { tradingCompetition } = await ethCall(AccountManager.perpManagerAddress, 'idToTradingCompetition', [idCounter], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); return tradingCompetition; } From 2fb09d8299e8a0f23e288b56bb326cc0d2fc6e77 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Mon, 30 Oct 2023 17:15:24 +0330 Subject: [PATCH 280/406] Add app file --- general/chatGPT.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 general/chatGPT.js diff --git a/general/chatGPT.js b/general/chatGPT.js new file mode 100644 index 0000000..14f2201 --- /dev/null +++ b/general/chatGPT.js @@ -0,0 +1,44 @@ +const ChatGPTApp = { + APP_NAME: 'chatGPT', + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'isTrue': { + let { + question, + } = params; + + const answer = await this.askGPT(question); + + return { + answer, + } + } + + + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'isTrue': { + + let { + answer + } = result; + + return [ + { type: 'bool', value: answer }, + ] + } + + + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = ChatGPTApp From 675e82e55d92ec1f87396a662e660a2a077043e9 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 9 Dec 2023 18:24:50 +0330 Subject: [PATCH 281/406] Implement `askGPT` --- general/chatGPT.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/general/chatGPT.js b/general/chatGPT.js index 14f2201..32503f7 100644 --- a/general/chatGPT.js +++ b/general/chatGPT.js @@ -1,5 +1,36 @@ +const { OpenAI } = require("openai"); + +const openai = new OpenAI({ apiKey: process.env.GPT_API_KEY }); + const ChatGPTApp = { APP_NAME: 'chatGPT', + + askGPT: async function (question) { + try { + const completion = await openai.chat.completions.create({ + + messages: [ + { role: "system", content: "Answer with true or false." }, + { role: "user", content: question } + ], + model: "gpt-3.5-turbo", + }); + + let answer = completion.choices[0].message.content; + if (!(["True.", "False.", "False", "True"].includes(answer))) { + throw { message: "GPT_NOT_ANSWERED_WITH_TRUE_OR_FALSE" } + } + + answer = answer == "True." ? true : false; + + return answer + } + catch (e) { + console.log(e) + throw { message: "FAILED_TO_REACH_GPT" } + } + }, + onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { From f65ceb88f25452d2bf45ebb9a050eee90cb5c141 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sun, 10 Dec 2023 14:46:21 +0330 Subject: [PATCH 282/406] Use axios.post instead of openai library --- general/chatGPT.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/general/chatGPT.js b/general/chatGPT.js index 32503f7..85dd8f1 100644 --- a/general/chatGPT.js +++ b/general/chatGPT.js @@ -1,20 +1,26 @@ -const { OpenAI } = require("openai"); +const { axios } = MuonAppUtils -const openai = new OpenAI({ apiKey: process.env.GPT_API_KEY }); +const gptUrl = 'https://api.openai.com/v1/chat/completions' +const OPENAI_API_KEY = process.env.GPT_API_KEY const ChatGPTApp = { APP_NAME: 'chatGPT', askGPT: async function (question) { try { - const completion = await openai.chat.completions.create({ - + const { data: completion } = await axios.post(gptUrl, { messages: [ { role: "system", content: "Answer with true or false." }, { role: "user", content: question } ], model: "gpt-3.5-turbo", - }); + }, + { + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${OPENAI_API_KEY}`, + }, + }) let answer = completion.choices[0].message.content; if (!(["True.", "False.", "False", "True"].includes(answer))) { From ef63de30225129cfb6967248fabf43cb5c7b6578 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 15 Dec 2023 13:32:34 +0330 Subject: [PATCH 283/406] enable PION monitoring --- general/pion_tss_reward_oracle.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index d6c01d6..f3641b2 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -159,8 +159,8 @@ module.exports = { const endTime = node.endTime > 0 ? Number(node.endTime) : Number(block.timestamp); - // const onlinePercent = await this.getOnlinePercent(node.nodeId, endTime); - const onlinePercent = 100; + const onlinePercent = await this.getOnlinePercent(node.nodeId, endTime); + //const onlinePercent = 100; const rewardPercent = this.getRewardPercent(onlinePercent); From 623f94a879e4a808ce7dd9a8be8d548e79adb682 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 15 Dec 2023 13:45:37 +0330 Subject: [PATCH 284/406] enable PION monitoring --- general/pion_tss_reward_oracle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index f3641b2..d582b7f 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -13,7 +13,7 @@ const HELPER_ADDR = "0x6C23fdF1Bc96Da84dd7b64F457046b0c72A9a422"; const HELPER_ABI = [{"inputs":[{"internalType":"address","name":"stakerAddress","type":"address"}],"name":"getData","outputs":[{"components":[{"internalType":"uint64","name":"nodeId","type":"uint64"},{"internalType":"address","name":"nodeAddress","type":"address"},{"internalType":"address","name":"stakerAddress","type":"address"},{"internalType":"string","name":"peerId","type":"string"},{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"tier","type":"uint8"},{"internalType":"uint64[]","name":"roles","type":"uint64[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"lastEditTime","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"paidReward","type":"uint256"},{"internalType":"uint256","name":"paidRewardPerToken","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"earned","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"}],"internalType":"struct Helper.NodeData","name":"nodeData","type":"tuple"}],"stateMutability":"view","type":"function"}]; const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); -const MONITORING_SERVERS = ["https://monitor-pion.muon.net/monitor"]; +const MONITORING_SERVERS = ["https://app.muon.net/monitor"]; const BLACKLIST = [ "0xD3796c121479f1a01A023B1B6E24a33f1476E78d", From 09a7ea7bd8c67f0384b53cfafd19557a673095fd Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 23 Dec 2023 14:46:42 +0330 Subject: [PATCH 285/406] Upgrade to gpt4 and fix error handling --- general/chatGPT.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/general/chatGPT.js b/general/chatGPT.js index 85dd8f1..90ecaa5 100644 --- a/general/chatGPT.js +++ b/general/chatGPT.js @@ -10,10 +10,10 @@ const ChatGPTApp = { try { const { data: completion } = await axios.post(gptUrl, { messages: [ - { role: "system", content: "Answer with true or false." }, + { role: "system", content: "Answer with true or false and don't say anything except these two respnses." }, { role: "user", content: question } ], - model: "gpt-3.5-turbo", + model: "gpt-4-1106-preview", }, { headers: { @@ -24,16 +24,15 @@ const ChatGPTApp = { let answer = completion.choices[0].message.content; if (!(["True.", "False.", "False", "True"].includes(answer))) { - throw { message: "GPT_NOT_ANSWERED_WITH_TRUE_OR_FALSE" } + throw { message: "GPT_NOT_ANSWERED_WITH_TRUE_OR_FALSE", answer } } - answer = answer == "True." ? true : false; + answer = ["True.", "True"].includes(answer) ? true : false; return answer } catch (e) { - console.log(e) - throw { message: "FAILED_TO_REACH_GPT" } + throw { message: e.message ? e.message : "FAILED_TO_REACH_GPT" } } }, @@ -46,6 +45,7 @@ const ChatGPTApp = { } = params; const answer = await this.askGPT(question); + console.log('answer', answer) return { answer, From 1c6a2d770f78f63cbb069223c6e46dc461813e5e Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 26 Dec 2023 22:05:42 +0330 Subject: [PATCH 286/406] Finish `isAccountValid` implementation --- general/thena_tc.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 787edda..4959583 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -17,8 +17,14 @@ class AccountManager { this.idCounter = idCounter; } + async getQuotesCount(owner) { + const account = await ethCall(this.address, 'getAccountOf', [owner], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); + const quotesCount = await ethCall(this.address, 'getQuotesLength', [account], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); + return quotesCount; + } + async _isAccountValid(owner, start, size) { - const isValid = await ethCall(this.address, 'isAccountValid', [owner, start, size], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId) + const isValid = await ethCall(this.address, 'isAccountValid', [owner, start, size], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); return isValid } From f0cb5ea1c5c3e1f9ab549c2bc1679596f489e07b Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 26 Dec 2023 22:06:14 +0330 Subject: [PATCH 287/406] Implement `getBalanceOfUser` --- general/thena_tc.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/general/thena_tc.js b/general/thena_tc.js index 4959583..240f762 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -38,6 +38,11 @@ class AccountManager { } return isValid; } + + async getBalanceOfUser(owner) { + const balance = ethCall(this.address, 'getBalanceOfUser', [owner], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); + return balance + } } const ThenaTCApp = { From 540eeeb4ca0d7648c074474853c81f958de2148a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 26 Dec 2023 22:06:46 +0330 Subject: [PATCH 288/406] Implement `getInfo` --- general/thena_tc.js | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 240f762..acccae7 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -1,4 +1,4 @@ -const { ethCall } = MuonAppUtils +const { ethCall, axios } = MuonAppUtils class AccountManager { static PERP_MANAGER_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "_id", "type": "uint256" }], "name": "idToTradingCompetition", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "entryFee", "type": "uint256" }, { "internalType": "uint256", "name": "MAX_PARTICIPANTS", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "tradingCompetition", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "components": [{ "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "endTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "registrationStart", "type": "uint256" }, { "internalType": "uint256", "name": "registrationEnd", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.TimestampInfo", "name": "timestamp", "type": "tuple" }, { "components": [{ "internalType": "bool", "name": "win_type", "type": "bool" }, { "internalType": "uint256[]", "name": "weights", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalPrize", "type": "uint256" }, { "internalType": "uint256", "name": "owner_fee", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "host_contribution", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.Prize", "name": "prize", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "starting_balance", "type": "uint256" }, { "internalType": "uint256[]", "name": "pairIds", "type": "uint256[]" }], "internalType": "struct ITradingCompetitionManager.CompetitionRules", "name": "competitionRules", "type": "tuple" }], "internalType": "struct ITradingCompetitionManager.TC", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] @@ -48,6 +48,46 @@ class AccountManager { const ThenaTCApp = { APP_NAME: 'thena_tc', + postQuery: async function (query, subgraphEndpoint) { + const result = await axios.post(subgraphEndpoint, { + query: query + }) + + const data = result.data + + if (data.errors) { + throw data.errors + } + + return data.data + }, + + + + getInfo: async function (owner, idCounter) { + const subgraphEndpoint = 'https://api.thegraph.com/subgraphs/name/spsina/thenatc' + const query = `{ + participants(where: {owner: "${owner}", competition_: {idCounter: ${idCounter}}}) + { + depositFromOwner + depositNotFromOwner + competition { + startingBalance + } + } + }`; + + const { participants } = await this.postQuery(query, subgraphEndpoint); + if (participants.length == 0) throw { message: "NO_RECORD_FOR_USER" } + if (participants.length > 1) throw { message: "MULTIPLE_RECORD_FOR_USER" } + + return { + startingBalance: participants[0].competition.startingBalance, + depositFromOwner: participants[0].depositFromOwner, + depositNotFromOwner: participants[0].depositNotFromOwner, + } + }, + onRequest: async function (request) { let { method, data: { params } } = request; From 6c70a5a2fcdad0c51e130e371616b31af5f892ef Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 26 Dec 2023 22:07:11 +0330 Subject: [PATCH 289/406] Fix abi and address --- general/thena_tc.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index acccae7..747b51d 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -2,9 +2,9 @@ const { ethCall, axios } = MuonAppUtils class AccountManager { static PERP_MANAGER_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "_id", "type": "uint256" }], "name": "idToTradingCompetition", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "entryFee", "type": "uint256" }, { "internalType": "uint256", "name": "MAX_PARTICIPANTS", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "tradingCompetition", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "components": [{ "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "endTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "registrationStart", "type": "uint256" }, { "internalType": "uint256", "name": "registrationEnd", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.TimestampInfo", "name": "timestamp", "type": "tuple" }, { "components": [{ "internalType": "bool", "name": "win_type", "type": "bool" }, { "internalType": "uint256[]", "name": "weights", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalPrize", "type": "uint256" }, { "internalType": "uint256", "name": "owner_fee", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "host_contribution", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.Prize", "name": "prize", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "starting_balance", "type": "uint256" }, { "internalType": "uint256[]", "name": "pairIds", "type": "uint256[]" }], "internalType": "struct ITradingCompetitionManager.CompetitionRules", "name": "competitionRules", "type": "tuple" }], "internalType": "struct ITradingCompetitionManager.TC", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] - static ACCOUNT_MANAGER_ABI = [{ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], "name": "getQuotesLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "isAccountValid", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "view", "type": "function" }] + static ACCOUNT_MANAGER_ABI = [{ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], "name": "getQuotesLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "isAccountValid", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], "name": "getAccountOf", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], "name": "getBalanceOfUser", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] - static perpManagerAddress = "0x09240b9c7977f7DCd65bf8A23B29f51f5381a64C" + static perpManagerAddress = "0x22C859C23A4aEe8eb463Ca5d14C45EcCB88d4933" static defaultChainId = 56 static async getAccountManager(idCounter) { From b025b17fa5d0d9dd193ff6d88766f4a91358656a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 26 Dec 2023 22:12:58 +0330 Subject: [PATCH 290/406] Move `info` method implementation to `_info` function --- general/thena_tc.js | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 747b51d..102efce 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -88,29 +88,35 @@ const ThenaTCApp = { } }, + _info: async function (owner, idCounter) { + // gets AccountManager address and create instance of it + const accountManager = new AccountManager(await AccountManager.getAccountManager(idCounter), idCounter); + // checks if user is valid + const isValid = await accountManager.isAccountValid(owner); + if (!isValid) throw { message: "NOT_VALID_USER" } + // gets final balance of user + const finalBalance = await accountManager.getBalanceOfUser(owner); + // gets user info from subgraph + const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, idCounter); + // returns outputs + return { + finalBalance, + startingBalance, + depositFromOwner, + depositNotFromOwner, + }; + }, + onRequest: async function (request) { let { method, data: { params } } = request; let { owner, idCounter } = params switch (method) { - case 'info': - // gets AccountManager address and create instance of it - const accountManager = new AccountManager(await AccountManager.getAccountManager(idCounter), idCounter); - // checks if user is valid - const isValid = await accountManager.isAccountValid(owner); - if (!isValid) throw { message: "NOT_VALID_USER" } - // gets final balance of user - const finalBalance = await accountManager.getBalanceOfUser(owner); - // gets user info from subgraph - const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, idCounter); - // returns outputs - return { - finalBalance, - startingBalance, - depositFromOwner, - depositNotFromOwner, - }; + case 'info': { + // get info + return await this._info(owner, idCounter); + } default: throw { message: `invalid method ${method}` } } From 9b863f34c1c5305730f3c16c74835bceb729ed6d Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 28 Dec 2023 01:07:40 +0330 Subject: [PATCH 291/406] Muon vrf app --- general/vrf.js | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 general/vrf.js diff --git a/general/vrf.js b/general/vrf.js new file mode 100644 index 0000000..7024518 --- /dev/null +++ b/general/vrf.js @@ -0,0 +1,60 @@ +const VRFApp = { + APP_NAME: 'vrf', + + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'random-number': + let { + chainId, + requestId, + blockNum, + callbackGasLimit, + numWords, + consumer, + } = params + + return { + chainId, + requestId, + blockNum, + callbackGasLimit, + numWords, + consumer, + } + + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'random-number': { + + let { + chainId, + requestId, + blockNum, + callbackGasLimit, + numWords, + consumer, + } = result + + return [ + { type: 'uint256', value: chainId }, + { type: 'uint256', value: requestId }, + { type: 'uint256', value: blockNum }, + { type: 'uint32', value: callbackGasLimit }, + { type: 'uint32', value: numWords }, + { type: 'addresss', value: consumer }, + ] + } + + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = VRFApp From d7d8c9f5f4259df8e6183972538431aebcc94482 Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 30 Dec 2023 19:17:46 +0330 Subject: [PATCH 292/406] Implement `pnl` method --- general/thena_tc.js | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 102efce..2aca794 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -1,10 +1,10 @@ -const { ethCall, axios } = MuonAppUtils +const { ethCall, axios, BN } = MuonAppUtils class AccountManager { static PERP_MANAGER_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "_id", "type": "uint256" }], "name": "idToTradingCompetition", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "entryFee", "type": "uint256" }, { "internalType": "uint256", "name": "MAX_PARTICIPANTS", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "tradingCompetition", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "components": [{ "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "endTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "registrationStart", "type": "uint256" }, { "internalType": "uint256", "name": "registrationEnd", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.TimestampInfo", "name": "timestamp", "type": "tuple" }, { "components": [{ "internalType": "bool", "name": "win_type", "type": "bool" }, { "internalType": "uint256[]", "name": "weights", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalPrize", "type": "uint256" }, { "internalType": "uint256", "name": "owner_fee", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "host_contribution", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.Prize", "name": "prize", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "starting_balance", "type": "uint256" }, { "internalType": "uint256[]", "name": "pairIds", "type": "uint256[]" }], "internalType": "struct ITradingCompetitionManager.CompetitionRules", "name": "competitionRules", "type": "tuple" }], "internalType": "struct ITradingCompetitionManager.TC", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] static ACCOUNT_MANAGER_ABI = [{ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], "name": "getQuotesLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "isAccountValid", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], "name": "getAccountOf", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], "name": "getBalanceOfUser", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] - static perpManagerAddress = "0x22C859C23A4aEe8eb463Ca5d14C45EcCB88d4933" + static perpManagerAddress = "0x5b86dDF88d9F75ba794a410532ae4ae9a0985500" static defaultChainId = 56 static async getAccountManager(idCounter) { @@ -107,6 +107,14 @@ const ThenaTCApp = { }; }, + calculatePnl: function (finalBalance, startingBalance, depositFromOwner, depositNotFromOwner) { + const balance0 = new BN(depositFromOwner).add(new BN(startingBalance)) + const balance1 = new BN(finalBalance).sub(new BN(depositNotFromOwner)) + const balanceChange = balance1.sub(balance0) + const pnl = balanceChange.mul(new BN(10000)).div(balance0) + return pnl + }, + onRequest: async function (request) { let { method, data: { params } } = request; @@ -117,6 +125,21 @@ const ThenaTCApp = { // get info return await this._info(owner, idCounter); } + case 'pnl': { + // gets required info + const { + finalBalance, + startingBalance, + depositFromOwner, + depositNotFromOwner, + } = await this._info(owner, idCounter); + // calculates pnl + const pnl = this.calculatePnl(finalBalance, startingBalance, depositFromOwner, depositNotFromOwner) + // returns result + return { + pnl: pnl.toString(), + } + } default: throw { message: `invalid method ${method}` } } @@ -124,19 +147,28 @@ const ThenaTCApp = { signParams: function (request, result) { switch (request.method) { - case 'info': + case 'info': { const { finalBalance, startingBalance, depositFromOwner, depositNotFromOwner, } = result; + return [ { type: 'uint256', value: finalBalance }, { type: 'uint256', value: startingBalance }, { type: 'uint256', value: depositFromOwner }, { type: 'uint256', value: depositNotFromOwner }, ] + } + case 'pnl': { + const { pnl } = result; + + return [ + { type: 'int256', value: pnl }, + ] + } default: throw { message: `Unknown method: ${request.method}` } } From 94fc7d1fc71387df4e9ec3a5e701b1d4cb71bd9a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 30 Dec 2023 19:36:41 +0330 Subject: [PATCH 293/406] Add `owner` & `idCounter` to result & signature --- general/thena_tc.js | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 2aca794..9913fdb 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -120,10 +120,16 @@ const ThenaTCApp = { let { owner, idCounter } = params + let result = { + owner, + idCounter, + } + switch (method) { case 'info': { // get info - return await this._info(owner, idCounter); + const info = await this._info(owner, idCounter); + return Object.assign(result, info); } case 'pnl': { // gets required info @@ -136,9 +142,7 @@ const ThenaTCApp = { // calculates pnl const pnl = this.calculatePnl(finalBalance, startingBalance, depositFromOwner, depositNotFromOwner) // returns result - return { - pnl: pnl.toString(), - } + return Object.assign(result, { pnl }) } default: throw { message: `invalid method ${method}` } @@ -146,6 +150,16 @@ const ThenaTCApp = { }, signParams: function (request, result) { + const { + owner, + idCounter, + } = result; + + const baseResult = [ + { type: 'address', value: owner }, + { type: 'uint256', value: idCounter }, + ] + switch (request.method) { case 'info': { const { @@ -156,6 +170,7 @@ const ThenaTCApp = { } = result; return [ + ...baseResult, { type: 'uint256', value: finalBalance }, { type: 'uint256', value: startingBalance }, { type: 'uint256', value: depositFromOwner }, @@ -166,6 +181,7 @@ const ThenaTCApp = { const { pnl } = result; return [ + ...baseResult, { type: 'int256', value: pnl }, ] } From ae66fb4b12a58b52691dcb5d6165e53bb38bec6f Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Sat, 30 Dec 2023 19:40:16 +0330 Subject: [PATCH 294/406] Change `idCounter` to `tcId` --- general/thena_tc.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 9913fdb..70ba38e 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -7,14 +7,14 @@ class AccountManager { static perpManagerAddress = "0x5b86dDF88d9F75ba794a410532ae4ae9a0985500" static defaultChainId = 56 - static async getAccountManager(idCounter) { - const { tradingCompetition } = await ethCall(AccountManager.perpManagerAddress, 'idToTradingCompetition', [idCounter], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); + static async getAccountManager(tcId) { + const { tradingCompetition } = await ethCall(AccountManager.perpManagerAddress, 'idToTradingCompetition', [tcId], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); return tradingCompetition; } - constructor(address, idCounter) { + constructor(address, tcId) { this.address = address; - this.idCounter = idCounter; + this.tcId = tcId; } async getQuotesCount(owner) { @@ -64,10 +64,10 @@ const ThenaTCApp = { - getInfo: async function (owner, idCounter) { + getInfo: async function (owner, tcId) { const subgraphEndpoint = 'https://api.thegraph.com/subgraphs/name/spsina/thenatc' const query = `{ - participants(where: {owner: "${owner}", competition_: {idCounter: ${idCounter}}}) + participants(where: {owner: "${owner}", competition_: {idCounter: ${tcId}}}) { depositFromOwner depositNotFromOwner @@ -88,16 +88,16 @@ const ThenaTCApp = { } }, - _info: async function (owner, idCounter) { + _info: async function (owner, tcId) { // gets AccountManager address and create instance of it - const accountManager = new AccountManager(await AccountManager.getAccountManager(idCounter), idCounter); + const accountManager = new AccountManager(await AccountManager.getAccountManager(tcId), tcId); // checks if user is valid const isValid = await accountManager.isAccountValid(owner); if (!isValid) throw { message: "NOT_VALID_USER" } // gets final balance of user const finalBalance = await accountManager.getBalanceOfUser(owner); // gets user info from subgraph - const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, idCounter); + const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, tcId); // returns outputs return { finalBalance, @@ -118,17 +118,17 @@ const ThenaTCApp = { onRequest: async function (request) { let { method, data: { params } } = request; - let { owner, idCounter } = params + let { owner, tcId } = params let result = { owner, - idCounter, + tcId, } switch (method) { case 'info': { // get info - const info = await this._info(owner, idCounter); + const info = await this._info(owner, tcId); return Object.assign(result, info); } case 'pnl': { @@ -138,7 +138,7 @@ const ThenaTCApp = { startingBalance, depositFromOwner, depositNotFromOwner, - } = await this._info(owner, idCounter); + } = await this._info(owner, tcId); // calculates pnl const pnl = this.calculatePnl(finalBalance, startingBalance, depositFromOwner, depositNotFromOwner) // returns result @@ -152,12 +152,12 @@ const ThenaTCApp = { signParams: function (request, result) { const { owner, - idCounter, + tcId, } = result; const baseResult = [ { type: 'address', value: owner }, - { type: 'uint256', value: idCounter }, + { type: 'uint256', value: tcId }, ] switch (request.method) { From e4e56baa0e37cb663fad0ab0104a965898d6a321 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jan 2024 18:37:57 +0330 Subject: [PATCH 295/406] bugfix --- general/vrf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/vrf.js b/general/vrf.js index 7024518..6a0309c 100644 --- a/general/vrf.js +++ b/general/vrf.js @@ -47,7 +47,7 @@ const VRFApp = { { type: 'uint256', value: blockNum }, { type: 'uint32', value: callbackGasLimit }, { type: 'uint32', value: numWords }, - { type: 'addresss', value: consumer }, + { type: 'address', value: consumer }, ] } From 70d95c8a5b1265eb19a4208eb0303c15dcf092a4 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jan 2024 19:10:08 +0330 Subject: [PATCH 296/406] bugfix --- general/vrf.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/general/vrf.js b/general/vrf.js index 6a0309c..bc272a9 100644 --- a/general/vrf.js +++ b/general/vrf.js @@ -44,10 +44,10 @@ const VRFApp = { return [ { type: 'uint256', value: chainId }, { type: 'uint256', value: requestId }, - { type: 'uint256', value: blockNum }, - { type: 'uint32', value: callbackGasLimit }, - { type: 'uint32', value: numWords }, - { type: 'address', value: consumer }, + // { type: 'uint256', value: blockNum }, + // { type: 'uint32', value: callbackGasLimit }, + // { type: 'uint32', value: numWords }, + // { type: 'address', value: consumer }, ] } From 95503923bb0ec5b23798d55cec42caa7fa8d2665 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jan 2024 19:44:44 +0330 Subject: [PATCH 297/406] bugfix --- general/vrf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/vrf.js b/general/vrf.js index bc272a9..586a9ec 100644 --- a/general/vrf.js +++ b/general/vrf.js @@ -44,10 +44,10 @@ const VRFApp = { return [ { type: 'uint256', value: chainId }, { type: 'uint256', value: requestId }, - // { type: 'uint256', value: blockNum }, + { type: 'uint256', value: blockNum }, // { type: 'uint32', value: callbackGasLimit }, // { type: 'uint32', value: numWords }, - // { type: 'address', value: consumer }, + { type: 'address', value: consumer }, ] } From b16db516eb74916237b061b55878b4ea02a212ce Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jan 2024 19:59:33 +0330 Subject: [PATCH 298/406] bugfix --- general/vrf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/vrf.js b/general/vrf.js index 586a9ec..6a0309c 100644 --- a/general/vrf.js +++ b/general/vrf.js @@ -45,8 +45,8 @@ const VRFApp = { { type: 'uint256', value: chainId }, { type: 'uint256', value: requestId }, { type: 'uint256', value: blockNum }, - // { type: 'uint32', value: callbackGasLimit }, - // { type: 'uint32', value: numWords }, + { type: 'uint32', value: callbackGasLimit }, + { type: 'uint32', value: numWords }, { type: 'address', value: consumer }, ] } From f46927de71e072414849b22fb29e55bf4c4fe2bd Mon Sep 17 00:00:00 2001 From: Siftal Date: Thu, 4 Jan 2024 18:37:00 +0330 Subject: [PATCH 299/406] feat: add brightid muon app --- general/brightid.js | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 general/brightid.js diff --git a/general/brightid.js b/general/brightid.js new file mode 100644 index 0000000..db5cad0 --- /dev/null +++ b/general/brightid.js @@ -0,0 +1,69 @@ +const { axios, toBN } = MuonAppUtils; + +const BRIGHTID_NODES = [ + "http://brightid2.idealmoney.io/brightid", + "http://brightid.idealmoney.io/brightid", + "http://node.brightid.org/brightid", +]; + +module.exports = { + APP_NAME: "brightid", + + getContextIds: async function (context, contextId) { + const results = await Promise.allSettled( + BRIGHTID_NODES.map((url) => + axios.get(`${url}/v5/verifications/${context}/${contextId}`, { + timeout: 10000, + }), + ), + ); + return results + .map((res) => res.value?.data?.data?.contextIds.join(",")) + .filter((res) => !!res); + }, + + onRequest: async function (request) { + const { + method, + data: { params }, + } = request; + let { context, contextId } = params; + + switch (method) { + case "getContextIds": + const responses = await this.getContextIds(context, contextId); + let counts = responses.reduce((a, c) => { + a[c] = (a[c] || 0) + 1; + return a; + }, {}); + let maxCount = Math.max(...Object.values(counts)); + let mostFrequent = Object.keys(counts).filter( + (k) => counts[k] === maxCount, + ); + + if (maxCount >= 2) { + return { + contextIds: mostFrequent[0].split(","), + }; + } else { + throw new Error("Insufficient responses."); + } + + default: + throw new Error(`Unknown method ${method}`); + } + }, + + signParams: function (request, result) { + let { method } = request; + let { contextIds } = result; + + switch (method) { + case "getContextIds": + return [{ type: "bytes32[]", value: contextIds }]; + + default: + throw new Error(`Unknown method ${method}`); + } + }, +}; From 2b265462bd4e8d342e4be87521c2c4dac737d6bf Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 6 Jan 2024 12:45:18 +0330 Subject: [PATCH 300/406] tss3: switch to frost --- general/tss-test3.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/tss-test3.js b/general/tss-test3.js index 5df84c7..9eca6a6 100644 --- a/general/tss-test3.js +++ b/general/tss-test3.js @@ -1,8 +1,8 @@ const {soliditySha3} = MuonAppUtils const TssApp3 = { APP_NAME: 'tss3', - useTss: true, - + useFrost: true, + onRequest: async function (request) { let {method, data: {params={}}} = request; switch (method) { From 1f9d5c77613e18a9a4b04554d501d7fff4c9054e Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Mon, 22 Jan 2024 19:19:55 +0330 Subject: [PATCH 301/406] refactor --- general/mrc20_bridge.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/general/mrc20_bridge.js b/general/mrc20_bridge.js index af7d5c6..96e723a 100644 --- a/general/mrc20_bridge.js +++ b/general/mrc20_bridge.js @@ -1,4 +1,4 @@ -const { ethCall, soliditySha3 } = MuonAppUtils +const { ethCall } = MuonAppUtils const ABI_getTx = [ { @@ -19,7 +19,6 @@ const ABI_getTx = [ module.exports = { APP_NAME: 'mrc20_bridge', - APP_ID: 5, onRequest: async function (request) { let { @@ -41,31 +40,32 @@ module.exports = { depositNetwork ) return result - + case 'test': + return 'done'; default: - throw { message: `Unknown method ${params}` } + throw { message: `Unknown method ${method}` } } }, - hashRequestResult: function (request, result) { + signParams: function (request, result) { let { method } = request switch (method) { case 'claim': let { txId, tokenId, amount, fromChain, toChain, user } = result - return soliditySha3([ - { type: 'uint32', value: this.APP_ID }, + return [ { type: 'uint256', value: txId }, { type: 'uint256', value: tokenId }, { type: 'uint256', value: amount }, { type: 'uint256', value: fromChain }, { type: 'uint256', value: toChain }, { type: 'address', value: user } - ]) - + ] + case 'test': + return [{type: 'string', value: result.toString()}] default: - return null + throw { message: `Unknown method: ${method}` } } } } From ac9bb9387a5a699009f8fd3150dac61ca75b9fa6 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 25 Jan 2024 01:16:22 +0330 Subject: [PATCH 302/406] bugfix --- general/mrc20_bridge.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/general/mrc20_bridge.js b/general/mrc20_bridge.js index 96e723a..8fa33a0 100644 --- a/general/mrc20_bridge.js +++ b/general/mrc20_bridge.js @@ -17,6 +17,11 @@ const ABI_getTx = [ } ] +const BRIDGE_ADDRESSES = { + bsctest: "0xC061365eaE4a469f3eDe035c1c8f3C0F602CfB03", + mumbai: "0x4D246dFDbAAb587f4A3F8bCb31B47022267f6b70" +} + module.exports = { APP_NAME: 'mrc20_bridge', @@ -28,10 +33,14 @@ module.exports = { switch (method) { case 'claim': - let { depositAddress, depositTxId, depositNetwork = 'eth' } = params - if (!depositAddress) throw { message: 'Invalid contarct address' } + let { depositTxId, depositNetwork = 'eth' } = params + if (!(depositNetwork in BRIDGE_ADDRESSES)) { + throw { message: 'Invalid deposit network' } + } if (!depositTxId) throw { message: 'Invalid deposit Tx Id' } + const depositAddress = BRIDGE_ADDRESSES[depositNetwork] + let result = await ethCall( depositAddress, 'getTx', @@ -39,7 +48,15 @@ module.exports = { ABI_getTx, depositNetwork ) - return result + let { txId, tokenId, amount, fromChain, toChain, user } = result + return { + txId: txId.toString(), + tokenId: tokenId.toString(), + amount: amount.toString(), + fromChain: fromChain.toString(), + toChain: toChain.toString(), + user + } case 'test': return 'done'; default: From 6643443bcc2ad494465deee31e1d756fe0c25e6f Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 28 Jan 2024 10:54:08 +0330 Subject: [PATCH 303/406] DeRand app --- general/derand.js | 228 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 general/derand.js diff --git a/general/derand.js b/general/derand.js new file mode 100644 index 0000000..f0fb533 --- /dev/null +++ b/general/derand.js @@ -0,0 +1,228 @@ +const { axios, muonSha3, ethGetTransactionReceipt, ethGetWeb3 } = MuonAppUtils + +const LOCK_DURATION = 24 * 60 * 60; + +const EXPLORER_API = { + // PION explorer api endpoint + 2: "https://explorer.muon.net/pion/api/v1/requests", + // ALICE explorer api endpoint + 3: "https://explorer.muon.net/alice/api/v1/requests", + // local devnet explorer api endpoint + 255: "http://localhost:8004/api/v1/requests", +} + +const RANDOM_WORDS_REQUESTED_ABI = [ + { + "indexed": false, + "name": "requestId", + "type": "uint256" + }, + { + "indexed": false, + "name": "preSeed", + "type": "uint256" + }, + { + "indexed": false, + "name": "minimumRequestConfirmations", + "type": "uint16" + }, + { + "indexed": false, + "name": "callbackGasLimit", + "type": "uint32" + }, + { + "indexed": false, + "name": "numWords", + "type": "uint32" + }, + { + "indexed": true, + "name": "sender", + "type": "address" + } +] + +async function fetchRequest(networkId, requestId) { + const apiEndpoint = EXPLORER_API[networkId]; + if(!apiEndpoint) + throw `Explorer api endpoint not found for network: ${networkId}.`; + return axios.get(`${apiEndpoint}/${requestId}`) + .then(({data}) => data?.request) + .catch(e => undefined); +} + +const DeRandApp = { + APP_NAME: "derand", + + hashParams: function(request) { + let { + chainId, + txHash + } = request.data.params; + + return muonSha3( + { type: "uint256", value: chainId }, + { type: "byte32", value: txHash } + ); + }, + + onArrive: async function (request) { + let { + method, + deploymentSeed, + } = request; + + switch (method) { + case "random-number": { + const paramsHash = this.hashParams(request) + let memory = await this.readGlobalMem(`derand-lock-${paramsHash}`); + if (memory) { + throw { message: `The random already generated and locked for a while.` }; + } + + const result = await this.randomNumberResult(request) + const reqId = this.calculateRequestId(request, result); + await this.writeGlobalMem(`derand-lock-${paramsHash}`, JSON.stringify({seed: deploymentSeed, reqId}), LOCK_DURATION); + } + } + }, + + randomNumberResult: async function (request) { + let { + chainId, + txHash + } = request.data.params + + if (!chainId) throw { message: 'Invalid chainId' } + if (!txHash) throw { message: 'Invalid txHash' } + + onchainParams = await Promise.all( + [ + ethGetTransactionReceipt(txHash, chainId), + ethGetWeb3(chainId) + ] + ); + + let { blockNumber: blockNum, logs } = onchainParams[0]; + + let web3 = onchainParams[1] + + let { + requestId, + callbackGasLimit, + numWords, + sender: consumer, + } = web3.eth.abi.decodeLog( + RANDOM_WORDS_REQUESTED_ABI, + logs[0].data, + logs[0].topics + ); + + return { + chainId: chainId.toString(), + requestId: requestId.toString(), + blockNum: blockNum.toString(), + callbackGasLimit: callbackGasLimit.toString(), + numWords: numWords.toString(), + consumer, + } + }, + + onRequest: async function (request) { + let { + method, + deploymentSeed, + gwAddress, + data: { params }, + } = request; + switch (method) { + case "random-number": { + const paramsHash = this.hashParams(request) + const memory = await this.readGlobalMem(`derand-lock-${paramsHash}`) + if(!memory) + throw `Global lock not performed` + + const memData = JSON.parse(memory.value); + const result = await this.randomNumberResult(request); + const reqId = this.calculateRequestId(request, result); + + if(memory.owner !== gwAddress || memData.seed !== deploymentSeed && memData.reqId !== reqId) { + throw { + message: `Error when checking lock`, + memory: memData, + gwAddress, + deploymentSeed, + } + } + + await this.writeLocalMem(`derand-lock-${paramsHash}`, "locked", LOCK_DURATION, {preventRewrite: true}) + + return result; + } + case "delete-global-memory": { + const paramsHash = this.hashParams(request) + const lockKey = `derand-lock-${paramsHash}` + let memory = await this.readGlobalMem(lockKey); + if (!memory) { + throw { message: `Lock not found.` }; + } + const memData = JSON.parse(memory.value); + let req2 = await fetchRequest(this.netConfigs.networkId, memData.reqId); + if(req2) + throw `Lock is successfully done for the request ${memData.reqId}`; + return { + key: lockKey, + message: `delete global memory ${lockKey}` + } + } + + default: + throw { message: `invalid method ${method}` }; + } + }, + + signParams: function (request, result) { + switch (request.method) { + case "random-number": { + let { + chainId, + requestId, + blockNum, + callbackGasLimit, + numWords, + consumer, + } = result; + + return [ + { type: "uint256", value: chainId }, + { type: "uint256", value: requestId }, + { type: "uint256", value: blockNum }, + { type: "uint32", value: callbackGasLimit }, + { type: "uint32", value: numWords }, + { type: "address", value: consumer }, + ]; + } + case "delete-global-memory": { + const { key, message } = result; + return [key, " ", message] + } + + default: + throw { message: `Unknown method: ${request.method}` }; + } + }, + + onConfirm: async function(request, result, signatures) { + switch(request.method) { + case "delete-global-memory": { + let { key } = result; + await this.deleteGlobalMem(key, request) + await this.deleteLocalMem(key) + } + } + } +}; + +module.exports = DeRandApp; \ No newline at end of file From 2fb04f6dc7941f93955e3f7e4a153a857c643e6d Mon Sep 17 00:00:00 2001 From: Siftal Date: Mon, 29 Jan 2024 13:52:23 +0330 Subject: [PATCH 304/406] feat: update APP_NAME --- general/brightid.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/brightid.js b/general/brightid.js index db5cad0..8a1d839 100644 --- a/general/brightid.js +++ b/general/brightid.js @@ -7,7 +7,7 @@ const BRIGHTID_NODES = [ ]; module.exports = { - APP_NAME: "brightid", + APP_NAME: "muon_brightid", getContextIds: async function (context, contextId) { const results = await Promise.allSettled( From 43f48bc1f48b564d9c638182a8ba58dfd782d226 Mon Sep 17 00:00:00 2001 From: Siftal Date: Mon, 29 Jan 2024 13:53:28 +0330 Subject: [PATCH 305/406] feat: rename --- general/{brightid.js => muon_brightid.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename general/{brightid.js => muon_brightid.js} (100%) diff --git a/general/brightid.js b/general/muon_brightid.js similarity index 100% rename from general/brightid.js rename to general/muon_brightid.js From 590354b6caea957b2dd267e5839be6ce697dc1a9 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 1 Feb 2024 09:18:33 +0330 Subject: [PATCH 306/406] bugfix --- general/derand.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/derand.js b/general/derand.js index f0fb533..f2171fc 100644 --- a/general/derand.js +++ b/general/derand.js @@ -64,7 +64,7 @@ const DeRandApp = { return muonSha3( { type: "uint256", value: chainId }, - { type: "byte32", value: txHash } + { type: "bytes", value: txHash } ); }, From 664697647e09af3388c50ee344dc1550fa61bb9b Mon Sep 17 00:00:00 2001 From: Brillaugte <58943684+Brillaugte@users.noreply.github.com> Date: Thu, 1 Feb 2024 19:24:30 +0200 Subject: [PATCH 307/406] pionerv1_price --- general/pionerv1_price.js | 177 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 general/pionerv1_price.js diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js new file mode 100644 index 0000000..7e5075c --- /dev/null +++ b/general/pionerv1_price.js @@ -0,0 +1,177 @@ +require('dotenv').config(); +const { BN, toBaseUnit, Web3, axios } = MuonAppUtils; + +const PionerV1App = { + APP_NAME: 'pionerV1_oracle', + useTss: true, + + onRequest: async function (request) { + let { method, data: { params = {} } } = request; + switch (method) { + case 'price': + const { asset1, asset2 } = params; + const prices = await this.fetchPrices(asset1, asset2); + const isMarketOpen = this.isValidPriceData(prices, /* appropriate config */); + + return { + asset1: this.convertToBytes32(asset1), + asset2: this.convertToBytes32(asset2), + pairBid: this.scaleUp(prices.pairBid).toString(), + pairAsk: this.scaleUp(prices.pairAsk).toString(), + confidence: this.scaleUp(prices.confidence).toString() + + }; + } + }, + + signParams: function (request, result) { + const signTime = result.oldestTimestamp ? result.oldestTimestamp : Math.floor(Date.now() / 1000); + + switch (request.method) { + case 'price': + return [ + { name:'asset1' ,type: 'bytes32', value: result.asset1 }, + { name:'asset2' ,type: 'bytes32', value: result.asset2 }, + { name:'pairBid' ,type: 'uint256', value: result.pairBid }, + { name:'pairAsk' ,type: 'uint256', value: result.pairAsk }, + { name:'confidence' ,type: 'uint256', value: result.confidence }, + { name:'signTime' ,type: 'uint256', value: signTime.toString() } + ]; + } + }, + +fetchPrices: async function (asset1, asset2) { + const [result1, result2] = await Promise.all([ + this.fetchAssetPrices(asset1), + this.fetchAssetPrices(asset2) + ]); + + const adjustedPrices1 = asset1 === 'hardusd' ? { avgBid: 1, avgAsk: 1 } : this.calculateAveragePrices(result1.prices); + const adjustedPrices2 = asset2 === 'hardusd' ? { avgBid: 1, avgAsk: 1 } : this.calculateAveragePrices(result2.prices); + const asset1Confidence = asset1 === 'hardusd' ? 0 : this.calculateConfidence(result1.prices); + const asset2Confidence = asset2 === 'hardusd' ? 0 : this.calculateConfidence(result2.prices); + const highestConfidence = Math.max(asset1Confidence, asset2Confidence); + const oldestTimestamp = Math.min(result1.oldestTimestamp, result2.oldestTimestamp); + + return { + pairBid: adjustedPrices1.avgBid / adjustedPrices2.avgBid, + pairAsk: adjustedPrices1.avgAsk / adjustedPrices2.avgAsk, + confidence: Math.max(1 - highestConfidence / 100, 0), + oldestTimestamp + }; +}, + + fetchAssetPrices: async function (asset) { + if (asset === 'hardusd') return { prices: [{ bid: 1, ask: 1, timestamp: null }], oldestTimestamp: null }; + const [assetType, assetSymbol] = asset.split('.'); + const apiConfigs = this.loadApiConfigsForType(assetType); + let oldestTimestamp = Infinity; + const prices = []; + + for (const config of apiConfigs) { + const formattedSymbol = this.formatSymbolForAPI(assetType, assetSymbol); + const priceData = await this.fetchPriceFromAPI(config, formattedSymbol); + if (priceData) { + prices.push(priceData); + if (priceData.timestamp && priceData.timestamp < oldestTimestamp) { + oldestTimestamp = priceData.timestamp; + } + } + } + return { prices, oldestTimestamp }; + }, + + loadApiConfigsForType: function (assetType) { + const configs = []; + const prefix = `API_${assetType.toUpperCase()}_`; + for (const [key, value] of Object.entries(process.env)) { + if (key.startsWith(prefix)) { + const parts = key.substring(prefix.length).split('_'); + const apiIdentifier = parts[0]; + const attribute = parts.slice(1).join('_').toLowerCase(); + const existingConfig = configs.find(c => c.identifier === apiIdentifier); + if (existingConfig) { + existingConfig[attribute] = value; + } else { + configs.push({ identifier: apiIdentifier, [attribute]: value }); + } + } + } + return configs; + }, + + formatSymbolForAPI: function (assetType, symbol) { + return assetType === 'fx' ? symbol.toLowerCase() : symbol.toUpperCase(); + }, + + fetchPriceFromAPI: async function (config, symbol) { + const url = `${config.url_before_asset}${symbol}${config.url_after_asset}`; + try { + const response = await axios.get(url); + const data = Array.isArray(response.data) ? response.data[0] : response.data; + + const timestampField = config.time_field; + const timestamp = data[timestampField] ? parseInt(data[timestampField]) : null; + console.log(data, config.bid_field,config.ask_field ); + return { + bid: parseFloat(data[config.bid_field]), + ask: parseFloat(data[config.ask_field]), + timestamp + }; + } catch (error) { + console.error(`Error fetching price from API: `, error); + return null; + } + }, + + isValidPriceData: function (data, config) { + const hasRequiredFields = data && + data.hasOwnProperty(config.bid_field) && + data.hasOwnProperty(config.ask_field) && + data.hasOwnProperty(config.time_field); + + if (!hasRequiredFields) return false; + + const bidAskValid = data[config.bid_field] != null && data[config.ask_field] != null; + const timestampValid = data[config.time_field] != null && parseInt(data[config.time_field]) >= 10000; + + return bidAskValid && timestampValid; + }, + + + calculateAveragePrices: function (prices) { + const totalBid = prices.reduce((sum, price) => sum + (price ? price.bid : 0), 0); + const totalAsk = prices.reduce((sum, price) => sum + (price ? price.ask : 0), 0); + const count = prices.filter(price => price).length; + return { + avgBid: count > 0 ? totalBid / count : NaN, + avgAsk: count > 0 ? totalAsk / count : NaN + }; + }, + + calculateConfidence: function (prices) { + let minBid = prices[0].bid, maxBid = prices[0].bid; + let minAsk = prices[0].ask, maxAsk = prices[0].ask; + prices.forEach(price => { + if (price.bid < minBid) minBid = price.bid; + if (price.bid > maxBid) maxBid = price.bid; + if (price.ask < minAsk) minAsk = price.ask; + if (price.ask > maxAsk) maxAsk = price.ask; + }); + const bidSpread = ((maxBid - minBid) / minBid) * 100; + const askSpread = ((maxAsk - minAsk) / minAsk) * 100; + return Math.max(bidSpread, askSpread); + }, + + + convertToBytes32: function (str) { + const hex = Web3.utils.toHex(str); + return Web3.utils.padRight(hex, 64); + }, + + scaleUp: function (value) { + return new BN(toBaseUnit(String(value), 18)); + } +}; + +module.exports = PionerV1App; From a57ede52ba734ccadec35f09bc1c7f889d54c932 Mon Sep 17 00:00:00 2001 From: Brillaugte <58943684+Brillaugte@users.noreply.github.com> Date: Sat, 3 Feb 2024 20:19:25 +0200 Subject: [PATCH 308/406] correct variable price, time and confidence, .env itteration and Date.now() + date and confidence errors --- general/pionerv1_price.js | 81 ++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 22 deletions(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index 7e5075c..6e66080 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -9,36 +9,56 @@ const PionerV1App = { let { method, data: { params = {} } } = request; switch (method) { case 'price': - const { asset1, asset2 } = params; + const { asset1, asset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime } = params; const prices = await this.fetchPrices(asset1, asset2); - const isMarketOpen = this.isValidPriceData(prices, /* appropriate config */); - + + if (prices.oldestTimestamp < requestSignTime) { + throw new Error(`Sign time ${prices.oldestTimestamp} is not older than request sign time ${requestSignTime}.`); + } + return { asset1: this.convertToBytes32(asset1), asset2: this.convertToBytes32(asset2), - pairBid: this.scaleUp(prices.pairBid).toString(), - pairAsk: this.scaleUp(prices.pairAsk).toString(), - confidence: this.scaleUp(prices.confidence).toString() - + requestPairBid: requestPairBid.toString(), + requestPairAsk: requestPairAsk.toString(), + pairBid: prices.pairBid.toString(), + pairAsk: prices.pairAsk.toString(), + confidence: prices.confidence.toString(), + requestConfidence: requestConfidence.toString(), + requestSignTime: requestSignTime.toString(), + oldestTimestamp: prices.oldestTimestamp.toString() }; } }, + signParams: function (request, result) { - const signTime = result.oldestTimestamp ? result.oldestTimestamp : Math.floor(Date.now() / 1000); - + const signTimeBN = new BN(result.oldestTimestamp); + const requestSignTimeBN = new BN(result.requestSignTime); + const confidenceBN = new BN(result.confidence); + const requestConfidenceBN = new BN(result.requestConfidence); + + if (signTimeBN.lt(requestSignTimeBN)) { + throw new Error(`Sign time ${result.oldestTimestamp} is newer than requested sign time ${result.requestSignTime}.`); + } + + if (confidenceBN.gt(requestConfidenceBN)) { + throw new Error(`Actual confidence ${result.confidence} is greater than requested confidence ${result.requestConfidence}.`); + } + switch (request.method) { case 'price': return [ - { name:'asset1' ,type: 'bytes32', value: result.asset1 }, - { name:'asset2' ,type: 'bytes32', value: result.asset2 }, - { name:'pairBid' ,type: 'uint256', value: result.pairBid }, - { name:'pairAsk' ,type: 'uint256', value: result.pairAsk }, - { name:'confidence' ,type: 'uint256', value: result.confidence }, - { name:'signTime' ,type: 'uint256', value: signTime.toString() } + { name: 'asset1', type: 'bytes32', value: result.asset1 }, + { name: 'asset2', type: 'bytes32', value: result.asset2 }, + { name: 'requestPairBid', type: 'uint256', value: this.scaleUp(result.requestPairBid).toString() }, + { name: 'requestPairAsk', type: 'uint256', value: this.scaleUp(result.requestPairAsk).toString() }, + { name: 'requestConfidence', type: 'uint256', value: this.scaleUp(result.requestConfidence).toString() }, + { name: 'requestSignTime', type: 'uint256', value: this.scaleUp(result.requestSignTime).toString() }, ]; } }, + fetchPrices: async function (asset1, asset2) { const [result1, result2] = await Promise.all([ @@ -56,7 +76,7 @@ fetchPrices: async function (asset1, asset2) { return { pairBid: adjustedPrices1.avgBid / adjustedPrices2.avgBid, pairAsk: adjustedPrices1.avgAsk / adjustedPrices2.avgAsk, - confidence: Math.max(1 - highestConfidence / 100, 0), + confidence: highestConfidence, oldestTimestamp }; }, @@ -82,9 +102,11 @@ fetchPrices: async function (asset1, asset2) { }, loadApiConfigsForType: function (assetType) { + const allConfigs = JSON.parse(process.env.APPS_PIONERV1_VARS); const configs = []; const prefix = `API_${assetType.toUpperCase()}_`; - for (const [key, value] of Object.entries(process.env)) { + + for (const [key, value] of Object.entries(allConfigs)) { if (key.startsWith(prefix)) { const parts = key.substring(prefix.length).split('_'); const apiIdentifier = parts[0]; @@ -99,7 +121,7 @@ fetchPrices: async function (asset1, asset2) { } return configs; }, - + formatSymbolForAPI: function (assetType, symbol) { return assetType === 'fx' ? symbol.toLowerCase() : symbol.toUpperCase(); }, @@ -111,11 +133,25 @@ fetchPrices: async function (asset1, asset2) { const data = Array.isArray(response.data) ? response.data[0] : response.data; const timestampField = config.time_field; - const timestamp = data[timestampField] ? parseInt(data[timestampField]) : null; - console.log(data, config.bid_field,config.ask_field ); + let timestamp = data[timestampField]; + if (typeof timestamp === 'number') { + timestamp *= timestamp < 1e12 ? 1000 : 1; + } else if (typeof timestamp === 'string') { + timestamp = new Date(timestamp).getTime(); + } else { + timestamp = null; + } + + const bid = parseFloat(data[config.bid_field]); + const ask = parseFloat(data[config.ask_field]); + if (isNaN(bid) || isNaN(ask) || bid <= 0 || ask <= 0 || ask < bid) { + console.error(`Invalid price data: `, { bid, ask }); + return null; + } + return { - bid: parseFloat(data[config.bid_field]), - ask: parseFloat(data[config.ask_field]), + bid, + ask, timestamp }; } catch (error) { @@ -124,6 +160,7 @@ fetchPrices: async function (asset1, asset2) { } }, + isValidPriceData: function (data, config) { const hasRequiredFields = data && data.hasOwnProperty(config.bid_field) && From 8cc28846a63a4ba6b84499d6f1d9b78359b0c273 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 8 Feb 2024 17:25:55 +0330 Subject: [PATCH 309/406] Update stage_unitap --- general/stage_unitap.js | 76 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 6 deletions(-) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index b0cc63e..5ff2d2d 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -24,14 +24,14 @@ const StageUnitapApp = { throw e.response.data } - const { chain, wallet, multiplier, raffle } = result.data.entry + const { chain, userWalletAddress, multiplier, raffle } = result.data.entry const { raffleId, contract } = raffle - if (chain && wallet && multiplier && raffleId) { + if (chain && userWalletAddress && multiplier && raffleId) { return { chain, contract, - wallet, + wallet: userWalletAddress, raffleId, multiplier, } @@ -68,10 +68,36 @@ const StageUnitapApp = { return { randomWords, expirationTime } }, + getTokenTapClaim: async function (claimId) { + const url = `https://stage.unitap.app/api/tokentap/claim-detail/${claimId}/` + let result + try { + result = await axios.get(url, { + headers: { "Accept-Encoding": "gzip,deflate,compress" } + }) + } catch (e) { + throw e.response.data + } + + const { tokenDistribution, userWalletAddress } = result.data.data + const { chain: { chainId }, distributionId, contract } = tokenDistribution + + if (chainId && userWalletAddress && distributionId && contract) { + return { + chain: chainId, + contract, + wallet: userWalletAddress, + distributionId + } + } + + else throw { detail: 'INVALID_CLAIM_ENTRY' } + }, + onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { - case 'raffle-entry': + case 'raffle-entry': { let { raffleEntryId } = params @@ -91,7 +117,7 @@ const StageUnitapApp = { raffleId, multiplier, } - + } case 'random-words': { let { chainId, @@ -107,7 +133,26 @@ const StageUnitapApp = { expirationTime, } } + case 'claim-token': { + let { + claimId + } = params + + const { + chain, + contract, + wallet, + distributionId + } = await this.getTokenTapClaim(claimId); + return { + chain, + contract, + wallet, + distributionId, + claimId + } + } default: throw { message: `invalid method ${method}` } } @@ -134,7 +179,7 @@ const StageUnitapApp = { ] } - case 'random-words': + case 'random-words': { let { randomWords, expirationTime, @@ -145,6 +190,25 @@ const StageUnitapApp = { { type: 'uint256[]', value: randomWords }, { type: 'uint256', value: expirationTime }, ] + } + + case 'claim-token': { + let { + chain, + contract, + wallet, + distributionId, + claimId + } = result + + return [ + { type: 'uint256', value: chain }, + { type: 'address', value: contract }, + { type: 'address', value: wallet }, + { type: 'uint256', value: distributionId }, + { type: 'uint256', value: claimId }, + ] + } default: throw { message: `Unknown method: ${request.method}` } From 664899a562f6e894d35d11b845b210063ca0977c Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sat, 10 Feb 2024 22:44:25 +0330 Subject: [PATCH 310/406] update mrc20 bridges --- general/mrc20_bridge.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/general/mrc20_bridge.js b/general/mrc20_bridge.js index 8fa33a0..1baff3f 100644 --- a/general/mrc20_bridge.js +++ b/general/mrc20_bridge.js @@ -18,8 +18,9 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - bsctest: "0xC061365eaE4a469f3eDe035c1c8f3C0F602CfB03", - mumbai: "0x4D246dFDbAAb587f4A3F8bCb31B47022267f6b70" + eth: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", + optimism: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", + arbitrum: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", } module.exports = { From 571023779401f25f0969e8c35035d7662190d8aa Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Tue, 13 Feb 2024 10:52:02 +0330 Subject: [PATCH 311/406] Update derand app --- general/derand.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/general/derand.js b/general/derand.js index f2171fc..0420b2b 100644 --- a/general/derand.js +++ b/general/derand.js @@ -122,6 +122,7 @@ const DeRandApp = { return { chainId: chainId.toString(), + coordinatorAddress: logs[0].address, requestId: requestId.toString(), blockNum: blockNum.toString(), callbackGasLimit: callbackGasLimit.toString(), @@ -188,6 +189,7 @@ const DeRandApp = { case "random-number": { let { chainId, + coordinatorAddress, requestId, blockNum, callbackGasLimit, @@ -197,6 +199,7 @@ const DeRandApp = { return [ { type: "uint256", value: chainId }, + { type: "address", value: coordinatorAddress }, { type: "uint256", value: requestId }, { type: "uint256", value: blockNum }, { type: "uint32", value: callbackGasLimit }, From 247541b907032a1a82913132394d80a104151dbb Mon Sep 17 00:00:00 2001 From: Sullivan <22621120+0xSullivan@users.noreply.github.com> Date: Wed, 21 Feb 2024 09:36:28 +0330 Subject: [PATCH 312/406] Create gg.js --- general/gg.js | 117 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 general/gg.js diff --git a/general/gg.js b/general/gg.js new file mode 100644 index 0000000..5340aa9 --- /dev/null +++ b/general/gg.js @@ -0,0 +1,117 @@ +const { BigNumber } = require("ethers") + +const { soliditySha3, ethCall } = MuonAppUtils + +const getTimestamp = () => Math.floor(Date.now() / 1000) + +const LGE_ABI = [{ + "inputs": [], + "name": "totalSoldToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" +}, +{ + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ratio", + "type": "uint256" + } + ], + "name": "amountsOut", + "outputs": [ + { + "internalType": "uint256", + "name": "usdAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lockedAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" +}] + +const LGE_ADDRESSES = { + 137: '0x16e7923e8b2DC378f366ED597514b90237C4C50f' +} + +const total = BigNumber.from(6.6e6) * BigNumber.from(10).pow(18) + +const TssApp = { + APP_NAME: 'gg', + useTss: true, + + onRequest: async function (request) { + let { method, data: { params = {} } } = request; + switch (method) { + case 'lge': { + let { amount, ratio, timestamp } = params + + const amountsOut = await ethCall( + Object.values(LGE_ADDRESSES)[0], + 'amountsOut', + [amount, ratio], + LGE_ABI, + Object.keys(LGE_ADDRESSES)[0] + ) + let currentTotal = amountsOut.liquidAmount + amountsOut.lockedAmount; + + for (const chainId of Object.keys(LGE_ADDRESSES)) { + + currentTotal += await ethCall( + LGE_ADDRESSES[chainId], + 'totalSoldToken', + [], + LGE_ABI, + chainId + ) + } + + if (timestamp > getTimestamp()) throw { message: 'Invalid Timestamp' } + + if (currentTotal > total) throw { message: 'Cap Reached' } + + return true; + } + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'lge': + const { amount, ratio, timestamp } = request.data.params; + return [ + { type: 'uint256', value: amount }, + { type: 'uint256', value: ratio }, + { type: 'uint256', value: timestamp } + ] + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = TssApp From 68fab190d4856b00ea760b82182f7221eb73bcac Mon Sep 17 00:00:00 2001 From: Sullivan <22621120+0xSullivan@users.noreply.github.com> Date: Wed, 21 Feb 2024 15:39:35 +0330 Subject: [PATCH 313/406] Update and rename gg.js to golden_goose.js --- general/{gg.js => golden_goose.js} | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) rename general/{gg.js => golden_goose.js} (89%) diff --git a/general/gg.js b/general/golden_goose.js similarity index 89% rename from general/gg.js rename to general/golden_goose.js index 5340aa9..bbee596 100644 --- a/general/gg.js +++ b/general/golden_goose.js @@ -1,6 +1,4 @@ -const { BigNumber } = require("ethers") - -const { soliditySha3, ethCall } = MuonAppUtils +const { soliditySha3, ethCall, BN } = MuonAppUtils const getTimestamp = () => Math.floor(Date.now() / 1000) @@ -56,10 +54,10 @@ const LGE_ADDRESSES = { 137: '0x16e7923e8b2DC378f366ED597514b90237C4C50f' } -const total = BigNumber.from(6.6e6) * BigNumber.from(10).pow(18) +const total = (new BN(6.6e6)).mul((new BN(10)).pow(new BN(18))) const TssApp = { - APP_NAME: 'gg', + APP_NAME: 'golden_goose', useTss: true, onRequest: async function (request) { @@ -88,7 +86,7 @@ const TssApp = { ) } - if (timestamp > getTimestamp()) throw { message: 'Invalid Timestamp' } + if (Math.abs(timestamp - getTimestamp()) < 600) throw { message: 'Invalid Timestamp' } if (currentTotal > total) throw { message: 'Cap Reached' } From 5a55b7f567195e30314fa307661364a9a59896e1 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 21 Feb 2024 17:34:56 +0330 Subject: [PATCH 314/406] Update mrc20_bridge --- general/mrc20_bridge.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/general/mrc20_bridge.js b/general/mrc20_bridge.js index 1baff3f..89e1fce 100644 --- a/general/mrc20_bridge.js +++ b/general/mrc20_bridge.js @@ -10,7 +10,8 @@ const ABI_getTx = [ { internalType: 'uint256', name: 'amount', type: 'uint256' }, { internalType: 'uint256', name: 'fromChain', type: 'uint256' }, { internalType: 'uint256', name: 'toChain', type: 'uint256' }, - { internalType: 'address', name: 'user', type: 'address' } + { internalType: 'address', name: 'user', type: 'address' }, + { internalType: "bytes", name: "nftData", type: "bytes" } ], stateMutability: 'view', type: 'function' @@ -49,14 +50,15 @@ module.exports = { ABI_getTx, depositNetwork ) - let { txId, tokenId, amount, fromChain, toChain, user } = result + let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result return { txId: txId.toString(), tokenId: tokenId.toString(), amount: amount.toString(), fromChain: fromChain.toString(), toChain: toChain.toString(), - user + user, + nftData } case 'test': return 'done'; @@ -70,7 +72,7 @@ module.exports = { switch (method) { case 'claim': - let { txId, tokenId, amount, fromChain, toChain, user } = result + let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result return [ { type: 'uint256', value: txId }, @@ -78,7 +80,8 @@ module.exports = { { type: 'uint256', value: amount }, { type: 'uint256', value: fromChain }, { type: 'uint256', value: toChain }, - { type: 'address', value: user } + { type: 'address', value: user }, + { type: 'bytes', value: nftData }, ] case 'test': return [{type: 'string', value: result.toString()}] From 54c8a17c649258cc6b0a40a0dd3ffcd2c1a75dc8 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 21 Feb 2024 17:56:12 +0330 Subject: [PATCH 315/406] Separate mrc404 from mrc20 app --- general/mrc20_bridge.js | 13 +++--- general/mrc404_bridge.js | 92 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 general/mrc404_bridge.js diff --git a/general/mrc20_bridge.js b/general/mrc20_bridge.js index 89e1fce..1baff3f 100644 --- a/general/mrc20_bridge.js +++ b/general/mrc20_bridge.js @@ -10,8 +10,7 @@ const ABI_getTx = [ { internalType: 'uint256', name: 'amount', type: 'uint256' }, { internalType: 'uint256', name: 'fromChain', type: 'uint256' }, { internalType: 'uint256', name: 'toChain', type: 'uint256' }, - { internalType: 'address', name: 'user', type: 'address' }, - { internalType: "bytes", name: "nftData", type: "bytes" } + { internalType: 'address', name: 'user', type: 'address' } ], stateMutability: 'view', type: 'function' @@ -50,15 +49,14 @@ module.exports = { ABI_getTx, depositNetwork ) - let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result + let { txId, tokenId, amount, fromChain, toChain, user } = result return { txId: txId.toString(), tokenId: tokenId.toString(), amount: amount.toString(), fromChain: fromChain.toString(), toChain: toChain.toString(), - user, - nftData + user } case 'test': return 'done'; @@ -72,7 +70,7 @@ module.exports = { switch (method) { case 'claim': - let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result + let { txId, tokenId, amount, fromChain, toChain, user } = result return [ { type: 'uint256', value: txId }, @@ -80,8 +78,7 @@ module.exports = { { type: 'uint256', value: amount }, { type: 'uint256', value: fromChain }, { type: 'uint256', value: toChain }, - { type: 'address', value: user }, - { type: 'bytes', value: nftData }, + { type: 'address', value: user } ] case 'test': return [{type: 'string', value: result.toString()}] diff --git a/general/mrc404_bridge.js b/general/mrc404_bridge.js new file mode 100644 index 0000000..19ede70 --- /dev/null +++ b/general/mrc404_bridge.js @@ -0,0 +1,92 @@ +const { ethCall } = MuonAppUtils + +const ABI_getTx = [ + { + inputs: [{ internalType: 'uint256', name: '_txId', type: 'uint256' }], + name: 'getTx', + outputs: [ + { internalType: 'uint256', name: 'txId', type: 'uint256' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'uint256', name: 'fromChain', type: 'uint256' }, + { internalType: 'uint256', name: 'toChain', type: 'uint256' }, + { internalType: 'address', name: 'user', type: 'address' }, + { internalType: "bytes", name: "nftData", type: "bytes" } + ], + stateMutability: 'view', + type: 'function' + } +] + +const BRIDGE_ADDRESSES = { + eth: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", + optimism: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", + arbitrum: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", +} + +module.exports = { + APP_NAME: 'mrc404_bridge', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'claim': + let { depositTxId, depositNetwork = 'eth' } = params + if (!(depositNetwork in BRIDGE_ADDRESSES)) { + throw { message: 'Invalid deposit network' } + } + if (!depositTxId) throw { message: 'Invalid deposit Tx Id' } + + const depositAddress = BRIDGE_ADDRESSES[depositNetwork] + + let result = await ethCall( + depositAddress, + 'getTx', + [depositTxId], + ABI_getTx, + depositNetwork + ) + let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result + return { + txId: txId.toString(), + tokenId: tokenId.toString(), + amount: amount.toString(), + fromChain: fromChain.toString(), + toChain: toChain.toString(), + user, + nftData + } + case 'test': + return 'done'; + default: + throw { message: `Unknown method ${method}` } + } + }, + + signParams: function (request, result) { + let { method } = request + + switch (method) { + case 'claim': + let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result + + return [ + { type: 'uint256', value: txId }, + { type: 'uint256', value: tokenId }, + { type: 'uint256', value: amount }, + { type: 'uint256', value: fromChain }, + { type: 'uint256', value: toChain }, + { type: 'address', value: user }, + { type: 'bytes', value: nftData }, + ] + case 'test': + return [{type: 'string', value: result.toString()}] + default: + throw { message: `Unknown method: ${method}` } + } + } +} From 1f6b0b7d590fbc2e8f99141e644cf3967c4b9afc Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 22 Feb 2024 19:26:35 +0330 Subject: [PATCH 316/406] mrc404 bridges apps --- .../{mrc404_bridge.js => mrc404_bridge_20.js} | 7 +- general/mrc404_bridge_721.js | 93 +++++++++++++++++++ 2 files changed, 96 insertions(+), 4 deletions(-) rename general/{mrc404_bridge.js => mrc404_bridge_20.js} (92%) create mode 100644 general/mrc404_bridge_721.js diff --git a/general/mrc404_bridge.js b/general/mrc404_bridge_20.js similarity index 92% rename from general/mrc404_bridge.js rename to general/mrc404_bridge_20.js index 19ede70..bd2654f 100644 --- a/general/mrc404_bridge.js +++ b/general/mrc404_bridge_20.js @@ -19,13 +19,12 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - eth: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", - optimism: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", - arbitrum: "0x6B0251c3Ab1bfF327c4Fc9195354909FF44383b7", + bsctest: "0x83C7C13AD3ac3d426e4ADc8975d18E34Bd6d483d", + mumbai: "0xEc881A21CB3Cb7C5E46597748b68DB6Fc2b54D5C", } module.exports = { - APP_NAME: 'mrc404_bridge', + APP_NAME: 'mrc404_bridge_20', onRequest: async function (request) { let { diff --git a/general/mrc404_bridge_721.js b/general/mrc404_bridge_721.js new file mode 100644 index 0000000..addce13 --- /dev/null +++ b/general/mrc404_bridge_721.js @@ -0,0 +1,93 @@ +const { ethCall } = MuonAppUtils + +const ABI_getTx = [ + { + inputs: [{ internalType: 'uint256', name: '_txId', type: 'uint256' }], + name: 'getTx', + outputs: [ + { internalType: 'uint256', name: 'txId', type: 'uint256' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + { internalType: 'uint256', name: 'fromChain', type: 'uint256' }, + { internalType: 'uint256', name: 'toChain', type: 'uint256' }, + { internalType: 'address', name: 'user', type: 'address' }, + { internalType: 'address', name: 'nftContract', type: 'address' }, + { internalType: "uint256[]", name: "nftIds", type: "uint256[]" }, + { internalType: "bytes", name: "nftData", type: "bytes" } + ], + stateMutability: 'view', + type: 'function' + } +] + +const BRIDGE_ADDRESSES = { + bsctest: "0x69CaABbEd5E4ca21F23B92d3f793bC3c1f90B623", + mumbai: "0x4ea97448d7fBA5Ce325fD146Ba4D76Cd4808BC5b" +} + +module.exports = { + APP_NAME: 'mrc404_bridge_721', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'claim': + let { depositTxId, depositNetwork = 'eth' } = params + if (!(depositNetwork in BRIDGE_ADDRESSES)) { + throw { message: 'Invalid deposit network' } + } + if (!depositTxId) throw { message: 'Invalid deposit Tx Id' } + + const depositAddress = BRIDGE_ADDRESSES[depositNetwork] + + let result = await ethCall( + depositAddress, + 'getTx', + [depositTxId], + ABI_getTx, + depositNetwork + ) + let { txId, tokenId, fromChain, toChain, user, nftIds, nftData } = result + nftIds = nftIds.map((val) => val.toString()); + return { + txId: txId.toString(), + tokenId: tokenId.toString(), + fromChain: fromChain.toString(), + toChain: toChain.toString(), + user, + nftIds, + nftData + } + case 'test': + return 'done'; + default: + throw { message: `Unknown method ${method}` } + } + }, + + signParams: function (request, result) { + let { method } = request + + switch (method) { + case 'claim': + let { txId, tokenId, fromChain, toChain, user, nftIds, nftData } = result + + return [ + { type: 'uint256', value: txId }, + { type: 'uint256', value: tokenId }, + { type: 'uint256', value: fromChain }, + { type: 'uint256', value: toChain }, + { type: 'address', value: user }, + { type: 'uint256[]', value: nftIds }, + { type: 'bytes', value: nftData }, + ] + case 'test': + return [{type: 'string', value: result.toString()}] + default: + throw { message: `Unknown method: ${method}` } + } + } +} From 48a70f13259880718d4e65252e98207b685ac51f Mon Sep 17 00:00:00 2001 From: Brillaugte <58943684+Brillaugte@users.noreply.github.com> Date: Tue, 27 Feb 2024 03:02:16 +0200 Subject: [PATCH 317/406] proxy update --- general/pionerv1_price.js | 271 ++++++++++++++++---------------------- 1 file changed, 115 insertions(+), 156 deletions(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index 6e66080..b5d0212 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -9,16 +9,12 @@ const PionerV1App = { let { method, data: { params = {} } } = request; switch (method) { case 'price': - const { asset1, asset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime } = params; - const prices = await this.fetchPrices(asset1, asset2); - - if (prices.oldestTimestamp < requestSignTime) { - throw new Error(`Sign time ${prices.oldestTimestamp} is not older than request sign time ${requestSignTime}.`); - } - + const { requestAsset1, requestAsset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime, requestPrecision, maxtimestampdiff } = params; + const prices = await this.makeApiCalls(maxtimestampdiff, requestPrecision, requestAsset1, requestAsset2); + return { - asset1: this.convertToBytes32(asset1), - asset2: this.convertToBytes32(asset2), + requestAsset1: this.convertToBytes32(requestAsset1), + requestAsset2: this.convertToBytes32(requestAsset2), requestPairBid: requestPairBid.toString(), requestPairAsk: requestPairAsk.toString(), pairBid: prices.pairBid.toString(), @@ -26,181 +22,143 @@ const PionerV1App = { confidence: prices.confidence.toString(), requestConfidence: requestConfidence.toString(), requestSignTime: requestSignTime.toString(), - oldestTimestamp: prices.oldestTimestamp.toString() + requestPrecision: requestPrecision.toString(), + proxyTimestamp: prices.timestamp.toString(), }; } }, - signParams: function (request, result) { - const signTimeBN = new BN(result.oldestTimestamp); - const requestSignTimeBN = new BN(result.requestSignTime); - const confidenceBN = new BN(result.confidence); - const requestConfidenceBN = new BN(result.requestConfidence); - - if (signTimeBN.lt(requestSignTimeBN)) { - throw new Error(`Sign time ${result.oldestTimestamp} is newer than requested sign time ${result.requestSignTime}.`); - } - - if (confidenceBN.gt(requestConfidenceBN)) { - throw new Error(`Actual confidence ${result.confidence} is greater than requested confidence ${result.requestConfidence}.`); + + const requestPairBidBN = new BN((result.requestPairBid * 1e18).toFixed(0), 10); + const requestPairAskBN = new BN((result.requestPairAsk * 1e18).toFixed(0), 10); + const pairBidBN = new BN((result.pairBid * 1e18).toFixed(0), 10); + const pairAskBN = new BN((result.pairAsk * 1e18).toFixed(0), 10); + const confidenceBN = new BN((result.confidence * 1e18).toFixed(0), 10); + const requestConfidenceBN = new BN((result.requestConfidence * 1e18).toFixed(0), 10); + const requestSignTime = result.requestSignTime ; + const proxyTimestamp = result.proxyTimestamp ; + + if (confidenceBN.gt(requestConfidenceBN)) {throw new Error(`0x101`);} + if( proxyTimestamp > requestSignTime) { throw new Error(`0x102`);} + + const precision = new BN(10).pow(new BN(18)); + + const diffBid = precision.sub(pairBidBN.mul(precision).div(requestPairBidBN)).abs(); + const diffAsk = precision.sub(pairAskBN.mul(precision).div(requestPairAskBN)).abs(); + + if (diffBid.gt(requestConfidenceBN)) { + throw new Error(`0x103`); } - + + if (diffAsk.gt(requestConfidenceBN)) { + throw new Error(`0x104`); + } + const convertresult = this.convertToBytes32(result.requestAsset1); + const convertresult2 = this.convertToBytes32(result.requestAsset2); + switch (request.method) { case 'price': return [ - { name: 'asset1', type: 'bytes32', value: result.asset1 }, - { name: 'asset2', type: 'bytes32', value: result.asset2 }, + { name: 'requestAsset1', type: 'bytes32', value: convertresult }, + { name: 'requestAsset2', type: 'bytes32', value: convertresult2}, { name: 'requestPairBid', type: 'uint256', value: this.scaleUp(result.requestPairBid).toString() }, { name: 'requestPairAsk', type: 'uint256', value: this.scaleUp(result.requestPairAsk).toString() }, { name: 'requestConfidence', type: 'uint256', value: this.scaleUp(result.requestConfidence).toString() }, - { name: 'requestSignTime', type: 'uint256', value: this.scaleUp(result.requestSignTime).toString() }, + { name: 'requestSignTime', type: 'uint256', value: result.requestSignTime}, + { name: 'requestPrecision', type: 'uint256', value: this.scaleUp(result.requestPrecision).toString() } ]; } }, - - -fetchPrices: async function (asset1, asset2) { - const [result1, result2] = await Promise.all([ - this.fetchAssetPrices(asset1), - this.fetchAssetPrices(asset2) - ]); - - const adjustedPrices1 = asset1 === 'hardusd' ? { avgBid: 1, avgAsk: 1 } : this.calculateAveragePrices(result1.prices); - const adjustedPrices2 = asset2 === 'hardusd' ? { avgBid: 1, avgAsk: 1 } : this.calculateAveragePrices(result2.prices); - const asset1Confidence = asset1 === 'hardusd' ? 0 : this.calculateConfidence(result1.prices); - const asset2Confidence = asset2 === 'hardusd' ? 0 : this.calculateConfidence(result2.prices); - const highestConfidence = Math.max(asset1Confidence, asset2Confidence); - const oldestTimestamp = Math.min(result1.oldestTimestamp, result2.oldestTimestamp); - - return { - pairBid: adjustedPrices1.avgBid / adjustedPrices2.avgBid, - pairAsk: adjustedPrices1.avgAsk / adjustedPrices2.avgAsk, - confidence: highestConfidence, - oldestTimestamp - }; -}, - - fetchAssetPrices: async function (asset) { - if (asset === 'hardusd') return { prices: [{ bid: 1, ask: 1, timestamp: null }], oldestTimestamp: null }; - const [assetType, assetSymbol] = asset.split('.'); - const apiConfigs = this.loadApiConfigsForType(assetType); - let oldestTimestamp = Infinity; - const prices = []; - - for (const config of apiConfigs) { - const formattedSymbol = this.formatSymbolForAPI(assetType, assetSymbol); - const priceData = await this.fetchPriceFromAPI(config, formattedSymbol); - if (priceData) { - prices.push(priceData); - if (priceData.timestamp && priceData.timestamp < oldestTimestamp) { - oldestTimestamp = priceData.timestamp; - } - } - } - return { prices, oldestTimestamp }; - }, - loadApiConfigsForType: function (assetType) { - const allConfigs = JSON.parse(process.env.APPS_PIONERV1_VARS); - const configs = []; - const prefix = `API_${assetType.toUpperCase()}_`; - - for (const [key, value] of Object.entries(allConfigs)) { - if (key.startsWith(prefix)) { - const parts = key.substring(prefix.length).split('_'); - const apiIdentifier = parts[0]; - const attribute = parts.slice(1).join('_').toLowerCase(); - const existingConfig = configs.find(c => c.identifier === apiIdentifier); - if (existingConfig) { - existingConfig[attribute] = value; - } else { - configs.push({ identifier: apiIdentifier, [attribute]: value }); - } + makeApiCalls: async function(maxtimestampdiff, abPrecision, asset1, asset2) { + try { + const proxyVars = process.env.APPS_PIONERV1_VARS; + const proxies = JSON.parse(proxyVars); + + const responsePromises = []; + for (let i = 1; i <= parseInt(proxies.PROXY_NUMBERS); i++) { + const proxy = proxies[`PROXY${i}`]; + const apiKey = proxies[`PROXY${i}KEY`]; + + const apiUrl = `${proxy}${apiKey}&a=${asset1}&b=${asset2}&abprecision=${abPrecision}&confprecision=${abPrecision}&maxtimestampdiff=${maxtimestampdiff}`; + + const timeoutConfig = { timeout: 500 }; + + responsePromises.push(axios.get(apiUrl, timeoutConfig).then(response => { + if (response.status === 200) { + const { pairBid, pairAsk, confidence, timestamp } = response.data; + const numericPairBid = parseFloat(pairBid); + const numericPairAsk = parseFloat(pairAsk); + const numericConfidence = parseFloat(confidence); + const numericTimestamp = parseFloat(timestamp); + + if (!isNaN(numericPairBid) && + !isNaN(numericPairAsk) && + !isNaN(numericConfidence) && + !isNaN(numericTimestamp)) { + return { ...response, data: { ...response.data, pairBid: numericPairBid, pairAsk: numericPairAsk, confidence: numericConfidence, timestamp: numericTimestamp } }; + } else { + console.log(`Invalid data from Proxy ${i}.`); + return null; + } + } else { + console.log(`Invalid response status from Proxy ${i}. Status: ${response.status}. url: ${apiUrl}`); + return null; + } + }).catch(error => { + console.error(`Error with Proxy : ${error.message}. Url ${apiUrl} :`); + return null; + })); } - } - return configs; - }, - formatSymbolForAPI: function (assetType, symbol) { - return assetType === 'fx' ? symbol.toLowerCase() : symbol.toUpperCase(); - }, - - fetchPriceFromAPI: async function (config, symbol) { - const url = `${config.url_before_asset}${symbol}${config.url_after_asset}`; - try { - const response = await axios.get(url); - const data = Array.isArray(response.data) ? response.data[0] : response.data; + const responses = await Promise.all(responsePromises); - const timestampField = config.time_field; - let timestamp = data[timestampField]; - if (typeof timestamp === 'number') { - timestamp *= timestamp < 1e12 ? 1000 : 1; - } else if (typeof timestamp === 'string') { - timestamp = new Date(timestamp).getTime(); - } else { - timestamp = null; - } + const validResponses = responses.filter(response => response !== null); + if ( validResponses.length > 0 ) { + let averageTimestamp = 0; + let averagePairBid = 0; + let averagePairAsk = 0; + let averageConfidence = 0; - const bid = parseFloat(data[config.bid_field]); - const ask = parseFloat(data[config.ask_field]); - if (isNaN(bid) || isNaN(ask) || bid <= 0 || ask <= 0 || ask < bid) { - console.error(`Invalid price data: `, { bid, ask }); - return null; - } + for (const response of validResponses) { + const { timestamp, pairBid, pairAsk, confidence } = response.data; - return { - bid, - ask, - timestamp - }; - } catch (error) { - console.error(`Error fetching price from API: `, error); - return null; - } - }, + averageTimestamp += timestamp; + averagePairBid += pairBid; + averagePairAsk += pairAsk; + averageConfidence += confidence; + } + averageTimestamp /= validResponses.length; + averagePairBid /= validResponses.length; + averagePairAsk /= validResponses.length; + averageConfidence /= validResponses.length; - isValidPriceData: function (data, config) { - const hasRequiredFields = data && - data.hasOwnProperty(config.bid_field) && - data.hasOwnProperty(config.ask_field) && - data.hasOwnProperty(config.time_field); + let closestDistance = Infinity; + let closestResponse = null; - if (!hasRequiredFields) return false; + for (const response of validResponses) { + const { timestamp, pairBid, pairAsk, confidence } = response.data; - const bidAskValid = data[config.bid_field] != null && data[config.ask_field] != null; - const timestampValid = data[config.time_field] != null && parseInt(data[config.time_field]) >= 10000; + const distance = Math.abs(timestamp - averageTimestamp) + + Math.abs(pairBid - averagePairBid) + + Math.abs(pairAsk - averagePairAsk) + + Math.abs(confidence - averageConfidence); - return bidAskValid && timestampValid; - }, + if (distance < closestDistance) { + closestDistance = distance; + closestResponse = response.data; + } + } - - calculateAveragePrices: function (prices) { - const totalBid = prices.reduce((sum, price) => sum + (price ? price.bid : 0), 0); - const totalAsk = prices.reduce((sum, price) => sum + (price ? price.ask : 0), 0); - const count = prices.filter(price => price).length; - return { - avgBid: count > 0 ? totalBid / count : NaN, - avgAsk: count > 0 ? totalAsk / count : NaN - }; - }, - - calculateConfidence: function (prices) { - let minBid = prices[0].bid, maxBid = prices[0].bid; - let minAsk = prices[0].ask, maxAsk = prices[0].ask; - prices.forEach(price => { - if (price.bid < minBid) minBid = price.bid; - if (price.bid > maxBid) maxBid = price.bid; - if (price.ask < minAsk) minAsk = price.ask; - if (price.ask > maxAsk) maxAsk = price.ask; - }); - const bidSpread = ((maxBid - minBid) / minBid) * 100; - const askSpread = ((maxAsk - minAsk) / minAsk) * 100; - return Math.max(bidSpread, askSpread); + return closestResponse; + } + } catch (error) { + console.error('Error making API calls:', error); + } }, - convertToBytes32: function (str) { const hex = Web3.utils.toHex(str); return Web3.utils.padRight(hex, 64); @@ -209,6 +167,7 @@ fetchPrices: async function (asset1, asset2) { scaleUp: function (value) { return new BN(toBaseUnit(String(value), 18)); } + }; -module.exports = PionerV1App; +module.exports = PionerV1App; \ No newline at end of file From b9c61f9e7fdf7afc2addbb323acd0014e00e7a3e Mon Sep 17 00:00:00 2001 From: Brillaugte <58943684+Brillaugte@users.noreply.github.com> Date: Tue, 27 Feb 2024 03:34:32 +0200 Subject: [PATCH 318/406] String format error --- general/pionerv1_price.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index b5d0212..06ef7ff 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -40,7 +40,7 @@ const PionerV1App = { const proxyTimestamp = result.proxyTimestamp ; if (confidenceBN.gt(requestConfidenceBN)) {throw new Error(`0x101`);} - if( proxyTimestamp > requestSignTime) { throw new Error(`0x102`);} + if( Number(proxyTimestamp) > Number(requestSignTime)) { throw new Error(`0x102`);} const precision = new BN(10).pow(new BN(18)); From 689c77fcf6095c1a49e1d3e9fc668503bc8dbb21 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 5 Mar 2024 02:13:22 +0330 Subject: [PATCH 319/406] update BL --- general/pion_tss_reward_oracle.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index d582b7f..0293e0f 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -17,10 +17,10 @@ const MONITORING_SERVERS = ["https://app.muon.net/monitor"]; const BLACKLIST = [ "0xD3796c121479f1a01A023B1B6E24a33f1476E78d", - "0xEf6C57b608Fa240bFBb1C16106dAc1f86C4CDc2f", - "0x54bDD54bd172ACfd80119338fa2F995f7A0858DE", - "0x8B0efE89C2cE4BDa805f91327640BC453e0445dc", - "0x5E3613AEb7417Ae80e850D19EC4540C44AeADFe5", + // "0xEf6C57b608Fa240bFBb1C16106dAc1f86C4CDc2f", + // "0x54bDD54bd172ACfd80119338fa2F995f7A0858DE", + // "0x8B0efE89C2cE4BDa805f91327640BC453e0445dc", + // "0x5E3613AEb7417Ae80e850D19EC4540C44AeADFe5", "0xE4b32Bcef3154F9d3D882ee8e1136b4EF28c47bd", "0x1A384Cce14bc64296251448F2e185b5A107De549", "0x54CF29103D683104a37E8C5486010aaEC8B30014" From c7b855eba0fcf65a87e1fc327e606da98c74db06 Mon Sep 17 00:00:00 2001 From: Brillaugte <58943684+Brillaugte@users.noreply.github.com> Date: Fri, 8 Mar 2024 19:50:09 +0200 Subject: [PATCH 320/406] Corrected assetHex going other 32 slots. --- general/pionerv1_price.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index 06ef7ff..def8112 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -54,14 +54,13 @@ const PionerV1App = { if (diffAsk.gt(requestConfidenceBN)) { throw new Error(`0x104`); } - const convertresult = this.convertToBytes32(result.requestAsset1); - const convertresult2 = this.convertToBytes32(result.requestAsset2); + + const assetHex = this.convertToBytes32(result.requestAsset1 + '/' + result.requestAsset2); switch (request.method) { case 'price': return [ - { name: 'requestAsset1', type: 'bytes32', value: convertresult }, - { name: 'requestAsset2', type: 'bytes32', value: convertresult2}, + { name: 'requestAssetHex', type: 'bytes32', value: assetHex }, { name: 'requestPairBid', type: 'uint256', value: this.scaleUp(result.requestPairBid).toString() }, { name: 'requestPairAsk', type: 'uint256', value: this.scaleUp(result.requestPairAsk).toString() }, { name: 'requestConfidence', type: 'uint256', value: this.scaleUp(result.requestConfidence).toString() }, @@ -160,7 +159,9 @@ const PionerV1App = { }, convertToBytes32: function (str) { - const hex = Web3.utils.toHex(str); + const maxLength = 31; + const truncatedStr = str.slice(0, maxLength); + const hex = Web3.utils.toHex(truncatedStr); return Web3.utils.padRight(hex, 64); }, @@ -170,4 +171,4 @@ const PionerV1App = { }; -module.exports = PionerV1App; \ No newline at end of file +module.exports = PionerV1App; From 0bff9a2b91d27102d18ad56f9eb6383fa7f8fa27 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Sat, 16 Mar 2024 00:17:09 +0330 Subject: [PATCH 321/406] pion_tss updates --- general/pion_tss_reward_oracle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 0293e0f..1525bcd 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -16,7 +16,7 @@ const helperContract = new w3.eth.Contract(HELPER_ABI, HELPER_ADDR); const MONITORING_SERVERS = ["https://app.muon.net/monitor"]; const BLACKLIST = [ - "0xD3796c121479f1a01A023B1B6E24a33f1476E78d", + // "0xD3796c121479f1a01A023B1B6E24a33f1476E78d", // "0xEf6C57b608Fa240bFBb1C16106dAc1f86C4CDc2f", // "0x54bDD54bd172ACfd80119338fa2F995f7A0858DE", // "0x8B0efE89C2cE4BDa805f91327640BC453e0445dc", From 27811a42a8a203db44253ba47abfe35aac891364 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Mon, 18 Mar 2024 17:51:46 +0330 Subject: [PATCH 322/406] Update MRC404 bridge addresses --- general/mrc404_bridge_20.js | 4 ++-- general/mrc404_bridge_721.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/general/mrc404_bridge_20.js b/general/mrc404_bridge_20.js index bd2654f..8941632 100644 --- a/general/mrc404_bridge_20.js +++ b/general/mrc404_bridge_20.js @@ -19,8 +19,8 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - bsctest: "0x83C7C13AD3ac3d426e4ADc8975d18E34Bd6d483d", - mumbai: "0xEc881A21CB3Cb7C5E46597748b68DB6Fc2b54D5C", + sepolia: "0x90FeC556De8caf34E2f4c655a954e4C6Dc0F1b22", + mumbai: "0xD66bbf580248f72039F5a48231F8C3aD20335B4E", } module.exports = { diff --git a/general/mrc404_bridge_721.js b/general/mrc404_bridge_721.js index addce13..2258ef2 100644 --- a/general/mrc404_bridge_721.js +++ b/general/mrc404_bridge_721.js @@ -20,8 +20,8 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - bsctest: "0x69CaABbEd5E4ca21F23B92d3f793bC3c1f90B623", - mumbai: "0x4ea97448d7fBA5Ce325fD146Ba4D76Cd4808BC5b" + sepolia: "0xE166A32d179a361c1017f8efFEe22bacAe6160FC", + mumbai: "0xC200536beD0dDD8d13eA7C8Eabda762f33028FB0" } module.exports = { From dfa0b908f51bf55c7a8a14d7d1ff046c796b2073 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 18 Mar 2024 18:13:08 +0330 Subject: [PATCH 323/406] apps --- general/pion_tss_reward_oracle.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/pion_tss_reward_oracle.js b/general/pion_tss_reward_oracle.js index 1525bcd..5a222ba 100644 --- a/general/pion_tss_reward_oracle.js +++ b/general/pion_tss_reward_oracle.js @@ -21,9 +21,9 @@ const BLACKLIST = [ // "0x54bDD54bd172ACfd80119338fa2F995f7A0858DE", // "0x8B0efE89C2cE4BDa805f91327640BC453e0445dc", // "0x5E3613AEb7417Ae80e850D19EC4540C44AeADFe5", - "0xE4b32Bcef3154F9d3D882ee8e1136b4EF28c47bd", - "0x1A384Cce14bc64296251448F2e185b5A107De549", - "0x54CF29103D683104a37E8C5486010aaEC8B30014" + // "0xE4b32Bcef3154F9d3D882ee8e1136b4EF28c47bd", + // "0x1A384Cce14bc64296251448F2e185b5A107De549", + // "0x54CF29103D683104a37E8C5486010aaEC8B30014" ] From 029ec8e946bc61653208e362aa7cc561c6bd6615 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 21 Mar 2024 17:46:08 +0330 Subject: [PATCH 324/406] apps --- general/mrc404_bridge_721.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/mrc404_bridge_721.js b/general/mrc404_bridge_721.js index 2258ef2..2d23d6c 100644 --- a/general/mrc404_bridge_721.js +++ b/general/mrc404_bridge_721.js @@ -20,8 +20,8 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - sepolia: "0xE166A32d179a361c1017f8efFEe22bacAe6160FC", - mumbai: "0xC200536beD0dDD8d13eA7C8Eabda762f33028FB0" + sepolia: "0x1fFD99C83a02899B403e2ed7fABDb2EcB82b2573", + mumbai: "0xb57963d5250d281Bfab7BA66361d53523d990A3f" } module.exports = { From cec3c78b7b8a7bbbbb125f5a14fe5e386fd72531 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 25 Mar 2024 02:47:06 +0330 Subject: [PATCH 325/406] apps --- general/mrc404_bridge_20.js | 9 +++++++-- general/mrc404_bridge_721.js | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/general/mrc404_bridge_20.js b/general/mrc404_bridge_20.js index 8941632..c115448 100644 --- a/general/mrc404_bridge_20.js +++ b/general/mrc404_bridge_20.js @@ -19,8 +19,13 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - sepolia: "0x90FeC556De8caf34E2f4c655a954e4C6Dc0F1b22", - mumbai: "0xD66bbf580248f72039F5a48231F8C3aD20335B4E", + // sepolia: "0x90FeC556De8caf34E2f4c655a954e4C6Dc0F1b22", + // mumbai: "0xD66bbf580248f72039F5a48231F8C3aD20335B4E", + bsc: "0xC4A08fAf00dA2843373851CD1031169B4eDfFF6a", + blast: "0xC4A08fAf00dA2843373851CD1031169B4eDfFF6a", + base: "0xC4A08fAf00dA2843373851CD1031169B4eDfFF6a", + arbitrum: "0xC4A08fAf00dA2843373851CD1031169B4eDfFF6a", + optimism: "0xC4A08fAf00dA2843373851CD1031169B4eDfFF6a" } module.exports = { diff --git a/general/mrc404_bridge_721.js b/general/mrc404_bridge_721.js index 2d23d6c..bc9b6ba 100644 --- a/general/mrc404_bridge_721.js +++ b/general/mrc404_bridge_721.js @@ -20,8 +20,13 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - sepolia: "0x1fFD99C83a02899B403e2ed7fABDb2EcB82b2573", - mumbai: "0xb57963d5250d281Bfab7BA66361d53523d990A3f" + // sepolia: "0x90FeC556De8caf34E2f4c655a954e4C6Dc0F1b22", + // mumbai: "0xD66bbf580248f72039F5a48231F8C3aD20335B4E", + bsc: "0x9bF409A2D0f652665295484082DCC553FB140606", + blast: "0x9bF409A2D0f652665295484082DCC553FB140606", + base: "0x9bF409A2D0f652665295484082DCC553FB140606", + arbitrum: "0x9bF409A2D0f652665295484082DCC553FB140606", + optimism: "0x9bF409A2D0f652665295484082DCC553FB140606" } module.exports = { From c22ac813ebb4ad214f562008c84a9b988dbce251 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 25 Mar 2024 23:47:02 +0330 Subject: [PATCH 326/406] apps --- general/mrc404_bridge_20.js | 3 +++ general/mrc404_bridge_721.js | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/general/mrc404_bridge_20.js b/general/mrc404_bridge_20.js index c115448..b1f2b27 100644 --- a/general/mrc404_bridge_20.js +++ b/general/mrc404_bridge_20.js @@ -55,6 +55,9 @@ module.exports = { depositNetwork ) let { txId, tokenId, amount, fromChain, toChain, user, nftData } = result + if(!tokenId){ + throw {message: "Invalid tx"} + } return { txId: txId.toString(), tokenId: tokenId.toString(), diff --git a/general/mrc404_bridge_721.js b/general/mrc404_bridge_721.js index bc9b6ba..a3064c3 100644 --- a/general/mrc404_bridge_721.js +++ b/general/mrc404_bridge_721.js @@ -55,7 +55,10 @@ module.exports = { ABI_getTx, depositNetwork ) - let { txId, tokenId, fromChain, toChain, user, nftIds, nftData } = result + let { txId, tokenId, fromChain, toChain, user, nftIds, nftData } = result; + if(!tokenId){ + throw {message: "Invalid tx"} + } nftIds = nftIds.map((val) => val.toString()); return { txId: txId.toString(), From a6435e6185278360d0c33af96f1c4dbcc13cf7a9 Mon Sep 17 00:00:00 2001 From: Sullivan <22621120+0xSullivan@users.noreply.github.com> Date: Sat, 30 Mar 2024 13:45:15 +0330 Subject: [PATCH 327/406] Update golden_goose.js Update contract address Fix timestamp check bug --- general/golden_goose.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/golden_goose.js b/general/golden_goose.js index bbee596..a606640 100644 --- a/general/golden_goose.js +++ b/general/golden_goose.js @@ -51,7 +51,7 @@ const LGE_ABI = [{ }] const LGE_ADDRESSES = { - 137: '0x16e7923e8b2DC378f366ED597514b90237C4C50f' + 137: '0xd73384295A3aF36E0F5d44508cac1E28f3fBcEa2' } const total = (new BN(6.6e6)).mul((new BN(10)).pow(new BN(18))) @@ -86,7 +86,7 @@ const TssApp = { ) } - if (Math.abs(timestamp - getTimestamp()) < 600) throw { message: 'Invalid Timestamp' } + if (getTimestamp() - 300 < timestamp && timestamp < getTimestamp() + 300) throw { message: 'Invalid Timestamp' } if (currentTotal > total) throw { message: 'Cap Reached' } From 63d59379dac0243e74ae8ec709a708e063bd4a5c Mon Sep 17 00:00:00 2001 From: Sullivan <22621120+0xSullivan@users.noreply.github.com> Date: Sat, 30 Mar 2024 13:47:19 +0330 Subject: [PATCH 328/406] Update golden_goose.js --- general/golden_goose.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/golden_goose.js b/general/golden_goose.js index a606640..273b7eb 100644 --- a/general/golden_goose.js +++ b/general/golden_goose.js @@ -86,7 +86,7 @@ const TssApp = { ) } - if (getTimestamp() - 300 < timestamp && timestamp < getTimestamp() + 300) throw { message: 'Invalid Timestamp' } + if (!(getTimestamp() - 300 < timestamp && timestamp < getTimestamp() + 300)) throw { message: 'Invalid Timestamp' } if (currentTotal > total) throw { message: 'Cap Reached' } From 8c222ae9bdd185c0c4f66a8218e6fb59016dd3a0 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 31 Mar 2024 13:13:27 +0330 Subject: [PATCH 329/406] Update unitap app --- general/unitap.js | 80 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 8 deletions(-) diff --git a/general/unitap.js b/general/unitap.js index 0af102d..dec9311 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -6,7 +6,7 @@ const PRIZE_TAP_VRF_CLIENT = { abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] } -const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "raffles", "outputs": [{ "internalType": "address", "name": "initiator", "type": "address" }, { "internalType": "uint256", "name": "maxParticipants", "type": "uint256" }, { "internalType": "uint256", "name": "maxMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" }, { "internalType": "uint256", "name": "participantsCount", "type": "uint256" }, { "internalType": "uint32", "name": "winnersCount", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }, { "internalType": "enum AbstractPrizetapRaffle.Status", "name": "status", "type": "uint8" }, { "internalType": "bytes32", "name": "requirementsHash", "type": "bytes32" }], "stateMutability": "view", "type": "function" }] +const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "raffleId", "type": "uint256" }], "name": "getWinnersCount", "outputs": [{ "internalType": "uint256", "name": "winnersCount", "type": "uint256" }], "stateMutability": "view", "type": "function" }] const UnitapApp = { APP_NAME: 'unitap', @@ -24,14 +24,14 @@ const UnitapApp = { throw e.response.data } - const { chain, wallet, multiplier, raffle } = result.data.entry + const { chain, userWalletAddress, multiplier, raffle } = result.data.entry const { raffleId, contract } = raffle - if (chain && wallet && multiplier && raffleId) { + if (chain && userWalletAddress && multiplier && raffleId) { return { chain, contract, - wallet, + wallet: userWalletAddress, raffleId, multiplier, } @@ -41,7 +41,7 @@ const UnitapApp = { }, getWinnersCount: async function (chainId, raffelId, prizetapRaffle) { - const { winnersCount } = await ethCall(prizetapRaffle, 'raffles', [raffelId], PRIZE_TAP_RAFFLE, chainId) + const winnersCount = await ethCall(prizetapRaffle, 'getWinnersCount', [raffelId], PRIZE_TAP_RAFFLE, chainId) if (winnersCount == 0) { throw { detail: 'INVALID_RAFFLE_ID' } } @@ -68,10 +68,36 @@ const UnitapApp = { return { randomWords, expirationTime } }, + getTokenTapClaim: async function (claimId) { + const url = `https://stage.unitap.app/api/tokentap/claim-detail/${claimId}/` + let result + try { + result = await axios.get(url, { + headers: { "Accept-Encoding": "gzip,deflate,compress" } + }) + } catch (e) { + throw e.response.data + } + + const { tokenDistribution, userWalletAddress } = result.data.data + const { chain: { chainId }, distributionId, contract } = tokenDistribution + + if (chainId && userWalletAddress && distributionId && contract) { + return { + chain: chainId, + contract, + wallet: userWalletAddress, + distributionId + } + } + + else throw { detail: 'INVALID_CLAIM_ENTRY' } + }, + onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { - case 'raffle-entry': + case 'raffle-entry': { let { raffleEntryId } = params @@ -91,7 +117,7 @@ const UnitapApp = { raffleId, multiplier, } - + } case 'random-words': { let { chainId, @@ -107,7 +133,26 @@ const UnitapApp = { expirationTime, } } + case 'claim-token': { + let { + claimId + } = params + + const { + chain, + contract, + wallet, + distributionId + } = await this.getTokenTapClaim(claimId); + return { + chain, + contract, + wallet, + distributionId, + claimId + } + } default: throw { message: `invalid method ${method}` } } @@ -134,7 +179,7 @@ const UnitapApp = { ] } - case 'random-words': + case 'random-words': { let { randomWords, expirationTime, @@ -145,6 +190,25 @@ const UnitapApp = { { type: 'uint256[]', value: randomWords }, { type: 'uint256', value: expirationTime }, ] + } + + case 'claim-token': { + let { + chain, + contract, + wallet, + distributionId, + claimId + } = result + + return [ + { type: 'uint256', value: chain }, + { type: 'address', value: contract }, + { type: 'address', value: wallet }, + { type: 'uint256', value: distributionId }, + { type: 'uint256', value: claimId }, + ] + } default: throw { message: `Unknown method: ${request.method}` } From a0627dd68be36e05733e8ec929e8d273f6709a35 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 31 Mar 2024 13:24:16 +0330 Subject: [PATCH 330/406] Update unitap app --- general/unitap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/unitap.js b/general/unitap.js index dec9311..678d42d 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -69,7 +69,7 @@ const UnitapApp = { }, getTokenTapClaim: async function (claimId) { - const url = `https://stage.unitap.app/api/tokentap/claim-detail/${claimId}/` + const url = `https://api.unitap.app/api/tokentap/claim-detail/${claimId}/` let result try { result = await axios.get(url, { From 1ac31258c75603447d55bc331681099c5a34710b Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 11 Apr 2024 01:39:39 +0330 Subject: [PATCH 331/406] BTQ app --- general/btq.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 general/btq.js diff --git a/general/btq.js b/general/btq.js new file mode 100644 index 0000000..308c880 --- /dev/null +++ b/general/btq.js @@ -0,0 +1,44 @@ +const falcon = require('@btq-js/falcon-js'); + +const BTQApp = { + APP_NAME: 'btq', + useTss: true, + + onRequest: async function (request) { + let {method, data: { params }} = request; + + switch (method) { + case 'verifyFalconSig': + try { + const txData = Uint8Array.from(Buffer.from(params.txData)); + const isVerified = await falcon.verify( + txData, + Uint8Array.from(params.falconSig), + Uint8Array.from(params.falconPubKey) + ) + if(isVerified) { + return params.txData; + } else { + throw new Error('Invalid falcon sig'); + } + } catch (error) { + console.log(error) + throw new Error('Invalid falcon sig'); + } + default: + throw {message: `invalid method ${method}`} + } + }, + + signParams: function (request, result) { + console.log(result) + switch (request.method) { + case 'verifyFalconSig': + return [{type: 'string', value: result.toString()}] + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = BTQApp From b2d397783e3b23f3b04d8f78db106fe142f96cdf Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 11 Apr 2024 14:51:50 +0330 Subject: [PATCH 332/406] apps --- general/btq.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/btq.js b/general/btq.js index 308c880..e52d64a 100644 --- a/general/btq.js +++ b/general/btq.js @@ -10,11 +10,11 @@ const BTQApp = { switch (method) { case 'verifyFalconSig': try { - const txData = Uint8Array.from(Buffer.from(params.txData)); + const txData = Uint8Array.from(Buffer.from(params.txData, 'hex')); const isVerified = await falcon.verify( txData, - Uint8Array.from(params.falconSig), - Uint8Array.from(params.falconPubKey) + Uint8Array.from(Buffer.from(params.falconSig, 'hex')), + Uint8Array.from(Buffer.from(params.falconPubKey, 'hex')), ) if(isVerified) { return params.txData; From 4291bd2d504a828621cb4cf3dfc524bdcb0c7bb6 Mon Sep 17 00:00:00 2001 From: PrometeoThena Date: Fri, 12 Apr 2024 13:24:51 +0200 Subject: [PATCH 333/406] Thena Trade 2 earn --- general/thenaTrade2Earn.js | 152 +++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 general/thenaTrade2Earn.js diff --git a/general/thenaTrade2Earn.js b/general/thenaTrade2Earn.js new file mode 100644 index 0000000..f250345 --- /dev/null +++ b/general/thenaTrade2Earn.js @@ -0,0 +1,152 @@ +const { axios, ethCall, BN, toBaseUnit } = MuonAppUtils + +const DibsRepository = "0x1370Ff0e5CC846a95f34FE50aD90daad17022797" +const DIBS_REPO_ABI = [{ "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "name": "projects", "outputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "dibs", "type": "address" }, { "internalType": "string", "name": "subgraphEndpoint", "type": "string" }, { "internalType": "uint32", "name": "firstRoundStartTime", "type": "uint32" }, { "internalType": "uint32", "name": "roundDuration", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "roundId", "type": "bytes32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] + +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) +const VALID_TOLERANCE = scaleUp('0.01') +const SCALE = scaleUp('1') + +module.exports = { + APP_NAME: 'thenaTrade2Earn', + + isToleranceOk: function (amount, expectedAmount, validTolerance) { + let diff = new BN(amount).sub(new BN(expectedAmount)).abs() + const diffPercentage = new BN(diff).mul(SCALE).div(new BN(expectedAmount)) + return { + isOk: !diffPercentage.gt(new BN(validTolerance)), + diffPercentage: diffPercentage.mul(new BN(100)).div(SCALE) + } + }, + + postQuery: async function (query, subgraphEndpoint) { + const result = await axios.post(subgraphEndpoint, { + query: query + }) + + const data = result.data + + if (data.errors) { + throw data.errors + } + + return data.data + }, + + + fetchProject: async function (projectId) { + const { dibs, chainId, subgraphEndpoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 137) + return { dibs, chainId, subgraphEndpoint } + }, + + + getDailyVolume: async function (user, pair, day, subgraphEndpoint) { + const totalQuery = `{ + totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { + id + user + amountAsUser + day + } + }` + + const userQuery = `{ + userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user.toLowerCase()}", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { + id + user + amountAsUser + day + } + }` + + const totalData = (await this.postQuery(totalQuery, subgraphEndpoint)).totalVolume + const userData = (await this.postQuery(userQuery, subgraphEndpoint)).userVolume + + if (userData.length == 0) throw { message: `NO_RECORD_FOR_USER` } + if (totalData.length == 0) throw { message: `NO_RECORD_FOR_PLATFORM` } + + const totalVolume = totalData[0].amountAsUser + const userVolume = userData[0].amountAsUser + + return { + userVolume, + totalVolume, + } + }, + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + switch (method) { + + case 'userVolume': { + let { + projectId, + user, + pair, + day + } = params + + if (parseInt(day) < 0) throw { message: 'NEGATIVE_DAY' } + + const { subgraphEndpoint } = await this.fetchProject(projectId) + const { userVolume, totalVolume } = await this.getDailyVolume(user, pair, day, subgraphEndpoint) + + return { + projectId, + user, + pair, + day, + userVolume, + totalVolume, + } + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + + case 'userVolume': { + let { + projectId, + user, + pair, + day, + userVolume, + totalVolume, + } = result + + if (!this.isToleranceOk(userVolume, request.data.result.userVolume, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error - user volume` } + if (!this.isToleranceOk(totalVolume, request.data.result.totalVolume, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error - total volume` } + + return [ + { type: 'bytes32', value: projectId }, + { type: 'address', value: user }, + { type: 'address', value: pair }, + { type: 'uint256', value: day }, + { type: 'uint256', value: request.data.result.userVolume }, + { type: 'uint256', value: request.data.result.totalVolume }, + { type: 'uint256', value: request.data.timestamp }, + ] + } + + default: + break + } + } +} \ No newline at end of file From 4039f7e030fb5af7d1cdbb33f3d18dd574d954a5 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 12 Apr 2024 16:31:15 +0330 Subject: [PATCH 334/406] apps --- general/thenaTrade2Earn.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/thenaTrade2Earn.js b/general/thenaTrade2Earn.js index f250345..56e454c 100644 --- a/general/thenaTrade2Earn.js +++ b/general/thenaTrade2Earn.js @@ -9,6 +9,7 @@ const SCALE = scaleUp('1') module.exports = { APP_NAME: 'thenaTrade2Earn', + useFrost: true, isToleranceOk: function (amount, expectedAmount, validTolerance) { let diff = new BN(amount).sub(new BN(expectedAmount)).abs() From 71e9a166c92a56366562cb9efa7e8c5ee2b4469d Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Mon, 15 Apr 2024 10:42:25 +0330 Subject: [PATCH 335/406] change stage_unitap vrf client --- general/stage_unitap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index 5ff2d2d..0f1d1e4 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -1,8 +1,8 @@ const { axios, ethCall } = MuonAppUtils const PRIZE_TAP_VRF_CLIENT = { - chainId: 80001, - address: "0xD1E7877A1C3F782dec76FB58C2B926365433d46F", + chainId: 97, + address: "0xb8B0c04282d9c55cb17d7ef0bF56ef3Bbe203F3C", abi: [{ "inputs": [{ "internalType": "uint256", "name": "requestId", "type": "uint256" }], "name": "getRandomWords", "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastRequestId", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "name": "vrfRequests", "outputs": [{ "internalType": "uint256", "name": "expirationTime", "type": "uint256" }, { "internalType": "uint256", "name": "numWords", "type": "uint256" }], "stateMutability": "view", "type": "function" }] } From faad3cc78581e0800cf718776c9a3d29265e8d1c Mon Sep 17 00:00:00 2001 From: Nebule Date: Sun, 21 Apr 2024 06:10:18 +0200 Subject: [PATCH 336/406] Fixed BN not working in signParams (wrong types) --- general/pionerv1_price.js | 140 ++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 73 deletions(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index def8112..a835ddd 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -9,94 +9,89 @@ const PionerV1App = { let { method, data: { params = {} } } = request; switch (method) { case 'price': - const { requestAsset1, requestAsset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime, requestPrecision, maxtimestampdiff } = params; - const prices = await this.makeApiCalls(maxtimestampdiff, requestPrecision, requestAsset1, requestAsset2); + const { requestAsset1, requestAsset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime, requestPrecision, maxTimestampDiff } = params; + const prices = await this.makeApiCalls(maxTimestampDiff, requestPrecision, requestAsset1, requestAsset2); return { requestAsset1: this.convertToBytes32(requestAsset1), requestAsset2: this.convertToBytes32(requestAsset2), - requestPairBid: requestPairBid.toString(), - requestPairAsk: requestPairAsk.toString(), - pairBid: prices.pairBid.toString(), - pairAsk: prices.pairAsk.toString(), - confidence: prices.confidence.toString(), - requestConfidence: requestConfidence.toString(), - requestSignTime: requestSignTime.toString(), - requestPrecision: requestPrecision.toString(), - proxyTimestamp: prices.timestamp.toString(), + requestPairBid: requestPairBid, + requestPairAsk: requestPairAsk, + pairBid: prices.pairBid, + pairAsk: prices.pairAsk, + confidence: prices.confidence, + requestConfidence: requestConfidence, + requestSignTime: requestSignTime, + requestPrecision: requestPrecision, + proxyTimestamp: prices.timestamp, }; } }, signParams: function (request, result) { + const requestPairBidBN = this.scaleUp(result.requestPairBid); + const requestPairAskBN = this.scaleUp(result.requestPairAsk); + const pairBidBN = this.scaleUp(result.pairBid); + const pairAskBN = this.scaleUp(result.pairAsk); + const confidenceBN = this.scaleUp(result.confidence); + const requestConfidenceBN = this.scaleUp(result.requestConfidence); + const requestSignTime = result.requestSignTime; + const proxyTimestamp = result.proxyTimestamp; - const requestPairBidBN = new BN((result.requestPairBid * 1e18).toFixed(0), 10); - const requestPairAskBN = new BN((result.requestPairAsk * 1e18).toFixed(0), 10); - const pairBidBN = new BN((result.pairBid * 1e18).toFixed(0), 10); - const pairAskBN = new BN((result.pairAsk * 1e18).toFixed(0), 10); - const confidenceBN = new BN((result.confidence * 1e18).toFixed(0), 10); - const requestConfidenceBN = new BN((result.requestConfidence * 1e18).toFixed(0), 10); - const requestSignTime = result.requestSignTime ; - const proxyTimestamp = result.proxyTimestamp ; + if (confidenceBN.gt(requestConfidenceBN)) { throw new Error(`0x101`); } + if (proxyTimestamp > parseInt(requestSignTime)) { throw new Error(`0x102`); } - if (confidenceBN.gt(requestConfidenceBN)) {throw new Error(`0x101`);} - if( Number(proxyTimestamp) > Number(requestSignTime)) { throw new Error(`0x102`);} + const precision = new BN('1000000000000000000'); - const precision = new BN(10).pow(new BN(18)); - const diffBid = precision.sub(pairBidBN.mul(precision).div(requestPairBidBN)).abs(); const diffAsk = precision.sub(pairAskBN.mul(precision).div(requestPairAskBN)).abs(); - + if (diffBid.gt(requestConfidenceBN)) { throw new Error(`0x103`); } - + if (diffAsk.gt(requestConfidenceBN)) { throw new Error(`0x104`); - } + } + - const assetHex = this.convertToBytes32(result.requestAsset1 + '/' + result.requestAsset2); switch (request.method) { case 'price': return [ { name: 'requestAssetHex', type: 'bytes32', value: assetHex }, - { name: 'requestPairBid', type: 'uint256', value: this.scaleUp(result.requestPairBid).toString() }, - { name: 'requestPairAsk', type: 'uint256', value: this.scaleUp(result.requestPairAsk).toString() }, - { name: 'requestConfidence', type: 'uint256', value: this.scaleUp(result.requestConfidence).toString() }, - { name: 'requestSignTime', type: 'uint256', value: result.requestSignTime}, + { name: 'requestPairBid', type: 'uint256', value: requestPairBidBN.toString() }, + { name: 'requestPairAsk', type: 'uint256', value: requestPairAskBN.toString() }, + { name: 'requestConfidence', type: 'uint256', value: requestConfidenceBN.toString() }, + { name: 'requestSignTime', type: 'uint256', value: result.requestSignTime }, { name: 'requestPrecision', type: 'uint256', value: this.scaleUp(result.requestPrecision).toString() } ]; } }, - makeApiCalls: async function(maxtimestampdiff, abPrecision, asset1, asset2) { + makeApiCalls: async function (maxTimestampDiff, abPrecision, asset1, asset2) { try { - const proxyVars = process.env.APPS_PIONERV1_VARS; + const proxyVars = process.env.APPS_PIONERV1_PROXIES; const proxies = JSON.parse(proxyVars); - + const responsePromises = []; - for (let i = 1; i <= parseInt(proxies.PROXY_NUMBERS); i++) { - const proxy = proxies[`PROXY${i}`]; - const apiKey = proxies[`PROXY${i}KEY`]; - - const apiUrl = `${proxy}${apiKey}&a=${asset1}&b=${asset2}&abprecision=${abPrecision}&confprecision=${abPrecision}&maxtimestampdiff=${maxtimestampdiff}`; - - const timeoutConfig = { timeout: 500 }; - + for (let i = 1; i <= Object.keys(proxies).length; i++) { + const address = proxies[i].address; + const key = proxies[i].key; + + const apiUrl = `${address}${key}&a=${asset1}&b=${asset2}&abPrecision=${abPrecision}&confPrecision=${abPrecision}&maxTimestampDiff=${maxTimestampDiff}`; + + const timeoutConfig = { timeout: 1000 }; + responsePromises.push(axios.get(apiUrl, timeoutConfig).then(response => { if (response.status === 200) { const { pairBid, pairAsk, confidence, timestamp } = response.data; - const numericPairBid = parseFloat(pairBid); - const numericPairAsk = parseFloat(pairAsk); - const numericConfidence = parseFloat(confidence); - const numericTimestamp = parseFloat(timestamp); - - if (!isNaN(numericPairBid) && - !isNaN(numericPairAsk) && - !isNaN(numericConfidence) && - !isNaN(numericTimestamp)) { - return { ...response, data: { ...response.data, pairBid: numericPairBid, pairAsk: numericPairAsk, confidence: numericConfidence, timestamp: numericTimestamp } }; + response.data.floatPairBid = parseFloat(pairBid); + response.data.floatPairAsk = parseFloat(pairAsk); + response.data.floatConfidence = parseFloat(confidence); + + if (response.data.floatPairBid && response.data.floatPairAsk && !isNaN(response.data.floatConfidence) && timestamp) { + return response; } else { console.log(`Invalid data from Proxy ${i}.`); return null; @@ -110,54 +105,54 @@ const PionerV1App = { return null; })); } - + const responses = await Promise.all(responsePromises); - + const validResponses = responses.filter(response => response !== null); - if ( validResponses.length > 0 ) { + if (validResponses.length > 0) { let averageTimestamp = 0; let averagePairBid = 0; let averagePairAsk = 0; let averageConfidence = 0; - + for (const response of validResponses) { - const { timestamp, pairBid, pairAsk, confidence } = response.data; - + const { timestamp, floatPairBid, floatPairAsk, floatConfidence } = response.data; + averageTimestamp += timestamp; - averagePairBid += pairBid; - averagePairAsk += pairAsk; - averageConfidence += confidence; + averagePairBid += floatPairBid; + averagePairAsk += floatPairAsk; + averageConfidence += floatConfidence; } - + averageTimestamp /= validResponses.length; averagePairBid /= validResponses.length; averagePairAsk /= validResponses.length; averageConfidence /= validResponses.length; - + let closestDistance = Infinity; let closestResponse = null; - + for (const response of validResponses) { - const { timestamp, pairBid, pairAsk, confidence } = response.data; - + const { timestamp, floatPairBid, floatPairAsk, floatConfidence } = response.data; + const distance = Math.abs(timestamp - averageTimestamp) + - Math.abs(pairBid - averagePairBid) + - Math.abs(pairAsk - averagePairAsk) + - Math.abs(confidence - averageConfidence); - + Math.abs(floatPairBid - averagePairBid) + + Math.abs(floatPairAsk - averagePairAsk) + + Math.abs(floatConfidence - averageConfidence); + if (distance < closestDistance) { closestDistance = distance; closestResponse = response.data; } } - + return closestResponse; } } catch (error) { console.error('Error making API calls:', error); } }, - + convertToBytes32: function (str) { const maxLength = 31; const truncatedStr = str.slice(0, maxLength); @@ -168,7 +163,6 @@ const PionerV1App = { scaleUp: function (value) { return new BN(toBaseUnit(String(value), 18)); } - }; module.exports = PionerV1App; From 45702279add0d9bfbd9533bff66b5e3fa2d0a18f Mon Sep 17 00:00:00 2001 From: Crolev Date: Mon, 22 Apr 2024 03:10:50 +0200 Subject: [PATCH 337/406] add morphexTrade2Earn --- general/morphexTrade2Earn.js | 153 +++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 general/morphexTrade2Earn.js diff --git a/general/morphexTrade2Earn.js b/general/morphexTrade2Earn.js new file mode 100644 index 0000000..94e2716 --- /dev/null +++ b/general/morphexTrade2Earn.js @@ -0,0 +1,153 @@ +const { axios, ethCall, BN, toBaseUnit } = MuonAppUtils + +const DibsRepository = "PENDING" +const DIBS_REPO_ABI = [{ "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "name": "projects", "outputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "dibs", "type": "address" }, { "internalType": "string", "name": "subgraphEndpoint", "type": "string" }, { "internalType": "uint32", "name": "firstRoundStartTime", "type": "uint32" }, { "internalType": "uint32", "name": "roundDuration", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "roundId", "type": "bytes32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] + +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) +const VALID_TOLERANCE = scaleUp('0.01') +const SCALE = scaleUp('1') + +module.exports = { + APP_NAME: 'morphexTrade2Earn', + useFrost: true, + + isToleranceOk: function (amount, expectedAmount, validTolerance) { + let diff = new BN(amount).sub(new BN(expectedAmount)).abs() + const diffPercentage = new BN(diff).mul(SCALE).div(new BN(expectedAmount)) + return { + isOk: !diffPercentage.gt(new BN(validTolerance)), + diffPercentage: diffPercentage.mul(new BN(100)).div(SCALE) + } + }, + + postQuery: async function (query, subgraphEndpoint) { + const result = await axios.post(subgraphEndpoint, { + query: query + }) + + const data = result.data + + if (data.errors) { + throw data.errors + } + + return data.data + }, + + + fetchProject: async function (projectId) { + const { dibs, chainId, subgraphEndpoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 250) + return { dibs, chainId, subgraphEndpoint } + }, + + + getDailyVolume: async function (user, pair, day, subgraphEndpoint) { + const totalQuery = `{ + totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { + id + user + amountAsUser + day + } + }` + + const userQuery = `{ + userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user.toLowerCase()}", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { + id + user + amountAsUser + day + } + }` + + const totalData = (await this.postQuery(totalQuery, subgraphEndpoint)).totalVolume + const userData = (await this.postQuery(userQuery, subgraphEndpoint)).userVolume + + if (userData.length == 0) throw { message: `NO_RECORD_FOR_USER` } + if (totalData.length == 0) throw { message: `NO_RECORD_FOR_PLATFORM` } + + const totalVolume = totalData[0].amountAsUser + const userVolume = userData[0].amountAsUser + + return { + userVolume, + totalVolume, + } + }, + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + switch (method) { + + case 'userVolume': { + let { + projectId, + user, + pair, + day + } = params + + if (parseInt(day) < 0) throw { message: 'NEGATIVE_DAY' } + + const { subgraphEndpoint } = await this.fetchProject(projectId) + const { userVolume, totalVolume } = await this.getDailyVolume(user, pair, day, subgraphEndpoint) + + return { + projectId, + user, + pair, + day, + userVolume, + totalVolume, + } + } + + default: + throw { message: `Unknown method ${params}` } + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + + case 'userVolume': { + let { + projectId, + user, + pair, + day, + userVolume, + totalVolume, + } = result + + if (!this.isToleranceOk(userVolume, request.data.result.userVolume, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error - user volume` } + if (!this.isToleranceOk(totalVolume, request.data.result.totalVolume, VALID_TOLERANCE).isOk) + throw { message: `Tolerance Error - total volume` } + + return [ + { type: 'bytes32', value: projectId }, + { type: 'address', value: user }, + { type: 'address', value: pair }, + { type: 'uint256', value: day }, + { type: 'uint256', value: request.data.result.userVolume }, + { type: 'uint256', value: request.data.result.totalVolume }, + { type: 'uint256', value: request.data.timestamp }, + ] + } + + default: + break + } + } +} From 8781b62eb13832a1498743a91de5fbeadab01d58 Mon Sep 17 00:00:00 2001 From: Crolev Date: Mon, 22 Apr 2024 08:40:47 +0200 Subject: [PATCH 338/406] set contract and network id --- general/morphexTrade2Earn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/morphexTrade2Earn.js b/general/morphexTrade2Earn.js index 94e2716..f452aba 100644 --- a/general/morphexTrade2Earn.js +++ b/general/morphexTrade2Earn.js @@ -1,6 +1,6 @@ const { axios, ethCall, BN, toBaseUnit } = MuonAppUtils -const DibsRepository = "PENDING" +const DibsRepository = "0x1f05D4C5BAAFa5a10b81D9890e32825025Ca2eAD" const DIBS_REPO_ABI = [{ "inputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], "name": "projects", "outputs": [{ "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "dibs", "type": "address" }, { "internalType": "string", "name": "subgraphEndpoint", "type": "string" }, { "internalType": "uint32", "name": "firstRoundStartTime", "type": "uint32" }, { "internalType": "uint32", "name": "roundDuration", "type": "uint32" }, { "internalType": "bool", "name": "exists", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "bytes32", "name": "roundId", "type": "bytes32" }], "name": "getSeed", "outputs": [{ "internalType": "bool", "name": "fulfilled", "type": "bool" }, { "internalType": "uint256", "name": "seed", "type": "uint256" }], "stateMutability": "view", "type": "function" }] const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)) @@ -36,7 +36,7 @@ module.exports = { fetchProject: async function (projectId) { - const { dibs, chainId, subgraphEndpoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 250) + const { dibs, chainId, subgraphEndpoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 8453) return { dibs, chainId, subgraphEndpoint } }, From f7bef97c676fe65337287914502ad7ce9181e84b Mon Sep 17 00:00:00 2001 From: Crolev Date: Mon, 22 Apr 2024 08:51:15 +0200 Subject: [PATCH 339/406] rename file and app name --- general/{morphexTrade2Earn.js => bmxTrade2Earn.js} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename general/{morphexTrade2Earn.js => bmxTrade2Earn.js} (99%) diff --git a/general/morphexTrade2Earn.js b/general/bmxTrade2Earn.js similarity index 99% rename from general/morphexTrade2Earn.js rename to general/bmxTrade2Earn.js index f452aba..9987c2a 100644 --- a/general/morphexTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -8,7 +8,7 @@ const VALID_TOLERANCE = scaleUp('0.01') const SCALE = scaleUp('1') module.exports = { - APP_NAME: 'morphexTrade2Earn', + APP_NAME: 'bmxTrade2Earn', useFrost: true, isToleranceOk: function (amount, expectedAmount, validTolerance) { From c0897c3a1711ffd27c4c77e9d1d1fb76acfdf507 Mon Sep 17 00:00:00 2001 From: Nebule Date: Tue, 23 Apr 2024 09:46:04 +0200 Subject: [PATCH 340/406] Added errors + removed axios timeout --- general/pionerv1_price.js | 138 +++++++++++++++++++------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index a835ddd..e260d7d 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -25,6 +25,9 @@ const PionerV1App = { requestPrecision: requestPrecision, proxyTimestamp: prices.timestamp, }; + + default: + throw { message: `101 - Unknown method ${params}` } } }, @@ -38,8 +41,8 @@ const PionerV1App = { const requestSignTime = result.requestSignTime; const proxyTimestamp = result.proxyTimestamp; - if (confidenceBN.gt(requestConfidenceBN)) { throw new Error(`0x101`); } - if (proxyTimestamp > parseInt(requestSignTime)) { throw new Error(`0x102`); } + if (confidenceBN.gt(requestConfidenceBN)) { throw { message: '102 - confidence > requestConfidence' } } + if (proxyTimestamp > parseInt(requestSignTime)) { throw { message: '103 - proxyTimestamp > requestSignTime' } } const precision = new BN('1000000000000000000'); @@ -47,11 +50,11 @@ const PionerV1App = { const diffAsk = precision.sub(pairAskBN.mul(precision).div(requestPairAskBN)).abs(); if (diffBid.gt(requestConfidenceBN)) { - throw new Error(`0x103`); + throw { message: '104 - diffBid > requestConfidence' } } if (diffAsk.gt(requestConfidenceBN)) { - throw new Error(`0x104`); + throw { message: '105 - diffAsk > requestConfidence' } } @@ -70,87 +73,84 @@ const PionerV1App = { }, makeApiCalls: async function (maxTimestampDiff, abPrecision, asset1, asset2) { - try { - const proxyVars = process.env.APPS_PIONERV1_PROXIES; - const proxies = JSON.parse(proxyVars); - - const responsePromises = []; - for (let i = 1; i <= Object.keys(proxies).length; i++) { - const address = proxies[i].address; - const key = proxies[i].key; - - const apiUrl = `${address}${key}&a=${asset1}&b=${asset2}&abPrecision=${abPrecision}&confPrecision=${abPrecision}&maxTimestampDiff=${maxTimestampDiff}`; - - const timeoutConfig = { timeout: 1000 }; - - responsePromises.push(axios.get(apiUrl, timeoutConfig).then(response => { - if (response.status === 200) { - const { pairBid, pairAsk, confidence, timestamp } = response.data; - response.data.floatPairBid = parseFloat(pairBid); - response.data.floatPairAsk = parseFloat(pairAsk); - response.data.floatConfidence = parseFloat(confidence); - - if (response.data.floatPairBid && response.data.floatPairAsk && !isNaN(response.data.floatConfidence) && timestamp) { - return response; - } else { - console.log(`Invalid data from Proxy ${i}.`); - return null; - } + const proxyVars = process.env.APPS_PIONERV1_PROXIES; + const proxies = JSON.parse(proxyVars); + + const responsePromises = []; + + for (let i = 1; i <= Object.keys(proxies).length; i++) { + const address = proxies[i].address; + const key = proxies[i].key; + + const apiUrl = `${address}${key}&a=${asset1}&b=${asset2}&abPrecision=${abPrecision}&confPrecision=${abPrecision}&maxTimestampDiff=${maxTimestampDiff}`; + + responsePromises.push(axios.get(apiUrl).then(response => { + if (response.status === 200) { + const { pairBid, pairAsk, confidence, timestamp } = response.data; + response.data.floatPairBid = parseFloat(pairBid); + response.data.floatPairAsk = parseFloat(pairAsk); + response.data.floatConfidence = parseFloat(confidence); + + if (response.data.floatPairBid && response.data.floatPairAsk && !isNaN(response.data.floatConfidence) && timestamp) { + return response; } else { - console.log(`Invalid response status from Proxy ${i}. Status: ${response.status}. url: ${apiUrl}`); + console.log(`Received invalid data from Proxy ${i}.`); return null; } - }).catch(error => { - console.error(`Error with Proxy : ${error.message}. Url ${apiUrl} :`); + } else { + console.log(`Invalid response status from Proxy ${i}. Status: ${response.status}. url: ${apiUrl}`); return null; - })); - } + } + }).catch(error => { + console.error(`Error with Proxy : ${error.message}. Url ${apiUrl} :`); + return null; + })); + } - const responses = await Promise.all(responsePromises); + const responses = await Promise.all(responsePromises); - const validResponses = responses.filter(response => response !== null); - if (validResponses.length > 0) { - let averageTimestamp = 0; - let averagePairBid = 0; - let averagePairAsk = 0; - let averageConfidence = 0; + const validResponses = responses.filter(response => response !== null); + if (validResponses.length == 0) { + throw { message: '106 - No valid responses from any proxies.' } + } - for (const response of validResponses) { - const { timestamp, floatPairBid, floatPairAsk, floatConfidence } = response.data; + let averageTimestamp = 0; + let averagePairBid = 0; + let averagePairAsk = 0; + let averageConfidence = 0; - averageTimestamp += timestamp; - averagePairBid += floatPairBid; - averagePairAsk += floatPairAsk; - averageConfidence += floatConfidence; - } + for (const response of validResponses) { + const { timestamp, floatPairBid, floatPairAsk, floatConfidence } = response.data; - averageTimestamp /= validResponses.length; - averagePairBid /= validResponses.length; - averagePairAsk /= validResponses.length; - averageConfidence /= validResponses.length; + averageTimestamp += timestamp; + averagePairBid += floatPairBid; + averagePairAsk += floatPairAsk; + averageConfidence += floatConfidence; + } - let closestDistance = Infinity; - let closestResponse = null; + averageTimestamp /= validResponses.length; + averagePairBid /= validResponses.length; + averagePairAsk /= validResponses.length; + averageConfidence /= validResponses.length; - for (const response of validResponses) { - const { timestamp, floatPairBid, floatPairAsk, floatConfidence } = response.data; + let closestDistance = Infinity; + let closestResponse = null; - const distance = Math.abs(timestamp - averageTimestamp) + - Math.abs(floatPairBid - averagePairBid) + - Math.abs(floatPairAsk - averagePairAsk) + - Math.abs(floatConfidence - averageConfidence); + for (const response of validResponses) { + const { timestamp, floatPairBid, floatPairAsk, floatConfidence } = response.data; - if (distance < closestDistance) { - closestDistance = distance; - closestResponse = response.data; - } - } + const distance = Math.abs(timestamp - averageTimestamp) + + Math.abs(floatPairBid - averagePairBid) + + Math.abs(floatPairAsk - averagePairAsk) + + Math.abs(floatConfidence - averageConfidence); - return closestResponse; + if (distance < closestDistance) { + closestDistance = distance; + closestResponse = response.data; } - } catch (error) { - console.error('Error making API calls:', error); } + + return closestResponse; }, convertToBytes32: function (str) { From 299e2828acf95361aa9d49afea0012ce3221c8e8 Mon Sep 17 00:00:00 2001 From: Crolev Date: Tue, 7 May 2024 19:55:51 +0200 Subject: [PATCH 341/406] switch from daily to weekly rewards --- general/bmxTrade2Earn.js | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 9987c2a..236aaea 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -41,9 +41,14 @@ module.exports = { }, - getDailyVolume: async function (user, pair, day, subgraphEndpoint) { + getWeeklyVolume: async function (user, epoch, subgraphEndpoint) { const totalQuery = `{ - totalVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "0x0000000000000000000000000000000000000000", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { + totalVolume: weeklyGeneratedVolumes( + where:{ + epoch: ${epoch}, + user: "0x0000000000000000000000000000000000000000" + } + ) { id user amountAsUser @@ -52,7 +57,12 @@ module.exports = { }` const userQuery = `{ - userVolume: dailyGeneratedVolumes(where:{day: ${day}, user: "${user.toLowerCase()}", pair: "${pair.toLowerCase()}", amountAsReferrer_gt: "0"}) { + userVolume: weeklyGeneratedVolumes( + where:{ + epoch: ${epoch}, + user: "${user.toLowerCase()}" + } + ) { id user amountAsUser @@ -86,20 +96,18 @@ module.exports = { let { projectId, user, - pair, - day + epoch } = params if (parseInt(day) < 0) throw { message: 'NEGATIVE_DAY' } const { subgraphEndpoint } = await this.fetchProject(projectId) - const { userVolume, totalVolume } = await this.getDailyVolume(user, pair, day, subgraphEndpoint) + const { userVolume, totalVolume } = await this.getWeeklyVolume(user, epoch, subgraphEndpoint) return { projectId, user, - pair, - day, + epoch, userVolume, totalVolume, } @@ -124,8 +132,7 @@ module.exports = { let { projectId, user, - pair, - day, + epoch, userVolume, totalVolume, } = result @@ -138,8 +145,7 @@ module.exports = { return [ { type: 'bytes32', value: projectId }, { type: 'address', value: user }, - { type: 'address', value: pair }, - { type: 'uint256', value: day }, + { type: 'uint256', value: epoch }, { type: 'uint256', value: request.data.result.userVolume }, { type: 'uint256', value: request.data.result.totalVolume }, { type: 'uint256', value: request.data.timestamp }, From b82cbe0f7bb8136fe8960d9d34ac1637697cd437 Mon Sep 17 00:00:00 2001 From: Crolev Date: Tue, 7 May 2024 21:57:57 +0200 Subject: [PATCH 342/406] fixes to params --- general/bmxTrade2Earn.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 236aaea..35b5c66 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -52,7 +52,7 @@ module.exports = { id user amountAsUser - day + epoch } }` @@ -66,7 +66,7 @@ module.exports = { id user amountAsUser - day + epoch } }` @@ -99,7 +99,7 @@ module.exports = { epoch } = params - if (parseInt(day) < 0) throw { message: 'NEGATIVE_DAY' } + if (parseInt(epoch) < 0) throw { message: 'NEGATIVE_WEEK' } const { subgraphEndpoint } = await this.fetchProject(projectId) const { userVolume, totalVolume } = await this.getWeeklyVolume(user, epoch, subgraphEndpoint) From cacdf0dfabf181ae8c5a41ec203a33284ad72b03 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Fri, 24 May 2024 16:49:31 +0330 Subject: [PATCH 343/406] Layer0 dvn --- general/layerzero_dvn.js | 124 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 general/layerzero_dvn.js diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js new file mode 100644 index 0000000..6952ce4 --- /dev/null +++ b/general/layerzero_dvn.js @@ -0,0 +1,124 @@ +const { ethCall } = MuonAppUtils + +const ABI_JOBS = [ + { + inputs: [ + { + internalType: "uint256", + name: "", + type: "uint256" + } + ], + name: "jobs", + outputs: [ + { + internalType: "address", + name: "origin", + type: "address" + }, + { + internalType: "uint32", + name: "srcEid", + type: "uint32" + }, + { + internalType: "uint32", + name: "dstEid", + type: "uint32" + }, + { + internalType: "bytes", + name: "packetHeader", + type: "bytes" + }, + { + internalType: "bytes32", + name: "payloadHash", + type: "bytes32" + }, + { + internalType: "uint64", + name: "confirmations", + type: "uint64" + }, + { + internalType: "address", + name: "sender", + type: "address" + }, + { + internalType: "bytes", + name: "options", + type: "bytes" + } + ], + stateMutability: "view", + type: "function" + } +] + +const DVNs = { + sepolia: "0x089aFcedF3A696D51B7E0212d52737527Dd34A3e", + bsctest: "0x0a780f9ba1c6e848AE3147b7e329abFa5E470BA5", +} + +module.exports = { + APP_NAME: 'layerzero_dvn', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'verify': + let { jobId, network } = params + if (!(network in DVNs)) { + throw { message: 'Invalid network' } + } + if (!jobId) throw { message: 'Invalid jobId' } + + const contractAddress = DVNs[network] + + let result = await ethCall( + contractAddress, + 'jobs', + jobId, + ABI_JOBS, + network + ) + let { srcEid, dstEid, packetHeader, payloadHash, confirmations } = result + return { + srcEid: srcEid.toString(), + dstEid: dstEid.toString(), + jobId: jobId.toString(), + packetHeader: packetHeader.toString(), + payloadHash: payloadHash.toString(), + confirmations: confirmations.toString(), + } + default: + throw { message: `Unknown method ${method}` } + } + }, + + signParams: function (request, result) { + let { method } = request + + switch (method) { + case 'verify': + let { srcEid, dstEid, jobId, packetHeader, payloadHash, confirmations } = result + + return [ + { type: 'uint32', value: srcEid }, + { type: 'uint32', value: dstEid }, + { type: 'uint256', value: jobId }, + { type: 'bytes', value: packetHeader }, + { type: 'bytes', value: payloadHash }, + { type: 'uint64', value: confirmations }, + ] + default: + throw { message: `Unknown method: ${method}` } + } + } +} From d9db0e38b1080838d3f3bce4e71cc62d23f5a160 Mon Sep 17 00:00:00 2001 From: Crolev Date: Mon, 27 May 2024 09:12:04 +0200 Subject: [PATCH 344/406] switch from total to top n volume --- general/bmxTrade2Earn.js | 66 ++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 35b5c66..9bf3652 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -41,33 +41,36 @@ module.exports = { }, - getWeeklyVolume: async function (user, epoch, subgraphEndpoint) { + getWeeklyVolume: async function (user, epoch, n, subgraphEndpoint) { const totalQuery = `{ - totalVolume: weeklyGeneratedVolumes( - where:{ - epoch: ${epoch}, - user: "0x0000000000000000000000000000000000000000" - } - ) { - id - user - amountAsUser - epoch - } + totalVolume: weeklyGeneratedVolumes( + where: { + epoch: ${epoch}, + user_not: "0x0000000000000000000000000000000000000000" + } + first: ${n} + orderBy: amountAsUser + orderDirection: desc + ) { + id + user + amountAsUser + epoch + } }` const userQuery = `{ - userVolume: weeklyGeneratedVolumes( - where:{ - epoch: ${epoch}, - user: "${user.toLowerCase()}" - } - ) { - id - user - amountAsUser - epoch - } + userVolume: weeklyGeneratedVolumes( + where:{ + epoch: ${epoch}, + user: "${user.toLowerCase()}" + } + ) { + id + user + amountAsUser + epoch + } }` const totalData = (await this.postQuery(totalQuery, subgraphEndpoint)).totalVolume @@ -76,7 +79,12 @@ module.exports = { if (userData.length == 0) throw { message: `NO_RECORD_FOR_USER` } if (totalData.length == 0) throw { message: `NO_RECORD_FOR_PLATFORM` } - const totalVolume = totalData[0].amountAsUser + let totalSum = new BN(0) + totalData.forEach(record => { + totalSum = totalSum.add(new BN(record.amountAsUser)) + }) + + const totalVolume = totalSum.toString() const userVolume = userData[0].amountAsUser return { @@ -96,18 +104,20 @@ module.exports = { let { projectId, user, - epoch + epoch, + n } = params if (parseInt(epoch) < 0) throw { message: 'NEGATIVE_WEEK' } const { subgraphEndpoint } = await this.fetchProject(projectId) - const { userVolume, totalVolume } = await this.getWeeklyVolume(user, epoch, subgraphEndpoint) + const { userVolume, totalVolume } = await this.getWeeklyVolume(user, epoch, n, subgraphEndpoint) return { projectId, user, epoch, + n, userVolume, totalVolume, } @@ -125,7 +135,7 @@ module.exports = { * should be verified on chain. */ signParams: function (request, result) { - let { method } = request; + let { method } = request switch (method) { case 'userVolume': { @@ -133,6 +143,7 @@ module.exports = { projectId, user, epoch, + n, userVolume, totalVolume, } = result @@ -146,6 +157,7 @@ module.exports = { { type: 'bytes32', value: projectId }, { type: 'address', value: user }, { type: 'uint256', value: epoch }, + { type: 'uint256', value: n }, { type: 'uint256', value: request.data.result.userVolume }, { type: 'uint256', value: request.data.result.totalVolume }, { type: 'uint256', value: request.data.timestamp }, From 3a055650fc180629c47f5587866c8c8761815639 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Tue, 28 May 2024 00:07:02 +0330 Subject: [PATCH 345/406] Carrier3net bridge --- general/carrier3_bridge.js | 88 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 general/carrier3_bridge.js diff --git a/general/carrier3_bridge.js b/general/carrier3_bridge.js new file mode 100644 index 0000000..92a1023 --- /dev/null +++ b/general/carrier3_bridge.js @@ -0,0 +1,88 @@ +const { ethCall } = MuonAppUtils + +const ABI_getTx = [ + { + inputs: [{ internalType: 'uint256', name: '_txId', type: 'uint256' }], + name: 'getTx', + outputs: [ + { internalType: 'uint256', name: 'txId', type: 'uint256' }, + { internalType: 'uint256', name: 'tokenId', type: 'uint256' }, + { internalType: 'uint256', name: 'amount', type: 'uint256' }, + { internalType: 'uint256', name: 'fromChain', type: 'uint256' }, + { internalType: 'uint256', name: 'toChain', type: 'uint256' }, + { internalType: 'address', name: 'user', type: 'address' } + ], + stateMutability: 'view', + type: 'function' + } +] + +const BRIDGE_ADDRESSES = { + sepolia: "0x67734b805360A385f8f5c0F3fb354AE1E445db75", + bsctest: "0x50cbA2d42042E8347bc8d91A4f45170151dCf6Df", +} + +module.exports = { + APP_NAME: 'carrier3_bridge', + + onRequest: async function (request) { + let { + method, + data: { params } + } = request + + switch (method) { + case 'claim': + let { depositTxId, depositNetwork = 'eth' } = params + if (!(depositNetwork in BRIDGE_ADDRESSES)) { + throw { message: 'Invalid deposit network' } + } + if (!depositTxId) throw { message: 'Invalid deposit Tx Id' } + + const depositAddress = BRIDGE_ADDRESSES[depositNetwork] + + let result = await ethCall( + depositAddress, + 'getTx', + [depositTxId], + ABI_getTx, + depositNetwork + ) + let { txId, tokenId, amount, fromChain, toChain, user } = result + return { + txId: txId.toString(), + tokenId: tokenId.toString(), + amount: amount.toString(), + fromChain: fromChain.toString(), + toChain: toChain.toString(), + user + } + case 'test': + return 'done'; + default: + throw { message: `Unknown method ${method}` } + } + }, + + signParams: function (request, result) { + let { method } = request + + switch (method) { + case 'claim': + let { txId, tokenId, amount, fromChain, toChain, user } = result + + return [ + { type: 'uint256', value: txId }, + { type: 'uint256', value: tokenId }, + { type: 'uint256', value: amount }, + { type: 'uint256', value: fromChain }, + { type: 'uint256', value: toChain }, + { type: 'address', value: user } + ] + case 'test': + return [{type: 'string', value: result.toString()}] + default: + throw { message: `Unknown method: ${method}` } + } + } +} From 5b3c7207f089e05fee5053cddc1a53233e083f8f Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Tue, 28 May 2024 10:23:18 +0330 Subject: [PATCH 346/406] carrier3: fix bridge addresses --- general/carrier3_bridge.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/carrier3_bridge.js b/general/carrier3_bridge.js index 92a1023..9872512 100644 --- a/general/carrier3_bridge.js +++ b/general/carrier3_bridge.js @@ -18,8 +18,8 @@ const ABI_getTx = [ ] const BRIDGE_ADDRESSES = { - sepolia: "0x67734b805360A385f8f5c0F3fb354AE1E445db75", - bsctest: "0x50cbA2d42042E8347bc8d91A4f45170151dCf6Df", + sepolia: "0x5cdd607d463F5f15f741e2E7a75AB1343aF163F6", + bsctest: "0x1031b5A6965fcC29169D8942E36E37E75BB9FC2a", } module.exports = { From 4f6bbd7e3b1f263a8b1755543a82be4c986ca325 Mon Sep 17 00:00:00 2001 From: Crolev Date: Tue, 28 May 2024 23:30:13 +0200 Subject: [PATCH 347/406] add paging and fix users outside leaderboard --- general/bmxTrade2Earn.js | 84 ++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 9bf3652..8b97a90 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -34,58 +34,55 @@ module.exports = { return data.data }, - fetchProject: async function (projectId) { const { dibs, chainId, subgraphEndpoint } = await ethCall(DibsRepository, 'projects', [projectId], DIBS_REPO_ABI, 8453) return { dibs, chainId, subgraphEndpoint } }, + getWeeklyLeaderboard: async function (user, epoch, n, subgraphEndpoint) { + let data = [] + let stepSize = 1000 + if (parseInt(n) < stepSize) {stepSize = parseInt(n)} + let steps = Math.ceil(n / stepSize); + + for (let i = 0; i < steps; i++) { + const query = ` + { + leaderboardVolume: weeklyGeneratedVolumes( + where: { + epoch: ${epoch}, + user_not: "0x0000000000000000000000000000000000000000" + } + skip: ${i*stepSize} + first: ${stepSize} + orderBy: amountAsUser + orderDirection: desc + ) { + id + user + amountAsUser + epoch + } + }` + const page = (await this.postQuery(query, subgraphEndpoint)).leaderboardVolume + if (page.length === 0) break + data.push(...page) + } - getWeeklyVolume: async function (user, epoch, n, subgraphEndpoint) { - const totalQuery = `{ - totalVolume: weeklyGeneratedVolumes( - where: { - epoch: ${epoch}, - user_not: "0x0000000000000000000000000000000000000000" - } - first: ${n} - orderBy: amountAsUser - orderDirection: desc - ) { - id - user - amountAsUser - epoch - } - }` - - const userQuery = `{ - userVolume: weeklyGeneratedVolumes( - where:{ - epoch: ${epoch}, - user: "${user.toLowerCase()}" - } - ) { - id - user - amountAsUser - epoch - } - }` - - const totalData = (await this.postQuery(totalQuery, subgraphEndpoint)).totalVolume - const userData = (await this.postQuery(userQuery, subgraphEndpoint)).userVolume - - if (userData.length == 0) throw { message: `NO_RECORD_FOR_USER` } - if (totalData.length == 0) throw { message: `NO_RECORD_FOR_PLATFORM` } + if (data.length === 0) throw {message: `no record for platform`} + data.splice(n); // truncate records added outside leaderboard + let userSum = new BN(0) let totalSum = new BN(0) - totalData.forEach(record => { - totalSum = totalSum.add(new BN(record.amountAsUser)) + data.forEach(position => { + if (position.user === user.toLowerCase()) { + userSum = new BN(position.amountAsUser) + } + totalSum = totalSum.add(new BN(position.amountAsUser)) }) + const userVolume = userSum.toString() const totalVolume = totalSum.toString() - const userVolume = userData[0].amountAsUser return { userVolume, @@ -108,10 +105,11 @@ module.exports = { n } = params - if (parseInt(epoch) < 0) throw { message: 'NEGATIVE_WEEK' } + if (parseInt(epoch) < 0) throw {message: 'negative epoch'} + if (parseInt(n) < 1) throw {message: 'n must be >0'} const { subgraphEndpoint } = await this.fetchProject(projectId) - const { userVolume, totalVolume } = await this.getWeeklyVolume(user, epoch, n, subgraphEndpoint) + const { userVolume, totalVolume } = await this.getWeeklyLeaderboard(user, epoch, n, subgraphEndpoint) return { projectId, From 6737b90b5034051ea6bbc70bfcc2b89b622cc077 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 29 May 2024 17:07:06 +0330 Subject: [PATCH 348/406] apps --- general/bmxTrade2Earn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 8b97a90..003fefd 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -9,7 +9,7 @@ const SCALE = scaleUp('1') module.exports = { APP_NAME: 'bmxTrade2Earn', - useFrost: true, + useFrost: false, isToleranceOk: function (amount, expectedAmount, validTolerance) { let diff = new BN(amount).sub(new BN(expectedAmount)).abs() From cf5e0adeca7888610a10afa4a96ad5b2410872f8 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 29 May 2024 17:45:11 +0330 Subject: [PATCH 349/406] apps --- general/bmxTrade2Earn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 003fefd..8b97a90 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -9,7 +9,7 @@ const SCALE = scaleUp('1') module.exports = { APP_NAME: 'bmxTrade2Earn', - useFrost: false, + useFrost: true, isToleranceOk: function (amount, expectedAmount, validTolerance) { let diff = new BN(amount).sub(new BN(expectedAmount)).abs() From 83e8d07c009e999355ba973d3947aff1ec5e98c4 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Tue, 4 Jun 2024 22:31:28 +0330 Subject: [PATCH 350/406] update layerzero dvn --- general/layerzero_dvn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 6952ce4..87ffb89 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -58,8 +58,8 @@ const ABI_JOBS = [ ] const DVNs = { - sepolia: "0x089aFcedF3A696D51B7E0212d52737527Dd34A3e", - bsctest: "0x0a780f9ba1c6e848AE3147b7e329abFa5E470BA5", + sepolia: "0x5A94Ab1D4dc5A65E94143929d4E89C2FEF3c2fF2", + bsctest: "0xfb03bFd0B29CF5e11780139A00C23fa1Fe96b07b", } module.exports = { From 6a7608fab1988f664e39a7bea585b2047ecec1aa Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 10 Jun 2024 18:23:31 +0330 Subject: [PATCH 351/406] apps --- general/bmxTrade2Earn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/bmxTrade2Earn.js b/general/bmxTrade2Earn.js index 8b97a90..003fefd 100644 --- a/general/bmxTrade2Earn.js +++ b/general/bmxTrade2Earn.js @@ -9,7 +9,7 @@ const SCALE = scaleUp('1') module.exports = { APP_NAME: 'bmxTrade2Earn', - useFrost: true, + useFrost: false, isToleranceOk: function (amount, expectedAmount, validTolerance) { let diff = new BN(amount).sub(new BN(expectedAmount)).abs() From 4e4d8d9f3d420d47feb7e20fe1c39fd5a67bea73 Mon Sep 17 00:00:00 2001 From: Nebule Date: Wed, 19 Jun 2024 22:09:35 +0200 Subject: [PATCH 352/406] fixed confPrecision and added UUID to the request --- general/pionerv1_price.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/general/pionerv1_price.js b/general/pionerv1_price.js index e260d7d..433d799 100644 --- a/general/pionerv1_price.js +++ b/general/pionerv1_price.js @@ -9,8 +9,8 @@ const PionerV1App = { let { method, data: { params = {} } } = request; switch (method) { case 'price': - const { requestAsset1, requestAsset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime, requestPrecision, maxTimestampDiff } = params; - const prices = await this.makeApiCalls(maxTimestampDiff, requestPrecision, requestAsset1, requestAsset2); + const { requestUuid, requestAsset1, requestAsset2, requestPairBid, requestPairAsk, requestConfidence, requestSignTime, requestPrecision, requestConfPrecision, maxTimestampDiff } = params; + const prices = await this.makeApiCalls(requestUuid, requestAsset1, requestAsset2, requestPrecision, requestConfPrecision, maxTimestampDiff); return { requestAsset1: this.convertToBytes32(requestAsset1), @@ -27,7 +27,7 @@ const PionerV1App = { }; default: - throw { message: `101 - Unknown method ${params}` } + throw { message: `101 - Unknown method ${params.method}` } } }, @@ -72,7 +72,7 @@ const PionerV1App = { } }, - makeApiCalls: async function (maxTimestampDiff, abPrecision, asset1, asset2) { + makeApiCalls: async function (uuid, asset1, asset2, abPrecision, confPrecision, maxTimestampDiff) { const proxyVars = process.env.APPS_PIONERV1_PROXIES; const proxies = JSON.parse(proxyVars); @@ -82,7 +82,7 @@ const PionerV1App = { const address = proxies[i].address; const key = proxies[i].key; - const apiUrl = `${address}${key}&a=${asset1}&b=${asset2}&abPrecision=${abPrecision}&confPrecision=${abPrecision}&maxTimestampDiff=${maxTimestampDiff}`; + const apiUrl = `${address}${key}&uuid=${uuid}&a=${asset1}&b=${asset2}&abPrecision=${abPrecision}&confPrecision=${confPrecision}&maxTimestampDiff=${maxTimestampDiff}`; responsePromises.push(axios.get(apiUrl).then(response => { if (response.status === 200) { @@ -102,7 +102,7 @@ const PionerV1App = { return null; } }).catch(error => { - console.error(`Error with Proxy : ${error.message}. Url ${apiUrl} :`); + console.error(`Error with Proxy : ${error.message}. Url ${apiUrl} :`, error); return null; })); } From 933adf410f3171cbcdc548dc6b9c76d3c721ac64 Mon Sep 17 00:00:00 2001 From: SAYaghoubnejad Date: Tue, 25 Jun 2024 18:00:07 +0330 Subject: [PATCH 353/406] Add vibe oracle --- general/vibe.js | 119 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 general/vibe.js diff --git a/general/vibe.js b/general/vibe.js new file mode 100644 index 0000000..8b6af2b --- /dev/null +++ b/general/vibe.js @@ -0,0 +1,119 @@ +const { axios, BN, toBaseUnit } = MuonAppUtils; +const subgraphUrl = + "https://api.studio.thegraph.com/query/62454/vibe_rewarder/version/latest"; +const SCALE = new BN(toBaseUnit('1', '18')) + +const Vibe = { + APP_NAME: "vibe", + useTss: true, + + postQuery: async function (query) { + const { + data: { data }, + } = await axios.post(subgraphUrl, { + query: query, + }); + console.log(query); + return data; + }, + + getDailyUserHistories: async function (activeNftId, day_lte, account) { + const query = `{ + dailyUserHistories(where: {activeNftId: "${activeNftId}", day_lte: "${day_lte}", account: "${account}"}) { + day + activeNftId + platformFeePaid + timestamp + } + }`; + const data = await this.postQuery(query); + console.log(data); + return data.dailyUserHistories; + }, + + getRackbacks: async function (addedTimestamp_lte) { + const query = `{ + volumeRakebackTiers(where: {addedTimestamp_lte: "${Math.floor( + addedTimestamp_lte + )}"}, orderBy: maxVolume) { + addedTimestamp + maxVolume + rakebackRatio + removedTimestamp + } + }`; + const data = await this.postQuery(query); + return data.volumeRakebackTiers; + }, + + findTier: function (timestamp, volume, volumeRakebackTiers) { + return volumeRakebackTiers.find((tier) => { + const isWithinTimestamp = + tier.addedTimestamp <= timestamp && + (!tier.removedTimestamp || tier.removedTimestamp > timestamp); + const isWithinVolume = new BN(volume) <= new BN(tier.maxVolume); + return isWithinTimestamp && isWithinVolume; + }); + }, + + calculateSum: async function (nftId, timestamp, account) { + const day = Math.floor(timestamp / 86400); + const records = await this.getDailyUserHistories(nftId, day, account); + const volumeRakebackTiers = await this.getRackbacks(timestamp); + console.log(volumeRakebackTiers); + console.log(records); + + return records.reduce((sum, record) => { + const tier = this.findTier( + record.timestamp, + record.volume, + volumeRakebackTiers + ); + if (tier) { + const platformFeePaid = new BN(record.platformFeePaid); + const rakebackRatio = new BN(tier.rakebackRatio); + const calculatedRakeback = platformFeePaid.mul(rakebackRatio).div(SCALE); + return sum.add(calculatedRakeback); + } + return sum; + }, new BN(0)); + }, + + onRequest: async function (request) { + let { + method, + data: { params = {} }, + } = request; + let { nftId, account } = params; + switch (method) { + case "claim": + const timestamp = Math.floor(Date.now() / 1000); + const lastDay = Math.floor(timestamp / 86400); + + const amount = ( + await this.calculateSum(nftId, timestamp, account) + ).toString(); + return { nftId, account, amount, lastDay, timestamp }; + default: + throw { message: `invalid method ${method}` }; + } + }, + + signParams: function (request, result) { + switch (request.method) { + case "claim": + let { nftId, account, amount, lastDay, timestamp } = result; + return [ + { name: "nftId", type: "uint256", value: nftId }, + { name: "account", type: "address", value: account }, + { name: "amount", type: "uint256", value: amount }, + { name: "lastDay", type: "uint256", value: lastDay }, + { name: "timestamp", type: "uint256", value: timestamp }, + ]; + default: + throw { message: `Unknown method: ${request.method}` }; + } + }, +}; + +module.exports = Referral; From 4e3d81cf8105822749a1441dd92f37d6f353f09b Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:05:44 +0200 Subject: [PATCH 354/406] Update thena_tc.js --- general/thena_tc.js | 174 ++++++++++++++++++++------------------------ 1 file changed, 78 insertions(+), 96 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 70ba38e..be734c6 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -1,14 +1,15 @@ const { ethCall, axios, BN } = MuonAppUtils + class AccountManager { - static PERP_MANAGER_ABI = [{ "inputs": [{ "internalType": "uint256", "name": "_id", "type": "uint256" }], "name": "idToTradingCompetition", "outputs": [{ "components": [{ "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "entryFee", "type": "uint256" }, { "internalType": "uint256", "name": "MAX_PARTICIPANTS", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "tradingCompetition", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "description", "type": "string" }, { "components": [{ "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "endTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "registrationStart", "type": "uint256" }, { "internalType": "uint256", "name": "registrationEnd", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.TimestampInfo", "name": "timestamp", "type": "tuple" }, { "components": [{ "internalType": "bool", "name": "win_type", "type": "bool" }, { "internalType": "uint256[]", "name": "weights", "type": "uint256[]" }, { "internalType": "uint256", "name": "totalPrize", "type": "uint256" }, { "internalType": "uint256", "name": "owner_fee", "type": "uint256" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "host_contribution", "type": "uint256" }], "internalType": "struct ITradingCompetitionManager.Prize", "name": "prize", "type": "tuple" }, { "components": [{ "internalType": "uint256", "name": "starting_balance", "type": "uint256" }, { "internalType": "uint256[]", "name": "pairIds", "type": "uint256[]" }], "internalType": "struct ITradingCompetitionManager.CompetitionRules", "name": "competitionRules", "type": "tuple" }], "internalType": "struct ITradingCompetitionManager.TC", "name": "", "type": "tuple" }], "stateMutability": "view", "type": "function" }] - static ACCOUNT_MANAGER_ABI = [{ "inputs": [{ "internalType": "address", "name": "account", "type": "address" }], "name": "getQuotesLength", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }], "name": "isAccountValid", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], "name": "getAccountOf", "outputs": [{ "internalType": "address", "name": "", "type": "address" }], "stateMutability": "view", "type": "function" }, { "inputs": [{ "internalType": "address", "name": "user", "type": "address" }], "name": "getBalanceOfUser", "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], "stateMutability": "view", "type": "function" }] + static PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] + static ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; - static perpManagerAddress = "0x5b86dDF88d9F75ba794a410532ae4ae9a0985500" + static perpManagerAddress = "0xE5Ccf697Efa772De24Cbd256e6d401B5872645c0" static defaultChainId = 56 static async getAccountManager(tcId) { - const { tradingCompetition } = await ethCall(AccountManager.perpManagerAddress, 'idToTradingCompetition', [tcId], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); + const { tradingCompetition } = await ethCall(AccountManager.perpManagerAddress, 'idToTradingCompetitionAddress', [tcId], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); return tradingCompetition; } @@ -17,34 +18,14 @@ class AccountManager { this.tcId = tcId; } - async getQuotesCount(owner) { - const account = await ethCall(this.address, 'getAccountOf', [owner], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); - const quotesCount = await ethCall(this.address, 'getQuotesLength', [account], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); - return quotesCount; - } - - async _isAccountValid(owner, start, size) { - const isValid = await ethCall(this.address, 'isAccountValid', [owner, start, size], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); - return isValid - } - - async isAccountValid(owner) { - const quotesCount = await this.getQuotesCount(owner); - const size = 50; - - let isValid = true; - for (let start = 0; start < quotesCount & isValid; start += size) { - isValid = await this._isAccountValid(owner, start, size); - } - return isValid; + async getWeightsLen() { + const weightsLen = await ethCall(this.address, 'getWeightsLength', [], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); + return weightsLen; } - async getBalanceOfUser(owner) { - const balance = ethCall(this.address, 'getBalanceOfUser', [owner], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); - return balance - } } + const ThenaTCApp = { APP_NAME: 'thena_tc', @@ -62,57 +43,83 @@ const ThenaTCApp = { return data.data }, + getPositionAndTieCounter: async function (participants, owner, tcId) { + + const accountManager = new AccountManager(await AccountManager.getAccountManager(tcId), tcId); + const weightslen = accountManager.getWeightsLen(); + + // Find all valid participants + const validParticipants = participants.filter(participants => participants.isValid && participants.isValidDeallocate) + + // Find if owner is valid + const isOwnerValid = validParticipants.some(participant => participant.owner.toLowerCase() === owner.toLowerCase()); + if(!isOwnerValid) throw { message: "OWNER_NOT_VALID" } + + // Sort all participants + const sortedParticipants = validParticipants.sort((a,b) => parseFloat(b.percentagePnl) - parseFloat(a.percentagePnl)) + + // Find the index of the given owner + const ownerIndex = sortedParticipants.findIndex(participants => participants.owner.toLowerCase() === owner.toLowerCase()); + + // Find the given owner's percentagePnl + const ownerPnl = sortedParticipants[ownerIndex].percentagePnl; + + // Find the first index of the users with same percentagePnl as owner + const firstIndexSamePnl = sortedParticipants.findIndex(participant => participant.percentagePnl === ownerPnl); + + // Find all participants with the same percentagePnl as owner + const samePnlParticipants = sortedParticipants.filter(participant => participant.percentagePnl === ownerPnl); + + // Sub 1 from tieCounter. SC handle / 0. + const tiecounter = samePnlParticipants.length - 1; + + // Find the number of users that has more pnl than the ownerPnl + const higherParticipants = sortedParticipants.filter(participant => parseFloat(participant.percentagePnl) > parseFloat(ownerPnl)); + + // conditions: + // if the firstIndexSamePnl > weightsLen then no prize for the user + // if we have more users with higher pnl than the user and the weights len, then no prize for the user + if(firstIndexSamePnl > weightslen || higherParticipants.length >= weightslen) throw { message: "OWNER_NOT_WIN" } + return { + position: firstIndexSamePnl, + tiecounter: tiecounter + } - getInfo: async function (owner, tcId) { - const subgraphEndpoint = 'https://api.thegraph.com/subgraphs/name/spsina/thenatc' + }, + + getInfo: async function (tcId) { + const subgraphEndpoint = 'https://api.studio.thegraph.com/query/70764/tc-perp-subgraph/version/latest' const query = `{ - participants(where: {owner: "${owner}", competition_: {idCounter: ${tcId}}}) - { - depositFromOwner - depositNotFromOwner - competition { - startingBalance - } + participants(where: {competition_: {idCounter: ${tcId}}}) + { + owner + percentagePnl + isValid + isValidDeallocate } }`; + const { participants } = await this.postQuery(query, subgraphEndpoint); if (participants.length == 0) throw { message: "NO_RECORD_FOR_USER" } - if (participants.length > 1) throw { message: "MULTIPLE_RECORD_FOR_USER" } return { - startingBalance: participants[0].competition.startingBalance, - depositFromOwner: participants[0].depositFromOwner, - depositNotFromOwner: participants[0].depositNotFromOwner, + participants: participants } }, _info: async function (owner, tcId) { - // gets AccountManager address and create instance of it - const accountManager = new AccountManager(await AccountManager.getAccountManager(tcId), tcId); - // checks if user is valid - const isValid = await accountManager.isAccountValid(owner); - if (!isValid) throw { message: "NOT_VALID_USER" } - // gets final balance of user - const finalBalance = await accountManager.getBalanceOfUser(owner); // gets user info from subgraph - const { startingBalance, depositFromOwner, depositNotFromOwner } = await this.getInfo(owner, tcId); + const { participants } = await this.getInfo(tcId); + // find position + const { position, tiecounter } = await this.getPositionAndTieCounter(participants, owner, tcId) + // returns outputs return { - finalBalance, - startingBalance, - depositFromOwner, - depositNotFromOwner, - }; - }, - - calculatePnl: function (finalBalance, startingBalance, depositFromOwner, depositNotFromOwner) { - const balance0 = new BN(depositFromOwner).add(new BN(startingBalance)) - const balance1 = new BN(finalBalance).sub(new BN(depositNotFromOwner)) - const balanceChange = balance1.sub(balance0) - const pnl = balanceChange.mul(new BN(10000)).div(balance0) - return pnl + position: position, + tiecounter: tiecounter + } }, onRequest: async function (request) { @@ -126,23 +133,14 @@ const ThenaTCApp = { } switch (method) { - case 'info': { - // get info - const info = await this._info(owner, tcId); - return Object.assign(result, info); - } - case 'pnl': { + case 'position': { // gets required info const { - finalBalance, - startingBalance, - depositFromOwner, - depositNotFromOwner, + position, + tiecounter } = await this._info(owner, tcId); - // calculates pnl - const pnl = this.calculatePnl(finalBalance, startingBalance, depositFromOwner, depositNotFromOwner) - // returns result - return Object.assign(result, { pnl }) + + return Object.assign(result, { position, tiecounter }) } default: throw { message: `invalid method ${method}` } @@ -161,28 +159,12 @@ const ThenaTCApp = { ] switch (request.method) { - case 'info': { - const { - finalBalance, - startingBalance, - depositFromOwner, - depositNotFromOwner, - } = result; - - return [ - ...baseResult, - { type: 'uint256', value: finalBalance }, - { type: 'uint256', value: startingBalance }, - { type: 'uint256', value: depositFromOwner }, - { type: 'uint256', value: depositNotFromOwner }, - ] - } - case 'pnl': { - const { pnl } = result; - + case 'position': { + const { position, tiecounter } = result; return [ ...baseResult, - { type: 'int256', value: pnl }, + { type: 'uint256', value: position }, + { type: 'uint256', value: tiecounter }, ] } default: From 75d580c1eed607251cbf901bb4faaa3c487bf23a Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Wed, 26 Jun 2024 11:09:50 +0200 Subject: [PATCH 355/406] Update thena_tc.js --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index be734c6..94457dd 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -5,7 +5,7 @@ class AccountManager { static PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] static ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; - static perpManagerAddress = "0xE5Ccf697Efa772De24Cbd256e6d401B5872645c0" + static perpManagerAddress = "0xae47229E279f85f1006B86aFf60Dc6115ACF79bb" static defaultChainId = 56 static async getAccountManager(tcId) { From 7d62f09121f9c09d5f3e32a9162445f830a55c9c Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 26 Jun 2024 14:42:10 +0330 Subject: [PATCH 356/406] apps --- general/vibe.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/vibe.js b/general/vibe.js index 8b6af2b..88cc417 100644 --- a/general/vibe.js +++ b/general/vibe.js @@ -116,4 +116,4 @@ const Vibe = { }, }; -module.exports = Referral; +module.exports = Vibe; \ No newline at end of file From 0da2a507fa3e784d4b18f7a84fca3e6224ad0ec8 Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:16:27 +0200 Subject: [PATCH 357/406] Update thena_tc.js --- general/thena_tc.js | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 94457dd..9e1bf71 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -5,7 +5,7 @@ class AccountManager { static PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] static ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; - static perpManagerAddress = "0xae47229E279f85f1006B86aFf60Dc6115ACF79bb" + static perpManagerAddress = "0xE5Ccf697Efa772De24Cbd256e6d401B5872645c0" static defaultChainId = 56 static async getAccountManager(tcId) { @@ -26,8 +26,10 @@ class AccountManager { } -const ThenaTCApp = { +module.exports = { APP_NAME: 'thena_tc', + useFrost: true, + postQuery: async function (query, subgraphEndpoint) { const result = await axios.post(subgraphEndpoint, { @@ -127,11 +129,6 @@ const ThenaTCApp = { let { owner, tcId } = params - let result = { - owner, - tcId, - } - switch (method) { case 'position': { // gets required info @@ -140,7 +137,12 @@ const ThenaTCApp = { tiecounter } = await this._info(owner, tcId); - return Object.assign(result, { position, tiecounter }) + return { + owner, + tcId, + position, + tiecounter + } } default: throw { message: `invalid method ${method}` } @@ -148,21 +150,14 @@ const ThenaTCApp = { }, signParams: function (request, result) { - const { - owner, - tcId, - } = result; - - const baseResult = [ - { type: 'address', value: owner }, - { type: 'uint256', value: tcId }, - ] + let { method } = request; - switch (request.method) { + switch (method) { case 'position': { - const { position, tiecounter } = result; + let { owner, tcId, position, tiecounter} = result return [ - ...baseResult, + { type: 'address', value: owner }, + { type: 'uint256', value: tcId }, { type: 'uint256', value: position }, { type: 'uint256', value: tiecounter }, ] @@ -173,4 +168,3 @@ const ThenaTCApp = { } } -module.exports = ThenaTCApp From 705ecd959300ef35a2a7677e0eaf47c32259afa7 Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:34:40 +0200 Subject: [PATCH 358/406] Update thena_tc.js --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 9e1bf71..0a2d5cd 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -5,7 +5,7 @@ class AccountManager { static PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] static ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; - static perpManagerAddress = "0xE5Ccf697Efa772De24Cbd256e6d401B5872645c0" + static perpManagerAddress = "0xc90992b9aE19ec04b9AA9878A510c2ae3203aEe7" static defaultChainId = 56 static async getAccountManager(tcId) { From 32d9dceeca8741a447f38b8209be6ba8652b86e7 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 28 Jun 2024 12:49:06 +0330 Subject: [PATCH 359/406] apps --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 0a2d5cd..1f42aa7 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -28,7 +28,7 @@ class AccountManager { module.exports = { APP_NAME: 'thena_tc', - useFrost: true, + useFrost: false, postQuery: async function (query, subgraphEndpoint) { From 9f6f8acbccefcc730314d5fd7e25b40af8274e1c Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Mon, 1 Jul 2024 11:39:34 +0200 Subject: [PATCH 360/406] Update thena_tc.js --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 1f42aa7..8742c11 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -48,7 +48,7 @@ module.exports = { getPositionAndTieCounter: async function (participants, owner, tcId) { const accountManager = new AccountManager(await AccountManager.getAccountManager(tcId), tcId); - const weightslen = accountManager.getWeightsLen(); + const weightslen = await accountManager.getWeightsLen(); // Find all valid participants const validParticipants = participants.filter(participants => participants.isValid && participants.isValidDeallocate) From da845a2000396eec41148f129fa54bdd4828d827 Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:10:53 +0200 Subject: [PATCH 361/406] Update thena_tc.js --- general/thena_tc.js | 46 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 8742c11..5de9955 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -1,30 +1,10 @@ -const { ethCall, axios, BN } = MuonAppUtils +const { ethCall, axios } = MuonAppUtils +const PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] +const ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; -class AccountManager { - static PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] - static ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; - - static perpManagerAddress = "0xc90992b9aE19ec04b9AA9878A510c2ae3203aEe7" - static defaultChainId = 56 - - static async getAccountManager(tcId) { - const { tradingCompetition } = await ethCall(AccountManager.perpManagerAddress, 'idToTradingCompetitionAddress', [tcId], AccountManager.PERP_MANAGER_ABI, AccountManager.defaultChainId); - return tradingCompetition; - } - - constructor(address, tcId) { - this.address = address; - this.tcId = tcId; - } - - async getWeightsLen() { - const weightsLen = await ethCall(this.address, 'getWeightsLength', [], AccountManager.ACCOUNT_MANAGER_ABI, AccountManager.defaultChainId); - return weightsLen; - } - -} - +const perpManagerAddress = "0xc90992b9aE19ec04b9AA9878A510c2ae3203aEe7" +const defaultChainId = 56 module.exports = { APP_NAME: 'thena_tc', @@ -45,10 +25,20 @@ module.exports = { return data.data }, + _getTradingCompetitionAddress: async function (tcId) { + const { tradingCompetition } = await ethCall(perpManagerAddress, 'idToTradingCompetitionAddress', [tcId], PERP_MANAGER_ABI, defaultChainId); + return tradingCompetition; + }, + + getWeightsLen: async function (tcId) { + const tc_address = await _getTradingCompetitionAddress(tcId); + const weightsLen = await ethCall(tc_address, 'getWeightsLength', [], ACCOUNT_MANAGER_ABI, defaultChainId); + return weightsLen; + }, + getPositionAndTieCounter: async function (participants, owner, tcId) { - const accountManager = new AccountManager(await AccountManager.getAccountManager(tcId), tcId); - const weightslen = await accountManager.getWeightsLen(); + const weightslen = await getWeightsLen(tcId); // Find all valid participants const validParticipants = participants.filter(participants => participants.isValid && participants.isValidDeallocate) @@ -115,7 +105,7 @@ module.exports = { // gets user info from subgraph const { participants } = await this.getInfo(tcId); // find position - const { position, tiecounter } = await this.getPositionAndTieCounter(participants, owner, tcId) + const { position, tiecounter } = await this.getPositionAndTieCounter(participants.participants, owner, tcId) // returns outputs return { From 37000a0a67ef0b2d8083810f8aceff743da232bd Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jul 2024 16:02:41 +0330 Subject: [PATCH 362/406] bugfix --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 5de9955..eadd997 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -38,7 +38,7 @@ module.exports = { getPositionAndTieCounter: async function (participants, owner, tcId) { - const weightslen = await getWeightsLen(tcId); + const weightslen = await this.getWeightsLen(tcId); // Find all valid participants const validParticipants = participants.filter(participants => participants.isValid && participants.isValidDeallocate) From d7a12dbfb73119b8031569dc3e11d7598c3e2040 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jul 2024 16:13:12 +0330 Subject: [PATCH 363/406] bugfix --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index eadd997..4781d88 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -31,7 +31,7 @@ module.exports = { }, getWeightsLen: async function (tcId) { - const tc_address = await _getTradingCompetitionAddress(tcId); + const tc_address = await this._getTradingCompetitionAddress(tcId); const weightsLen = await ethCall(tc_address, 'getWeightsLength', [], ACCOUNT_MANAGER_ABI, defaultChainId); return weightsLen; }, From 8e37a2bec758f3666abbbc5b3f6fde7a4bc8ef71 Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:54:17 +0200 Subject: [PATCH 364/406] Update thena_tc.js --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 4781d88..769f7af 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -105,7 +105,7 @@ module.exports = { // gets user info from subgraph const { participants } = await this.getInfo(tcId); // find position - const { position, tiecounter } = await this.getPositionAndTieCounter(participants.participants, owner, tcId) + const { position, tiecounter } = await this.getPositionAndTieCounter(participants, owner, tcId) // returns outputs return { From b66e9dbb03d51cd5418c407df0fa189596ee752b Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Mon, 1 Jul 2024 14:57:19 +0200 Subject: [PATCH 365/406] Update thena_tc.js --- general/thena_tc.js | 1 - 1 file changed, 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 769f7af..41af4bc 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -157,4 +157,3 @@ module.exports = { } } } - From 89936aa3e6f0450d339cc7077a4a41031ec1d93a Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jul 2024 16:58:05 +0330 Subject: [PATCH 366/406] bugfix --- general/thena_tc.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 41af4bc..8978a10 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -26,7 +26,7 @@ module.exports = { }, _getTradingCompetitionAddress: async function (tcId) { - const { tradingCompetition } = await ethCall(perpManagerAddress, 'idToTradingCompetitionAddress', [tcId], PERP_MANAGER_ABI, defaultChainId); + const tradingCompetition = await ethCall(perpManagerAddress, 'idToTradingCompetitionAddress', [tcId], PERP_MANAGER_ABI, defaultChainId); return tradingCompetition; }, @@ -105,7 +105,7 @@ module.exports = { // gets user info from subgraph const { participants } = await this.getInfo(tcId); // find position - const { position, tiecounter } = await this.getPositionAndTieCounter(participants, owner, tcId) + const { position, tiecounter } = await this.getPositionAndTieCounter(participants.participants, owner, tcId) // returns outputs return { @@ -157,3 +157,4 @@ module.exports = { } } } + From b837fac86e91fd206c52390ff60dc9a595fd77f0 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Mon, 1 Jul 2024 17:21:00 +0330 Subject: [PATCH 367/406] bugfix --- general/thena_tc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 8978a10..7ce8e5d 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -105,7 +105,7 @@ module.exports = { // gets user info from subgraph const { participants } = await this.getInfo(tcId); // find position - const { position, tiecounter } = await this.getPositionAndTieCounter(participants.participants, owner, tcId) + const { position, tiecounter } = await this.getPositionAndTieCounter(participants, owner, tcId) // returns outputs return { From b1103793c7d9a512174a828ce864df2fb62c97c0 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Tue, 2 Jul 2024 11:53:08 +0330 Subject: [PATCH 368/406] Layer0 DVN --- general/layerzero_dvn.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 87ffb89..b705043 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -46,6 +46,11 @@ const ABI_JOBS = [ name: "sender", type: "address" }, + { + internalType: "address", + name: "receiver", + type: "address" + }, { internalType: "bytes", name: "options", @@ -58,8 +63,8 @@ const ABI_JOBS = [ ] const DVNs = { - sepolia: "0x5A94Ab1D4dc5A65E94143929d4E89C2FEF3c2fF2", - bsctest: "0xfb03bFd0B29CF5e11780139A00C23fa1Fe96b07b", + sepolia: "0x90328D0778A311028836e8802eF239650498C6b8", + bsctest: "0x77E4b966C46D8c8Ae8C0e499E919484D6E6d11CF", } module.exports = { @@ -88,7 +93,7 @@ module.exports = { ABI_JOBS, network ) - let { srcEid, dstEid, packetHeader, payloadHash, confirmations } = result + let { srcEid, dstEid, packetHeader, payloadHash, confirmations, receiver } = result return { srcEid: srcEid.toString(), dstEid: dstEid.toString(), @@ -96,6 +101,7 @@ module.exports = { packetHeader: packetHeader.toString(), payloadHash: payloadHash.toString(), confirmations: confirmations.toString(), + receiver: receiver.toString() } default: throw { message: `Unknown method ${method}` } @@ -107,7 +113,7 @@ module.exports = { switch (method) { case 'verify': - let { srcEid, dstEid, jobId, packetHeader, payloadHash, confirmations } = result + let { srcEid, dstEid, jobId, packetHeader, payloadHash, confirmations, receiver } = result return [ { type: 'uint32', value: srcEid }, @@ -116,6 +122,7 @@ module.exports = { { type: 'bytes', value: packetHeader }, { type: 'bytes', value: payloadHash }, { type: 'uint64', value: confirmations }, + { type: 'address', value: receiver } ] default: throw { message: `Unknown method: ${method}` } From 8bd50dc985216016e2c2357b3ce8add9cc832cd8 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 11 Jul 2024 01:26:04 +0330 Subject: [PATCH 369/406] L0 DVN: new addresses --- general/layerzero_dvn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index b705043..87c5ef7 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -63,8 +63,8 @@ const ABI_JOBS = [ ] const DVNs = { - sepolia: "0x90328D0778A311028836e8802eF239650498C6b8", - bsctest: "0x77E4b966C46D8c8Ae8C0e499E919484D6E6d11CF", + sepolia: "0x5bC4E9c3Ba142611AA0EF98a66B3fd3E7e5ebe2a", + bsctest: "0x9d95ebe060750440a0c335E59c1620C0d52256F5", } module.exports = { From 8e19dc33a203d9fc8aaf1024158b47917e7d2f6c Mon Sep 17 00:00:00 2001 From: SAYaghoubnejad Date: Sat, 13 Jul 2024 11:05:32 +0330 Subject: [PATCH 370/406] Update Vibe app --- general/vibe.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/general/vibe.js b/general/vibe.js index 8b6af2b..ba70cb3 100644 --- a/general/vibe.js +++ b/general/vibe.js @@ -22,6 +22,7 @@ const Vibe = { dailyUserHistories(where: {activeNftId: "${activeNftId}", day_lte: "${day_lte}", account: "${account}"}) { day activeNftId + referrerNftId platformFeePaid timestamp } @@ -69,7 +70,7 @@ const Vibe = { record.volume, volumeRakebackTiers ); - if (tier) { + if (tier && record.referrerNftId !== "0") { const platformFeePaid = new BN(record.platformFeePaid); const rakebackRatio = new BN(tier.rakebackRatio); const calculatedRakeback = platformFeePaid.mul(rakebackRatio).div(SCALE); @@ -84,12 +85,10 @@ const Vibe = { method, data: { params = {} }, } = request; - let { nftId, account } = params; + let { nftId, account, timestamp } = params; switch (method) { case "claim": - const timestamp = Math.floor(Date.now() / 1000); const lastDay = Math.floor(timestamp / 86400); - const amount = ( await this.calculateSum(nftId, timestamp, account) ).toString(); @@ -116,4 +115,4 @@ const Vibe = { }, }; -module.exports = Referral; +module.exports = Vibe; From 798fa0453235871db363ca0ca2dd274363f98489 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 28 Jul 2024 23:51:23 +0330 Subject: [PATCH 371/406] layerzero dvn: bugfix --- general/layerzero_dvn.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 87c5ef7..291fa10 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -89,7 +89,7 @@ module.exports = { let result = await ethCall( contractAddress, 'jobs', - jobId, + [jobId], ABI_JOBS, network ) From cf34700f3d0c7cb72b2045dbd4aa5b966ba58e9a Mon Sep 17 00:00:00 2001 From: smrm-dev Date: Tue, 30 Jul 2024 09:38:18 +0330 Subject: [PATCH 372/406] chore: add symmio app files --- general/symmio.js | 890 ++++++++++++++++++++++++++++++++++++++++ general/symmio_abi.json | 250 +++++++++++ 2 files changed, 1140 insertions(+) create mode 100644 general/symmio.js create mode 100644 general/symmio_abi.json diff --git a/general/symmio.js b/general/symmio.js new file mode 100644 index 0000000..de44e51 --- /dev/null +++ b/general/symmio.js @@ -0,0 +1,890 @@ +const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3 } = MuonAppUtils; +axios.defaults.timeout = 5000; + +const scale = new BN(toBaseUnit("1", 18)); +const ZERO = new BN(0); +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)); + +const ABI = require("./symmio_abi.json"); + +const UPNL_TOLERANCE = scaleUp("0.001"); +const PRICE_TOLERANCE = scaleUp("0.01"); +const minusOne = new BN(-1); + +const priceSources = ["binance"]; + +const getSorucePrices = { + binance: getBinancePrices, +}; + +async function getBinancePrices() { + // Define the Binance API URL + const binanceUrl = "https://fapi.binance.com/fapi/v1/premiumIndex"; + // Make an HTTP GET request to the Binance API using Axios + const { data } = await axios.get(binanceUrl); + const pricesMap = {}; + data.forEach((el) => { + pricesMap[el.symbol] = scaleUp(el.markPrice).toString(); + }); + return pricesMap; +} + +async function getBinanceMaxLeverages() { + const binanceLeveragesUrl = "https://www.binance.com/bapi/futures/v1/friendly/future/common/brackets"; + + // Make an HTTP POST request to the Binance API using Axios + const { data } = await axios.post(binanceLeveragesUrl, { + headers: { + accept: "*/*", + "Content-Type": "application/json", + }, + }); + + const maxLeverages = {}; + const leverageData = data.data.brackets; + leverageData.forEach((el) => { + maxLeverages[el.symbol] = el.riskBrackets[0].maxOpenPosLeverage; + }); + + return maxLeverages; +} + +function isPriceToleranceOk(price, expectedPrice, priceTolerance) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs(); + const priceDiffPercentage = new BN(priceDiff).mul(scale).div(new BN(expectedPrice)); + return { + isOk: !priceDiffPercentage.gt(new BN(priceTolerance)), + priceDiffPercentage: parseFloat(priceDiffPercentage.mul(new BN(10000)).div(scale).toString()) / 100, + }; +} + +function isUpnlToleranceOk(uPnl, expectedUpnl, notionalValueSum, uPnlTolerance) { + if (new BN(notionalValueSum).eq(ZERO)) return { isOk: new BN(expectedUpnl).eq(ZERO) }; + + let uPnlDiff = new BN(uPnl).sub(new BN(expectedUpnl)).abs(); + const uPnlDiffInNotionalValue = uPnlDiff.mul(scale).div(new BN(notionalValueSum)); + return { + isOk: !uPnlDiffInNotionalValue.gt(new BN(uPnlTolerance)), + uPnlDiffInNotionalValue: uPnlDiffInNotionalValue.mul(new BN(100)).div(scale), + }; +} + +async function getSymbols(quoteIds, chainId, symmio, blockNumber) { + const symbols = await ethCall(symmio, "symbolNameByQuoteId", [quoteIds], ABI, chainId, blockNumber); + if (symbols.includes("")) throw { message: "Invalid quoteId" }; + return symbols; +} + +function checkPrices(symbols, markPrices, maxLeverages) { + const expectedPrices = markPrices["binance"]; + if (priceSources.length == 1) return true; + for (let symbol of symbols) { + const expectedPrice = expectedPrices[symbol]; + if (expectedPrice == undefined) throw { message: "Undefined Binance Price", symbol }; + let sourcesCount = 0; + for (let source of priceSources) { + if (source == "binance") continue; + const pricesMap = markPrices[source]; + let price = pricesMap[symbol]; + if (price == undefined) { + continue; + } + sourcesCount += 1; + const priceTolerance = scaleUp(String(1 / maxLeverages[symbol])); + let priceCheckResult = isPriceToleranceOk(price, expectedPrice, priceTolerance); + if (!priceCheckResult.isOk) throw { message: "Corrupted Price", symbol, diff: priceCheckResult.priceDiffPercentage }; + } + if (sourcesCount == 0) throw { message: "Single Source Symbol", symbol }; + } + + return true; +} + +async function getPrices(symbols) { + const promises = []; + for (let priceSource of priceSources) { + promises.push(getSorucePrices[priceSource]()); + } + promises.push(getBinanceMaxLeverages()); + + let result; + try { + result = await Promise.all(promises); + } catch (e) { + console.log(e); + if (e.message) throw e; + throw { message: "FAILED_TO_GET_PRICES" }; + } + const markPrices = {}; + for (let [i, priceSource] of priceSources.entries()) { + markPrices[priceSource] = result[i]; + } + const maxLeverages = result[result.length - 1]; + + checkPrices(symbols, markPrices, maxLeverages); + + return { pricesMap: markPrices["binance"], markPrices, maxLeverages }; +} + +async function fetchPrices(quoteIds, chainId, symmio, blockNumber) { + // Retrieve symbols corresponding to the given quoteIds + const symbols = await getSymbols(quoteIds, chainId, symmio, blockNumber); + + // Fetch the latest prices and create a prices map + const { pricesMap, markPrices, maxLeverages } = await getPrices(symbols); + + // Create an array of prices by matching symbols with prices in the map + const prices = createPricesList(symbols, pricesMap); + + // Return an object containing the prices array and prices map + return { symbols, prices, pricesMap, markPrices, maxLeverages }; +} + +function createPricesList(symbols, pricesMap) { + const prices = []; + symbols.forEach((symbol) => prices.push(pricesMap[symbol].toString())); + return prices; +} + +async function calculateUpnl(openPositions, prices) { + let uPnl = new BN(0); // Initializes uPnl to zero + let loss = new BN(0); // Initializes loss to zero + let notionalValueSum = new BN(0); // Initializes notionalValueSum to zero + + // Iterates through each open position + for (let [i, position] of openPositions.entries()) { + const openedPrice = new BN(position.openedPrice); // Retrieves the opened price of the position + const priceDiff = new BN(prices[i]).sub(openedPrice); // Calculates the price difference between the current price and the opened price + const amount = new BN(position.quantity).sub(new BN(position.closedAmount)); // Calculates the remaining amount of the position + + // Calculates the uPnl for the current position based on the position type (long or short) + const longPositionUpnl = amount.mul(priceDiff); + const positionUpnl = position.positionType == "0" ? longPositionUpnl : minusOne.mul(longPositionUpnl); + + // Adds the position's uPnl to the total uPnl after scaling it + uPnl = uPnl.add(positionUpnl.div(scale)); + // Add the position's uPnl to the total loss if it is negative + if (positionUpnl.isNeg()) loss = loss.add(positionUpnl.div(scale)); + + // Calculates the notional value of the position and adds it to the total notional value sum + const positionNotionalValue = amount.mul(openedPrice).div(scale); + notionalValueSum = notionalValueSum.add(positionNotionalValue); + } + + // Returns the calculated uPnl and notional value sum + return { uPnl, loss, notionalValueSum }; +} + +async function getPositionsCount(parties, side, chainId, symmio, blockNumber) { + if (side == "A") return await ethCall(symmio, "partyAPositionsCount", [parties.partyA], ABI, chainId, blockNumber); + else if (side == "B") return await ethCall(symmio, "partyBPositionsCount", [parties.partyB, parties.partyA], ABI, chainId, blockNumber); +} + +async function getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber) { + if (side == "A") return await ethCall(symmio, "getPartyAOpenPositions", [parties.partyA, start, size], ABI, chainId, blockNumber); + else if (side == "B") + return await ethCall(symmio, "getPartyBOpenPositions", [parties.partyB, parties.partyA, start, size], ABI, chainId, blockNumber); +} + +async function fetchOpenPositions(parties, side, chainId, symmio, blockNumber) { + const positionsCount = new BN(await getPositionsCount(parties, side, chainId, symmio, blockNumber)); + if (positionsCount.eq(new BN(0))) return { openPositions: [], quoteIds: [] }; + + const size = 50; + const getsCount = parseInt(positionsCount.div(new BN(size))) + 1; + + const openPositions = []; + for (let i = 0; i < getsCount; i++) { + const start = i * size; + openPositions.push(...(await getOpenPositions(parties, side, start, size, chainId, symmio))); + } + + let quoteIds = []; + let symbolIds = new Set(); + let partyBs = new Set(); + openPositions.forEach((position) => { + quoteIds.push(String(position.id)); + symbolIds.add(String(position.symbolId)); + partyBs.add(position.partyB); + }); + + symbolIds = Array.from(symbolIds); + partyBs = Array.from(partyBs); + + return { + openPositions, + quoteIds, + symbolIds, + partyBs, + }; +} + +function filterPositions(partyB, mixedOpenPositions) { + let quoteIds = []; + let openPositions = []; + mixedOpenPositions.forEach((position) => { + if (position.partyB == partyB) { + openPositions.push(position); + quoteIds.push(String(position.id)); + } + }); + return { openPositions, quoteIds }; +} + +async function fetchPartyBsAllocateds(chainId, symmio, partyA, partyBs, blockNumber) { + const allocateds = await ethCall(symmio, "allocatedBalanceOfPartyBs", [partyA, partyBs], ABI, chainId, blockNumber); + return allocateds; +} + +async function getPartyNonce(parties, side, symmio, chainId, blockNumber) { + let nonce; + if (side == "A") nonce = String(await ethCall(symmio, "nonceOfPartyA", [parties.partyA], ABI, chainId, blockNumber)); + else if (side == "B") nonce = String(await ethCall(symmio, "nonceOfPartyB", [parties.partyB, parties.partyA], ABI, chainId, blockNumber)); + return nonce; +} + +async function uPnlPartyA(partyA, chainId, symmio, blockNumber) { + // Fetches the open positions and quote IDs for partyA + const { openPositions, quoteIds, symbolIds, partyBs } = await fetchOpenPositions({ partyA }, "A", chainId, symmio, blockNumber); + + // Retrieves the nonce of partyA + const nonce = await getPartyNonce({ partyA }, "A", symmio, chainId, blockNumber); + + // If there are no open positions, return the result with zero uPnl, notional value sum, + // nonce, quote IDs, open positions, prices map and mark prices (retrieved using the getPrices function) + if (openPositions.length == 0) { + const { pricesMap, markPrices, maxLeverages } = await getPrices([]); + return { + uPnl: ZERO.toString(), + loss: ZERO.toString(), + notionalValueSum: ZERO.toString(), + nonce, + quoteIds, + symbolIds: [], + symbolIdsPrices: [], + prices: [], + openPositions, + pricesMap, + markPrices, + maxLeverages, + }; + } + + // Fetches the prices, prices map and mark prices for the quote IDs + const { symbols, prices, pricesMap, markPrices, maxLeverages } = await fetchPrices(quoteIds, chainId, symmio, blockNumber); + + // Calculates the uPnl and notional value sum using the open positions and prices + const partyBsAllocateds = await fetchPartyBsAllocateds(chainId, symmio, partyA, partyBs, blockNumber); + let [uPnl, loss, notionalValueSum] = [ZERO, ZERO, ZERO]; + for (let [i, partyB] of partyBs.entries()) { + const openPositionsPerPartyB = openPositions.filter((position) => position.partyB == partyB); + const pricesPerPartyB = prices.filter((price, index) => openPositionsPerPartyB.includes(openPositions[index])); + const { + uPnl: uPnlPerPartyB, + loss: lossPerPartyB, + notionalValueSum: notionalValueSumPerPartyB, + } = await calculateUpnl(openPositionsPerPartyB, pricesPerPartyB); + uPnl = uPnl.add(BN.min(uPnlPerPartyB, new BN(partyBsAllocateds[i]))); + loss = loss.add(lossPerPartyB); + notionalValueSum = notionalValueSum.add(notionalValueSumPerPartyB); + } + + // Returns the result with the calculated uPnl, notional value sum, nonce, prices map, + // prices, quote IDs, open positions and mark prices + return { + uPnl: uPnl.toString(), + loss: loss.toString(), + notionalValueSum: notionalValueSum.toString(), + nonce, + pricesMap, + symbolIds, + symbols, + symbolIdsPrices: Array.from(new Set(prices)), + prices, + quoteIds, + openPositions, + markPrices, + maxLeverages, + }; +} + +async function uPnlPartyB(partyB, partyA, chainId, symmio, blockNumber) { + // Fetches the open positions and quote IDs for partyB with the associated partyA + const { openPositions, quoteIds } = await fetchOpenPositions({ partyB, partyA }, "B", chainId, symmio, blockNumber); + + // Retrieves the nonce of partyB for the given partyA + const nonce = await getPartyNonce({ partyB, partyA }, "B", symmio, chainId, blockNumber); + + // If there are no open positions, return the result with zero uPnl, notional value sum, + // nonce, and quote IDs + if (openPositions.length == 0) { + return { + uPnl: ZERO.toString(), + notionalValueSum: ZERO.toString(), + nonce, + quoteIds, + }; + } + + // Fetches the prices and prices map for the quote IDs + const { prices, pricesMap, markPrices } = await fetchPrices(quoteIds, chainId, symmio, blockNumber); + + // Calculates the uPnl and notional value sum using the open positions and prices + const { uPnl, notionalValueSum } = await calculateUpnl(openPositions, prices); + + // Returns the result with the calculated uPnl (multiplied by -1 to represent partyB's perspective), + // notional value sum, nonce, prices map, prices, and quote IDs + return { + uPnl: minusOne.mul(uPnl).toString(), + notionalValueSum: notionalValueSum.toString(), + nonce, + pricesMap, + prices, + quoteIds, + markPrices, + }; +} + +async function uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, mixedOpenPositions, symmio, blockNumber) { + // Filters the mixed open positions to only include positions associated with partyB + const { openPositions, quoteIds } = filterPositions(partyB, mixedOpenPositions); + + let uPnl, notionalValueSum, prices; + + if (openPositions.length > 0) { + // Retrieves the symbols associated with the quote IDs + const symbols = await getSymbols(quoteIds, chainId, symmio, blockNumber); + + // Creates a prices list using the symbols and prices map + prices = createPricesList(symbols, pricesMap); + + // Calculates the uPnl and notional value sum using the open positions and prices + const result = await calculateUpnl(openPositions, prices); + uPnl = result.uPnl; + notionalValueSum = result.notionalValueSum; + } else { + // If there are no open positions, set uPnl and notional value sum to zero + uPnl = notionalValueSum = new BN(0); + prices = []; + } + + // Retrieves the nonce of partyB for the given partyA + const nonce = await getPartyNonce({ partyB, partyA }, "B", symmio, chainId, blockNumber); + + // Returns the result with the calculated uPnl, notional value sum, nonce, prices, and quote IDs + return { + uPnl, + notionalValueSum, + nonce, + prices, + quoteIds, + }; +} + +async function uPnlParties(partyB, partyA, chainId, symmio, blockNumber) { + // Checks if partyB and partyA are identical, and throws an error if they are + if (partyB == partyA) { + throw { message: "Identical Parties Error" }; + } + + // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA + const { + uPnl: uPnlA, + nonce: nonceA, + notionalValueSum: notionalValueSumA, + pricesMap, + markPrices, + prices: pricesA, + quoteIds: quoteIdsA, + openPositions, + maxLeverages, + } = await uPnlPartyA(partyA, chainId, symmio, blockNumber); + + // Calculates the uPnl, nonce, notional value sum, prices, and quote IDs for partyB using fetched data + const { + uPnl: uPnlB, + nonce: nonceB, + notionalValueSum: notionalValueSumB, + prices: pricesB, + quoteIds: quoteIdsB, + } = await uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, openPositions, symmio, blockNumber); + + // Returns the results with adjusted uPnl for partyB, uPnl for partyA, notional value sum for partyB and partyA, + // nonces for partyB and partyA, prices map, mark prices, prices for partyB and partyA, and quote IDs for partyB and partyA + return { + uPnlB: minusOne.mul(uPnlB).toString(), + uPnlA, + notionalValueSumB: notionalValueSumB.toString(), + notionalValueSumA, + nonceB, + nonceA, + pricesMap, + maxLeverages, + markPrices, + pricesB, + pricesA, + quoteIdsB, + quoteIdsA, + }; +} + +async function getSymbolsByIds(symmio, symbolIds, chainId, blockNumber = "latest") { + const symbols = await ethCall(symmio, "symbolNameById", [symbolIds], ABI, chainId, blockNumber); + return symbols; +} + +async function getSymbolPrice(symbolId, pricesMap, markPrices, maxLeverages, symmio, chainId, blockNumber) { + const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); + let price = pricesMap[symbol]; + if (price == undefined) throw { message: "Invalid symbol" }; + checkPrices([symbol], markPrices, maxLeverages); + return price; +} + +async function getCandles(symbol, t0, t1) { + const klinesUrl = "https://fapi.binance.com/fapi/v1/klines"; + const rangeInMinutes = parseInt((t1 - t0) / 60) + 1; + const params = { + symbol, + interval: "1m", + limit: rangeInMinutes, + startTime: t0 * 1000, + endTime: t1 * 1000, + }; + + let candles; + try { + const { data } = await axios.get(klinesUrl, { params }); + candles = data; + if (candles.length != rangeInMinutes) throw { message: "INVALID_CANDLES_LENGTH" }; + } catch (e) { + console.log(e); + throw { message: e.message ? e.message : "ERROR_IN_GET_CANDLES" }; + } + return candles; +} + +function parseCandles(candles) { + let [lowest, highest] = [candles[0][3], candles[0][2]]; + let sum = 0; + let volumeSum = 0; + candles.forEach((candle) => { + let high = candle[2]; + let low = candle[3]; + let close = candle[4]; + let volume = candle[5]; + + // set lowest & highest + if (low < lowest) lowest = low; + if (high > highest) highest = high; + + // mean = sigma(close * volume) / sigma(volume) + sum += close * volume; + volumeSum += parseFloat(volume); + }); + let startTime = parseInt(candles[0][0] / 1000); + let endTime = parseInt(candles[candles.length - 1][0] / 1000); + + lowest = scaleUp(lowest); + if (lowest.eq(new BN(0))) throw { message: "ZERO_LOWEST" }; + + let mean = sum / volumeSum; + + return { + lowest: lowest.toString(), + highest: scaleUp(highest).toString(), + mean: scaleUp(String(mean)).toString(), + startTime, + endTime, + }; +} + +async function getPriceRange(symmio, symbolId, t0, t1, chainId) { + const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId); + const candles = await getCandles(symbol, t0, t1); + const { lowest, highest, mean, startTime, endTime } = parseCandles(candles); + if (startTime != t0 || endTime != t1) throw { message: "BAD_BINANCE_RESPONSE" }; + return { lowest, highest, mean, startTime, endTime }; +} + +module.exports = { + APP_NAME: "symmio", + + onRequest: async function (request) { + let { + method, + data: { params }, + } = request; + + let latestBlockNumber = request.data.result ? request.data.result.latestBlockNumber : String(await ethGetBlockNumber(params.chainId)); + + switch (method) { + case "uPnl_A": + case "partyA_overview": { + let { partyA, chainId, symmio } = params; + const result = await uPnlPartyA(partyA, chainId, symmio, latestBlockNumber); + delete result.openPositions; + let liquidationId; + if (request.data.result) { + liquidationId = request.data.result.liquidationId; + } else { + liquidationId = new Web3().eth.accounts.create().privateKey; + } + return Object.assign({}, { chainId, partyA, symmio, liquidationId, latestBlockNumber }, result); + } + + case "verify": { + let { + deploymentSeed, + signature, + reqId, + nonceAddress, + start, + size, + liquidationId, + symmio, + partyA, + nonce, + uPnl, + loss, + symbolIds, + prices, + timestamp, + chainId, + } = params; + start = parseInt(start); + size = parseInt(size); + symbolIds = JSON.parse(symbolIds); + symbolIds = symbolIds.map((symbolId) => String(symbolId)); + prices = JSON.parse(prices); + prices = prices.map((price) => String(price)); + const signedParams = [ + { name: "appId", type: "uint256", value: request.appId }, + { name: "reqId", type: "bytes", value: reqId }, + { type: "bytes", value: liquidationId }, + { type: "address", value: symmio }, + { type: "string", value: "verifyLiquidationSig" }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: uPnl }, + { type: "int256", value: loss }, + { type: "uint256[]", value: symbolIds }, + { type: "uint256[]", value: prices }, + { type: "uint256", value: timestamp }, + { type: "uint256", value: chainId }, + ]; + const hash = this.hashAppSignParams(seedRequest, signedParams); + if (!(await this.verify(deploymentSeed, hash, signature, nonceAddress))) throw { message: `Signature Not Verified` }; + + return { + liquidationId, + symmio, + partyA, + nonce, + uPnl, + loss, + symbolIds: symbolIds.slice(start, start + size), + prices: prices.slice(start, start + size), + timestamp, + chainId, + }; + } + + case "uPnl_A_withSymbolPrice": { + let { partyA, chainId, symbolId, symmio } = params; + const result = await uPnlPartyA(partyA, chainId, symmio, latestBlockNumber); + const price = await getSymbolPrice( + symbolId, + result.pricesMap, + result.markPrices, + result.maxLeverages, + symmio, + chainId, + latestBlockNumber + ); + delete result.openPositions; + return Object.assign({}, { chainId, partyA, symbolId, price, symmio, latestBlockNumber }, result); + } + + case "uPnl_B": { + let { partyB, partyA, chainId, symmio } = params; + const result = await uPnlPartyB(partyB, partyA, chainId, symmio, latestBlockNumber); + return Object.assign({}, { chainId, partyB, partyA, symmio, latestBlockNumber }, result); + } + + case "uPnl": { + let { partyB, partyA, chainId, symmio } = params; + const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); + return Object.assign({}, { chainId, partyB, partyA, symmio, latestBlockNumber }, result); + } + + case "uPnlWithSymbolPrice": { + let { partyB, partyA, chainId, symbolId, symmio } = params; + const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); + const price = await getSymbolPrice( + symbolId, + result.pricesMap, + result.markPrices, + result.maxLeverages, + symmio, + chainId, + latestBlockNumber + ); + return Object.assign({}, { chainId, partyB, partyA, symbolId, price, symmio, latestBlockNumber }, result); + } + + case "price": { + let { quoteIds, chainId, symmio } = params; + + quoteIds = JSON.parse(quoteIds); + const result = await fetchPrices(quoteIds, chainId, symmio, latestBlockNumber); + return Object.assign({}, { chainId, quoteIds, symmio, latestBlockNumber }, result); + } + + case "priceRange": { + let { symmio, partyA, partyB, symbolId, t0, t1, chainId } = params; + + t0 = parseInt(t0); + t1 = parseInt(t1); + + if (t0 % 60 != 0 || t1 % 60 != 0) throw { message: "BAD_START_OR_END_TIME" }; + if (t0 >= t1) throw { message: "START_AFTER_END_TIME" }; + + const { lowest, highest, mean, startTime, endTime } = await getPriceRange(symmio, symbolId, t0, t1, chainId); + const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); + const price = await getSymbolPrice( + symbolId, + result.pricesMap, + result.markPrices, + result.maxLeverages, + symmio, + chainId, + latestBlockNumber + ); + return Object.assign( + {}, + { chainId, partyB, partyA, symmio, symbolId, startTime, endTime, lowest, highest, mean, price, latestBlockNumber }, + result + ); + } + + default: + throw { message: `Unknown method ${method}` }; + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + case "uPnl_A": { + let { partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "partyA_overview": { + let { partyA, uPnl, loss, symbolIds, notionalValueSum, nonce, chainId, symmio, liquidationId } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isUpnlToleranceOk(loss, request.data.result.loss, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: "Loss Tolerance Error" }; + + return [ + { type: "bytes", value: liquidationId }, + { type: "address", value: symmio }, + { type: "string", value: "verifyLiquidationSig" }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "int256", value: request.data.result.loss }, + { type: "uint256[]", value: symbolIds }, + { type: "uint256[]", value: request.data.result.symbolIdsPrices }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "verify": { + let { liquidationId, partyA, nonce, uPnl, loss, symbolIds, prices, timestamp, chainId, symmio } = result; + + return [ + { type: "bytes", value: liquidationId }, + { type: "address", value: symmio }, + { type: "string", value: "verifyLiquidationSig" }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: uPnl }, + { type: "int256", value: loss }, + { type: "uint256[]", value: symbolIds }, + { type: "uint256[]", value: prices }, + { type: "uint256", value: timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnl_A_withSymbolPrice": { + let { partyA, uPnl, symbolId, price, notionalValueSum, nonce, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "uint256", value: symbolId }, + { type: "uint256", value: request.data.result.price }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnl_B": { + let { partyB, partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnl": { + let { partyB, partyA, uPnlB, uPnlA, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonceB }, + { type: "uint256", value: nonceA }, + { type: "int256", value: request.data.result.uPnlB }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnlWithSymbolPrice": { + let { partyB, partyA, uPnlB, uPnlA, symbolId, price, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonceB }, + { type: "uint256", value: nonceA }, + { type: "int256", value: request.data.result.uPnlB }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: symbolId }, + { type: "uint256", value: request.data.result.price }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "price": { + let { quoteIds, prices, chainId, symmio } = result; + + for (let [i, price] of prices.entries()) { + if (!isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + } + + return [ + { type: "address", value: symmio }, + { type: "uint256[]", value: quoteIds }, + { type: "uint256[]", value: request.data.result.prices }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "priceRange": { + let { + partyB, + partyA, + uPnlB, + uPnlA, + notionalValueSumB, + notionalValueSumA, + nonceB, + nonceA, + symbolId, + price, + startTime, + endTime, + lowest, + highest, + mean, + symmio, + chainId, + } = result; + + if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw { message: "uPnl Tolerance Error" }; + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonceB }, + { type: "uint256", value: nonceA }, + { type: "int256", value: request.data.result.uPnlB }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: symbolId }, + { type: "uint256", value: request.data.result.price }, + { type: "uint256", value: startTime }, + { type: "uint256", value: endTime }, + { type: "uint256", value: lowest }, + { type: "uint256", value: highest }, + { type: "uint256", value: mean }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + default: + break; + } + }, +}; diff --git a/general/symmio_abi.json b/general/symmio_abi.json new file mode 100644 index 0000000..8cb4d46 --- /dev/null +++ b/general/symmio_abi.json @@ -0,0 +1,250 @@ +[ + { + "inputs": [{ "internalType": "uint256[]", "name": "quoteIds", "type": "uint256[]" }], + "name": "symbolNameByQuoteId", + "outputs": [{ "internalType": "string[]", "name": "", "type": "string[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], + "name": "nonceOfPartyA", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "partyB", "type": "address" }, + { "internalType": "address", "name": "partyA", "type": "address" } + ], + "name": "nonceOfPartyB", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "address", "name": "partyA", "type": "address" }], + "name": "partyAPositionsCount", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "partyB", "type": "address" }, + { "internalType": "address", "name": "partyA", "type": "address" } + ], + "name": "partyBPositionsCount", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "partyA", "type": "address" }, + { "internalType": "uint256", "name": "start", "type": "uint256" }, + { "internalType": "uint256", "name": "size", "type": "uint256" } + ], + "name": "getPartyAOpenPositions", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, + { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, + { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, + { "internalType": "enum OrderType", "name": "orderType", "type": "uint8" }, + { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "initialOpenedPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "requestedOpenPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "marketPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "quantity", "type": "uint256" }, + { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "cva", "type": "uint256" }, + { "internalType": "uint256", "name": "lf", "type": "uint256" }, + { "internalType": "uint256", "name": "partyAmm", "type": "uint256" }, + { "internalType": "uint256", "name": "partyBmm", "type": "uint256" } + ], + "internalType": "struct LockedValues", + "name": "initialLockedValues", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "cva", "type": "uint256" }, + { "internalType": "uint256", "name": "lf", "type": "uint256" }, + { "internalType": "uint256", "name": "partyAmm", "type": "uint256" }, + { "internalType": "uint256", "name": "partyBmm", "type": "uint256" } + ], + "internalType": "struct LockedValues", + "name": "lockedValues", + "type": "tuple" + }, + { "internalType": "uint256", "name": "maxFundingRate", "type": "uint256" }, + { "internalType": "address", "name": "partyA", "type": "address" }, + { "internalType": "address", "name": "partyB", "type": "address" }, + { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, + { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "requestedClosePrice", "type": "uint256" }, + { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, + { "internalType": "uint256", "name": "parentId", "type": "uint256" }, + { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "statusModifyTimestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "lastFundingPaymentTimestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "deadline", "type": "uint256" }, + { "internalType": "uint256", "name": "tradingFee", "type": "uint256" } + ], + "internalType": "struct Quote[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "partyB", "type": "address" }, + { "internalType": "address", "name": "partyA", "type": "address" }, + { "internalType": "uint256", "name": "start", "type": "uint256" }, + { "internalType": "uint256", "name": "size", "type": "uint256" } + ], + "name": "getPartyBOpenPositions", + "outputs": [ + { + "components": [ + { "internalType": "uint256", "name": "id", "type": "uint256" }, + { "internalType": "address[]", "name": "partyBsWhiteList", "type": "address[]" }, + { "internalType": "uint256", "name": "symbolId", "type": "uint256" }, + { "internalType": "enum PositionType", "name": "positionType", "type": "uint8" }, + { "internalType": "enum OrderType", "name": "orderType", "type": "uint8" }, + { "internalType": "uint256", "name": "openedPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "initialOpenedPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "requestedOpenPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "marketPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "quantity", "type": "uint256" }, + { "internalType": "uint256", "name": "closedAmount", "type": "uint256" }, + { + "components": [ + { "internalType": "uint256", "name": "cva", "type": "uint256" }, + { "internalType": "uint256", "name": "lf", "type": "uint256" }, + { "internalType": "uint256", "name": "partyAmm", "type": "uint256" }, + { "internalType": "uint256", "name": "partyBmm", "type": "uint256" } + ], + "internalType": "struct LockedValues", + "name": "initialLockedValues", + "type": "tuple" + }, + { + "components": [ + { "internalType": "uint256", "name": "cva", "type": "uint256" }, + { "internalType": "uint256", "name": "lf", "type": "uint256" }, + { "internalType": "uint256", "name": "partyAmm", "type": "uint256" }, + { "internalType": "uint256", "name": "partyBmm", "type": "uint256" } + ], + "internalType": "struct LockedValues", + "name": "lockedValues", + "type": "tuple" + }, + { "internalType": "uint256", "name": "maxFundingRate", "type": "uint256" }, + { "internalType": "address", "name": "partyA", "type": "address" }, + { "internalType": "address", "name": "partyB", "type": "address" }, + { "internalType": "enum QuoteStatus", "name": "quoteStatus", "type": "uint8" }, + { "internalType": "uint256", "name": "avgClosedPrice", "type": "uint256" }, + { "internalType": "uint256", "name": "requestedClosePrice", "type": "uint256" }, + { "internalType": "uint256", "name": "quantityToClose", "type": "uint256" }, + { "internalType": "uint256", "name": "parentId", "type": "uint256" }, + { "internalType": "uint256", "name": "createTimestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "statusModifyTimestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "lastFundingPaymentTimestamp", "type": "uint256" }, + { "internalType": "uint256", "name": "deadline", "type": "uint256" }, + { "internalType": "uint256", "name": "tradingFee", "type": "uint256" } + ], + "internalType": "struct Quote[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [{ "internalType": "uint256[]", "name": "symbolIds", "type": "uint256[]" }], + "name": "symbolNameById", + "outputs": [{ "internalType": "string[]", "name": "", "type": "string[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "partyA", "type": "address" }, + { "internalType": "address[]", "name": "partyBs", "type": "address[]" } + ], + "name": "allocatedBalanceOfPartyBs", + "outputs": [{ "internalType": "uint256[]", "name": "", "type": "uint256[]" }], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "partyA", + "type": "address" + } + ], + "name": "balanceInfoOfPartyA", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] From 9137821c98e36d76dda0501d387a90c59190f08c Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 30 Jul 2024 17:01:15 +0330 Subject: [PATCH 373/406] useFrost for symmio --- general/symmio.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/general/symmio.js b/general/symmio.js index de44e51..ad23f1d 100644 --- a/general/symmio.js +++ b/general/symmio.js @@ -509,7 +509,8 @@ async function getPriceRange(symmio, symbolId, t0, t1, chainId) { module.exports = { APP_NAME: "symmio", - + useFrost: true, + onRequest: async function (request) { let { method, From aeedc7d5743699acf10bffa8167fcb2e23ec6b61 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 8 Aug 2024 09:43:35 +0330 Subject: [PATCH 374/406] Unitap app: use frost --- general/unitap.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/unitap.js b/general/unitap.js index 678d42d..99cd83c 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -10,6 +10,7 @@ const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "raf const UnitapApp = { APP_NAME: 'unitap', + useFrost: true, getEntryDetail: async function (raffleEntryId) { const url = `https://api.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` From 55f819374f9e0ad2969e552845aba87ba0f5116e Mon Sep 17 00:00:00 2001 From: Shayan Date: Mon, 12 Aug 2024 21:31:25 +0330 Subject: [PATCH 375/406] stage_unitap: use frost --- general/stage_unitap.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/stage_unitap.js b/general/stage_unitap.js index 0f1d1e4..336fad7 100644 --- a/general/stage_unitap.js +++ b/general/stage_unitap.js @@ -10,6 +10,7 @@ const PRIZE_TAP_RAFFLE = [{ "inputs": [{ "internalType": "uint256", "name": "raf const StageUnitapApp = { APP_NAME: 'stage_unitap', + useFrost: true, getEntryDetail: async function (raffleEntryId) { const url = `https://stage.unitap.app/api/prizetap/raffle-enrollment/detail/${raffleEntryId}/` From 1230881a9ac36f152633a957332231e8d20f6922 Mon Sep 17 00:00:00 2001 From: SAYaghoubnejad Date: Wed, 14 Aug 2024 20:10:42 +0330 Subject: [PATCH 376/406] Update vibe oracle --- general/vibe.js | 166 ++++++++++++++++++++---------------------------- 1 file changed, 70 insertions(+), 96 deletions(-) diff --git a/general/vibe.js b/general/vibe.js index ba70cb3..ee0a2cd 100644 --- a/general/vibe.js +++ b/general/vibe.js @@ -1,118 +1,92 @@ -const { axios, BN, toBaseUnit } = MuonAppUtils; -const subgraphUrl = - "https://api.studio.thegraph.com/query/62454/vibe_rewarder/version/latest"; -const SCALE = new BN(toBaseUnit('1', '18')) +const {axios, BN, toBaseUnit} = MuonAppUtils; +const subgraphUrl = "https://api.studio.thegraph.com/query/62454/vibe_rewarder/version/latest"; const Vibe = { - APP_NAME: "vibe", - useTss: true, + APP_NAME: "vibe", useTss: true, - postQuery: async function (query) { - const { - data: { data }, - } = await axios.post(subgraphUrl, { - query: query, - }); - console.log(query); - return data; - }, + postQuery: async function (query) { + const { + data: {data}, + } = await axios.post(subgraphUrl, { + query: query, + }); + return data; + }, - getDailyUserHistories: async function (activeNftId, day_lte, account) { + getRakeback4User: async function (activeNftId, day_lte) { const query = `{ - dailyUserHistories(where: {activeNftId: "${activeNftId}", day_lte: "${day_lte}", account: "${account}"}) { + dailyUserHistories(where: {activeNftId: "${activeNftId}", day_lte: "${day_lte}", referrerNftId_not: "0"}) { + userRakebackShare day - activeNftId - referrerNftId - platformFeePaid - timestamp } }`; const data = await this.postQuery(query); - console.log(data); - return data.dailyUserHistories; - }, + let amount = new BN(0); + + for (let record of data.dailyUserHistories) { + let userRakebackShareBN = new BN(record.userRakebackShare); + amount = amount.add(userRakebackShareBN); + } - getRackbacks: async function (addedTimestamp_lte) { + return amount +}, + +getRakeback4Referrer: async function (referrerNftId, day_lte) { const query = `{ - volumeRakebackTiers(where: {addedTimestamp_lte: "${Math.floor( - addedTimestamp_lte - )}"}, orderBy: maxVolume) { - addedTimestamp - maxVolume - rakebackRatio - removedTimestamp + dailyUserHistories(where: {referrerNftId: "${referrerNftId}", day_lte: "${day_lte}"}) { + userRakebackShare + rakeback + day + activeNftId } }`; const data = await this.postQuery(query); - return data.volumeRakebackTiers; - }, + let amount = new BN(0); - findTier: function (timestamp, volume, volumeRakebackTiers) { - return volumeRakebackTiers.find((tier) => { - const isWithinTimestamp = - tier.addedTimestamp <= timestamp && - (!tier.removedTimestamp || tier.removedTimestamp > timestamp); - const isWithinVolume = new BN(volume) <= new BN(tier.maxVolume); - return isWithinTimestamp && isWithinVolume; - }); - }, + for (let record of data.dailyUserHistories) { + let userRakebackShareBN = new BN(record.userRakebackShare); + let rakebackBN = new BN(record.rakeback); + amount = amount.add(rakebackBN).sub(userRakebackShareBN); + } - calculateSum: async function (nftId, timestamp, account) { - const day = Math.floor(timestamp / 86400); - const records = await this.getDailyUserHistories(nftId, day, account); - const volumeRakebackTiers = await this.getRackbacks(timestamp); - console.log(volumeRakebackTiers); - console.log(records); + return amount; +}, - return records.reduce((sum, record) => { - const tier = this.findTier( - record.timestamp, - record.volume, - volumeRakebackTiers - ); - if (tier && record.referrerNftId !== "0") { - const platformFeePaid = new BN(record.platformFeePaid); - const rakebackRatio = new BN(tier.rakebackRatio); - const calculatedRakeback = platformFeePaid.mul(rakebackRatio).div(SCALE); - return sum.add(calculatedRakeback); - } - return sum; - }, new BN(0)); - }, - onRequest: async function (request) { - let { - method, - data: { params = {} }, - } = request; - let { nftId, account, timestamp } = params; - switch (method) { - case "claim": - const lastDay = Math.floor(timestamp / 86400); - const amount = ( - await this.calculateSum(nftId, timestamp, account) - ).toString(); - return { nftId, account, amount, lastDay, timestamp }; - default: - throw { message: `invalid method ${method}` }; - } - }, + onRequest: async function (request) { + let { + method, data: {params = {}}, + } = request; + let {nftId, timestamp} = params; + switch (method) { + case "claim": + const lastDay = Math.floor(timestamp / 86400); + let userRakeback = await this.getRakeback4User(nftId, lastDay); + let referrerRakbake = await this.getRakeback4Referrer(nftId, lastDay); + const amount = userRakeback.add(referrerRakbake).toString(); + return {nftId, amount, lastDay, timestamp}; + default: + throw {message: `invalid method ${method}`}; + } + }, - signParams: function (request, result) { - switch (request.method) { - case "claim": - let { nftId, account, amount, lastDay, timestamp } = result; - return [ - { name: "nftId", type: "uint256", value: nftId }, - { name: "account", type: "address", value: account }, - { name: "amount", type: "uint256", value: amount }, - { name: "lastDay", type: "uint256", value: lastDay }, - { name: "timestamp", type: "uint256", value: timestamp }, - ]; - default: - throw { message: `Unknown method: ${request.method}` }; - } - }, + signParams: function (request, result) { + switch (request.method) { + case "claim": + let {nftId, amount, lastDay, timestamp} = result; + return [{name: "nftId", type: "uint256", value: nftId}, { + name: "amount", + type: "uint256", + value: amount + }, {name: "lastDay", type: "uint256", value: lastDay}, { + name: "timestamp", + type: "uint256", + value: timestamp + },]; + default: + throw {message: `Unknown method: ${request.method}`}; + } + }, }; module.exports = Vibe; From 026a0cd00b141d8efb25117fd51e577a565befa8 Mon Sep 17 00:00:00 2001 From: SAYaghoubnejad Date: Mon, 26 Aug 2024 09:20:59 +0330 Subject: [PATCH 377/406] Update vibe oracle --- general/vibe.js | 108 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 75 insertions(+), 33 deletions(-) diff --git a/general/vibe.js b/general/vibe.js index ee0a2cd..ce77c41 100644 --- a/general/vibe.js +++ b/general/vibe.js @@ -14,25 +14,25 @@ const Vibe = { }, getRakeback4User: async function (activeNftId, day_lte) { - const query = `{ + const query = `{ dailyUserHistories(where: {activeNftId: "${activeNftId}", day_lte: "${day_lte}", referrerNftId_not: "0"}) { userRakebackShare day } }`; - const data = await this.postQuery(query); - let amount = new BN(0); + const data = await this.postQuery(query); + let amount = new BN(0); - for (let record of data.dailyUserHistories) { - let userRakebackShareBN = new BN(record.userRakebackShare); - amount = amount.add(userRakebackShareBN); - } + for (let record of data.dailyUserHistories) { + let userRakebackShareBN = new BN(record.userRakebackShare); + amount = amount.add(userRakebackShareBN); + } - return amount -}, + return amount + }, -getRakeback4Referrer: async function (referrerNftId, day_lte) { - const query = `{ + getRakeback4Referrer: async function (referrerNftId, day_lte) { + const query = `{ dailyUserHistories(where: {referrerNftId: "${referrerNftId}", day_lte: "${day_lte}"}) { userRakebackShare rakeback @@ -40,17 +40,17 @@ getRakeback4Referrer: async function (referrerNftId, day_lte) { activeNftId } }`; - const data = await this.postQuery(query); - let amount = new BN(0); + const data = await this.postQuery(query); + let amount = new BN(0); - for (let record of data.dailyUserHistories) { - let userRakebackShareBN = new BN(record.userRakebackShare); - let rakebackBN = new BN(record.rakeback); - amount = amount.add(rakebackBN).sub(userRakebackShareBN); - } + for (let record of data.dailyUserHistories) { + let userRakebackShareBN = new BN(record.userRakebackShare); + let rakebackBN = new BN(record.rakeback); + amount = amount.add(rakebackBN).sub(userRakebackShareBN); + } - return amount; -}, + return amount; + }, onRequest: async function (request) { @@ -58,31 +58,73 @@ getRakeback4Referrer: async function (referrerNftId, day_lte) { method, data: {params = {}}, } = request; let {nftId, timestamp} = params; + const lastDay = Math.floor(timestamp / 86400); + let amount; switch (method) { case "claim": - const lastDay = Math.floor(timestamp / 86400); let userRakeback = await this.getRakeback4User(nftId, lastDay); + amount = userRakeback.toString(); + console.log(amount) + return {nftId, amount, lastDay, timestamp, method}; + case "referralClaim": let referrerRakbake = await this.getRakeback4Referrer(nftId, lastDay); - const amount = userRakeback.add(referrerRakbake).toString(); - return {nftId, amount, lastDay, timestamp}; + amount = referrerRakbake.toString(); + console.log(amount) + return {nftId, amount, lastDay, timestamp, method}; default: throw {message: `invalid method ${method}`}; } }, signParams: function (request, result) { + let {nftId, amount, lastDay, timestamp, method} = result; switch (request.method) { case "claim": - let {nftId, amount, lastDay, timestamp} = result; - return [{name: "nftId", type: "uint256", value: nftId}, { - name: "amount", - type: "uint256", - value: amount - }, {name: "lastDay", type: "uint256", value: lastDay}, { - name: "timestamp", - type: "uint256", - value: timestamp - },]; + return [ + { + name: "nftId", + type: "uint256", + value: nftId + }, { + name: "amount", + type: "uint256", + value: amount + }, { + name: "lastDay", + type: "uint256", + value: lastDay + }, { + name: "timestamp", + type: "uint256", + value: timestamp + }, { + name: "method", + type: "string", + value: method + }]; + case "referralClaim": + return [ + { + name: "nftId", + type: "uint256", + value: nftId + }, { + name: "amount", + type: "uint256", + value: amount + }, { + name: "lastDay", + type: "uint256", + value: lastDay + }, { + name: "timestamp", + type: "uint256", + value: timestamp + }, { + name: "method", + type: "string", + value: method + },]; default: throw {message: `Unknown method: ${request.method}`}; } From d5bf3a2b7b715c8db6c0086fa79a7fd34532c770 Mon Sep 17 00:00:00 2001 From: Shayan Date: Tue, 27 Aug 2024 23:48:18 +0330 Subject: [PATCH 378/406] unitap app: bugfix --- general/unitap.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/general/unitap.js b/general/unitap.js index 99cd83c..167beeb 100644 --- a/general/unitap.js +++ b/general/unitap.js @@ -127,11 +127,12 @@ const UnitapApp = { } = params const { winnersCount } = await this.getWinnersCount(chainId, raffleId, prizetapRaffle) - const { randomWords, expirationTime } = await this.getRandomWords(winnersCount) + let { randomWords, expirationTime } = await this.getRandomWords(winnersCount) + randomWords = randomWords.map((val) => val.toString()) return { randomWords, - expirationTime, + expirationTime: expirationTime.toString(), } } case 'claim-token': { From f9cf9f0a62e341f1612d52d1ca7ab1848a832bce Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Mon, 9 Sep 2024 18:43:45 +0330 Subject: [PATCH 379/406] layerzero_dvn: update dvns --- general/layerzero_dvn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 291fa10..1a4142a 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -63,8 +63,8 @@ const ABI_JOBS = [ ] const DVNs = { - sepolia: "0x5bC4E9c3Ba142611AA0EF98a66B3fd3E7e5ebe2a", - bsctest: "0x9d95ebe060750440a0c335E59c1620C0d52256F5", + sepolia: "0xe3F407205976D1485f4213A5A26c24Fa35021C34", + arbitrumSepolia: "0x0147c481f30f4EE4F747f96a78CbcE3ef0Eb5Ed4", } module.exports = { From 28f2a2fa8293e13a93ec840ceb3cd522e80af172 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Tue, 24 Sep 2024 00:21:25 +0330 Subject: [PATCH 380/406] factGPT app --- general/factGPT.js | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 general/factGPT.js diff --git a/general/factGPT.js b/general/factGPT.js new file mode 100644 index 0000000..e10441f --- /dev/null +++ b/general/factGPT.js @@ -0,0 +1,81 @@ +const { axios } = MuonAppUtils + +const gptUrl = 'https://api.openai.com/v1/chat/completions' +const OPENAI_API_KEY = process.env.GPT_API_KEY + +const ChatGPTApp = { + APP_NAME: 'factGPT', + + askGPT: async function (question) { + try { + const { data: completion } = await axios.post(gptUrl, { + messages: [ + { role: "system", content: "Answer with true or false and don't say anything except these two respnses." }, + { role: "user", content: question } + ], + model: "gpt-4-1106-preview", + }, + { + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${OPENAI_API_KEY}`, + }, + }) + + let answer = completion.choices[0].message.content; + if (!(["True.", "False.", "False", "True"].includes(answer))) { + throw { message: "GPT_NOT_ANSWERED_WITH_TRUE_OR_FALSE", answer } + } + + answer = ["True.", "True"].includes(answer) ? true : false; + + return answer + } + catch (e) { + throw { message: e.message ? e.message : "FAILED_TO_REACH_GPT" } + } + }, + + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'verify': { + let { + question, + } = params; + + const answer = await this.askGPT(question); + console.log('answer', answer) + + return { + answer, + } + } + + + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'verify': { + + let { + answer + } = result; + + return [ + { type: 'bool', value: answer }, + ] + } + + + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = ChatGPTApp From f41926ddac33d4023e0ba896a22e9052791cd7a4 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Tue, 24 Sep 2024 13:30:52 +0330 Subject: [PATCH 381/406] layerzero_dvn: mainnet dvns --- general/layerzero_dvn.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 1a4142a..9da0e0d 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -63,8 +63,8 @@ const ABI_JOBS = [ ] const DVNs = { - sepolia: "0xe3F407205976D1485f4213A5A26c24Fa35021C34", - arbitrumSepolia: "0x0147c481f30f4EE4F747f96a78CbcE3ef0Eb5Ed4", + avax: "0xEdE165a92c535bD92020204a06FD189B9C4d46E3", + ftm: "0xEdE165a92c535bD92020204a06FD189B9C4d46E3", } module.exports = { From 3c0b69a6d61e4a5d62d874bb0df9d3e0eb5b09ad Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sat, 28 Sep 2024 09:47:26 +0330 Subject: [PATCH 382/406] evm_data_verifier --- general/evm_data_verifier.js | 178 +++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 general/evm_data_verifier.js diff --git a/general/evm_data_verifier.js b/general/evm_data_verifier.js new file mode 100644 index 0000000..cfda20b --- /dev/null +++ b/general/evm_data_verifier.js @@ -0,0 +1,178 @@ +const { ethGetBlock, ethGetTransaction, ethGetTransactionReceipt, ethCall} = MuonAppUtils + +const EVMUtilsApp = { + APP_NAME: 'evm_data_verifier', + useFrost: true, + + getTimestamp: () => Math.floor(Date.now() / 1000), + + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'get-block': { + let { + network, + block + } = params + + let { + number, + hash, + timestamp, + transactions + } = await ethGetBlock(network, block); + + return { + number: number.toString(), + hash: hash.toString(), + timestamp: timestamp.toString(), + transactions + } + } + case 'get-transaction': { + let { + network, + txHash + } = params + + let { + hash, + nonce, + blockHash, + blockNumber, + transactionIndex, + from, + to, + value, + gas, + gasPrice + } = await ethGetTransaction(txHash, network); + + let { + timestamp + } = await ethGetBlock(network, blockNumber); + + return { + timestamp: timestamp.toString(), + hash: hash.toString(), + nonce: nonce.toString(), + blockHash: blockHash.toString(), + blockNumber: blockNumber.toString(), + transactionIndex: transactionIndex.toString(), + from: from.toString(), + to: to?.toString() || "", + value: value.toString(), + gas: gas.toString(), + gasPrice: gasPrice.toString() + } + } + case 'contract-call': { + let { + contractAddress, + method, + args, + abi, + network + } = params + + args = args.split(",") + + let functionResult = await ethCall(contractAddress, method, args, JSON.parse(abi), network); + + const now = this.getTimestamp(); + + if (typeof functionResult == "object") { + let result = [] + for (let index = 0; index < functionResult.__length__; index++) { + result.push(functionResult[index].toString()); + } + return { + timestamp: now.toString(), + functionResult: result + }; + } + + return { + timestamp: now.toString(), + functionResult: functionResult.toString() + }; + } + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'get-block': { + let { + number, + hash, + timestamp, + transactions + } = result + + return [ + { type: 'uint256', value: number }, + { type: 'string', value: hash }, + { type: 'uint256', value: timestamp }, + { type: 'string[]', value: transactions } + ] + } + case 'get-transaction': { + let { + timestamp, + hash, + nonce, + blockHash, + blockNumber, + transactionIndex, + from, + to, + value, + gas, + gasPrice + } = result + + + return [ + { type: "string", value: timestamp }, + { type: 'string', value: hash }, + { type: 'uint256', value: nonce }, + { type: 'string', value: blockHash }, + { type: 'uint256', value: blockNumber }, + { type: 'uint256', value: transactionIndex }, + { type: 'string', value: from }, + { type: 'string', value: to }, + { type: 'uint256', value: value }, + { type: 'uint256', value: gasPrice }, + { type: 'uint256', value: gas }, + ] + } + case 'contract-call': { + let { data: { params: { abi }}} = request + abi = JSON.parse(abi) + const {outputs} = abi[0] + + let { + timestamp, + functionResult + } = result; + + const res = outputs.reduce((res, currentItem, i) => { + res.push({type: currentItem['type'], value: functionResult[i]}); + return res; + }, []); + + return [ + { type: "string", value: timestamp }, + ...res + ]; + } + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = EVMUtilsApp From 6ec63d9a36dbb15d739f2559b9216577bf48bb06 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sat, 28 Sep 2024 09:54:17 +0330 Subject: [PATCH 383/406] evm_data_verifier --- general/evm_data_verifier.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/general/evm_data_verifier.js b/general/evm_data_verifier.js index cfda20b..6958151 100644 --- a/general/evm_data_verifier.js +++ b/general/evm_data_verifier.js @@ -1,6 +1,6 @@ const { ethGetBlock, ethGetTransaction, ethGetTransactionReceipt, ethCall} = MuonAppUtils -const EVMUtilsApp = { +const EVMDataVerifierApp = { APP_NAME: 'evm_data_verifier', useFrost: true, @@ -175,4 +175,4 @@ const EVMUtilsApp = { } } -module.exports = EVMUtilsApp +module.exports = EVMDataVerifierApp From 3290e945497addf428b78a91fe2b909e03e04631 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 2 Oct 2024 12:20:51 +0330 Subject: [PATCH 384/406] snapshot app --- general/snapshot.js | 74 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 general/snapshot.js diff --git a/general/snapshot.js b/general/snapshot.js new file mode 100644 index 0000000..bde2681 --- /dev/null +++ b/general/snapshot.js @@ -0,0 +1,74 @@ +const { axios } = MuonAppUtils + +const SnapshotApp = { + APP_NAME: 'snapshot', + useFrost: true, + + getProposal: async function (proposalId) { + const url = `https://hub.snapshot.org/graphql?`; + const query = ` + query Proposal { + proposal(id:"${proposalId}") { + votes + } + } + `; + try { + const result = await axios.post(url, { + operationName: "Proposal", + query: query, + variables: null + }); + return result.data.data.proposal; + } catch (e) { + throw e + } + }, + + onRequest: async function (request) { + let { method, data: { params } } = request; + switch (method) { + case 'proposal-votes': { + let { + proposalId + } = params; + + if(!proposalId) { + throw { message: "Invalid proposalId"}; + } + + const proposal = await this.getProposal(proposalId); + + if(!proposal) { + throw { message: "Couldn't get the proposal" }; + } + + const { votes } = proposal; + + return { + votes: votes.toString() + } + } + default: + throw { message: `invalid method ${method}` } + } + }, + + signParams: function (request, result) { + switch (request.method) { + case 'proposal-votes': { + let { + votes, + } = result + + return [ + { type: 'uint256', value: votes } + ] + } + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} + +module.exports = SnapshotApp From 73722cb22be6ed1222d5afc3bb0f15591546d4b1 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 2 Oct 2024 15:43:52 +0330 Subject: [PATCH 385/406] Snapshot app --- general/snapshot.js | 97 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 87 insertions(+), 10 deletions(-) diff --git a/general/snapshot.js b/general/snapshot.js index bde2681..311ed6c 100644 --- a/general/snapshot.js +++ b/general/snapshot.js @@ -1,5 +1,7 @@ const { axios } = MuonAppUtils +const SPACE_ID = "pion-network.eth"; + const SnapshotApp = { APP_NAME: 'snapshot', useFrost: true, @@ -7,9 +9,15 @@ const SnapshotApp = { getProposal: async function (proposalId) { const url = `https://hub.snapshot.org/graphql?`; const query = ` - query Proposal { - proposal(id:"${proposalId}") { - votes + query Proposal($id: String!) { + proposal(id: $id) { + choices + scores + scores_total + space { + id + } + state } } `; @@ -17,7 +25,9 @@ const SnapshotApp = { const result = await axios.post(url, { operationName: "Proposal", query: query, - variables: null + variables: { + id: `${proposalId}` + } }); return result.data.data.proposal; } catch (e) { @@ -28,7 +38,53 @@ const SnapshotApp = { onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { - case 'proposal-votes': { + case 'proposal-result': { + let { + proposalId + } = params; + + if(!proposalId) { + throw { message: "Invalid proposalId"}; + } + + const proposal = await this.getProposal(proposalId); + + if(!proposal) { + throw { message: "Couldn't get the proposal" }; + } + + let { + choices, + scores, + scores_total, + space, + state + } = proposal; + + choices = choices.map(c => c.toLowerCase()); + + if(space.id != SPACE_ID) { + throw { message: "Invalid voting space" }; + } + if(state != "closed") { + throw { message: "Voting is not closed yet" }; + } + if(choices.length != 2 || !choices.includes("yes") || !choices.includes("no")) { + throw { message: "Invalid proposal choices" }; + } + + let result = 0; + choices.map((choice, i) => { + if(choice == "yes") { + result = parseFloat(scores[i] * 100/scores_total).toFixed(2); + } + }) + + return { + result: result.toString() + } + } + case 'proposal-validation': { let { proposalId } = params; @@ -43,10 +99,22 @@ const SnapshotApp = { throw { message: "Couldn't get the proposal" }; } - const { votes } = proposal; + let { + choices, + space, + } = proposal; + + choices = choices.map(c => c.toLowerCase()); + + if(space.id != SPACE_ID) { + throw { message: "Invalid voting space" }; + } + if(choices.length != 2 || !choices.includes("yes") || !choices.includes("no")) { + throw { message: "Invalid proposal choices" }; + } return { - votes: votes.toString() + proposalId: proposalId.toString() } } default: @@ -56,13 +124,22 @@ const SnapshotApp = { signParams: function (request, result) { switch (request.method) { - case 'proposal-votes': { + case 'proposal-result': { + let { + result: proposalResult, + } = result + + return [ + { type: 'string', value: proposalResult } + ] + } + case 'proposal-validation': { let { - votes, + proposalId, } = result return [ - { type: 'uint256', value: votes } + { type: 'string', value: proposalId } ] } default: From b305dbcb6a05618fc46edd16b7be87467a78a274 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Thu, 3 Oct 2024 15:07:45 +0330 Subject: [PATCH 386/406] Snapshot app --- general/snapshot.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/general/snapshot.js b/general/snapshot.js index 311ed6c..1f70406 100644 --- a/general/snapshot.js +++ b/general/snapshot.js @@ -81,6 +81,7 @@ const SnapshotApp = { }) return { + proposalId, result: result.toString() } } @@ -126,10 +127,12 @@ const SnapshotApp = { switch (request.method) { case 'proposal-result': { let { + proposalId, result: proposalResult, } = result return [ + { type: 'string', value: proposalId }, { type: 'string', value: proposalResult } ] } From 3cc852a769d3c3a8bb6b1c8bd9407602b9260ccc Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 6 Oct 2024 07:46:00 +0330 Subject: [PATCH 387/406] factGPT dispute --- general/{snapshot.js => factGPT-dispute.js} | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) rename general/{snapshot.js => factGPT-dispute.js} (92%) diff --git a/general/snapshot.js b/general/factGPT-dispute.js similarity index 92% rename from general/snapshot.js rename to general/factGPT-dispute.js index 1f70406..2d13765 100644 --- a/general/snapshot.js +++ b/general/factGPT-dispute.js @@ -2,8 +2,8 @@ const { axios } = MuonAppUtils const SPACE_ID = "pion-network.eth"; -const SnapshotApp = { - APP_NAME: 'snapshot', +const FactGPTDisputeApp = { + APP_NAME: 'factGPT_dispute', useFrost: true, getProposal: async function (proposalId) { @@ -73,16 +73,16 @@ const SnapshotApp = { throw { message: "Invalid proposal choices" }; } - let result = 0; + let disputePercent = 0; choices.map((choice, i) => { if(choice == "yes") { - result = parseFloat(scores[i] * 100/scores_total).toFixed(2); + disputePercent = scores[i] * 100/scores_total; } }) return { proposalId, - result: result.toString() + result: (disputePercent > 50).toString() } } case 'proposal-validation': { @@ -133,7 +133,7 @@ const SnapshotApp = { return [ { type: 'string', value: proposalId }, - { type: 'string', value: proposalResult } + { type: 'bool', value: proposalResult } ] } case 'proposal-validation': { @@ -151,4 +151,4 @@ const SnapshotApp = { } } -module.exports = SnapshotApp +module.exports = FactGPTDisputeApp From e2c8087ebe04ffb3732776d4b88b9fa836f5754d Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 6 Oct 2024 12:15:57 +0330 Subject: [PATCH 388/406] factGPT dispute --- general/{factGPT-dispute.js => factGPT_dispute.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename general/{factGPT-dispute.js => factGPT_dispute.js} (100%) diff --git a/general/factGPT-dispute.js b/general/factGPT_dispute.js similarity index 100% rename from general/factGPT-dispute.js rename to general/factGPT_dispute.js From e64e157ed35ee23b6813668a1339dd999113ea6e Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:59:17 +0200 Subject: [PATCH 389/406] Create thena_tc_testenv.js --- general/thena_tc_testenv.js | 198 ++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 general/thena_tc_testenv.js diff --git a/general/thena_tc_testenv.js b/general/thena_tc_testenv.js new file mode 100644 index 0000000..6e26028 --- /dev/null +++ b/general/thena_tc_testenv.js @@ -0,0 +1,198 @@ +const { ethCall, axios } = MuonAppUtils + +const PERP_MANAGER_ABI = [{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idToTradingCompetitionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}] +const ACCOUNT_MANAGER_ABI = [{"inputs":[],"name":"getWeightsLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"view","type":"function"}]; + +const perpManagerAddress = "0x66dBEAba55E1D46507a244249dcB8562c12D9ABe" +const defaultChainId = 56 + +/** + * @title Thena Trading Competition Test Environment + * @dev This module provides functionality for managing and querying trading competition data + */ +module.exports = { + APP_NAME: 'thena_tc_testenv', + useFrost: false, + + /** + * @dev Executes a POST request to the subgraph endpoint + * @param {string} query - GraphQL query string + * @param {string} subgraphEndpoint - URL of the subgraph endpoint + * @return {Object} Parsed response data + */ + postQuery: async function (query, subgraphEndpoint) { + const result = await axios.post(subgraphEndpoint, { + query: query + }) + + const data = result.data + + if (data.errors) { + throw data.errors + } + + return data.data + }, + + /** + * @dev Retrieves the trading competition address for a given ID + * @param {number} tcId - Trading competition ID + * @return {string} Trading competition address + */ + _getTradingCompetitionAddress: async function (tcId) { + const tradingCompetition = await ethCall(perpManagerAddress, 'idToTradingCompetitionAddress', [tcId], PERP_MANAGER_ABI, defaultChainId); + return tradingCompetition; + }, + + /** + * @dev Gets the length of weights for a trading competition + * @param {number} tcId - Trading competition ID + * @return {number} Length of weights + */ + getWeightsLen: async function (tcId) { + const tc_address = await this._getTradingCompetitionAddress(tcId); + const weightsLen = await ethCall(tc_address, 'getWeightsLength', [], ACCOUNT_MANAGER_ABI, defaultChainId); + return weightsLen; + }, + + /** + * @dev Calculates the position and tie counter for a participant + * @param {Array} participants - List of all participants + * @param {string} owner - Address of the participant + * @param {number} tcId - Trading competition ID + * @return {Object} Position and tie counter + */ + getPositionAndTieCounter: async function (participants, owner, tcId) { + const weightslen = await this.getWeightsLen(tcId); + + // Filter valid participants + const validParticipants = participants.filter(participant => participant.isValid && participant.isValidDeallocate) + + // Check if owner is a valid participant + const isOwnerValid = validParticipants.some(participant => participant.owner.toLowerCase() === owner.toLowerCase()); + if(!isOwnerValid) throw { message: "OWNER_NOT_VALID" } + + // Sort participants by percentage PNL in descending order + const sortedParticipants = validParticipants.sort((a,b) => parseFloat(b.percentagePnl) - parseFloat(a.percentagePnl)) + + // Find the owner's index in the sorted list + const ownerIndex = sortedParticipants.findIndex(participant => participant.owner.toLowerCase() === owner.toLowerCase()); + + // Get the owner's PNL + const ownerPnl = sortedParticipants[ownerIndex].percentagePnl; + + // Find the first index of participants with the same PNL as the owner + const firstIndexSamePnl = sortedParticipants.findIndex(participant => participant.percentagePnl === ownerPnl); + + // Count participants with the same PNL as the owner + const samePnlParticipants = sortedParticipants.filter(participant => participant.percentagePnl === ownerPnl); + + // Calculate tie counter (subtract 1 as the smart contract handles division by 0) + const tiecounter = samePnlParticipants.length - 1; + + // Count participants with higher PNL than the owner + const higherParticipants = sortedParticipants.filter(participant => parseFloat(participant.percentagePnl) > parseFloat(ownerPnl)); + + // Check if the owner is eligible for a prize + if(firstIndexSamePnl > weightslen || higherParticipants.length >= weightslen) throw { message: "OWNER_NOT_WIN" } + + return { + position: firstIndexSamePnl, + tiecounter: tiecounter + } + }, + + /** + * @dev Fetches participant information from the subgraph + * @param {number} tcId - Trading competition ID + * @return {Object} Participant data + */ + getInfo: async function (tcId) { + const subgraphEndpoint = 'https://api.studio.thegraph.com/query/70764/tc-perp-test-subgraph/version/latest' + const query = `{ + participants(where: {competition_: {idCounter: ${tcId}}}) + { + owner + percentagePnl + isValid + isValidDeallocate + } + }`; + + const { participants } = await this.postQuery(query, subgraphEndpoint); + if (participants.length == 0) throw { message: "NO_RECORD_FOR_USER" } + + return { + participants: participants + } + }, + + /** + * @dev Retrieves position information for a participant + * @param {string} owner - Address of the participant + * @param {number} tcId - Trading competition ID + * @return {Object} Position and tie counter + */ + _info: async function (owner, tcId) { + const { participants } = await this.getInfo(tcId); + const { position, tiecounter } = await this.getPositionAndTieCounter(participants, owner, tcId) + + return { + position: position, + tiecounter: tiecounter + } + }, + + /** + * @dev Handles incoming requests + * @param {Object} request - Request object + * @return {Object} Response data + */ + onRequest: async function (request) { + let { method, data: { params } } = request; + + let { owner, tcId } = params + + switch (method) { + case 'position': { + const { + position, + tiecounter + } = await this._info(owner, tcId); + + return { + owner, + tcId, + position, + tiecounter + } + } + default: + throw { message: `invalid method ${method}` } + } + }, + + /** + * @dev Prepares parameters for signing + * @param {Object} request - Request object + * @param {Object} result - Result object + * @return {Array} Array of parameters to sign + */ + signParams: function (request, result) { + let { method } = request; + + switch (method) { + case 'position': { + let { owner, tcId, position, tiecounter} = result + return [ + { type: 'address', value: owner }, + { type: 'uint256', value: tcId }, + { type: 'uint256', value: position }, + { type: 'uint256', value: tiecounter }, + ] + } + default: + throw { message: `Unknown method: ${request.method}` } + } + } +} From 167e05c3c3dae545e3f5b799c93dd31a626ed8ab Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 30 Oct 2024 13:32:24 +0330 Subject: [PATCH 390/406] LayerZeroDVN: testnets --- general/layerzero_dvn.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 9da0e0d..e017f5f 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -65,6 +65,8 @@ const ABI_JOBS = [ const DVNs = { avax: "0xEdE165a92c535bD92020204a06FD189B9C4d46E3", ftm: "0xEdE165a92c535bD92020204a06FD189B9C4d46E3", + bsctest: "0xac58dB20BD970f9e856DF1732499dEf7B727BAe2", + fuji: "0xC3DaA1F175A48448fE210674260b315CbC4f9504" } module.exports = { From 899e3741b328f9472a1919b1434c6c0c33eb76fe Mon Sep 17 00:00:00 2001 From: PrometeoThena <115536862+PrometeoThena@users.noreply.github.com> Date: Wed, 6 Nov 2024 09:18:16 +0100 Subject: [PATCH 391/406] Update thena_tc.js change subgraph to squid --- general/thena_tc.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/general/thena_tc.js b/general/thena_tc.js index 7ce8e5d..89f96e0 100644 --- a/general/thena_tc.js +++ b/general/thena_tc.js @@ -81,15 +81,14 @@ module.exports = { }, getInfo: async function (tcId) { - const subgraphEndpoint = 'https://api.studio.thegraph.com/query/70764/tc-perp-subgraph/version/latest' + const subgraphEndpoint = 'https://squid.subsquid.io/thena-squid/v/v4/graphql' const query = `{ - participants(where: {competition_: {idCounter: ${tcId}}}) - { - owner - percentagePnl - isValid - isValidDeallocate - } + participants:tcPerpParticipants(competition_idCounter: ${tcId}) { + owner + percentagePnl + isValid + isValidDeallocate + } }`; From 161bafff842d0ef5887216a5ccbf3730f658cf1a Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 6 Nov 2024 14:12:10 +0330 Subject: [PATCH 392/406] factGPT updates --- general/factGPT.js | 54 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/general/factGPT.js b/general/factGPT.js index e10441f..a337fdb 100644 --- a/general/factGPT.js +++ b/general/factGPT.js @@ -1,24 +1,29 @@ const { axios } = MuonAppUtils -const gptUrl = 'https://api.openai.com/v1/chat/completions' +const chatGptUrl = 'https://api.openai.com/v1/chat/completions'; +const chatGptModel = "gpt-4-1106-preview"; const OPENAI_API_KEY = process.env.GPT_API_KEY -const ChatGPTApp = { +const pplxUrl = "https://api.perplexity.ai/chat/completions"; +const PPLX_API_KEY = process.PPLX_API_KEY; +const pplxModel = "llama-3.1-sonar-huge-128k-online"; + +const GPTApp = { APP_NAME: 'factGPT', - askGPT: async function (question) { + askGPT: async function (question, gptUrl, model, apiKey) { try { const { data: completion } = await axios.post(gptUrl, { messages: [ { role: "system", content: "Answer with true or false and don't say anything except these two respnses." }, { role: "user", content: question } ], - model: "gpt-4-1106-preview", + model: model, }, { headers: { "Content-Type": "application/json", - "Authorization": `Bearer ${OPENAI_API_KEY}`, + "Authorization": `Bearer ${apiKey}`, }, }) @@ -36,6 +41,8 @@ const ChatGPTApp = { } }, + + onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { @@ -44,7 +51,12 @@ const ChatGPTApp = { question, } = params; - const answer = await this.askGPT(question); + const answer = await this.askGPT( + question, + chatGptUrl, + chatGptModel, + OPENAI_API_KEY + ); console.log('answer', answer) return { @@ -52,6 +64,23 @@ const ChatGPTApp = { } } + case 'verifyRealtime': { + let { + question, + } = params; + + const answer = await this.askGPT( + question, + pplxUrl, + pplxModel, + PPLX_API_KEY + ); + console.log('answer', answer) + + return { + answer, + } + } default: throw { message: `invalid method ${method}` } @@ -71,6 +100,17 @@ const ChatGPTApp = { ] } + case 'verifyRealtime': { + + let { + answer + } = result; + + return [ + { type: 'bool', value: answer }, + ] + } + default: throw { message: `Unknown method: ${request.method}` } @@ -78,4 +118,4 @@ const ChatGPTApp = { } } -module.exports = ChatGPTApp +module.exports = GPTApp From 5c1d59fd0cf922758243fc648bb2bb1c24c89271 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Wed, 6 Nov 2024 14:32:50 +0330 Subject: [PATCH 393/406] factGPT updates --- general/factGPT.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/factGPT.js b/general/factGPT.js index a337fdb..4e07887 100644 --- a/general/factGPT.js +++ b/general/factGPT.js @@ -5,7 +5,7 @@ const chatGptModel = "gpt-4-1106-preview"; const OPENAI_API_KEY = process.env.GPT_API_KEY const pplxUrl = "https://api.perplexity.ai/chat/completions"; -const PPLX_API_KEY = process.PPLX_API_KEY; +const PPLX_API_KEY = process.env.PPLX_API_KEY; const pplxModel = "llama-3.1-sonar-huge-128k-online"; const GPTApp = { From f8c86bd1136a8ea509e19ce6b4ef7bb40af088d6 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 7 Nov 2024 12:30:38 +0330 Subject: [PATCH 394/406] apps --- general/factGPT.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/general/factGPT.js b/general/factGPT.js index 4e07887..eb5855c 100644 --- a/general/factGPT.js +++ b/general/factGPT.js @@ -15,8 +15,10 @@ const GPTApp = { try { const { data: completion } = await axios.post(gptUrl, { messages: [ - { role: "system", content: "Answer with true or false and don't say anything except these two respnses." }, - { role: "user", content: question } + { role: "system", content: "true/false responses only. No additional words." }, + { role: "user", content: question + + "\ntrue/false responses only. No additional words." + } ], model: model, }, @@ -46,7 +48,7 @@ const GPTApp = { onRequest: async function (request) { let { method, data: { params } } = request; switch (method) { - case 'verify': { + case 'verifyChatGPT': { let { question, } = params; @@ -64,7 +66,7 @@ const GPTApp = { } } - case 'verifyRealtime': { + case 'verify': { let { question, } = params; From b8f13bce09a92f36e218a167d6a4867d134f0a23 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 7 Nov 2024 14:17:42 +0330 Subject: [PATCH 395/406] factGPT updates --- general/factGPT.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/factGPT.js b/general/factGPT.js index eb5855c..1e0ccda 100644 --- a/general/factGPT.js +++ b/general/factGPT.js @@ -17,7 +17,7 @@ const GPTApp = { messages: [ { role: "system", content: "true/false responses only. No additional words." }, { role: "user", content: question + - "\ntrue/false responses only. No additional words." + "\n\ntrue/false responses only. No additional words." } ], model: model, From 3c2f18c8ab5b644e2adc55ac6a415aad02f07810 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Thu, 7 Nov 2024 14:30:12 +0330 Subject: [PATCH 396/406] apps --- general/factGPT.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/factGPT.js b/general/factGPT.js index 1e0ccda..eb5855c 100644 --- a/general/factGPT.js +++ b/general/factGPT.js @@ -17,7 +17,7 @@ const GPTApp = { messages: [ { role: "system", content: "true/false responses only. No additional words." }, { role: "user", content: question + - "\n\ntrue/false responses only. No additional words." + "\ntrue/false responses only. No additional words." } ], model: model, From 6c65633c6cf36264e5015716bc47b04cfdb89bca Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 13 Nov 2024 17:40:15 +0330 Subject: [PATCH 397/406] symmio pion --- general/symmio_pion.js | 1190 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1190 insertions(+) create mode 100644 general/symmio_pion.js diff --git a/general/symmio_pion.js b/general/symmio_pion.js new file mode 100644 index 0000000..179668d --- /dev/null +++ b/general/symmio_pion.js @@ -0,0 +1,1190 @@ +const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3, schnorrVerifyWithNonceAddress, soliditySha3, withSpan, MuonAppError } = MuonAppUtils; + +axios.defaults.timeout = 10000; +const elliptic = require("elliptic"); +const EC = elliptic.ec; +const curve = new EC("secp256k1"); + +const scale = new BN(toBaseUnit("1", 18)); +const ZERO = new BN(0); +const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)); + +const ABI = require("./abi.json"); + +const UPNL_TOLERANCE = scaleUp("0.001"); +const PRICE_TOLERANCE = scaleUp("0.01"); +const minusOne = new BN(-1); + +const spanTypes = { + web3Call: "muon-web3-call", + pagination: "muon-web3-pagination", + priceFetch: "muon-price-fetch", + binancePriceFetch: "muon-binance-price-fetch", + binanceLeverageFetch: "muon-binance-leverage-fetch", + binanceCandleFetch: "muon-binance-candle-fetch", + kucoinPriceFetch: "muon-kucoin-price-fetch", + mexcPriceFetch: "muon-mexc-price-fetch", +}; +const kucoinThousandPairs = ["PEPEUSDT", "SHIBUSDT", "FLOKIUSDT", "LUNCUSDT"]; +const mexcThousandPairs = ["PEPEUSDT", "SHIBUSDT", "FLOKIUSDT", "LUNCUSDT", "XECUSDT", "SATSUSDT"]; +const pairsWithSpecificSource = ["BLUEBIRDUSDT", "BNXUSDT", "DEFIUSDT", "BTCDOMUSDT"]; + +const priceUrl = process.env.PRICE_URL; +const klinesUrl = process.env.KLINES_URL; + +const priceSources = JSON.parse(process.env.PRICE_SOURCES); + +const getSorucePrices = { + binance: getBinancePrices, + kucoin: getKucoinPrices, + mexc: getMexcPrices, +}; + +async function getBinancePrices() { + return withSpan( + getBinancePrices.name, + spanTypes.binancePriceFetch, + async function () { + // Define the Binance API URL + const binancePricesUrl = priceUrl + "/all_markets"; + + let priceData; + try { + // Make an HTTP GET request to the Binance API using Axios + const result = await axios.get(binancePricesUrl); + priceData = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_BINANCE_PRICES"); + } + + // Create an empty object to store the prices map + const pricesMap = {}; + + // Iterate over the data received from the API + priceData.forEach((el) => { + try { + // Convert the mark price to a string and store it in the prices map + pricesMap[el.symbol] = scaleUp(el.price).toString(); + } catch (e) {} + }); + + // Return the populated prices map + return pricesMap; + }, + [] + ); +} + +async function getBinanceMaxLeverages() { + return withSpan( + getBinanceMaxLeverages.name, + spanTypes.binanceLeverageFetch, + async function () { + const binanceLeveragesUrl = process.env.LEVERAGE_URL; + + let leverageData; + try { + const result = await axios.get(binanceLeveragesUrl); + leverageData = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_BINANCE_LEVERAGES"); + } + const maxLeverages = {}; + leverageData.forEach((el) => { + maxLeverages[el.symbol] = el.risk_brackets[0].max_leverage; + }); + + return maxLeverages; + }, + [] + ); +} + +function formatKucoinSymbol(kucoinPair) { + let symbol = kucoinPair.symbol.slice(0, -1); + return symbol; +} + +async function getKucoinPrices() { + return withSpan( + getKucoinPrices.name, + spanTypes.kucoinPriceFetch, + async function () { + const kucoinUrl = priceUrl + "/kucoin"; + let data; + try { + const result = await axios.get(kucoinUrl, { + headers: { "Accept-Encoding": "gzip,deflate,compress" }, + }); + data = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_KUCOIN_PRICES"); + } + const pricesMap = {}; + data.forEach((el) => { + try { + const symbol = formatKucoinSymbol(el); + pricesMap[symbol] = scaleUp(Number(el.price).toFixed(10)).toString(); + } catch (e) {} + }); + pricesMap["BTCUSDT"] = pricesMap["XBTUSDT"]; + for (let symbol of kucoinThousandPairs) { + if (pricesMap[symbol] == undefined) continue; + pricesMap["1000" + symbol] = new BN(pricesMap[symbol]).mul(new BN(1000)).toString(); + } + pricesMap["LUNA2USDT"] = pricesMap["LUNAUSDT"]; + return pricesMap; + }, + [] + ); +} + +async function getMexcPrices() { + return withSpan( + getMexcPrices.name, + spanTypes.mexcPriceFetch, + async function () { + const mexcUrl = priceUrl + "/mexc"; + let data; + try { + const result = await axios.get(mexcUrl); + data = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_MEXC_PRICES"); + } + const pricesMap = {}; + data.forEach((el) => { + try { + const symbol = el.symbol.replace("_", ""); + pricesMap[symbol] = scaleUp(Number(el.price).toFixed(10)).toString(); + } catch (e) {} + }); + + for (let symbol of mexcThousandPairs) pricesMap["1000" + symbol] = new BN(pricesMap[symbol]).mul(new BN(1000)).toString(); + pricesMap["LUNA2USDT"] = pricesMap["LUNANEWUSDT"]; + pricesMap["FILUSDT"] = pricesMap["FILECOINUSDT"]; + pricesMap["BNXUSDT"] = pricesMap["BNXNEWUSDT"]; + return pricesMap; + }, + [] + ); +} + +function isPriceToleranceOk(price, expectedPrice, priceTolerance) { + let priceDiff = new BN(price).sub(new BN(expectedPrice)).abs(); + const priceDiffPercentage = new BN(priceDiff).mul(scale).div(new BN(expectedPrice)); + return { + isOk: !priceDiffPercentage.gt(new BN(priceTolerance)), + priceDiffPercentage: parseFloat(priceDiffPercentage.mul(new BN(10000)).div(scale).toString()) / 100, + }; +} + +function isUpnlToleranceOk(uPnl, expectedUpnl, notionalValueSum, uPnlTolerance) { + if (new BN(notionalValueSum).eq(ZERO)) return { isOk: new BN(expectedUpnl).eq(ZERO) }; + + let uPnlDiff = new BN(uPnl).sub(new BN(expectedUpnl)).abs(); + const uPnlDiffInNotionalValue = uPnlDiff.mul(scale).div(new BN(notionalValueSum)); + return { + isOk: !uPnlDiffInNotionalValue.gt(new BN(uPnlTolerance)), + uPnlDiffInNotionalValue: uPnlDiffInNotionalValue.mul(new BN(100)).div(scale), + }; +} + +async function getSymbols(quoteIds, chainId, symmio, blockNumber) { + return withSpan( + getSymbols.name, + spanTypes.web3Call, + async function () { + const symbols = await ethCall(symmio, "symbolNameByQuoteId", [quoteIds], ABI, chainId, blockNumber); + if (symbols.includes("")) throw new Error("Invalid quoteId"); + return symbols; + }, + [] + ); +} + +function checkPrices(symbols, markPrices, maxLeverages) { + const expectedPrices = markPrices["binance"]; + if (priceSources.length == 1) return true; + for (let symbol of symbols) { + const expectedPrice = expectedPrices[symbol]; + if (expectedPrice == undefined) throw new MuonAppError("Undefined Binance Price", { symbol }); + let sourcesCount = 0; + for (let source of priceSources) { + if (source == "binance") continue; + const pricesMap = markPrices[source]; + let price = pricesMap[symbol]; + if (price == undefined) { + continue; + } + sourcesCount += 1; + const priceTolerance = scaleUp(String(1 / maxLeverages[symbol])); + let priceCheckResult = isPriceToleranceOk(price, expectedPrice, priceTolerance); + if (!priceCheckResult.isOk) throw new MuonAppError("Corrupted Price", { symbol, diff: priceCheckResult.priceDiffPercentage }); + } + if (sourcesCount == 0) throw new MuonAppError("Single Source Symbol", { symbol }); + } + + return true; +} + +async function getPrices(symbols) { + return withSpan( + getPrices.name, + spanTypes.priceFetch, + async function () { + const promises = []; + for (let priceSource of priceSources) { + promises.push(getSorucePrices[priceSource]()); + } + // promises.push(getBinanceMaxLeverages()); + + let result; + try { + result = await Promise.all(promises); + } catch (e) { + console.log(e); + if (e.message) throw e; + throw new Error("FAILED_TO_GET_PRICES"); + } + const markPrices = {}; + for (let [i, priceSource] of priceSources.entries()) { + markPrices[priceSource] = result[i]; + } + // const maxLeverages = result[result.length - 1]; + const maxLeverages = {}; + + checkPrices(symbols, markPrices, maxLeverages); + + return { pricesMap: markPrices["binance"], markPrices, maxLeverages }; + }, + [] + ); +} + +async function fetchPrices(quoteIds, chainId, symmio, blockNumber) { + // Retrieve symbols corresponding to the given quoteIds + const symbols = await getSymbols(quoteIds, chainId, symmio, blockNumber); + + // Fetch the latest prices and create a prices map + const { pricesMap, markPrices, maxLeverages } = await getPrices(symbols); + + // Create an array of prices by matching symbols with prices in the map + const prices = createPricesList(symbols, pricesMap); + + // Return an object containing the prices array and prices map + return { symbols, prices, pricesMap, markPrices, maxLeverages }; +} + +function createPricesList(symbols, pricesMap) { + const prices = []; + let notFoundPrices = new Set(); + symbols.forEach((symbol) => { + try { + prices.push(pricesMap[symbol].toString()); + } catch (e) { + notFoundPrices.add(symbol); + } + }); + if (notFoundPrices.size > 0) throw new MuonAppError("PRICE_NOT_FOUND", { notFoundPrices: Array.from(notFoundPrices) }); + return prices; +} + +async function calculateUpnl(openPositions, prices) { + let uPnl = new BN(0); // Initializes uPnl to zero + let loss = new BN(0); // Initializes loss to zero + let notionalValueSum = new BN(0); // Initializes notionalValueSum to zero + + // Iterates through each open position + for (let [i, position] of openPositions.entries()) { + const openedPrice = new BN(position.openedPrice); // Retrieves the opened price of the position + const priceDiff = new BN(prices[i]).sub(openedPrice); // Calculates the price difference between the current price and the opened price + const amount = new BN(position.quantity).sub(new BN(position.closedAmount)); // Calculates the remaining amount of the position + + // Calculates the uPnl for the current position based on the position type (long or short) + const longPositionUpnl = amount.mul(priceDiff); + const positionUpnl = position.positionType == "0" ? longPositionUpnl : minusOne.mul(longPositionUpnl); + + // Adds the position's uPnl to the total uPnl after scaling it + uPnl = uPnl.add(positionUpnl.div(scale)); + // Add the position's uPnl to the total loss if it is negative + if (positionUpnl.isNeg()) loss = loss.add(positionUpnl.div(scale)); + + // Calculates the notional value of the position and adds it to the total notional value sum + const positionNotionalValue = amount.mul(openedPrice).div(scale); + notionalValueSum = notionalValueSum.add(positionNotionalValue); + } + + // Returns the calculated uPnl and notional value sum + return { uPnl, loss, notionalValueSum }; +} + +async function getPositionsCount(parties, side, chainId, symmio, blockNumber) { + return withSpan( + getPositionsCount.name, + spanTypes.web3Call, + async function () { + if (side == "A") return await ethCall(symmio, "partyAPositionsCount", [parties.partyA], ABI, chainId, blockNumber); + else if (side == "B") return await ethCall(symmio, "partyBPositionsCount", [parties.partyB, parties.partyA], ABI, chainId, blockNumber); + }, + [] + ); +} + +async function getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber) { + return withSpan( + getOpenPositions.name, + spanTypes.web3Call, + async function () { + if (side == "A") return await ethCall(symmio, "getPartyAOpenPositions", [parties.partyA, start, size], ABI, chainId, blockNumber); + else if (side == "B") + return await ethCall(symmio, "getPartyBOpenPositions", [parties.partyB, parties.partyA, start, size], ABI, chainId, blockNumber); + }, + [] + ); +} + +async function fetchOpenPositions(parties, side, chainId, symmio, blockNumber) { + return withSpan( + fetchOpenPositions.name, + spanTypes.pagination, + async function () { + const positionsCount = new BN(await getPositionsCount(parties, side, chainId, symmio, blockNumber)); + if (positionsCount.eq(new BN(0))) return { openPositions: [], quoteIds: [] }; + + const size = 50; + const getsCount = parseInt(positionsCount.div(new BN(size))) + 1; + + const openPositions = []; + for (let i = 0; i < getsCount; i++) { + const start = i * size; + openPositions.push(...(await getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber))); + } + + let quoteIds = []; + let symbolIds = new Set(); + let partyBs = new Set(); + openPositions.forEach((position) => { + quoteIds.push(String(position.id)); + symbolIds.add(String(position.symbolId)); + partyBs.add(position.partyB); + }); + + symbolIds = Array.from(symbolIds); + partyBs = Array.from(partyBs); + + return { + openPositions, + quoteIds, + symbolIds, + partyBs, + }; + }, + [] + ); +} + +function filterPositions(partyB, mixedOpenPositions) { + let quoteIds = []; + let openPositions = []; + mixedOpenPositions.forEach((position) => { + if (position.partyB == partyB) { + openPositions.push(position); + quoteIds.push(String(position.id)); + } + }); + return { openPositions, quoteIds }; +} + +async function fetchPartyBsAllocateds(chainId, symmio, partyA, partyBs, blockNumber) { + return withSpan( + fetchPartyBsAllocateds.name, + spanTypes.web3Call, + async function () { + const allocateds = await ethCall(symmio, "allocatedBalanceOfPartyBs", [partyA, partyBs], ABI, chainId, blockNumber); + return allocateds; + }, + [] + ); +} + +async function getPartyNonce(parties, side, symmio, chainId, blockNumber) { + return withSpan( + getPartyNonce.name, + spanTypes.web3Call, + async function () { + let nonce; + if (side == "A") nonce = String(await ethCall(symmio, "nonceOfPartyA", [parties.partyA], ABI, chainId, blockNumber)); + else if (side == "B") nonce = String(await ethCall(symmio, "nonceOfPartyB", [parties.partyB, parties.partyA], ABI, chainId, blockNumber)); + return nonce; + }, + [] + ); +} + +async function uPnlPartyA(partyA, chainId, symmio, blockNumber) { + // Fetches the open positions and quote IDs for partyA + const { openPositions, quoteIds, symbolIds, partyBs } = await fetchOpenPositions({ partyA }, "A", chainId, symmio, blockNumber); + + // Retrieves the nonce of partyA + const nonce = await getPartyNonce({ partyA }, "A", symmio, chainId, blockNumber); + + // If there are no open positions, return the result with zero uPnl, notional value sum, + // nonce, quote IDs, open positions, prices map and mark prices (retrieved using the getPrices function) + if (openPositions.length == 0) { + const { pricesMap, markPrices, maxLeverages } = await getPrices([]); + return { + uPnl: ZERO.toString(), + loss: ZERO.toString(), + notionalValueSum: ZERO.toString(), + nonce, + quoteIds, + symbolIds: [], + symbolIdsPrices: [], + prices: [], + openPositions, + pricesMap, + markPrices, + maxLeverages, + }; + } + + // Fetches the prices, prices map and mark prices for the quote IDs + const { symbols, prices, pricesMap, markPrices, maxLeverages } = await fetchPrices(quoteIds, chainId, symmio, blockNumber); + + // Calculates the uPnl and notional value sum using the open positions and prices + const partyBsAllocateds = await fetchPartyBsAllocateds(chainId, symmio, partyA, partyBs, blockNumber); + let [uPnl, loss, notionalValueSum] = [ZERO, ZERO, ZERO]; + for (let [i, partyB] of partyBs.entries()) { + const openPositionsPerPartyB = openPositions.filter((position) => position.partyB == partyB); + const pricesPerPartyB = prices.filter((price, index) => openPositionsPerPartyB.includes(openPositions[index])); + const { + uPnl: uPnlPerPartyB, + loss: lossPerPartyB, + notionalValueSum: notionalValueSumPerPartyB, + } = await calculateUpnl(openPositionsPerPartyB, pricesPerPartyB); + uPnl = uPnl.add(BN.min(uPnlPerPartyB, new BN(partyBsAllocateds[i]))); + loss = loss.add(lossPerPartyB); + notionalValueSum = notionalValueSum.add(notionalValueSumPerPartyB); + } + + // Returns the result with the calculated uPnl, notional value sum, nonce, prices map, + // prices, quote IDs, open positions and mark prices + return { + uPnl: uPnl.toString(), + loss: loss.toString(), + notionalValueSum: notionalValueSum.toString(), + nonce, + pricesMap, + symbolIds, + symbols, + symbolIdsPrices: Array.from(new Set(prices)), + prices, + quoteIds, + openPositions, + markPrices, + maxLeverages, + partyBs, + }; +} + +async function uPnlPartyB(partyB, partyA, chainId, symmio, blockNumber) { + // Fetches the open positions and quote IDs for partyB with the associated partyA + const { openPositions, quoteIds } = await fetchOpenPositions({ partyB, partyA }, "B", chainId, symmio, blockNumber); + + // Retrieves the nonce of partyB for the given partyA + const nonce = await getPartyNonce({ partyB, partyA }, "B", symmio, chainId, blockNumber); + + // If there are no open positions, return the result with zero uPnl, notional value sum, + // nonce, and quote IDs + if (openPositions.length == 0) { + return { + uPnl: ZERO.toString(), + notionalValueSum: ZERO.toString(), + nonce, + quoteIds, + }; + } + + // Fetches the prices and prices map for the quote IDs + const { prices, pricesMap, markPrices } = await fetchPrices(quoteIds, chainId, symmio, blockNumber); + + // Calculates the uPnl and notional value sum using the open positions and prices + const { uPnl, notionalValueSum } = await calculateUpnl(openPositions, prices); + + // Returns the result with the calculated uPnl (multiplied by -1 to represent partyB's perspective), + // notional value sum, nonce, prices map, prices, and quote IDs + return { + uPnl: minusOne.mul(uPnl).toString(), + notionalValueSum: notionalValueSum.toString(), + nonce, + pricesMap, + prices, + quoteIds, + markPrices, + }; +} + +async function uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, mixedOpenPositions, symmio, blockNumber) { + // Filters the mixed open positions to only include positions associated with partyB + const { openPositions, quoteIds } = filterPositions(partyB, mixedOpenPositions); + + let uPnl, notionalValueSum, prices; + + if (openPositions.length > 0) { + // Retrieves the symbols associated with the quote IDs + const symbols = await getSymbols(quoteIds, chainId, symmio, blockNumber); + + // Creates a prices list using the symbols and prices map + prices = createPricesList(symbols, pricesMap); + + // Calculates the uPnl and notional value sum using the open positions and prices + const result = await calculateUpnl(openPositions, prices); + uPnl = result.uPnl; + notionalValueSum = result.notionalValueSum; + } else { + // If there are no open positions, set uPnl and notional value sum to zero + uPnl = notionalValueSum = new BN(0); + prices = []; + } + + // Retrieves the nonce of partyB for the given partyA + const nonce = await getPartyNonce({ partyB, partyA }, "B", symmio, chainId, blockNumber); + + // Returns the result with the calculated uPnl, notional value sum, nonce, prices, and quote IDs + return { + uPnl, + notionalValueSum, + nonce, + prices, + quoteIds, + }; +} + +async function uPnlParties(partyB, partyA, chainId, symmio, blockNumber) { + // Checks if partyB and partyA are identical, and throws an error if they are + if (partyB == partyA) { + throw new Error("Identical Parties Error"); + } + + // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA + const { + uPnl: uPnlA, + nonce: nonceA, + notionalValueSum: notionalValueSumA, + pricesMap, + markPrices, + prices: pricesA, + quoteIds: quoteIdsA, + openPositions, + maxLeverages, + } = await uPnlPartyA(partyA, chainId, symmio, blockNumber); + + // Calculates the uPnl, nonce, notional value sum, prices, and quote IDs for partyB using fetched data + const { + uPnl: uPnlB, + nonce: nonceB, + notionalValueSum: notionalValueSumB, + prices: pricesB, + quoteIds: quoteIdsB, + } = await uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, openPositions, symmio, blockNumber); + + // Returns the results with adjusted uPnl for partyB, uPnl for partyA, notional value sum for partyB and partyA, + // nonces for partyB and partyA, prices map, mark prices, prices for partyB and partyA, and quote IDs for partyB and partyA + return { + uPnlB: minusOne.mul(uPnlB).toString(), + uPnlA, + notionalValueSumB: notionalValueSumB.toString(), + notionalValueSumA, + nonceB, + nonceA, + pricesMap, + maxLeverages, + markPrices, + pricesB, + pricesA, + quoteIdsB, + quoteIdsA, + }; +} + +async function calculatePartiesUpnlForSettle(partyA, symmio, chainId, blockNumber) { + let quoteSettlementData = []; + // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA + const { + uPnl: uPnlA, + pricesMap, + openPositions, + partyBs, + nonce: nonceA, + notionalValueSum: notionalValueSumA, + } = await uPnlPartyA(partyA, chainId, symmio, blockNumber); + + let upnlPartyBs = []; + let noncePartyBs = []; + let notionalValueSumBs = []; + for (let [partyBIndex, partyB] of partyBs.entries()) { + // Calculates the uPnl, nonce, notional value sum, prices, and quote IDs for partyB using fetched data + const { + uPnl: uPnlB, + prices: pricesB, + quoteIds: quoteIdsB, + nonce: nonceB, + notionalValueSum: notionalValueSumB, + } = await uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, openPositions, symmio, blockNumber); + upnlPartyBs.push(minusOne.mul(uPnlB).toString()); + quoteIdsB.forEach((quoteId, quoteIdIndex) => { + quoteSettlementData.push([quoteId, pricesB[quoteIdIndex], partyBIndex]); + }); + noncePartyBs.push(nonceB); + notionalValueSumBs.push(notionalValueSumB.toString()); + } + return { + quoteSettlementData, + uPnlA, + upnlPartyBs, + notionalValueSumA, + notionalValueSumBs, + nonceA, + noncePartyBs, + }; +} + +async function getSymbolsByIds(symmio, symbolIds, chainId, blockNumber) { + return withSpan( + getSymbolsByIds.name, + spanTypes.web3Call, + async function () { + const symbols = await ethCall(symmio, "symbolNameById", [symbolIds], ABI, chainId, blockNumber); + return symbols; + }, + [] + ); +} + +async function getSymbolPrice(symbolId, pricesMap, markPrices, maxLeverages, symmio, chainId, blockNumber) { + const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); + let price = pricesMap[symbol]; + if (price == undefined) throw new MuonAppError("Invalid symbol", { symbol }); + checkPrices([symbol], markPrices, maxLeverages); + return price; +} + +async function getCandles(symbol, t0, t1) { + return withSpan( + getCandles.name, + spanTypes.binanceCandleFetch, + async function () { + const rangeInMinutes = parseInt((t1 - t0) / 60) + 1; + const params = { + symbol, + interval: "1m", + limit: rangeInMinutes, + startTime: t0 * 1000, + endTime: t1 * 1000, + }; + + let candles; + try { + const { data } = await axios.get(klinesUrl, { params }); + candles = data; + if (candles.length != rangeInMinutes) throw new Error("INVALID_CANDLES_LENGTH"); + } catch (e) { + console.log(e); + throw new Error(e.message ? e.message : "ERROR_IN_GET_CANDLES"); + } + return candles; + }, + [] + ); +} + +function parseCandles(candles) { + let [lowest, highest] = [candles[0][3], candles[0][2]]; + let sum = 0; + let volumeSum = 0; + candles.forEach((candle) => { + let high = candle[2]; + let low = candle[3]; + let open = candle[1]; + let close = candle[4]; + let volume = candle[5]; + + // set lowest & highest + if (low < lowest) lowest = low; + if (high > highest) highest = high; + + // mean = sigma((open + close) / 2 * volume) / sigma(volume) + sum += ((parseFloat(open) + parseFloat(close)) / 2) * volume; + volumeSum += parseFloat(volume); + }); + let startTime = parseInt(candles[0][0] / 1000); + let endTime = parseInt(candles[candles.length - 1][0] / 1000); + + lowest = scaleUp(lowest); + if (lowest.eq(new BN(0))) throw new Error("ZERO_LOWEST"); + + let mean = sum / volumeSum; + + return { + lowest: lowest.toString(), + highest: scaleUp(highest).toString(), + mean: scaleUp(String(mean)).toString(), + startTime, + endTime, + }; +} + +async function getPriceRange(symmio, symbolId, t0, t1, chainId, blockNumber) { + const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); + const candles = await getCandles(symbol, t0, t1); + const { lowest, highest, mean, startTime, endTime } = parseCandles(candles); + if (startTime != t0 || endTime != t1) throw new Error("BAD_BINANCE_RESPONSE"); + return { lowest, highest, mean, startTime, endTime }; +} + +async function withSpanGetBlockNumber(chainId) { + return withSpan( + withSpanGetBlockNumber.name, + spanTypes.web3Call, + async function () { + return await ethGetBlockNumber(chainId); + }, + [] + ); +} + +module.exports = { + APP_NAME: "symmio_pion", + + onRequest: async function (request) { + let { + method, + data: { params }, + } = request; + + let latestBlockNumber = request.data.result ? request.data.result.latestBlockNumber : String(await withSpanGetBlockNumber(params.chainId)); + + switch (method) { + case "uPnl_A": + case "partyA_overview": { + let { partyA, chainId, symmio } = params; + const result = await uPnlPartyA(partyA, chainId, symmio, latestBlockNumber); + delete result.openPositions; + let liquidationId; + if (request.data.result) { + liquidationId = request.data.result.liquidationId; + } else { + liquidationId = new Web3().eth.accounts.create().privateKey; + } + return Object.assign({}, { chainId, partyA, symmio, liquidationId, latestBlockNumber }, result); + } + + case "verify": { + let { + signature, + reqId, + nonceAddress, + start, + size, + liquidationId, + symmio, + partyA, + nonce, + uPnl, + loss, + symbolIds, + prices, + timestamp, + chainId, + } = params; + start = parseInt(start); + size = parseInt(size); + symbolIds = JSON.parse(symbolIds); + symbolIds = symbolIds.map((symbolId) => String(symbolId)); + prices = JSON.parse(prices); + prices = prices.map((price) => String(price)); + const signedParams = [ + { name: "appId", type: "uint256", value: request.appId }, + { name: "reqId", type: "bytes", value: reqId }, + { type: "bytes", value: liquidationId }, + { type: "address", value: symmio }, + { type: "string", value: "verifyLiquidationSig" }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: uPnl }, + { type: "int256", value: loss }, + { type: "uint256[]", value: symbolIds }, + { type: "uint256[]", value: prices }, + { type: "uint256", value: timestamp }, + { type: "uint256", value: chainId }, + ]; + const hash = soliditySha3(signedParams); + const account = curve.keyFromPrivate(process.env.PRIVATE_KEY); + const verifyingPubKey = account.getPublic(); + if (!(await schnorrVerifyWithNonceAddress(hash, signature, nonceAddress, verifyingPubKey))) throw new Error(`Signature Not Verified`); + + return { + liquidationId, + symmio, + partyA, + nonce, + uPnl, + loss, + symbolIds: symbolIds.slice(start, start + size), + prices: prices.slice(start, start + size), + timestamp, + chainId, + }; + } + + case "uPnl_A_withSymbolPrice": { + let { partyA, chainId, symbolId, symmio } = params; + const result = await uPnlPartyA(partyA, chainId, symmio, latestBlockNumber); + const price = await getSymbolPrice( + symbolId, + result.pricesMap, + result.markPrices, + result.maxLeverages, + symmio, + chainId, + latestBlockNumber + ); + delete result.openPositions; + return Object.assign({}, { chainId, partyA, symbolId, price, symmio, latestBlockNumber }, result); + } + + case "uPnl_B": { + let { partyB, partyA, chainId, symmio } = params; + const result = await uPnlPartyB(partyB, partyA, chainId, symmio, latestBlockNumber); + return Object.assign({}, { chainId, partyB, partyA, symmio, latestBlockNumber }, result); + } + + case "uPnl": { + let { partyB, partyA, chainId, symmio } = params; + const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); + return Object.assign({}, { chainId, partyB, partyA, symmio, latestBlockNumber }, result); + } + + case "uPnlWithSymbolPrice": { + let { partyB, partyA, chainId, symbolId, symmio } = params; + const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); + const price = await getSymbolPrice( + symbolId, + result.pricesMap, + result.markPrices, + result.maxLeverages, + symmio, + chainId, + latestBlockNumber + ); + return Object.assign({}, { chainId, partyB, partyA, symbolId, price, symmio, latestBlockNumber }, result); + } + + case "price": { + let { quoteIds, chainId, symmio } = params; + + quoteIds = JSON.parse(quoteIds); + const result = await fetchPrices(quoteIds, chainId, symmio, latestBlockNumber); + return Object.assign({}, { chainId, quoteIds, symmio, latestBlockNumber }, result); + } + + case "priceRange": { + let { symmio, partyA, partyB, symbolId, t0, t1, chainId } = params; + + t0 = parseInt(t0); + t1 = parseInt(t1); + + if (t0 % 60 != 0 || t1 % 60 != 0) throw new Error("BAD_START_OR_END_TIME"); + if (t0 >= t1) throw new Error("START_AFTER_END_TIME"); + + const { lowest, highest, mean, startTime, endTime } = await getPriceRange(symmio, symbolId, t0, t1, chainId, latestBlockNumber); + const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); + const price = await getSymbolPrice( + symbolId, + result.pricesMap, + result.markPrices, + result.maxLeverages, + symmio, + chainId, + latestBlockNumber + ); + return Object.assign( + {}, + { chainId, partyB, partyA, symmio, symbolId, startTime, endTime, lowest, highest, mean, price, latestBlockNumber }, + result + ); + } + case "settle_upnl": { + let { symmio, partyA, chainId } = params; + const result = await calculatePartiesUpnlForSettle(partyA, symmio, chainId, latestBlockNumber); + return Object.assign({}, { chainId, partyA, symmio, latestBlockNumber }, result); + } + + default: + throw new Error(`Unknown method ${method}`); + } + }, + + /** + * List of the parameters that need to be signed. + * APP_ID, reqId will be added by the + * Muon Core and [APP_ID, reqId, … signParams] + * should be verified on chain. + */ + signParams: function (request, result) { + let { method } = request; + switch (method) { + case "uPnl_A": { + let { partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "partyA_overview": { + let { partyA, uPnl, loss, symbolIds, notionalValueSum, nonce, chainId, symmio, liquidationId } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isUpnlToleranceOk(loss, request.data.result.loss, notionalValueSum, UPNL_TOLERANCE).isOk) + throw new Error("Loss Tolerance Error"); + + return [ + { type: "bytes", value: liquidationId }, + { type: "address", value: symmio }, + { type: "string", value: "verifyLiquidationSig" }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "int256", value: request.data.result.loss }, + { type: "uint256[]", value: symbolIds }, + { type: "uint256[]", value: request.data.result.symbolIdsPrices }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "verify": { + let { liquidationId, partyA, nonce, uPnl, loss, symbolIds, prices, timestamp, chainId, symmio } = result; + + return [ + { type: "bytes", value: liquidationId }, + { type: "address", value: symmio }, + { type: "string", value: "verifyLiquidationSig" }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: uPnl }, + { type: "int256", value: loss }, + { type: "uint256[]", value: symbolIds }, + { type: "uint256[]", value: prices }, + { type: "uint256", value: timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnl_A_withSymbolPrice": { + let { partyA, uPnl, symbolId, price, notionalValueSum, nonce, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "uint256", value: symbolId }, + { type: "uint256", value: request.data.result.price }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnl_B": { + let { partyB, partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonce }, + { type: "int256", value: request.data.result.uPnl }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnl": { + let { partyB, partyA, uPnlB, uPnlA, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonceB }, + { type: "uint256", value: nonceA }, + { type: "int256", value: request.data.result.uPnlB }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "uPnlWithSymbolPrice": { + let { partyB, partyA, uPnlB, uPnlA, symbolId, price, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; + + if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonceB }, + { type: "uint256", value: nonceA }, + { type: "int256", value: request.data.result.uPnlB }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: symbolId }, + { type: "uint256", value: request.data.result.price }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "price": { + let { quoteIds, prices, chainId, symmio } = result; + + for (let [i, price] of prices.entries()) { + if (!isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + } + + return [ + { type: "address", value: symmio }, + { type: "uint256[]", value: quoteIds }, + { type: "uint256[]", value: request.data.result.prices }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + case "priceRange": { + let { + partyB, + partyA, + uPnlB, + uPnlA, + notionalValueSumB, + notionalValueSumA, + nonceB, + nonceA, + symbolId, + price, + startTime, + endTime, + lowest, + highest, + mean, + symmio, + chainId, + } = result; + + if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + + return [ + { type: "address", value: symmio }, + { type: "address", value: partyB }, + { type: "address", value: partyA }, + { type: "uint256", value: nonceB }, + { type: "uint256", value: nonceA }, + { type: "int256", value: request.data.result.uPnlB }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: symbolId }, + { type: "uint256", value: request.data.result.price }, + { type: "uint256", value: startTime }, + { type: "uint256", value: endTime }, + { type: "uint256", value: lowest }, + { type: "uint256", value: highest }, + { type: "uint256", value: mean }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + case "settle_upnl": { + let { quoteSettlementData, uPnlA, upnlPartyBs, notionalValueSumA, notionalValueSumBs, nonceA, noncePartyBs, symmio, chainId } = + result; + + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + + let packedSettlementData = ""; + quoteSettlementData.forEach((data, i) => { + const partyBIndex = data[2]; + if ( + !isUpnlToleranceOk( + upnlPartyBs[partyBIndex], + request.data.result.upnlPartyBs[partyBIndex], + notionalValueSumBs[partyBIndex], + UPNL_TOLERANCE + ).isOk + ) + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(data[1], request.data.result.quoteSettlementData[i][1], PRICE_TOLERANCE).isOk) + throw new Error("Price Tolerance Error"); + packedSettlementData = Web3.utils.encodePacked( + ...[ + { type: "bytes", value: packedSettlementData }, + { type: "uint256", value: request.data.result.quoteSettlementData[i][0] }, + { type: "uint256", value: request.data.result.quoteSettlementData[i][1] }, + { type: "uint8", value: request.data.result.quoteSettlementData[i][2] }, + ] + ); + }); + + return [ + { type: "address", value: symmio }, + { type: "string", value: "verifySettlement" }, + { type: "uint256[]", value: noncePartyBs }, + { type: "uint256", value: nonceA }, + { type: "bytes", value: packedSettlementData }, + { type: "int256[]", value: request.data.result.upnlPartyBs }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } + + default: + break; + } + }, +}; From 4c02932ef0fe8a90ac54a8e77f8b7bc213330b5c Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sat, 16 Nov 2024 15:54:04 +0330 Subject: [PATCH 398/406] symmio_pion app --- general/symmio_pion.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/symmio_pion.js b/general/symmio_pion.js index 179668d..851010b 100644 --- a/general/symmio_pion.js +++ b/general/symmio_pion.js @@ -9,7 +9,7 @@ const scale = new BN(toBaseUnit("1", 18)); const ZERO = new BN(0); const scaleUp = (value) => new BN(toBaseUnit(String(value), 18)); -const ABI = require("./abi.json"); +const ABI = require("./symmio_abi.json"); const UPNL_TOLERANCE = scaleUp("0.001"); const PRICE_TOLERANCE = scaleUp("0.01"); From 4999af0fea13178f3792e1d62db9e1b31fc551e1 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sat, 16 Nov 2024 17:40:41 +0330 Subject: [PATCH 399/406] symmio_pion: bugfix --- general/symmio_pion.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/symmio_pion.js b/general/symmio_pion.js index 851010b..3f5291c 100644 --- a/general/symmio_pion.js +++ b/general/symmio_pion.js @@ -32,7 +32,7 @@ const pairsWithSpecificSource = ["BLUEBIRDUSDT", "BNXUSDT", "DEFIUSDT", "BTCDOMU const priceUrl = process.env.PRICE_URL; const klinesUrl = process.env.KLINES_URL; -const priceSources = JSON.parse(process.env.PRICE_SOURCES); +const priceSources = JSON.parse(process.env.PRICE_SOURCES || "[]"); const getSorucePrices = { binance: getBinancePrices, From 10f0a88d6e50345e81b62334e84145e975df957b Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 17 Nov 2024 11:45:35 +0330 Subject: [PATCH 400/406] symmio_pion app --- general/symmio_pion.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/general/symmio_pion.js b/general/symmio_pion.js index 3f5291c..ec09964 100644 --- a/general/symmio_pion.js +++ b/general/symmio_pion.js @@ -1,4 +1,4 @@ -const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3, schnorrVerifyWithNonceAddress, soliditySha3, withSpan, MuonAppError } = MuonAppUtils; +const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3, schnorrVerifyWithNonceAddress, soliditySha3, MuonAppError } = MuonAppUtils; axios.defaults.timeout = 10000; const elliptic = require("elliptic"); @@ -40,6 +40,19 @@ const getSorucePrices = { mexc: getMexcPrices, }; +async function withSpan(spanName, spanType, func, args) { + let result, error; + // let span = apmAgent.startSpan(spanName, spanType); + try { + result = await func(...args); + } catch (e) { + error = e; + } + // if (span) span.end(); + if (error) throw error; + return result; +} + async function getBinancePrices() { return withSpan( getBinancePrices.name, From 524066fc670d0be40f92554c24ffa9e99eea86b7 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 27 Nov 2024 11:46:42 +0330 Subject: [PATCH 401/406] Rename symmio apps --- general/symmio.js | 610 +++++++++++++++------ general/{symmio_pion.js => symmio_old.js} | 612 ++++++---------------- 2 files changed, 611 insertions(+), 611 deletions(-) rename general/{symmio_pion.js => symmio_old.js} (61%) diff --git a/general/symmio.js b/general/symmio.js index ad23f1d..2b6f238 100644 --- a/general/symmio.js +++ b/general/symmio.js @@ -1,5 +1,9 @@ -const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3 } = MuonAppUtils; -axios.defaults.timeout = 5000; +const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3, schnorrVerifyWithNonceAddress, soliditySha3, MuonAppError } = MuonAppUtils; + +axios.defaults.timeout = 10000; +const elliptic = require("elliptic"); +const EC = elliptic.ec; +const curve = new EC("secp256k1"); const scale = new BN(toBaseUnit("1", 18)); const ZERO = new BN(0); @@ -11,42 +15,176 @@ const UPNL_TOLERANCE = scaleUp("0.001"); const PRICE_TOLERANCE = scaleUp("0.01"); const minusOne = new BN(-1); -const priceSources = ["binance"]; +const spanTypes = { + web3Call: "muon-web3-call", + pagination: "muon-web3-pagination", + priceFetch: "muon-price-fetch", + binancePriceFetch: "muon-binance-price-fetch", + binanceLeverageFetch: "muon-binance-leverage-fetch", + binanceCandleFetch: "muon-binance-candle-fetch", + kucoinPriceFetch: "muon-kucoin-price-fetch", + mexcPriceFetch: "muon-mexc-price-fetch", +}; +const kucoinThousandPairs = ["PEPEUSDT", "SHIBUSDT", "FLOKIUSDT", "LUNCUSDT"]; +const mexcThousandPairs = ["PEPEUSDT", "SHIBUSDT", "FLOKIUSDT", "LUNCUSDT", "XECUSDT", "SATSUSDT"]; +const pairsWithSpecificSource = ["BLUEBIRDUSDT", "BNXUSDT", "DEFIUSDT", "BTCDOMUSDT"]; + +const priceUrl = process.env.PRICE_URL; +const klinesUrl = process.env.KLINES_URL; + +const priceSources = JSON.parse(process.env.PRICE_SOURCES || "[]"); const getSorucePrices = { binance: getBinancePrices, + kucoin: getKucoinPrices, + mexc: getMexcPrices, }; +async function withSpan(spanName, spanType, func, args) { + let result, error; + // let span = apmAgent.startSpan(spanName, spanType); + try { + result = await func(...args); + } catch (e) { + error = e; + } + // if (span) span.end(); + if (error) throw error; + return result; +} + async function getBinancePrices() { - // Define the Binance API URL - const binanceUrl = "https://fapi.binance.com/fapi/v1/premiumIndex"; - // Make an HTTP GET request to the Binance API using Axios - const { data } = await axios.get(binanceUrl); - const pricesMap = {}; - data.forEach((el) => { - pricesMap[el.symbol] = scaleUp(el.markPrice).toString(); - }); - return pricesMap; + return withSpan( + getBinancePrices.name, + spanTypes.binancePriceFetch, + async function () { + // Define the Binance API URL + const binancePricesUrl = priceUrl + "/all_markets"; + + let priceData; + try { + // Make an HTTP GET request to the Binance API using Axios + const result = await axios.get(binancePricesUrl); + priceData = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_BINANCE_PRICES"); + } + + // Create an empty object to store the prices map + const pricesMap = {}; + + // Iterate over the data received from the API + priceData.forEach((el) => { + try { + // Convert the mark price to a string and store it in the prices map + pricesMap[el.symbol] = scaleUp(el.price).toString(); + } catch (e) {} + }); + + // Return the populated prices map + return pricesMap; + }, + [] + ); } async function getBinanceMaxLeverages() { - const binanceLeveragesUrl = "https://www.binance.com/bapi/futures/v1/friendly/future/common/brackets"; + return withSpan( + getBinanceMaxLeverages.name, + spanTypes.binanceLeverageFetch, + async function () { + const binanceLeveragesUrl = process.env.LEVERAGE_URL; + + let leverageData; + try { + const result = await axios.get(binanceLeveragesUrl); + leverageData = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_BINANCE_LEVERAGES"); + } + const maxLeverages = {}; + leverageData.forEach((el) => { + maxLeverages[el.symbol] = el.risk_brackets[0].max_leverage; + }); - // Make an HTTP POST request to the Binance API using Axios - const { data } = await axios.post(binanceLeveragesUrl, { - headers: { - accept: "*/*", - "Content-Type": "application/json", + return maxLeverages; }, - }); + [] + ); +} - const maxLeverages = {}; - const leverageData = data.data.brackets; - leverageData.forEach((el) => { - maxLeverages[el.symbol] = el.riskBrackets[0].maxOpenPosLeverage; - }); +function formatKucoinSymbol(kucoinPair) { + let symbol = kucoinPair.symbol.slice(0, -1); + return symbol; +} - return maxLeverages; +async function getKucoinPrices() { + return withSpan( + getKucoinPrices.name, + spanTypes.kucoinPriceFetch, + async function () { + const kucoinUrl = priceUrl + "/kucoin"; + let data; + try { + const result = await axios.get(kucoinUrl, { + headers: { "Accept-Encoding": "gzip,deflate,compress" }, + }); + data = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_KUCOIN_PRICES"); + } + const pricesMap = {}; + data.forEach((el) => { + try { + const symbol = formatKucoinSymbol(el); + pricesMap[symbol] = scaleUp(Number(el.price).toFixed(10)).toString(); + } catch (e) {} + }); + pricesMap["BTCUSDT"] = pricesMap["XBTUSDT"]; + for (let symbol of kucoinThousandPairs) { + if (pricesMap[symbol] == undefined) continue; + pricesMap["1000" + symbol] = new BN(pricesMap[symbol]).mul(new BN(1000)).toString(); + } + pricesMap["LUNA2USDT"] = pricesMap["LUNAUSDT"]; + return pricesMap; + }, + [] + ); +} + +async function getMexcPrices() { + return withSpan( + getMexcPrices.name, + spanTypes.mexcPriceFetch, + async function () { + const mexcUrl = priceUrl + "/mexc"; + let data; + try { + const result = await axios.get(mexcUrl); + data = result.data; + } catch (e) { + console.log(e); + throw new Error("FAILED_TO_GET_MEXC_PRICES"); + } + const pricesMap = {}; + data.forEach((el) => { + try { + const symbol = el.symbol.replace("_", ""); + pricesMap[symbol] = scaleUp(Number(el.price).toFixed(10)).toString(); + } catch (e) {} + }); + + for (let symbol of mexcThousandPairs) pricesMap["1000" + symbol] = new BN(pricesMap[symbol]).mul(new BN(1000)).toString(); + pricesMap["LUNA2USDT"] = pricesMap["LUNANEWUSDT"]; + pricesMap["FILUSDT"] = pricesMap["FILECOINUSDT"]; + pricesMap["BNXUSDT"] = pricesMap["BNXNEWUSDT"]; + return pricesMap; + }, + [] + ); } function isPriceToleranceOk(price, expectedPrice, priceTolerance) { @@ -70,9 +208,16 @@ function isUpnlToleranceOk(uPnl, expectedUpnl, notionalValueSum, uPnlTolerance) } async function getSymbols(quoteIds, chainId, symmio, blockNumber) { - const symbols = await ethCall(symmio, "symbolNameByQuoteId", [quoteIds], ABI, chainId, blockNumber); - if (symbols.includes("")) throw { message: "Invalid quoteId" }; - return symbols; + return withSpan( + getSymbols.name, + spanTypes.web3Call, + async function () { + const symbols = await ethCall(symmio, "symbolNameByQuoteId", [quoteIds], ABI, chainId, blockNumber); + if (symbols.includes("")) throw new Error("Invalid quoteId"); + return symbols; + }, + [] + ); } function checkPrices(symbols, markPrices, maxLeverages) { @@ -80,7 +225,7 @@ function checkPrices(symbols, markPrices, maxLeverages) { if (priceSources.length == 1) return true; for (let symbol of symbols) { const expectedPrice = expectedPrices[symbol]; - if (expectedPrice == undefined) throw { message: "Undefined Binance Price", symbol }; + if (expectedPrice == undefined) throw new MuonAppError("Undefined Binance Price", { symbol }); let sourcesCount = 0; for (let source of priceSources) { if (source == "binance") continue; @@ -92,38 +237,46 @@ function checkPrices(symbols, markPrices, maxLeverages) { sourcesCount += 1; const priceTolerance = scaleUp(String(1 / maxLeverages[symbol])); let priceCheckResult = isPriceToleranceOk(price, expectedPrice, priceTolerance); - if (!priceCheckResult.isOk) throw { message: "Corrupted Price", symbol, diff: priceCheckResult.priceDiffPercentage }; + if (!priceCheckResult.isOk) throw new MuonAppError("Corrupted Price", { symbol, diff: priceCheckResult.priceDiffPercentage }); } - if (sourcesCount == 0) throw { message: "Single Source Symbol", symbol }; + if (sourcesCount == 0) throw new MuonAppError("Single Source Symbol", { symbol }); } return true; } async function getPrices(symbols) { - const promises = []; - for (let priceSource of priceSources) { - promises.push(getSorucePrices[priceSource]()); - } - promises.push(getBinanceMaxLeverages()); - - let result; - try { - result = await Promise.all(promises); - } catch (e) { - console.log(e); - if (e.message) throw e; - throw { message: "FAILED_TO_GET_PRICES" }; - } - const markPrices = {}; - for (let [i, priceSource] of priceSources.entries()) { - markPrices[priceSource] = result[i]; - } - const maxLeverages = result[result.length - 1]; + return withSpan( + getPrices.name, + spanTypes.priceFetch, + async function () { + const promises = []; + for (let priceSource of priceSources) { + promises.push(getSorucePrices[priceSource]()); + } + // promises.push(getBinanceMaxLeverages()); + + let result; + try { + result = await Promise.all(promises); + } catch (e) { + console.log(e); + if (e.message) throw e; + throw new Error("FAILED_TO_GET_PRICES"); + } + const markPrices = {}; + for (let [i, priceSource] of priceSources.entries()) { + markPrices[priceSource] = result[i]; + } + // const maxLeverages = result[result.length - 1]; + const maxLeverages = {}; - checkPrices(symbols, markPrices, maxLeverages); + checkPrices(symbols, markPrices, maxLeverages); - return { pricesMap: markPrices["binance"], markPrices, maxLeverages }; + return { pricesMap: markPrices["binance"], markPrices, maxLeverages }; + }, + [] + ); } async function fetchPrices(quoteIds, chainId, symmio, blockNumber) { @@ -142,7 +295,15 @@ async function fetchPrices(quoteIds, chainId, symmio, blockNumber) { function createPricesList(symbols, pricesMap) { const prices = []; - symbols.forEach((symbol) => prices.push(pricesMap[symbol].toString())); + let notFoundPrices = new Set(); + symbols.forEach((symbol) => { + try { + prices.push(pricesMap[symbol].toString()); + } catch (e) { + notFoundPrices.add(symbol); + } + }); + if (notFoundPrices.size > 0) throw new MuonAppError("PRICE_NOT_FOUND", { notFoundPrices: Array.from(notFoundPrices) }); return prices; } @@ -176,47 +337,68 @@ async function calculateUpnl(openPositions, prices) { } async function getPositionsCount(parties, side, chainId, symmio, blockNumber) { - if (side == "A") return await ethCall(symmio, "partyAPositionsCount", [parties.partyA], ABI, chainId, blockNumber); - else if (side == "B") return await ethCall(symmio, "partyBPositionsCount", [parties.partyB, parties.partyA], ABI, chainId, blockNumber); + return withSpan( + getPositionsCount.name, + spanTypes.web3Call, + async function () { + if (side == "A") return await ethCall(symmio, "partyAPositionsCount", [parties.partyA], ABI, chainId, blockNumber); + else if (side == "B") return await ethCall(symmio, "partyBPositionsCount", [parties.partyB, parties.partyA], ABI, chainId, blockNumber); + }, + [] + ); } async function getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber) { - if (side == "A") return await ethCall(symmio, "getPartyAOpenPositions", [parties.partyA, start, size], ABI, chainId, blockNumber); - else if (side == "B") - return await ethCall(symmio, "getPartyBOpenPositions", [parties.partyB, parties.partyA, start, size], ABI, chainId, blockNumber); + return withSpan( + getOpenPositions.name, + spanTypes.web3Call, + async function () { + if (side == "A") return await ethCall(symmio, "getPartyAOpenPositions", [parties.partyA, start, size], ABI, chainId, blockNumber); + else if (side == "B") + return await ethCall(symmio, "getPartyBOpenPositions", [parties.partyB, parties.partyA, start, size], ABI, chainId, blockNumber); + }, + [] + ); } async function fetchOpenPositions(parties, side, chainId, symmio, blockNumber) { - const positionsCount = new BN(await getPositionsCount(parties, side, chainId, symmio, blockNumber)); - if (positionsCount.eq(new BN(0))) return { openPositions: [], quoteIds: [] }; - - const size = 50; - const getsCount = parseInt(positionsCount.div(new BN(size))) + 1; - - const openPositions = []; - for (let i = 0; i < getsCount; i++) { - const start = i * size; - openPositions.push(...(await getOpenPositions(parties, side, start, size, chainId, symmio))); - } - - let quoteIds = []; - let symbolIds = new Set(); - let partyBs = new Set(); - openPositions.forEach((position) => { - quoteIds.push(String(position.id)); - symbolIds.add(String(position.symbolId)); - partyBs.add(position.partyB); - }); - - symbolIds = Array.from(symbolIds); - partyBs = Array.from(partyBs); + return withSpan( + fetchOpenPositions.name, + spanTypes.pagination, + async function () { + const positionsCount = new BN(await getPositionsCount(parties, side, chainId, symmio, blockNumber)); + if (positionsCount.eq(new BN(0))) return { openPositions: [], quoteIds: [] }; + + const size = 50; + const getsCount = parseInt(positionsCount.div(new BN(size))) + 1; + + const openPositions = []; + for (let i = 0; i < getsCount; i++) { + const start = i * size; + openPositions.push(...(await getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber))); + } - return { - openPositions, - quoteIds, - symbolIds, - partyBs, - }; + let quoteIds = []; + let symbolIds = new Set(); + let partyBs = new Set(); + openPositions.forEach((position) => { + quoteIds.push(String(position.id)); + symbolIds.add(String(position.symbolId)); + partyBs.add(position.partyB); + }); + + symbolIds = Array.from(symbolIds); + partyBs = Array.from(partyBs); + + return { + openPositions, + quoteIds, + symbolIds, + partyBs, + }; + }, + [] + ); } function filterPositions(partyB, mixedOpenPositions) { @@ -232,15 +414,29 @@ function filterPositions(partyB, mixedOpenPositions) { } async function fetchPartyBsAllocateds(chainId, symmio, partyA, partyBs, blockNumber) { - const allocateds = await ethCall(symmio, "allocatedBalanceOfPartyBs", [partyA, partyBs], ABI, chainId, blockNumber); - return allocateds; + return withSpan( + fetchPartyBsAllocateds.name, + spanTypes.web3Call, + async function () { + const allocateds = await ethCall(symmio, "allocatedBalanceOfPartyBs", [partyA, partyBs], ABI, chainId, blockNumber); + return allocateds; + }, + [] + ); } async function getPartyNonce(parties, side, symmio, chainId, blockNumber) { - let nonce; - if (side == "A") nonce = String(await ethCall(symmio, "nonceOfPartyA", [parties.partyA], ABI, chainId, blockNumber)); - else if (side == "B") nonce = String(await ethCall(symmio, "nonceOfPartyB", [parties.partyB, parties.partyA], ABI, chainId, blockNumber)); - return nonce; + return withSpan( + getPartyNonce.name, + spanTypes.web3Call, + async function () { + let nonce; + if (side == "A") nonce = String(await ethCall(symmio, "nonceOfPartyA", [parties.partyA], ABI, chainId, blockNumber)); + else if (side == "B") nonce = String(await ethCall(symmio, "nonceOfPartyB", [parties.partyB, parties.partyA], ABI, chainId, blockNumber)); + return nonce; + }, + [] + ); } async function uPnlPartyA(partyA, chainId, symmio, blockNumber) { @@ -305,6 +501,7 @@ async function uPnlPartyA(partyA, chainId, symmio, blockNumber) { openPositions, markPrices, maxLeverages, + partyBs, }; } @@ -384,7 +581,7 @@ async function uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, mixedO async function uPnlParties(partyB, partyA, chainId, symmio, blockNumber) { // Checks if partyB and partyA are identical, and throws an error if they are if (partyB == partyA) { - throw { message: "Identical Parties Error" }; + throw new Error("Identical Parties Error"); } // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA @@ -428,40 +625,95 @@ async function uPnlParties(partyB, partyA, chainId, symmio, blockNumber) { }; } -async function getSymbolsByIds(symmio, symbolIds, chainId, blockNumber = "latest") { - const symbols = await ethCall(symmio, "symbolNameById", [symbolIds], ABI, chainId, blockNumber); - return symbols; +async function calculatePartiesUpnlForSettle(partyA, symmio, chainId, blockNumber) { + let quoteSettlementData = []; + // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA + const { + uPnl: uPnlA, + pricesMap, + openPositions, + partyBs, + nonce: nonceA, + notionalValueSum: notionalValueSumA, + } = await uPnlPartyA(partyA, chainId, symmio, blockNumber); + + let upnlPartyBs = []; + let noncePartyBs = []; + let notionalValueSumBs = []; + for (let [partyBIndex, partyB] of partyBs.entries()) { + // Calculates the uPnl, nonce, notional value sum, prices, and quote IDs for partyB using fetched data + const { + uPnl: uPnlB, + prices: pricesB, + quoteIds: quoteIdsB, + nonce: nonceB, + notionalValueSum: notionalValueSumB, + } = await uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, openPositions, symmio, blockNumber); + upnlPartyBs.push(minusOne.mul(uPnlB).toString()); + quoteIdsB.forEach((quoteId, quoteIdIndex) => { + quoteSettlementData.push([quoteId, pricesB[quoteIdIndex], partyBIndex]); + }); + noncePartyBs.push(nonceB); + notionalValueSumBs.push(notionalValueSumB.toString()); + } + return { + quoteSettlementData, + uPnlA, + upnlPartyBs, + notionalValueSumA, + notionalValueSumBs, + nonceA, + noncePartyBs, + }; +} + +async function getSymbolsByIds(symmio, symbolIds, chainId, blockNumber) { + return withSpan( + getSymbolsByIds.name, + spanTypes.web3Call, + async function () { + const symbols = await ethCall(symmio, "symbolNameById", [symbolIds], ABI, chainId, blockNumber); + return symbols; + }, + [] + ); } async function getSymbolPrice(symbolId, pricesMap, markPrices, maxLeverages, symmio, chainId, blockNumber) { const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); let price = pricesMap[symbol]; - if (price == undefined) throw { message: "Invalid symbol" }; + if (price == undefined) throw new MuonAppError("Invalid symbol", { symbol }); checkPrices([symbol], markPrices, maxLeverages); return price; } async function getCandles(symbol, t0, t1) { - const klinesUrl = "https://fapi.binance.com/fapi/v1/klines"; - const rangeInMinutes = parseInt((t1 - t0) / 60) + 1; - const params = { - symbol, - interval: "1m", - limit: rangeInMinutes, - startTime: t0 * 1000, - endTime: t1 * 1000, - }; - - let candles; - try { - const { data } = await axios.get(klinesUrl, { params }); - candles = data; - if (candles.length != rangeInMinutes) throw { message: "INVALID_CANDLES_LENGTH" }; - } catch (e) { - console.log(e); - throw { message: e.message ? e.message : "ERROR_IN_GET_CANDLES" }; - } - return candles; + return withSpan( + getCandles.name, + spanTypes.binanceCandleFetch, + async function () { + const rangeInMinutes = parseInt((t1 - t0) / 60) + 1; + const params = { + symbol, + interval: "1m", + limit: rangeInMinutes, + startTime: t0 * 1000, + endTime: t1 * 1000, + }; + + let candles; + try { + const { data } = await axios.get(klinesUrl, { params }); + candles = data; + if (candles.length != rangeInMinutes) throw new Error("INVALID_CANDLES_LENGTH"); + } catch (e) { + console.log(e); + throw new Error(e.message ? e.message : "ERROR_IN_GET_CANDLES"); + } + return candles; + }, + [] + ); } function parseCandles(candles) { @@ -471,6 +723,7 @@ function parseCandles(candles) { candles.forEach((candle) => { let high = candle[2]; let low = candle[3]; + let open = candle[1]; let close = candle[4]; let volume = candle[5]; @@ -478,15 +731,15 @@ function parseCandles(candles) { if (low < lowest) lowest = low; if (high > highest) highest = high; - // mean = sigma(close * volume) / sigma(volume) - sum += close * volume; + // mean = sigma((open + close) / 2 * volume) / sigma(volume) + sum += ((parseFloat(open) + parseFloat(close)) / 2) * volume; volumeSum += parseFloat(volume); }); let startTime = parseInt(candles[0][0] / 1000); let endTime = parseInt(candles[candles.length - 1][0] / 1000); lowest = scaleUp(lowest); - if (lowest.eq(new BN(0))) throw { message: "ZERO_LOWEST" }; + if (lowest.eq(new BN(0))) throw new Error("ZERO_LOWEST"); let mean = sum / volumeSum; @@ -499,25 +752,35 @@ function parseCandles(candles) { }; } -async function getPriceRange(symmio, symbolId, t0, t1, chainId) { - const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId); +async function getPriceRange(symmio, symbolId, t0, t1, chainId, blockNumber) { + const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); const candles = await getCandles(symbol, t0, t1); const { lowest, highest, mean, startTime, endTime } = parseCandles(candles); - if (startTime != t0 || endTime != t1) throw { message: "BAD_BINANCE_RESPONSE" }; + if (startTime != t0 || endTime != t1) throw new Error("BAD_BINANCE_RESPONSE"); return { lowest, highest, mean, startTime, endTime }; } +async function withSpanGetBlockNumber(chainId) { + return withSpan( + withSpanGetBlockNumber.name, + spanTypes.web3Call, + async function () { + return await ethGetBlockNumber(chainId); + }, + [] + ); +} + module.exports = { APP_NAME: "symmio", - useFrost: true, - + onRequest: async function (request) { let { method, data: { params }, } = request; - let latestBlockNumber = request.data.result ? request.data.result.latestBlockNumber : String(await ethGetBlockNumber(params.chainId)); + let latestBlockNumber = request.data.result ? request.data.result.latestBlockNumber : String(await withSpanGetBlockNumber(params.chainId)); switch (method) { case "uPnl_A": @@ -536,7 +799,6 @@ module.exports = { case "verify": { let { - deploymentSeed, signature, reqId, nonceAddress, @@ -574,8 +836,10 @@ module.exports = { { type: "uint256", value: timestamp }, { type: "uint256", value: chainId }, ]; - const hash = this.hashAppSignParams(seedRequest, signedParams); - if (!(await this.verify(deploymentSeed, hash, signature, nonceAddress))) throw { message: `Signature Not Verified` }; + const hash = soliditySha3(signedParams); + const account = curve.keyFromPrivate(process.env.PRIVATE_KEY); + const verifyingPubKey = account.getPublic(); + if (!(await schnorrVerifyWithNonceAddress(hash, signature, nonceAddress, verifyingPubKey))) throw new Error(`Signature Not Verified`); return { liquidationId, @@ -648,10 +912,10 @@ module.exports = { t0 = parseInt(t0); t1 = parseInt(t1); - if (t0 % 60 != 0 || t1 % 60 != 0) throw { message: "BAD_START_OR_END_TIME" }; - if (t0 >= t1) throw { message: "START_AFTER_END_TIME" }; + if (t0 % 60 != 0 || t1 % 60 != 0) throw new Error("BAD_START_OR_END_TIME"); + if (t0 >= t1) throw new Error("START_AFTER_END_TIME"); - const { lowest, highest, mean, startTime, endTime } = await getPriceRange(symmio, symbolId, t0, t1, chainId); + const { lowest, highest, mean, startTime, endTime } = await getPriceRange(symmio, symbolId, t0, t1, chainId, latestBlockNumber); const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); const price = await getSymbolPrice( symbolId, @@ -668,9 +932,14 @@ module.exports = { result ); } + case "settle_upnl": { + let { symmio, partyA, chainId } = params; + const result = await calculatePartiesUpnlForSettle(partyA, symmio, chainId, latestBlockNumber); + return Object.assign({}, { chainId, partyA, symmio, latestBlockNumber }, result); + } default: - throw { message: `Unknown method ${method}` }; + throw new Error(`Unknown method ${method}`); } }, @@ -687,7 +956,7 @@ module.exports = { let { partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); return [ { type: "address", value: symmio }, @@ -703,9 +972,9 @@ module.exports = { let { partyA, uPnl, loss, symbolIds, notionalValueSum, nonce, chainId, symmio, liquidationId } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); if (!isUpnlToleranceOk(loss, request.data.result.loss, notionalValueSum, UPNL_TOLERANCE).isOk) - throw { message: "Loss Tolerance Error" }; + throw new Error("Loss Tolerance Error"); return [ { type: "bytes", value: liquidationId }, @@ -744,8 +1013,8 @@ module.exports = { let { partyA, uPnl, symbolId, price, notionalValueSum, nonce, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; - if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); return [ { type: "address", value: symmio }, @@ -763,7 +1032,7 @@ module.exports = { let { partyB, partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); return [ { type: "address", value: symmio }, @@ -780,9 +1049,9 @@ module.exports = { let { partyB, partyA, uPnlB, uPnlA, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); return [ { type: "address", value: symmio }, @@ -801,10 +1070,10 @@ module.exports = { let { partyB, partyA, uPnlB, uPnlA, symbolId, price, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; - if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); return [ { type: "address", value: symmio }, @@ -825,7 +1094,7 @@ module.exports = { let { quoteIds, prices, chainId, symmio } = result; for (let [i, price] of prices.entries()) { - if (!isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + if (!isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); } return [ @@ -859,10 +1128,10 @@ module.exports = { } = result; if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; + throw new Error("uPnl Tolerance Error"); if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw { message: "uPnl Tolerance Error" }; - if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); return [ { type: "address", value: symmio }, @@ -883,6 +1152,49 @@ module.exports = { { type: "uint256", value: chainId }, ]; } + case "settle_upnl": { + let { quoteSettlementData, uPnlA, upnlPartyBs, notionalValueSumA, notionalValueSumBs, nonceA, noncePartyBs, symmio, chainId } = + result; + + if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) + throw new Error("uPnl Tolerance Error"); + + let packedSettlementData = ""; + quoteSettlementData.forEach((data, i) => { + const partyBIndex = data[2]; + if ( + !isUpnlToleranceOk( + upnlPartyBs[partyBIndex], + request.data.result.upnlPartyBs[partyBIndex], + notionalValueSumBs[partyBIndex], + UPNL_TOLERANCE + ).isOk + ) + throw new Error("uPnl Tolerance Error"); + if (!isPriceToleranceOk(data[1], request.data.result.quoteSettlementData[i][1], PRICE_TOLERANCE).isOk) + throw new Error("Price Tolerance Error"); + packedSettlementData = Web3.utils.encodePacked( + ...[ + { type: "bytes", value: packedSettlementData }, + { type: "uint256", value: request.data.result.quoteSettlementData[i][0] }, + { type: "uint256", value: request.data.result.quoteSettlementData[i][1] }, + { type: "uint8", value: request.data.result.quoteSettlementData[i][2] }, + ] + ); + }); + + return [ + { type: "address", value: symmio }, + { type: "string", value: "verifySettlement" }, + { type: "uint256[]", value: noncePartyBs }, + { type: "uint256", value: nonceA }, + { type: "bytes", value: packedSettlementData }, + { type: "int256[]", value: request.data.result.upnlPartyBs }, + { type: "int256", value: request.data.result.uPnlA }, + { type: "uint256", value: request.data.timestamp }, + { type: "uint256", value: chainId }, + ]; + } default: break; diff --git a/general/symmio_pion.js b/general/symmio_old.js similarity index 61% rename from general/symmio_pion.js rename to general/symmio_old.js index ec09964..032d473 100644 --- a/general/symmio_pion.js +++ b/general/symmio_old.js @@ -1,9 +1,5 @@ -const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3, schnorrVerifyWithNonceAddress, soliditySha3, MuonAppError } = MuonAppUtils; - -axios.defaults.timeout = 10000; -const elliptic = require("elliptic"); -const EC = elliptic.ec; -const curve = new EC("secp256k1"); +const { axios, BN, toBaseUnit, ethCall, ethGetBlockNumber, Web3 } = MuonAppUtils; +axios.defaults.timeout = 5000; const scale = new BN(toBaseUnit("1", 18)); const ZERO = new BN(0); @@ -15,176 +11,42 @@ const UPNL_TOLERANCE = scaleUp("0.001"); const PRICE_TOLERANCE = scaleUp("0.01"); const minusOne = new BN(-1); -const spanTypes = { - web3Call: "muon-web3-call", - pagination: "muon-web3-pagination", - priceFetch: "muon-price-fetch", - binancePriceFetch: "muon-binance-price-fetch", - binanceLeverageFetch: "muon-binance-leverage-fetch", - binanceCandleFetch: "muon-binance-candle-fetch", - kucoinPriceFetch: "muon-kucoin-price-fetch", - mexcPriceFetch: "muon-mexc-price-fetch", -}; -const kucoinThousandPairs = ["PEPEUSDT", "SHIBUSDT", "FLOKIUSDT", "LUNCUSDT"]; -const mexcThousandPairs = ["PEPEUSDT", "SHIBUSDT", "FLOKIUSDT", "LUNCUSDT", "XECUSDT", "SATSUSDT"]; -const pairsWithSpecificSource = ["BLUEBIRDUSDT", "BNXUSDT", "DEFIUSDT", "BTCDOMUSDT"]; - -const priceUrl = process.env.PRICE_URL; -const klinesUrl = process.env.KLINES_URL; - -const priceSources = JSON.parse(process.env.PRICE_SOURCES || "[]"); +const priceSources = ["binance"]; const getSorucePrices = { binance: getBinancePrices, - kucoin: getKucoinPrices, - mexc: getMexcPrices, }; -async function withSpan(spanName, spanType, func, args) { - let result, error; - // let span = apmAgent.startSpan(spanName, spanType); - try { - result = await func(...args); - } catch (e) { - error = e; - } - // if (span) span.end(); - if (error) throw error; - return result; -} - async function getBinancePrices() { - return withSpan( - getBinancePrices.name, - spanTypes.binancePriceFetch, - async function () { - // Define the Binance API URL - const binancePricesUrl = priceUrl + "/all_markets"; - - let priceData; - try { - // Make an HTTP GET request to the Binance API using Axios - const result = await axios.get(binancePricesUrl); - priceData = result.data; - } catch (e) { - console.log(e); - throw new Error("FAILED_TO_GET_BINANCE_PRICES"); - } - - // Create an empty object to store the prices map - const pricesMap = {}; - - // Iterate over the data received from the API - priceData.forEach((el) => { - try { - // Convert the mark price to a string and store it in the prices map - pricesMap[el.symbol] = scaleUp(el.price).toString(); - } catch (e) {} - }); - - // Return the populated prices map - return pricesMap; - }, - [] - ); + // Define the Binance API URL + const binanceUrl = "https://fapi.binance.com/fapi/v1/premiumIndex"; + // Make an HTTP GET request to the Binance API using Axios + const { data } = await axios.get(binanceUrl); + const pricesMap = {}; + data.forEach((el) => { + pricesMap[el.symbol] = scaleUp(el.markPrice).toString(); + }); + return pricesMap; } async function getBinanceMaxLeverages() { - return withSpan( - getBinanceMaxLeverages.name, - spanTypes.binanceLeverageFetch, - async function () { - const binanceLeveragesUrl = process.env.LEVERAGE_URL; - - let leverageData; - try { - const result = await axios.get(binanceLeveragesUrl); - leverageData = result.data; - } catch (e) { - console.log(e); - throw new Error("FAILED_TO_GET_BINANCE_LEVERAGES"); - } - const maxLeverages = {}; - leverageData.forEach((el) => { - maxLeverages[el.symbol] = el.risk_brackets[0].max_leverage; - }); + const binanceLeveragesUrl = "https://www.binance.com/bapi/futures/v1/friendly/future/common/brackets"; - return maxLeverages; + // Make an HTTP POST request to the Binance API using Axios + const { data } = await axios.post(binanceLeveragesUrl, { + headers: { + accept: "*/*", + "Content-Type": "application/json", }, - [] - ); -} - -function formatKucoinSymbol(kucoinPair) { - let symbol = kucoinPair.symbol.slice(0, -1); - return symbol; -} + }); -async function getKucoinPrices() { - return withSpan( - getKucoinPrices.name, - spanTypes.kucoinPriceFetch, - async function () { - const kucoinUrl = priceUrl + "/kucoin"; - let data; - try { - const result = await axios.get(kucoinUrl, { - headers: { "Accept-Encoding": "gzip,deflate,compress" }, - }); - data = result.data; - } catch (e) { - console.log(e); - throw new Error("FAILED_TO_GET_KUCOIN_PRICES"); - } - const pricesMap = {}; - data.forEach((el) => { - try { - const symbol = formatKucoinSymbol(el); - pricesMap[symbol] = scaleUp(Number(el.price).toFixed(10)).toString(); - } catch (e) {} - }); - pricesMap["BTCUSDT"] = pricesMap["XBTUSDT"]; - for (let symbol of kucoinThousandPairs) { - if (pricesMap[symbol] == undefined) continue; - pricesMap["1000" + symbol] = new BN(pricesMap[symbol]).mul(new BN(1000)).toString(); - } - pricesMap["LUNA2USDT"] = pricesMap["LUNAUSDT"]; - return pricesMap; - }, - [] - ); -} + const maxLeverages = {}; + const leverageData = data.data.brackets; + leverageData.forEach((el) => { + maxLeverages[el.symbol] = el.riskBrackets[0].maxOpenPosLeverage; + }); -async function getMexcPrices() { - return withSpan( - getMexcPrices.name, - spanTypes.mexcPriceFetch, - async function () { - const mexcUrl = priceUrl + "/mexc"; - let data; - try { - const result = await axios.get(mexcUrl); - data = result.data; - } catch (e) { - console.log(e); - throw new Error("FAILED_TO_GET_MEXC_PRICES"); - } - const pricesMap = {}; - data.forEach((el) => { - try { - const symbol = el.symbol.replace("_", ""); - pricesMap[symbol] = scaleUp(Number(el.price).toFixed(10)).toString(); - } catch (e) {} - }); - - for (let symbol of mexcThousandPairs) pricesMap["1000" + symbol] = new BN(pricesMap[symbol]).mul(new BN(1000)).toString(); - pricesMap["LUNA2USDT"] = pricesMap["LUNANEWUSDT"]; - pricesMap["FILUSDT"] = pricesMap["FILECOINUSDT"]; - pricesMap["BNXUSDT"] = pricesMap["BNXNEWUSDT"]; - return pricesMap; - }, - [] - ); + return maxLeverages; } function isPriceToleranceOk(price, expectedPrice, priceTolerance) { @@ -208,16 +70,9 @@ function isUpnlToleranceOk(uPnl, expectedUpnl, notionalValueSum, uPnlTolerance) } async function getSymbols(quoteIds, chainId, symmio, blockNumber) { - return withSpan( - getSymbols.name, - spanTypes.web3Call, - async function () { - const symbols = await ethCall(symmio, "symbolNameByQuoteId", [quoteIds], ABI, chainId, blockNumber); - if (symbols.includes("")) throw new Error("Invalid quoteId"); - return symbols; - }, - [] - ); + const symbols = await ethCall(symmio, "symbolNameByQuoteId", [quoteIds], ABI, chainId, blockNumber); + if (symbols.includes("")) throw { message: "Invalid quoteId" }; + return symbols; } function checkPrices(symbols, markPrices, maxLeverages) { @@ -225,7 +80,7 @@ function checkPrices(symbols, markPrices, maxLeverages) { if (priceSources.length == 1) return true; for (let symbol of symbols) { const expectedPrice = expectedPrices[symbol]; - if (expectedPrice == undefined) throw new MuonAppError("Undefined Binance Price", { symbol }); + if (expectedPrice == undefined) throw { message: "Undefined Binance Price", symbol }; let sourcesCount = 0; for (let source of priceSources) { if (source == "binance") continue; @@ -237,46 +92,38 @@ function checkPrices(symbols, markPrices, maxLeverages) { sourcesCount += 1; const priceTolerance = scaleUp(String(1 / maxLeverages[symbol])); let priceCheckResult = isPriceToleranceOk(price, expectedPrice, priceTolerance); - if (!priceCheckResult.isOk) throw new MuonAppError("Corrupted Price", { symbol, diff: priceCheckResult.priceDiffPercentage }); + if (!priceCheckResult.isOk) throw { message: "Corrupted Price", symbol, diff: priceCheckResult.priceDiffPercentage }; } - if (sourcesCount == 0) throw new MuonAppError("Single Source Symbol", { symbol }); + if (sourcesCount == 0) throw { message: "Single Source Symbol", symbol }; } return true; } async function getPrices(symbols) { - return withSpan( - getPrices.name, - spanTypes.priceFetch, - async function () { - const promises = []; - for (let priceSource of priceSources) { - promises.push(getSorucePrices[priceSource]()); - } - // promises.push(getBinanceMaxLeverages()); - - let result; - try { - result = await Promise.all(promises); - } catch (e) { - console.log(e); - if (e.message) throw e; - throw new Error("FAILED_TO_GET_PRICES"); - } - const markPrices = {}; - for (let [i, priceSource] of priceSources.entries()) { - markPrices[priceSource] = result[i]; - } - // const maxLeverages = result[result.length - 1]; - const maxLeverages = {}; + const promises = []; + for (let priceSource of priceSources) { + promises.push(getSorucePrices[priceSource]()); + } + promises.push(getBinanceMaxLeverages()); - checkPrices(symbols, markPrices, maxLeverages); + let result; + try { + result = await Promise.all(promises); + } catch (e) { + console.log(e); + if (e.message) throw e; + throw { message: "FAILED_TO_GET_PRICES" }; + } + const markPrices = {}; + for (let [i, priceSource] of priceSources.entries()) { + markPrices[priceSource] = result[i]; + } + const maxLeverages = result[result.length - 1]; - return { pricesMap: markPrices["binance"], markPrices, maxLeverages }; - }, - [] - ); + checkPrices(symbols, markPrices, maxLeverages); + + return { pricesMap: markPrices["binance"], markPrices, maxLeverages }; } async function fetchPrices(quoteIds, chainId, symmio, blockNumber) { @@ -295,15 +142,7 @@ async function fetchPrices(quoteIds, chainId, symmio, blockNumber) { function createPricesList(symbols, pricesMap) { const prices = []; - let notFoundPrices = new Set(); - symbols.forEach((symbol) => { - try { - prices.push(pricesMap[symbol].toString()); - } catch (e) { - notFoundPrices.add(symbol); - } - }); - if (notFoundPrices.size > 0) throw new MuonAppError("PRICE_NOT_FOUND", { notFoundPrices: Array.from(notFoundPrices) }); + symbols.forEach((symbol) => prices.push(pricesMap[symbol].toString())); return prices; } @@ -337,68 +176,47 @@ async function calculateUpnl(openPositions, prices) { } async function getPositionsCount(parties, side, chainId, symmio, blockNumber) { - return withSpan( - getPositionsCount.name, - spanTypes.web3Call, - async function () { - if (side == "A") return await ethCall(symmio, "partyAPositionsCount", [parties.partyA], ABI, chainId, blockNumber); - else if (side == "B") return await ethCall(symmio, "partyBPositionsCount", [parties.partyB, parties.partyA], ABI, chainId, blockNumber); - }, - [] - ); + if (side == "A") return await ethCall(symmio, "partyAPositionsCount", [parties.partyA], ABI, chainId, blockNumber); + else if (side == "B") return await ethCall(symmio, "partyBPositionsCount", [parties.partyB, parties.partyA], ABI, chainId, blockNumber); } async function getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber) { - return withSpan( - getOpenPositions.name, - spanTypes.web3Call, - async function () { - if (side == "A") return await ethCall(symmio, "getPartyAOpenPositions", [parties.partyA, start, size], ABI, chainId, blockNumber); - else if (side == "B") - return await ethCall(symmio, "getPartyBOpenPositions", [parties.partyB, parties.partyA, start, size], ABI, chainId, blockNumber); - }, - [] - ); + if (side == "A") return await ethCall(symmio, "getPartyAOpenPositions", [parties.partyA, start, size], ABI, chainId, blockNumber); + else if (side == "B") + return await ethCall(symmio, "getPartyBOpenPositions", [parties.partyB, parties.partyA, start, size], ABI, chainId, blockNumber); } async function fetchOpenPositions(parties, side, chainId, symmio, blockNumber) { - return withSpan( - fetchOpenPositions.name, - spanTypes.pagination, - async function () { - const positionsCount = new BN(await getPositionsCount(parties, side, chainId, symmio, blockNumber)); - if (positionsCount.eq(new BN(0))) return { openPositions: [], quoteIds: [] }; - - const size = 50; - const getsCount = parseInt(positionsCount.div(new BN(size))) + 1; - - const openPositions = []; - for (let i = 0; i < getsCount; i++) { - const start = i * size; - openPositions.push(...(await getOpenPositions(parties, side, start, size, chainId, symmio, blockNumber))); - } + const positionsCount = new BN(await getPositionsCount(parties, side, chainId, symmio, blockNumber)); + if (positionsCount.eq(new BN(0))) return { openPositions: [], quoteIds: [] }; - let quoteIds = []; - let symbolIds = new Set(); - let partyBs = new Set(); - openPositions.forEach((position) => { - quoteIds.push(String(position.id)); - symbolIds.add(String(position.symbolId)); - partyBs.add(position.partyB); - }); - - symbolIds = Array.from(symbolIds); - partyBs = Array.from(partyBs); - - return { - openPositions, - quoteIds, - symbolIds, - partyBs, - }; - }, - [] - ); + const size = 50; + const getsCount = parseInt(positionsCount.div(new BN(size))) + 1; + + const openPositions = []; + for (let i = 0; i < getsCount; i++) { + const start = i * size; + openPositions.push(...(await getOpenPositions(parties, side, start, size, chainId, symmio))); + } + + let quoteIds = []; + let symbolIds = new Set(); + let partyBs = new Set(); + openPositions.forEach((position) => { + quoteIds.push(String(position.id)); + symbolIds.add(String(position.symbolId)); + partyBs.add(position.partyB); + }); + + symbolIds = Array.from(symbolIds); + partyBs = Array.from(partyBs); + + return { + openPositions, + quoteIds, + symbolIds, + partyBs, + }; } function filterPositions(partyB, mixedOpenPositions) { @@ -414,29 +232,15 @@ function filterPositions(partyB, mixedOpenPositions) { } async function fetchPartyBsAllocateds(chainId, symmio, partyA, partyBs, blockNumber) { - return withSpan( - fetchPartyBsAllocateds.name, - spanTypes.web3Call, - async function () { - const allocateds = await ethCall(symmio, "allocatedBalanceOfPartyBs", [partyA, partyBs], ABI, chainId, blockNumber); - return allocateds; - }, - [] - ); + const allocateds = await ethCall(symmio, "allocatedBalanceOfPartyBs", [partyA, partyBs], ABI, chainId, blockNumber); + return allocateds; } async function getPartyNonce(parties, side, symmio, chainId, blockNumber) { - return withSpan( - getPartyNonce.name, - spanTypes.web3Call, - async function () { - let nonce; - if (side == "A") nonce = String(await ethCall(symmio, "nonceOfPartyA", [parties.partyA], ABI, chainId, blockNumber)); - else if (side == "B") nonce = String(await ethCall(symmio, "nonceOfPartyB", [parties.partyB, parties.partyA], ABI, chainId, blockNumber)); - return nonce; - }, - [] - ); + let nonce; + if (side == "A") nonce = String(await ethCall(symmio, "nonceOfPartyA", [parties.partyA], ABI, chainId, blockNumber)); + else if (side == "B") nonce = String(await ethCall(symmio, "nonceOfPartyB", [parties.partyB, parties.partyA], ABI, chainId, blockNumber)); + return nonce; } async function uPnlPartyA(partyA, chainId, symmio, blockNumber) { @@ -501,7 +305,6 @@ async function uPnlPartyA(partyA, chainId, symmio, blockNumber) { openPositions, markPrices, maxLeverages, - partyBs, }; } @@ -581,7 +384,7 @@ async function uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, mixedO async function uPnlParties(partyB, partyA, chainId, symmio, blockNumber) { // Checks if partyB and partyA are identical, and throws an error if they are if (partyB == partyA) { - throw new Error("Identical Parties Error"); + throw { message: "Identical Parties Error" }; } // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA @@ -625,95 +428,40 @@ async function uPnlParties(partyB, partyA, chainId, symmio, blockNumber) { }; } -async function calculatePartiesUpnlForSettle(partyA, symmio, chainId, blockNumber) { - let quoteSettlementData = []; - // Calculates the uPnl, nonce, notional value sum, prices map, prices, mark prices and quote IDs for partyA - const { - uPnl: uPnlA, - pricesMap, - openPositions, - partyBs, - nonce: nonceA, - notionalValueSum: notionalValueSumA, - } = await uPnlPartyA(partyA, chainId, symmio, blockNumber); - - let upnlPartyBs = []; - let noncePartyBs = []; - let notionalValueSumBs = []; - for (let [partyBIndex, partyB] of partyBs.entries()) { - // Calculates the uPnl, nonce, notional value sum, prices, and quote IDs for partyB using fetched data - const { - uPnl: uPnlB, - prices: pricesB, - quoteIds: quoteIdsB, - nonce: nonceB, - notionalValueSum: notionalValueSumB, - } = await uPnlPartyB_FetchedData(partyB, partyA, chainId, pricesMap, openPositions, symmio, blockNumber); - upnlPartyBs.push(minusOne.mul(uPnlB).toString()); - quoteIdsB.forEach((quoteId, quoteIdIndex) => { - quoteSettlementData.push([quoteId, pricesB[quoteIdIndex], partyBIndex]); - }); - noncePartyBs.push(nonceB); - notionalValueSumBs.push(notionalValueSumB.toString()); - } - return { - quoteSettlementData, - uPnlA, - upnlPartyBs, - notionalValueSumA, - notionalValueSumBs, - nonceA, - noncePartyBs, - }; -} - -async function getSymbolsByIds(symmio, symbolIds, chainId, blockNumber) { - return withSpan( - getSymbolsByIds.name, - spanTypes.web3Call, - async function () { - const symbols = await ethCall(symmio, "symbolNameById", [symbolIds], ABI, chainId, blockNumber); - return symbols; - }, - [] - ); +async function getSymbolsByIds(symmio, symbolIds, chainId, blockNumber = "latest") { + const symbols = await ethCall(symmio, "symbolNameById", [symbolIds], ABI, chainId, blockNumber); + return symbols; } async function getSymbolPrice(symbolId, pricesMap, markPrices, maxLeverages, symmio, chainId, blockNumber) { const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); let price = pricesMap[symbol]; - if (price == undefined) throw new MuonAppError("Invalid symbol", { symbol }); + if (price == undefined) throw { message: "Invalid symbol" }; checkPrices([symbol], markPrices, maxLeverages); return price; } async function getCandles(symbol, t0, t1) { - return withSpan( - getCandles.name, - spanTypes.binanceCandleFetch, - async function () { - const rangeInMinutes = parseInt((t1 - t0) / 60) + 1; - const params = { - symbol, - interval: "1m", - limit: rangeInMinutes, - startTime: t0 * 1000, - endTime: t1 * 1000, - }; - - let candles; - try { - const { data } = await axios.get(klinesUrl, { params }); - candles = data; - if (candles.length != rangeInMinutes) throw new Error("INVALID_CANDLES_LENGTH"); - } catch (e) { - console.log(e); - throw new Error(e.message ? e.message : "ERROR_IN_GET_CANDLES"); - } - return candles; - }, - [] - ); + const klinesUrl = "https://fapi.binance.com/fapi/v1/klines"; + const rangeInMinutes = parseInt((t1 - t0) / 60) + 1; + const params = { + symbol, + interval: "1m", + limit: rangeInMinutes, + startTime: t0 * 1000, + endTime: t1 * 1000, + }; + + let candles; + try { + const { data } = await axios.get(klinesUrl, { params }); + candles = data; + if (candles.length != rangeInMinutes) throw { message: "INVALID_CANDLES_LENGTH" }; + } catch (e) { + console.log(e); + throw { message: e.message ? e.message : "ERROR_IN_GET_CANDLES" }; + } + return candles; } function parseCandles(candles) { @@ -723,7 +471,6 @@ function parseCandles(candles) { candles.forEach((candle) => { let high = candle[2]; let low = candle[3]; - let open = candle[1]; let close = candle[4]; let volume = candle[5]; @@ -731,15 +478,15 @@ function parseCandles(candles) { if (low < lowest) lowest = low; if (high > highest) highest = high; - // mean = sigma((open + close) / 2 * volume) / sigma(volume) - sum += ((parseFloat(open) + parseFloat(close)) / 2) * volume; + // mean = sigma(close * volume) / sigma(volume) + sum += close * volume; volumeSum += parseFloat(volume); }); let startTime = parseInt(candles[0][0] / 1000); let endTime = parseInt(candles[candles.length - 1][0] / 1000); lowest = scaleUp(lowest); - if (lowest.eq(new BN(0))) throw new Error("ZERO_LOWEST"); + if (lowest.eq(new BN(0))) throw { message: "ZERO_LOWEST" }; let mean = sum / volumeSum; @@ -752,35 +499,25 @@ function parseCandles(candles) { }; } -async function getPriceRange(symmio, symbolId, t0, t1, chainId, blockNumber) { - const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId, blockNumber); +async function getPriceRange(symmio, symbolId, t0, t1, chainId) { + const [symbol] = await getSymbolsByIds(symmio, [symbolId], chainId); const candles = await getCandles(symbol, t0, t1); const { lowest, highest, mean, startTime, endTime } = parseCandles(candles); - if (startTime != t0 || endTime != t1) throw new Error("BAD_BINANCE_RESPONSE"); + if (startTime != t0 || endTime != t1) throw { message: "BAD_BINANCE_RESPONSE" }; return { lowest, highest, mean, startTime, endTime }; } -async function withSpanGetBlockNumber(chainId) { - return withSpan( - withSpanGetBlockNumber.name, - spanTypes.web3Call, - async function () { - return await ethGetBlockNumber(chainId); - }, - [] - ); -} - module.exports = { - APP_NAME: "symmio_pion", - + APP_NAME: "symmio_old", + useFrost: true, + onRequest: async function (request) { let { method, data: { params }, } = request; - let latestBlockNumber = request.data.result ? request.data.result.latestBlockNumber : String(await withSpanGetBlockNumber(params.chainId)); + let latestBlockNumber = request.data.result ? request.data.result.latestBlockNumber : String(await ethGetBlockNumber(params.chainId)); switch (method) { case "uPnl_A": @@ -799,6 +536,7 @@ module.exports = { case "verify": { let { + deploymentSeed, signature, reqId, nonceAddress, @@ -836,10 +574,8 @@ module.exports = { { type: "uint256", value: timestamp }, { type: "uint256", value: chainId }, ]; - const hash = soliditySha3(signedParams); - const account = curve.keyFromPrivate(process.env.PRIVATE_KEY); - const verifyingPubKey = account.getPublic(); - if (!(await schnorrVerifyWithNonceAddress(hash, signature, nonceAddress, verifyingPubKey))) throw new Error(`Signature Not Verified`); + const hash = this.hashAppSignParams(seedRequest, signedParams); + if (!(await this.verify(deploymentSeed, hash, signature, nonceAddress))) throw { message: `Signature Not Verified` }; return { liquidationId, @@ -912,10 +648,10 @@ module.exports = { t0 = parseInt(t0); t1 = parseInt(t1); - if (t0 % 60 != 0 || t1 % 60 != 0) throw new Error("BAD_START_OR_END_TIME"); - if (t0 >= t1) throw new Error("START_AFTER_END_TIME"); + if (t0 % 60 != 0 || t1 % 60 != 0) throw { message: "BAD_START_OR_END_TIME" }; + if (t0 >= t1) throw { message: "START_AFTER_END_TIME" }; - const { lowest, highest, mean, startTime, endTime } = await getPriceRange(symmio, symbolId, t0, t1, chainId, latestBlockNumber); + const { lowest, highest, mean, startTime, endTime } = await getPriceRange(symmio, symbolId, t0, t1, chainId); const result = await uPnlParties(partyB, partyA, chainId, symmio, latestBlockNumber); const price = await getSymbolPrice( symbolId, @@ -932,14 +668,9 @@ module.exports = { result ); } - case "settle_upnl": { - let { symmio, partyA, chainId } = params; - const result = await calculatePartiesUpnlForSettle(partyA, symmio, chainId, latestBlockNumber); - return Object.assign({}, { chainId, partyA, symmio, latestBlockNumber }, result); - } default: - throw new Error(`Unknown method ${method}`); + throw { message: `Unknown method ${method}` }; } }, @@ -956,7 +687,7 @@ module.exports = { let { partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; return [ { type: "address", value: symmio }, @@ -972,9 +703,9 @@ module.exports = { let { partyA, uPnl, loss, symbolIds, notionalValueSum, nonce, chainId, symmio, liquidationId } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; if (!isUpnlToleranceOk(loss, request.data.result.loss, notionalValueSum, UPNL_TOLERANCE).isOk) - throw new Error("Loss Tolerance Error"); + throw { message: "Loss Tolerance Error" }; return [ { type: "bytes", value: liquidationId }, @@ -1013,8 +744,8 @@ module.exports = { let { partyA, uPnl, symbolId, price, notionalValueSum, nonce, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); - if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; return [ { type: "address", value: symmio }, @@ -1032,7 +763,7 @@ module.exports = { let { partyB, partyA, uPnl, notionalValueSum, nonce, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnl, request.data.result.uPnl, notionalValueSum, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; return [ { type: "address", value: symmio }, @@ -1049,9 +780,9 @@ module.exports = { let { partyB, partyA, uPnlB, uPnlA, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; return [ { type: "address", value: symmio }, @@ -1070,10 +801,10 @@ module.exports = { let { partyB, partyA, uPnlB, uPnlA, symbolId, price, notionalValueSumB, notionalValueSumA, nonceB, nonceA, chainId, symmio } = result; if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); - if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; return [ { type: "address", value: symmio }, @@ -1094,7 +825,7 @@ module.exports = { let { quoteIds, prices, chainId, symmio } = result; for (let [i, price] of prices.entries()) { - if (!isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + if (!isPriceToleranceOk(price, request.data.result.prices[i], PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; } return [ @@ -1128,10 +859,10 @@ module.exports = { } = result; if (!isUpnlToleranceOk(uPnlB, request.data.result.uPnlB, notionalValueSumB, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); - if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw new Error("Price Tolerance Error"); + throw { message: "uPnl Tolerance Error" }; + if (!isPriceToleranceOk(price, request.data.result.price, PRICE_TOLERANCE).isOk) throw { message: `Price Tolerance Error` }; return [ { type: "address", value: symmio }, @@ -1152,49 +883,6 @@ module.exports = { { type: "uint256", value: chainId }, ]; } - case "settle_upnl": { - let { quoteSettlementData, uPnlA, upnlPartyBs, notionalValueSumA, notionalValueSumBs, nonceA, noncePartyBs, symmio, chainId } = - result; - - if (!isUpnlToleranceOk(uPnlA, request.data.result.uPnlA, notionalValueSumA, UPNL_TOLERANCE).isOk) - throw new Error("uPnl Tolerance Error"); - - let packedSettlementData = ""; - quoteSettlementData.forEach((data, i) => { - const partyBIndex = data[2]; - if ( - !isUpnlToleranceOk( - upnlPartyBs[partyBIndex], - request.data.result.upnlPartyBs[partyBIndex], - notionalValueSumBs[partyBIndex], - UPNL_TOLERANCE - ).isOk - ) - throw new Error("uPnl Tolerance Error"); - if (!isPriceToleranceOk(data[1], request.data.result.quoteSettlementData[i][1], PRICE_TOLERANCE).isOk) - throw new Error("Price Tolerance Error"); - packedSettlementData = Web3.utils.encodePacked( - ...[ - { type: "bytes", value: packedSettlementData }, - { type: "uint256", value: request.data.result.quoteSettlementData[i][0] }, - { type: "uint256", value: request.data.result.quoteSettlementData[i][1] }, - { type: "uint8", value: request.data.result.quoteSettlementData[i][2] }, - ] - ); - }); - - return [ - { type: "address", value: symmio }, - { type: "string", value: "verifySettlement" }, - { type: "uint256[]", value: noncePartyBs }, - { type: "uint256", value: nonceA }, - { type: "bytes", value: packedSettlementData }, - { type: "int256[]", value: request.data.result.upnlPartyBs }, - { type: "int256", value: request.data.result.uPnlA }, - { type: "uint256", value: request.data.timestamp }, - { type: "uint256", value: chainId }, - ]; - } default: break; From 994cca2c5d2e5e481f7db5179c8a7f2c041b9aa3 Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Wed, 4 Dec 2024 16:32:11 +0330 Subject: [PATCH 402/406] derand --- general/derand_offchain_vrf.js | 154 +++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 general/derand_offchain_vrf.js diff --git a/general/derand_offchain_vrf.js b/general/derand_offchain_vrf.js new file mode 100644 index 0000000..5fc5460 --- /dev/null +++ b/general/derand_offchain_vrf.js @@ -0,0 +1,154 @@ +const { axios, muonSha3 } = MuonAppUtils + +const LOCK_DURATION = 24 * 60 * 60; + +const EXPLORER_API = { + // PION explorer api endpoint + 2: "https://explorer.muon.net/pion/api/v1/requests", + // ALICE explorer api endpoint + 3: "https://explorer.muon.net/alice/api/v1/requests", + // local devnet explorer api endpoint + 255: "http://localhost:8004/api/v1/requests", +} + +async function fetchRequest(networkId, requestId) { + const apiEndpoint = EXPLORER_API[networkId]; + if(!apiEndpoint) + throw `Explorer api endpoint not found for network: ${networkId}.`; + return axios.get(`${apiEndpoint}/${requestId}`) + .then(({data}) => data?.request) + .catch(e => undefined); +} + +const DeRandApp = { + APP_NAME: "derand_offchain_vrf", + + hashParams: function(request) { + let { + randomSeed + } = request.data.params; + + return muonSha3( + { type: "string", value: randomSeed } + ); + }, + + onArrive: async function (request) { + let { + method, + deploymentSeed, + } = request; + + switch (method) { + case "random-number": { + const paramsHash = this.hashParams(request) + let memory = await this.readGlobalMem(`derand-lock-${paramsHash}`); + if (memory) { + throw { message: `The random already generated and locked for a while.` }; + } + + const result = await this.randomNumberResult(request) + const reqId = this.calculateRequestId(request, result); + await this.writeGlobalMem(`derand-lock-${paramsHash}`, JSON.stringify({seed: deploymentSeed, reqId}), LOCK_DURATION); + } + } + }, + + randomNumberResult: async function (request) { + let { + randomSeed + } = request.data.params + + if (!randomSeed) throw { message: 'Invalid randomSeed' } + + return { + randomSeed: randomSeed.toString() + } + }, + + onRequest: async function (request) { + let { + method, + deploymentSeed, + gwAddress, + data: { params }, + } = request; + switch (method) { + case "random-number": { + const paramsHash = this.hashParams(request) + const memory = await this.readGlobalMem(`derand-lock-${paramsHash}`) + if(!memory) + throw `Global lock not performed` + + const memData = JSON.parse(memory.value); + const result = await this.randomNumberResult(request); + const reqId = this.calculateRequestId(request, result); + + if(memory.owner !== gwAddress || memData.seed !== deploymentSeed && memData.reqId !== reqId) { + throw { + message: `Error when checking lock`, + memory: memData, + gwAddress, + deploymentSeed, + } + } + + await this.writeLocalMem(`derand-lock-${paramsHash}`, "locked", LOCK_DURATION, {preventRewrite: true}) + + return result; + } + case "delete-global-memory": { + const paramsHash = this.hashParams(request) + const lockKey = `derand-lock-${paramsHash}` + let memory = await this.readGlobalMem(lockKey); + if (!memory) { + throw { message: `Lock not found.` }; + } + const memData = JSON.parse(memory.value); + let req2 = await fetchRequest(this.netConfigs.networkId, memData.reqId); + if(req2) + throw `Lock is successfully done for the request ${memData.reqId}`; + return { + key: lockKey, + message: `delete global memory ${lockKey}` + } + } + + default: + throw { message: `invalid method ${method}` }; + } + }, + + signParams: function (request, result) { + switch (request.method) { + case "random-number": { + let { + randomSeed + } = result; + + return [ + { type: "string", value: randomSeed }, + ]; + } + case "delete-global-memory": { + const { key, message } = result; + return [key, " ", message] + } + + default: + throw { message: `Unknown method: ${request.method}` }; + } + }, + + onConfirm: async function(request, result, signatures) { + switch(request.method) { + case "delete-global-memory": { + let { key } = result; + await this.deleteGlobalMem(key, request) + await this.deleteLocalMem(key) + } + } + } +}; + +module.exports = DeRandApp; \ No newline at end of file From 6f20b3c5325bf1411982c9bbc8b8ea1406dd6068 Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 6 Dec 2024 22:18:52 +0330 Subject: [PATCH 403/406] apps --- general/tss_reward_oracle.js | 1 + 1 file changed, 1 insertion(+) diff --git a/general/tss_reward_oracle.js b/general/tss_reward_oracle.js index 981f519..5398fe3 100644 --- a/general/tss_reward_oracle.js +++ b/general/tss_reward_oracle.js @@ -113,6 +113,7 @@ module.exports = { }, onRequest: async function (request) { + return false; const { method, data: { params }, From cd4497938d8f35da6d2a82466046d31511e8a92e Mon Sep 17 00:00:00 2001 From: Reza Bakhshandeh Date: Fri, 6 Dec 2024 23:10:34 +0330 Subject: [PATCH 404/406] apps --- general/tss_reward_oracle.js | 1 - 1 file changed, 1 deletion(-) diff --git a/general/tss_reward_oracle.js b/general/tss_reward_oracle.js index 5398fe3..981f519 100644 --- a/general/tss_reward_oracle.js +++ b/general/tss_reward_oracle.js @@ -113,7 +113,6 @@ module.exports = { }, onRequest: async function (request) { - return false; const { method, data: { params }, From aee8d76c47dab1e527e795b6a5c0cdac521b9ffe Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Sun, 15 Dec 2024 17:08:31 +0330 Subject: [PATCH 405/406] layerzero dvn --- general/layerzero_dvn.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index e017f5f..92c4789 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -63,10 +63,8 @@ const ABI_JOBS = [ ] const DVNs = { - avax: "0xEdE165a92c535bD92020204a06FD189B9C4d46E3", - ftm: "0xEdE165a92c535bD92020204a06FD189B9C4d46E3", - bsctest: "0xac58dB20BD970f9e856DF1732499dEf7B727BAe2", - fuji: "0xC3DaA1F175A48448fE210674260b315CbC4f9504" + ftm: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8", + polygon: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8" } module.exports = { From ac0f507d8d6c2fcd0652e202a6ba3c09a248455a Mon Sep 17 00:00:00 2001 From: Shayan Shiravani Date: Mon, 6 Jan 2025 09:14:23 +0330 Subject: [PATCH 406/406] layerzero_dvn: more chains --- general/layerzero_dvn.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/general/layerzero_dvn.js b/general/layerzero_dvn.js index 92c4789..59a5677 100644 --- a/general/layerzero_dvn.js +++ b/general/layerzero_dvn.js @@ -64,7 +64,9 @@ const ABI_JOBS = [ const DVNs = { ftm: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8", - polygon: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8" + polygon: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8", + base: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8", + sonic: "0xA3858e2A9860C935Fc9586a617e9b2A674C3e4c8" } module.exports = {