diff --git a/.gitignore b/.gitignore
index 81f739d..6d14d99 100644
--- a/.gitignore
+++ b/.gitignore
@@ -87,4 +87,7 @@ typings/
# DynamoDB Local files
.dynamodb/
-config/Config.js
+
+# Local .terraform directories
+**/.terraform/*
+**/.terraform
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index ea7ed09..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
deleted file mode 100644
index 63326a8..0000000
--- a/.idea/jsLibraryMappings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 84a0aa7..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/snow-harvester.iml b/.idea/snow-harvester.iml
deleted file mode 100644
index ff88395..0000000
--- a/.idea/snow-harvester.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 9661ac7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..63a227d
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,16 @@
+FROM node:15.14.0-alpine3.10
+
+#ENV NODE_ENV production uncomment for prod.
+# Set the working directory to /app
+WORKDIR '/app'
+# Initially copy only the dependencies json file
+COPY package.json .
+COPY config/ /config/
+COPY assets/ /assets/
+# install dependencies
+RUN npm install
+
+# Since we have everthing inside src we need to re-create it and copy its content.
+COPY src/ .
+
+CMD ["node", "main/Main.js"]
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..aa4fc8d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,22 @@
+export
+AWS_DEFAULT_PROFILE=snowball
+SERVICE_NAME=harvester
+ECS_CLUSTER=${env}-snowball-scheduled-task
+SERVICE_TAG=1.0.5
+AWS_REGION=us-west-2
+ECR_REPO_URL=672139136522.dkr.ecr.us-west-2.amazonaws.com/${env}-${SERVICE_NAME}
+
+all: build push
+
+test-envvars:
+ @[ "${env}" ] || ( echo "env var is not set"; exit 1 )
+
+build: test-envvars
+ docker build --platform linux/amd64 -t $(ECR_REPO_URL):${SERVICE_TAG} .
+
+push: test-envvars
+ aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(ECR_REPO_URL)
+ docker push $(ECR_REPO_URL):${SERVICE_TAG}
+
+deploy: test-envvars
+ aws ecs --region $(AWS_REGION) update-service --cluster $(ECS_CLUSTER) --service ${SERVICE_NAME} --force-new-deployment
\ No newline at end of file
diff --git a/config/Config.js b/config/Config.js
new file mode 100644
index 0000000..f00d42b
--- /dev/null
+++ b/config/Config.js
@@ -0,0 +1,25 @@
+const MINUTE = 60 * 1000;
+const HOUR = 60 * MINUTE;
+
+const Config = {
+ WALLET: {
+ ADDRESS: '0x096a46142C199C940FfEBf34F0fe2F2d674fDB1F',
+ KEY: process.env.SNOWBALL_KEY,
+ },
+ EXECUTION: {
+ ENABLED: true,
+ INTERVAL: 1 * HOUR,
+ INTERVAL_WINDOW: 30 * MINUTE,
+ CONTAINER_MODE: true
+ },
+ DISCORD: {
+ ENABLED: true,
+ WEBHOOK_URL: process.env.WEBHOOK_URL,
+ WEBHOOK_OPTIMIZER: process.env.WEBHOOK_OPTIMIZER
+ },
+ SNOWTRACE: {
+ API_KEY: process.env.SNOWTRACE_KEY
+ }
+};
+
+module.exports = Config;
diff --git a/config/ConfigExample.js b/config/ConfigExample.js
deleted file mode 100644
index 125c93d..0000000
--- a/config/ConfigExample.js
+++ /dev/null
@@ -1,44 +0,0 @@
-const MINUTE = 60 * 1000;
-const HOUR = 60 * MINUTE;
-
-const Config = {
- WALLET: {
- ADDRESS: '0x096a46142C199C940FfEBf34F0fe2F2d674fDB1F', // Sample address for easy runs in test mode
- KEY: '',
- },
- EXECUTION: {
- ENABLED: false,
- INTERVAL: 4 * HOUR,
- INTERVAL_WINDOW: 15 * MINUTE,
- },
- DISCORD: {
- ENABLED: false,
- TOKEN: '',
- CHANNEL: '818943563759878196', // #harvests
- },
- CONTROLLERS: [
- '0xACc69DEeF119AB5bBf14e6Aaf0536eAFB3D6e046', // second deployment (must come first to supersede other controller
- '0xf7b8d9f8a82a7a6dd448398afc5c77744bd6cb85', // first deployment
- ],
- WANTS: {
- '0xa1C2c3B6b120cBd4Cec7D2371FFd4a931A134A32': 'AVAX-SNOB',
- '0x97B4957df08E185502A0ac624F332c7f8967eE8D': 'PNG-SNOB',
- '0xd7538cABBf8605BdE1f4901B47B8D42c61DE0367': 'AVAX-PNG',
- '0x1aCf1583bEBdCA21C8025E172D8E8f2817343d65': 'AVAX-ETH',
- '0x53B37b9A6631C462d74D65d61e1c056ea9dAa637': 'PNG-ETH',
- '0xf372ceAE6B2F4A2C4A6c0550044A7eab914405ea': 'PNG-WBTC',
- '0x7313835802C6e8CA2A6327E6478747B71440F7a4': 'PNG-LINK',
- '0xE8AcF438B10A2C09f80aEf3Ef2858F8E758C98F9': 'PNG-USDT',
- '0xF105fb50fC6DdD8a857bbEcd296c8a630E8ca857': 'PNG-SUSHI',
- '0x874685bc6794c8b4bEFBD037147C2eEF990761A9': 'PNG-UNI',
- '0x0025CEBD8289BBE0a51a5c85464Da68cBc2ec0c4': 'PNG-AAVE',
- '0xa465e953F9f2a00b2C1C5805560207B66A570093': 'PNG-YFI',
- '0xD765B31399985f411A9667330764f62153b42C76': 'PNG-DAI',
- '0x7a6131110B82dAcBb5872C7D352BfE071eA6A17C': 'AVAX-WBTC',
- '0xbbC7fFF833D27264AaC8806389E02F717A5506c9': 'AVAX-LINK',
- '0x9EE0a4E21bd333a6bb2ab298194320b8DaA26516': 'AVAX-USDT',
- '0xd8B262C0676E13100B33590F10564b46eeF652AD': 'AVAX-SUSHI',
- },
-};
-
-module.exports = Config;
diff --git a/config/Constants.js b/config/Constants.js
new file mode 100644
index 0000000..c3266bd
--- /dev/null
+++ b/config/Constants.js
@@ -0,0 +1,34 @@
+const Constants = {
+ ZERO_ADDRESS: '0x0000000000000000000000000000000000000000',
+ WAVAX_ADDRESS: '0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7',
+ PNG_ADDRESS: '0x60781C2586D68229fde47564546784ab3fACA982',
+ JOE_ADDRESS: '0x6e84a6216eA6dACC71eE8E6b0a5B7322EEbC0fDd',
+ DAI_ADDRESS: '0xd586E7F844cEa2F87f50152665BCbc2C279D8d70',
+ UST_ADDRESS: '0x260Bbf5698121EB85e7a74f2E45E16Ce762EbE11',
+ USDT_ADDRESS: '0xc7198437980c041c805A1EDcbA50c1Ce5db95118',
+ XJOE_ADDRESS: '0x57319d41F71E81F3c65F2a47CA4e001EbAFd4F33',
+ BENQI_ADDRESS: '0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5',
+ TEDDY_ADDRESS: '0x094bd7B2D99711A1486FB94d4395801C6d0fdDcC',
+ AXIAL_ADDRESS: '0xcF8419A615c57511807236751c0AF38Db4ba3351',
+ TJ_MASTERCHEF: '0x188bED1968b795d5c9022F6a0bb5931Ac4c18F00',
+ AXIAL_MASTERCHEF: '0x958C0d0baA8F220846d3966742D4Fb5edc5493D3',
+ QI_ADDRESS: '0x8729438EB15e2C8B576fCc6AeCdA6A148776C0F5',
+ PTP_ADDRESS: '0x22d4002028f537599bE9f666d1c4Fa138522f9c8',
+ TIMELOCK_ADDRESS: "0x3d88b8022142ea2693ba43BA349F89256392d59b",
+
+ PANGOLIN_ROUTER: '0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106',
+ JOE_ROUTER: '0x60aE616a2155Ee3d9A68541Ba4544862310933d4',
+ MAX_GAS_LIMIT_EARN: 2500000,
+ MAX_GAS_LIMIT_HARV: 1000000,
+ MAX_GAS_LIMIT_LEV: 2500000,
+ MAX_GAS_PRICE: 100000000000,
+ RETRY_TXS: 1,
+ MIN_APR_TO_LEVERAGE: 0.011, //4% yearly
+ MIN_TVL_TO_HARVEST_FOLDING:10000,
+ PROVIDERS_URL:[
+ 'https://node.snowapi.net/ext/bc/C/rpc',
+ 'https://api.avax.network/ext/bc/C/rpc',
+ ] //this is by order of preference
+};
+
+module.exports = Constants;
diff --git a/config/Valuation.js b/config/Valuation.js
new file mode 100644
index 0000000..fe29e67
--- /dev/null
+++ b/config/Valuation.js
@@ -0,0 +1,48 @@
+const {
+ PANGOLIN_ROUTER,
+ JOE_ROUTER,
+ JOE_ADDRESS,
+ DAI_ADDRESS,
+ WAVAX_ADDRESS,
+ PNG_ADDRESS,
+ USDT_ADDRESS,
+ XJOE_ADDRESS,
+ UST_ADDRESS
+} = require('./Constants');
+
+const Valuation = (assetAddress) => {
+ // Must support a route to a stablecoin
+ switch(assetAddress){
+ case JOE_ADDRESS: case XJOE_ADDRESS:
+ return {
+ ROUTER: JOE_ROUTER,
+ ROUTE: [JOE_ADDRESS, USDT_ADDRESS],
+ }
+ case WAVAX_ADDRESS: case PNG_ADDRESS:
+ return {
+ ROUTER: PANGOLIN_ROUTER,
+ ROUTE: [assetAddress, DAI_ADDRESS],
+ }
+ case "0x9C8E99eb130AED653Ef90fED709D9C3E9cC8b269": case "0x921f99719Eb6C01b4B8f0BA7973A7C24891e740A":
+ case "0xf03Dccaec9A28200A6708c686cf0b8BF26dDc356": case "0x00EE200Df31b869a321B10400Da10b561F3ee60d":
+ case "0xD4d026322C88C2d49942A75DfF920FCfbC5614C1": case "0xe19A1684873faB5Fb694CfD06607100A632fF21c":
+ case "0xB0a6e056B587D0a85640b39b1cB44086F7a26A1E": case "0x44754455564474A89358B2C2265883DF993b12F0":
+ case "0xfcc6CE74f4cd7eDEF0C5429bB99d38A3608043a5": case "0xf4e0B2dBfAC42672A0e87f086710c2649aeE80B6":
+ return {
+ ROUTER: PANGOLIN_ROUTER,
+ ROUTE: [assetAddress, WAVAX_ADDRESS],
+ }
+ case "0x0659133127749Cc0616Ed6632912ddF7cc8D7545":
+ return {
+ ROUTER: PANGOLIN_ROUTER,
+ ROUTE: [assetAddress, UST_ADDRESS, WAVAX_ADDRESS],
+ }
+ default:
+ return {
+ ROUTER: JOE_ROUTER,
+ ROUTE: [assetAddress, WAVAX_ADDRESS],
+ }
+ }
+};
+
+module.exports = Valuation;
diff --git a/config/Wants.js b/config/Wants.js
new file mode 100644
index 0000000..8362979
--- /dev/null
+++ b/config/Wants.js
@@ -0,0 +1,177 @@
+const OPTIMIZER_CONTROLLER = "0x2F0b4e7aC032d0708C082994Fb21Dd75DB514744";
+
+const OPTIMIZER_POOLS = [
+ //avax
+ {
+ snowglobe: "0x3a3a0570f66cD5DfacB3c72b5214fec88e5722a8",
+ LP: "0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",
+ contracts: [
+ //benqi
+ {
+ strategy: "0x51B29aA47588A0dCAE748297C7A9ddE10035522E",
+ fixedSnowglobe: "0xaCF2814cF22fCB08b3dDA331221A52ad7B05639B" //snowglobe from non-optimized strategy
+ },
+ //aave
+ {
+ strategy: "0x0f776b5b97BfA366f929FE82bd50C312C39f26f1",
+ fixedSnowglobe: "0x951f6c751A9bC5A75a4E4d43be205aADa709D3B8" //snowglobe from non-optimized strategy
+ },
+ //banker
+ {
+ strategy: "0x5bd7bB54e3B6798Ca33AcbD1F26541053721e69f",
+ fixedSnowglobe: "0x5d587f520590bb80153356271d33828bf499e9A2" //snowglobe from non-optimized strategy
+ }
+ ]
+ },
+ { //dai
+ snowglobe: "0x8665e1FAD19D14b16Eecb96A7608cD42962E7eEB",
+ LP: "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70",
+ contracts: [
+ //benqi
+ {
+ strategy: "0x1Ab9ab0260736Cebbf1FdA8E0e31650Cf14B93DA",
+ fixedSnowglobe: "0x7b2525A502800E496D2e656e5b1188723e547012" //snowglobe from non-optimized strategy
+ },
+ //aave
+ {
+ strategy: "0x13d753C651526Bf3501818813B829B339ae867AF",
+ fixedSnowglobe: "0xE4543C234D4b0aD6d29317cFE5fEeCAF398f5649" //snowglobe from non-optimized strategy
+ }
+ ]
+ },
+ { //link
+ snowglobe: "0xECce05f99cc3D9252eb22699c4fa4B0268B33353",
+ LP: "0x5947BB275c521040051D82396192181b413227A3",
+ contracts: [
+ //benqi
+ {
+ strategy: "0xEbbDEC4bFDd23eCC53225214Faf4612c19Dd0347",
+ fixedSnowglobe: "0x32d9D114A2F5aC4ce777463e661BFA28C8fE9Eb7" //snowglobe from non-optimized strategy
+ },
+ //banker
+ {
+ strategy: "0x702490d609BcaAf697f345D502b15F7c60F35856",
+ fixedSnowglobe: "0x6C6B562100663b4179C95E5B199576f2E16b150e" //snowglobe from non-optimized strategy
+ }
+ ]
+ },
+ { //eth
+ snowglobe: "0xEBeCc1f55963F52649B71BCeCA663d2A03028f76",
+ LP: "0x49D5c2BdFfac6CE2BFdB6640F4F80f226bc10bAB",
+ contracts: [
+ //benqi
+ {
+ strategy: "0x730ad83E992aE5A328a5ccEeEF26B0e821ACB524",
+ fixedSnowglobe: "0x37d4b7B04ccfC14d3D660EDca1637417f5cA37f3" //snowglobe from non-optimized strategy
+ },
+ //aave
+ {
+ strategy: "0xBe290f7E69d5eC6941F9A3d6F1ebF93C179AD6DE",
+ fixedSnowglobe: "0x72b7AddaeFE3e4b6452CFAEcf7C0d11e5EBD05a0" //snowglobe from non-optimized strategy
+ },
+ //banker
+ {
+ strategy: "0xfd2400B36a20a07c4ca79DfbEf4045Ea249B2a45",
+ fixedSnowglobe: "0x49e6A1255DEfE0B194a67199e78aD5AA5D7cb092" //snowglobe from non-optimized strategy
+ }
+ ]
+ },
+ { //wbtc
+ snowglobe: "0x26CBeA666139daAde08A5E6E8bc3bB7245c6b5dd",
+ LP: "0x50b7545627a5162F82A992c33b87aDc75187B218",
+ contracts: [
+ //benqi
+ {
+ strategy: "0x35C340bFFB89e00734e13b245EA2B80570D528b1",
+ fixedSnowglobe: "0x8FA104f65BDfddEcA211867b77e83949Fc9d8b44" //snowglobe from non-optimized strategy
+ },
+ //aave
+ {
+ strategy: "0xC623a46Ebd2398db4188070Efde2f355F5832399",
+ fixedSnowglobe: "0xcB707aA965aEB9cB03d21dFADf496e6581Cd7b96" //snowglobe from non-optimized strategy
+ },
+ //banker
+ {
+ strategy: "0x9DcB28e8c2dB31b44Ce0448d567f48E8a310E808",
+ fixedSnowglobe: "0xfb49ea67b84F7c1bBD825de7febd2C836BC4B47E" //snowglobe from non-optimized strategy
+ }
+ ]
+ },
+ { //usdc
+ snowglobe: "0x1022baD88471d7e7d59893A86E4e2fc49F441981",
+ LP: "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664",
+ contracts: [
+ //benqi
+ {
+ strategy: "0xE8c651B51460248457b80DFDEE0E545Bd474bd68",
+ fixedSnowglobe: "0xa8981Eab82d0a471b37F7d87A221C92aE60c0E00" //snowglobe from non-optimized strategy
+ },
+ //aave
+ {
+ strategy: "0x707090bbCfd3b4470C724aF560FE3d7D7d0590E2",
+ fixedSnowglobe: "0x0c33d6076F0Dce93db6e6103E98Ad951A0F33917" //snowglobe from non-optimized strategy
+ },
+ //banker
+ {
+ strategy: "0x80e47C48e9375c6431bE3FCB7DCd30dcc2bb5A3b",
+ fixedSnowglobe: "0x8C9fAEBD41c68B801d628902EDad43D88e4dD0a6" //snowglobe from non-optimized strategy
+ }
+ ]
+ },
+ { //usdt
+ snowglobe: "0x4C7887F2C555ba214582D7935ed60D004816BB0C",
+ LP: "0xc7198437980c041c805A1EDcbA50c1Ce5db95118",
+ contracts: [
+ //benqi
+ {
+ strategy: "0xcCb342985a2963Cd3643cfb40b63D145Ec8C5A40",
+ fixedSnowglobe: "0xE9d842C46e3bE5Ab68b226d9329515a85DF7cEE2" //snowglobe from non-optimized strategy
+ },
+ //aave
+ {
+ strategy: "0x5e8B060639646117539Fd33Ee221364012332C9B",
+ fixedSnowglobe: "0x567350328dB688d49284e79F7DBfad2AAd094B7A" //snowglobe from non-optimized strategy
+ },
+ //banker joe
+ {
+ strategy: "0x1A07f2AEec34E3CaDaf85EeEE45fcC70881178DF",
+ fixedSnowglobe: "0xc7Ca863275b2D0F7a07cA6e2550504362705aA1A" //snowglobe from non-optimized strategy
+ }
+ ]
+ }
+]
+
+const Wants = {
+ GAUGE_PROXY_ADDRESS: "0x215D5eDEb6A6a3f84AE9d72962FEaCCdF815BF27",
+
+ OVERRIDE_OMIT: [
+ '0xA42BE3dB9aff3aee48167b240bFEE5e1697e1281', // S3F
+ '0xdE1A11C331a0E45B9BA8FeE04D4B51A745f1e4A4', // S3D
+ '0x53B37b9A6631C462d74D65d61e1c056ea9dAa637',
+ '0xbBA0f8A3Aa16657D1df2A6E87A73ee74Fec42711', // Deprecated
+ '0x7b74324f523831687fC8FCE946F15a3AA632dC06', // broken benqi wavax
+ '0x68b8037876385BBd6bBe80bAbB2511b95DA372C4', // broken benqi qi
+ '0x59C7b6E757CA14EF6F47e06A30B74CaE1017D92C' // broken teddyxteddy
+ ],
+
+ OVERRIDE_ADD: [
+ // '0x0000000000000000000000000000000000000000', // 'Add-Pool'
+ ],
+
+ CONTROLLERS: [
+ OPTIMIZER_CONTROLLER,
+ '0x14559fb4d15Cf8DCbc35b7EDd1215d56c0468202', // Platypus controller
+ '0xCEB829a0881350689dAe8CBD77D0E012cf7a6a3f', // New trader joe controller
+ '0x252B5fD3B1Cb07A2109bF36D5bDE6a247c6f4B59', // BENQI second Controller
+ '0xF2FA11Fc9247C23b3B622C41992d8555f6D01D8f', // new BANKER JOE controller
+ '0xACc69DEeF119AB5bBf14e6Aaf0536eAFB3D6e046', // second deployment (must come first to supersede other controller
+ '0x425A863762BBf24A986d8EaE2A367cb514591C6F', // AAVE Controller
+ '0x8Ffa3c1547479B77D9524316D5192777bedA40a1', // BENQI Controller
+ '0xf7B8D9f8a82a7a6dd448398aFC5c77744Bd6cb85', // first deployment
+ '0xc7D536a04ECC43269B6B95aC1ce0a06E0000D095', // AXIAL Controller
+ '0xFb7102506B4815a24e3cE3eAA6B834BE7a5f2807', // Banker Joe Controller
+ ],
+
+};
+
+module.exports = { WANTS: Wants, OPTIMIZER_CONTROLLER, OPTIMIZER_POOLS};
diff --git a/config/abi.json b/config/abi.json
index ddd7093..04b8fd8 100644
--- a/config/abi.json
+++ b/config/abi.json
@@ -1,7 +1,15 @@
{
+ "ERC20": [{"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"}],
"CONTROLLER": [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_governance","internalType":"address"},{"type":"address","name":"_strategist","internalType":"address"},{"type":"address","name":"_timelock","internalType":"address"},{"type":"address","name":"_devfund","internalType":"address"},{"type":"address","name":"_treasury","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approveGlobeConverter","inputs":[{"type":"address","name":"_converter","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"approveStrategy","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_strategy","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approvedGlobeConverters","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approvedStrategies","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"burn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"convenienceFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"convenienceFeeMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"converters","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devfund","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"earn","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"expected","internalType":"uint256"}],"name":"getExpectedReturn","inputs":[{"type":"address","name":"_strategy","internalType":"address"},{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"parts","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"globes","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"inCaseStrategyTokenGetStuck","inputs":[{"type":"address","name":"_strategy","internalType":"address"},{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"inCaseTokensGetStuck","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"max","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"onesplit","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeGlobeConverter","inputs":[{"type":"address","name":"_converter","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeStrategy","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_strategy","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setConvenienceFee","inputs":[{"type":"uint256","name":"_convenienceFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDevFund","inputs":[{"type":"address","name":"_devfund","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGlobe","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_globe","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGovernance","inputs":[{"type":"address","name":"_governance","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setOneSplit","inputs":[{"type":"address","name":"_onesplit","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSplit","inputs":[{"type":"uint256","name":"_split","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setStrategist","inputs":[{"type":"address","name":"_strategist","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setStrategy","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_strategy","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTimelock","inputs":[{"type":"address","name":"_timelock","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTreasury","inputs":[{"type":"address","name":"_treasury","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"split","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"strategies","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"strategist","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapExactGlobeForGlobe","inputs":[{"type":"address","name":"_fromGlobe","internalType":"address"},{"type":"address","name":"_toGlobe","internalType":"address"},{"type":"uint256","name":"_fromGlobeAmount","internalType":"uint256"},{"type":"uint256","name":"_toGlobeMinAmount","internalType":"uint256"},{"type":"address[]","name":"_targets","internalType":"address payable[]"},{"type":"bytes[]","name":"_data","internalType":"bytes[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"timelock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"treasury","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawAll","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"yearn","inputs":[{"type":"address","name":"_strategy","internalType":"address"},{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"parts","internalType":"uint256"}]}],
"SNOWGLOBE": [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_governance","internalType":"address"},{"type":"address","name":"_timelock","internalType":"address"},{"type":"address","name":"_controller","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"available","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balance","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"controller","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"depositAll","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"earn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRatio","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"harvest","inputs":[{"type":"address","name":"reserve","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"max","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"min","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setController","inputs":[{"type":"address","name":"_controller","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGovernance","inputs":[{"type":"address","name":"_governance","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMin","inputs":[{"type":"uint256","name":"_min","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTimelock","inputs":[{"type":"address","name":"_timelock","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"timelock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"token","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"uint256","name":"_shares","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawAll","inputs":[]}],
- "STRATEGY": [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_governance","internalType":"address"},{"type":"address","name":"_strategist","internalType":"address"},{"type":"address","name":"_controller","internalType":"address"},{"type":"address","name":"_timelock","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOfPool","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOfWant","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"controller","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes","name":"response","internalType":"bytes"}],"name":"execute","inputs":[{"type":"address","name":"_target","internalType":"address"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getHarvestable","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getName","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"harvest","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"harvesters","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"keepPNG","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"keepPNGMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pangolinRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceDevFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceDevMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceTreasuryFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceTreasuryMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"png","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"png_avax_png_lp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"png_avax_png_rewards","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeHarvester","inputs":[{"type":"address","name":"_harvester","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"rewards","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setController","inputs":[{"type":"address","name":"_controller","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGovernance","inputs":[{"type":"address","name":"_governance","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setKeepPNG","inputs":[{"type":"uint256","name":"_keepPNG","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPerformanceDevFee","inputs":[{"type":"uint256","name":"_performanceDevFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPerformanceTreasuryFee","inputs":[{"type":"uint256","name":"_performanceTreasuryFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setStrategist","inputs":[{"type":"address","name":"_strategist","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTimelock","inputs":[{"type":"address","name":"_timelock","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWithdrawalDevFundFee","inputs":[{"type":"uint256","name":"_withdrawalDevFundFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWithdrawalTreasuryFee","inputs":[{"type":"uint256","name":"_withdrawalTreasuryFee","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"strategist","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"timelock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"want","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"wavax","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistHarvester","inputs":[{"type":"address","name":"_harvester","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"withdraw","inputs":[{"type":"address","name":"_asset","internalType":"contract IERC20"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"withdrawAll","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"withdrawForSwap","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalDevFundFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalDevFundMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalTreasuryFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalTreasuryMax","inputs":[]}],
- "PANGOLIN_POOL": [{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1","internalType":"uint256","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0In","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1In","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount0Out","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1Out","internalType":"uint256","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Sync","inputs":[{"type":"uint112","name":"reserve0","internalType":"uint112","indexed":false},{"type":"uint112","name":"reserve1","internalType":"uint112","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MINIMUM_LIQUIDITY","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PERMIT_TYPEHASH","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"amount0","internalType":"uint256"},{"type":"uint256","name":"amount1","internalType":"uint256"}],"name":"burn","inputs":[{"type":"address","name":"to","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint112","name":"_reserve0","internalType":"uint112"},{"type":"uint112","name":"_reserve1","internalType":"uint112"},{"type":"uint32","name":"_blockTimestampLast","internalType":"uint32"}],"name":"getReserves","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"initialize","inputs":[{"type":"address","name":"_token0","internalType":"address"},{"type":"address","name":"_token1","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"kLast","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"permit","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price0CumulativeLast","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price1CumulativeLast","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"skim","inputs":[{"type":"address","name":"to","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"swap","inputs":[{"type":"uint256","name":"amount0Out","internalType":"uint256"},{"type":"uint256","name":"amount1Out","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"bytes","name":"data","internalType":"bytes"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"sync","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token0","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token1","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false}],
- "PANGOLIN_ROUTER": [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_factory","internalType":"address"},{"type":"address","name":"_WAVAX","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WAVAX","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidity","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"amountADesired","internalType":"uint256"},{"type":"uint256","name":"amountBDesired","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidityAVAX","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountTokenDesired","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"}],"name":"getAmountIn","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"reserveIn","internalType":"uint256"},{"type":"uint256","name":"reserveOut","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"}],"name":"getAmountOut","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"reserveIn","internalType":"uint256"},{"type":"uint256","name":"reserveOut","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"getAmountsIn","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"getAmountsOut","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"quote","inputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"reserveA","internalType":"uint256"},{"type":"uint256","name":"reserveB","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"removeLiquidity","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAX","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXWithPermit","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"removeLiquidityWithPermit","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapAVAXForExactTokens","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactAVAXForTokens","inputs":[{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactTokensForAVAX","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactTokensForTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapTokensForExactAVAX","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMax","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapTokensForExactTokens","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMax","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}]
-}
+ "STRATEGY": [{"inputs":[],"name":"poolId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs": [],"name": "masterChefPlatypus","outputs": [{"internalType": "address","name": "","type": "address"}],"stateMutability": "view","type": "function"},{"inputs": [],"name": "stake_teddy_rewards","outputs": [{"internalType": "address","name": "","type": "address" }], "stateMutability": "view", "type": "function"},{"inputs": [{"internalType": "uint256","name": "_supplyAmount","type": "uint256"}],"name": "deleverageUntil","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs":[],"name":"getSuppliedView","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deleverageToMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterChefAxialV3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLeveragedSupplyTarget","inputs":[{"type":"uint256","name":"supplyBalance","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getSuppliedUnleveraged","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"sync","inputs":[]},{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_governance","internalType":"address"},{"type":"address","name":"_strategist","internalType":"address"},{"type":"address","name":"_controller","internalType":"address"},{"type":"address","name":"_timelock","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOfPool","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOfWant","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"controller","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"deposit","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[{"type":"bytes","name":"response","internalType":"bytes"}],"name":"execute","inputs":[{"type":"address","name":"_target","internalType":"address"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getHarvestable","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"jToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getWavaxAccrued","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getName","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governance","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"harvest","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"harvesters","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"keepPNG","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"keepPNGMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pangolinRouter","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceDevFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceDevMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceTreasuryFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"performanceTreasuryMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"png","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"png_avax_png_lp","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"png_avax_png_rewards","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeHarvester","inputs":[{"type":"address","name":"_harvester","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"rewards","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setController","inputs":[{"type":"address","name":"_controller","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGovernance","inputs":[{"type":"address","name":"_governance","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setKeepPNG","inputs":[{"type":"uint256","name":"_keepPNG","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPerformanceDevFee","inputs":[{"type":"uint256","name":"_performanceDevFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPerformanceTreasuryFee","inputs":[{"type":"uint256","name":"_performanceTreasuryFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setStrategist","inputs":[{"type":"address","name":"_strategist","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTimelock","inputs":[{"type":"address","name":"_timelock","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWithdrawalDevFundFee","inputs":[{"type":"uint256","name":"_withdrawalDevFundFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWithdrawalTreasuryFee","inputs":[{"type":"uint256","name":"_withdrawalTreasuryFee","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"strategist","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"timelock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"want","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"wavax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"benqi","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"leverageToMax","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"whitelistHarvester","inputs":[{"type":"address","name":"_harvester","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"withdraw","inputs":[{"type":"address","name":"_asset","internalType":"contractIERC20"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"withdrawAll","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"withdrawForSwap","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalDevFundFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalDevFundMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalTreasuryFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"withdrawalTreasuryMax","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getMaxLeverage","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"keep","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"keepMax","inputs":[]}],
+ "UNI_V2_POOL": [{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1","internalType":"uint256","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"type":"address","name":"sender","internalType":"address","indexed":true},{"type":"uint256","name":"amount0In","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1In","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount0Out","internalType":"uint256","indexed":false},{"type":"uint256","name":"amount1Out","internalType":"uint256","indexed":false},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Sync","inputs":[{"type":"uint112","name":"reserve0","internalType":"uint112","indexed":false},{"type":"uint112","name":"reserve1","internalType":"uint112","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_SEPARATOR","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"MINIMUM_LIQUIDITY","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PERMIT_TYPEHASH","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"amount0","internalType":"uint256"},{"type":"uint256","name":"amount1","internalType":"uint256"}],"name":"burn","inputs":[{"type":"address","name":"to","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint112","name":"_reserve0","internalType":"uint112"},{"type":"uint112","name":"_reserve1","internalType":"uint112"},{"type":"uint32","name":"_blockTimestampLast","internalType":"uint32"}],"name":"getReserves","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"initialize","inputs":[{"type":"address","name":"_token0","internalType":"address"},{"type":"address","name":"_token1","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"kLast","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"mint","inputs":[{"type":"address","name":"to","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nonces","inputs":[{"type":"address","name":"","internalType":"address"}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"permit","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price0CumulativeLast","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"price1CumulativeLast","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"skim","inputs":[{"type":"address","name":"to","internalType":"address"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"swap","inputs":[{"type":"uint256","name":"amount0Out","internalType":"uint256"},{"type":"uint256","name":"amount1Out","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"bytes","name":"data","internalType":"bytes"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"sync","inputs":[],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token0","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"","internalType":"address"}],"name":"token1","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}],"constant":false}],
+ "UNI_V2_ROUTER": [{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_factory","internalType":"address"},{"type":"address","name":"_WAVAX","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"WAVAX","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidity","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"amountADesired","internalType":"uint256"},{"type":"uint256","name":"amountBDesired","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"},{"type":"uint256","name":"liquidity","internalType":"uint256"}],"name":"addLiquidityAVAX","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"amountTokenDesired","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"}],"name":"getAmountIn","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"reserveIn","internalType":"uint256"},{"type":"uint256","name":"reserveOut","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"}],"name":"getAmountOut","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"reserveIn","internalType":"uint256"},{"type":"uint256","name":"reserveOut","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"getAmountsIn","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"getAmountsOut","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"quote","inputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"reserveA","internalType":"uint256"},{"type":"uint256","name":"reserveB","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"removeLiquidity","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAX","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountToken","internalType":"uint256"},{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXWithPermit","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountAVAX","internalType":"uint256"}],"name":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountTokenMin","internalType":"uint256"},{"type":"uint256","name":"amountAVAXMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256","name":"amountA","internalType":"uint256"},{"type":"uint256","name":"amountB","internalType":"uint256"}],"name":"removeLiquidityWithPermit","inputs":[{"type":"address","name":"tokenA","internalType":"address"},{"type":"address","name":"tokenB","internalType":"address"},{"type":"uint256","name":"liquidity","internalType":"uint256"},{"type":"uint256","name":"amountAMin","internalType":"uint256"},{"type":"uint256","name":"amountBMin","internalType":"uint256"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"},{"type":"bool","name":"approveMax","internalType":"bool"},{"type":"uint8","name":"v","internalType":"uint8"},{"type":"bytes32","name":"r","internalType":"bytes32"},{"type":"bytes32","name":"s","internalType":"bytes32"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapAVAXForExactTokens","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactAVAXForTokens","inputs":[{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactTokensForAVAX","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapExactTokensForTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","inputs":[{"type":"uint256","name":"amountIn","internalType":"uint256"},{"type":"uint256","name":"amountOutMin","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapTokensForExactAVAX","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMax","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"uint256[]","name":"amounts","internalType":"uint256[]"}],"name":"swapTokensForExactTokens","inputs":[{"type":"uint256","name":"amountOut","internalType":"uint256"},{"type":"uint256","name":"amountInMax","internalType":"uint256"},{"type":"address[]","name":"path","internalType":"address[]"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"deadline","internalType":"uint256"}]},{"type":"receive","stateMutability":"payable"}],
+ "GAUGE_PROXY": [ { "type": "constructor", "stateMutability": "nonpayable", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "contract IceQueen" } ], "name": "MASTER", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "contract IERC20" } ], "name": "SNOWBALL", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "contract IERC20" } ], "name": "SNOWCONE", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "contract IERC20" } ], "name": "TOKEN", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "acceptGovernance", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "addGauge", "inputs": [ { "type": "address", "name": "_token", "internalType": "address" } ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "collect", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "deposit", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "distribute", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "address" } ], "name": "gauges", "inputs": [ { "type": "address", "name": "", "internalType": "address" } ] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "address" } ], "name": "getGauge", "inputs": [ { "type": "address", "name": "_token", "internalType": "address" } ] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "address" } ], "name": "governance", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "uint256", "name": "", "internalType": "uint256" } ], "name": "length", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "address" } ], "name": "pendingGovernance", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "uint256", "name": "", "internalType": "uint256" } ], "name": "pid", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "poke", "inputs": [ { "type": "address", "name": "_owner", "internalType": "address" } ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "reset", "inputs": [] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "setGovernance", "inputs": [ { "type": "address", "name": "_governance", "internalType": "address" } ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "setPID", "inputs": [ { "type": "uint256", "name": "_pid", "internalType": "uint256" } ] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address", "name": "", "internalType": "address" } ], "name": "tokenVote", "inputs": [ { "type": "address", "name": "", "internalType": "address" }, { "type": "uint256", "name": "", "internalType": "uint256" } ] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "address[]", "name": "", "internalType": "address[]" } ], "name": "tokens", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "uint256", "name": "", "internalType": "uint256" } ], "name": "totalWeight", "inputs": [] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "uint256", "name": "", "internalType": "uint256" } ], "name": "usedWeights", "inputs": [ { "type": "address", "name": "", "internalType": "address" } ] }, { "type": "function", "stateMutability": "nonpayable", "outputs": [], "name": "vote", "inputs": [ { "type": "address[]", "name": "_tokenVote", "internalType": "address[]" }, { "type": "uint256[]", "name": "_weights", "internalType": "uint256[]" } ] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "uint256", "name": "", "internalType": "uint256" } ], "name": "votes", "inputs": [ { "type": "address", "name": "", "internalType": "address" }, { "type": "address", "name": "", "internalType": "address" } ] }, { "type": "function", "stateMutability": "view", "outputs": [ { "type": "uint256", "name": "", "internalType": "uint256" } ], "name": "weights", "inputs": [ { "type": "address", "name": "", "internalType": "address" } ] } ],
+ "MASTERCHEF_V3": [{"inputs":[{"internalType":"contract IMasterChef","name":"_MASTER_CHEF_V2","type":"address"},{"internalType":"contract IERC20","name":"_axial","type":"address"},{"internalType":"uint256","name":"_MASTER_PID","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[],"name":"Init","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":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accAxialPerShare","type":"uint256"}],"name":"UpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"AXIAL","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MASTER_CHEF_V2","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MASTER_PID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"axialPerSec","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestFromMasterChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"dummyToken","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingTokens","outputs":[{"internalType":"uint256","name":"pendingAxial","type":"uint256"},{"internalType":"address","name":"bonusTokenAddress","type":"address"},{"internalType":"string","name":"bonusTokenSymbol","type":"string"},{"internalType":"uint256","name":"pendingBonusToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"accAxialPerShare","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"pools","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],
+ "MINICHEF_V2": [{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_firstOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"funder","type":"address"}],"name":"FunderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"funder","type":"address"}],"name":"FunderRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerSecond","type":"uint256"}],"name":"LogRewardPerSecond","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardsExpiration","type":"uint256"}],"name":"LogRewardsExpiration","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"}],"name":"Migrate","type":"event"},{"anonymous":false,"inputs":[],"name":"MigratorDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"migrator","type":"address"}],"name":"MigratorSet","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":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"PoolAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"PoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accRewardPerShare","type":"uint256"}],"name":"PoolUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"REWARD","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_funder","type":"address"}],"name":"addFunder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_allocPoints","type":"uint256[]"},{"internalType":"contract IERC20[]","name":"_lpTokens","type":"address[]"},{"internalType":"contract IRewarder[]","name":"_rewarders","type":"address[]"}],"name":"addPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"depositWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extension","type":"uint256"},{"internalType":"uint256","name":"maxFunding","type":"uint256"}],"name":"extendRewardsViaDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"funding","type":"uint256"},{"internalType":"uint256","name":"minExtension","type":"uint256"}],"name":"extendRewardsViaFunding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"funding","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"fundRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_funder","type":"address"}],"name":"isFunder","outputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpTokens","outputs":[{"internalType":"contract IERC20[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"contract IMigratorChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint128","name":"accRewardPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolInfos","outputs":[{"components":[{"internalType":"uint128","name":"accRewardPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"internalType":"struct MiniChefV2.PoolInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"pools","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_funder","type":"address"}],"name":"removeFunder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"resetRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewarder","outputs":[{"internalType":"contract IRewarder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsExpiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IMigratorChef","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"},{"internalType":"uint256[]","name":"allocPoints","type":"uint256[]"},{"internalType":"contract IRewarder[]","name":"rewarders","type":"address[]"},{"internalType":"bool[]","name":"overwrites","type":"bool[]"}],"name":"setPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint128","name":"accRewardPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"internalType":"struct MiniChefV2.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"int256","name":"rewardDebt","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawAndHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"}],
+ "PANGOLIN_REWARDER": [{"inputs":[{"internalType":"contract IERC20[]","name":"_rewardTokens","type":"address[]"},{"internalType":"uint256[]","name":"_rewardMultipliers","type":"uint256[]"},{"internalType":"uint256","name":"_baseRewardTokenDecimals","type":"uint256"},{"internalType":"address","name":"_chefV2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"getRewardMultipliers","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardTokens","outputs":[{"internalType":"contract IERC20[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"pendingTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"pendingTokensDebt","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardMultipliers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokens","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}],
+ "MASTERCHEF_PLATYPUS": [{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"Add","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ptpPerSec","type":"uint256"}],"name":"UpdateEmissionRate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"dialutingRepartition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonDialutingRepartition","type":"uint256"}],"name":"UpdateEmissionRepartition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accPtpPerShare","type":"uint256"}],"name":"UpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"oldVePTP","type":"address"},{"indexed":false,"internalType":"address","name":"newVePTP","type":"address"}],"name":"UpdateVePTP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"claimablePtp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"depositFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dialutingRepartition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyPtpWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_ptp","type":"address"},{"internalType":"contract IVePtp","name":"_vePtp","type":"address"},{"internalType":"uint256","name":"_ptpPerSec","type":"uint256"},{"internalType":"uint256","name":"_dialutingRepartition","type":"uint256"},{"internalType":"uint256","name":"_startTimestamp","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_pids","type":"uint256[]"}],"name":"multiClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonDialutingRepartition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingTokens","outputs":[{"internalType":"uint256","name":"pendingPtp","type":"uint256"},{"internalType":"address","name":"bonusTokenAddress","type":"address"},{"internalType":"string","name":"bonusTokenSymbol","type":"string"},{"internalType":"uint256","name":"pendingBonusToken","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTimestamp","type":"uint256"},{"internalType":"uint256","name":"accPtpPerShare","type":"uint256"},{"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"internalType":"uint256","name":"sumOfFactors","type":"uint256"},{"internalType":"uint256","name":"accPtpPerFactorShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ptp","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ptpPerSec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"rewarderBonusTokenInfo","outputs":[{"internalType":"address","name":"bonusTokenAddress","type":"address"},{"internalType":"string","name":"bonusTokenSymbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMasterPlatypus","name":"_newMasterPlatypus","type":"address"}],"name":"setNewMasterPlatypus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IVePtp","name":"_newVePtp","type":"address"}],"name":"setVePtp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ptpPerSec","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dialutingRepartition","type":"uint256"}],"name":"updateEmissionRepartition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_newVePtpBalance","type":"uint256"}],"name":"updateFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"factor","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vePtp","outputs":[{"internalType":"contract IVePtp","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],
+ "TIMELOCK": [{ "inputs": [ { "internalType": "uint256", "name": "minDelay", "type": "uint256" }, { "internalType": "address[]", "name": "proposers", "type": "address[]" }, { "internalType": "address[]", "name": "executors", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "CallExecuted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "id", "type": "bytes32" }, { "indexed": true, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "delay", "type": "uint256" } ], "name": "CallScheduled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "Cancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldDuration", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDuration", "type": "uint256" } ], "name": "MinDelayChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EXECUTOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PROPOSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TIMELOCK_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "cancel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" } ], "name": "execute", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "datas", "type": "bytes[]" }, { "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" } ], "name": "executeBatch", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "getMinDelay", "outputs": [ { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "getTimestamp", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" } ], "name": "hashOperation", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "datas", "type": "bytes[]" }, { "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" } ], "name": "hashOperationBatch", "outputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "isOperation", "outputs": [ { "internalType": "bool", "name": "pending", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "isOperationDone", "outputs": [ { "internalType": "bool", "name": "done", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "isOperationPending", "outputs": [ { "internalType": "bool", "name": "pending", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "id", "type": "bytes32" } ], "name": "isOperationReady", "outputs": [ { "internalType": "bool", "name": "ready", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256", "name": "delay", "type": "uint256" } ], "name": "schedule", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "targets", "type": "address[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "datas", "type": "bytes[]" }, { "internalType": "bytes32", "name": "predecessor", "type": "bytes32" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256", "name": "delay", "type": "uint256" } ], "name": "scheduleBatch", "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": [ { "internalType": "uint256", "name": "newDelay", "type": "uint256" } ], "name": "updateDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" }],
+ "MULTISIG": [{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":""}],"name":"owners","inputs":[{"type":"uint256","name":""}],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"removeOwner","inputs":[{"type":"address","name":"owner"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"revokeConfirmation","inputs":[{"type":"uint256","name":"transactionId"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"isOwner","inputs":[{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"confirmations","inputs":[{"type":"uint256","name":""},{"type":"address","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"calcMaxWithdraw","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"count"}],"name":"getTransactionCount","inputs":[{"type":"bool","name":"pending"},{"type":"bool","name":"executed"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"dailyLimit","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"lastDay","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"addOwner","inputs":[{"type":"address","name":"owner"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"bool","name":""}],"name":"isConfirmed","inputs":[{"type":"uint256","name":"transactionId"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":"count"}],"name":"getConfirmationCount","inputs":[{"type":"uint256","name":"transactionId"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address","name":"destination"},{"type":"uint256","name":"value"},{"type":"bytes","name":"data"},{"type":"bool","name":"executed"}],"name":"transactions","inputs":[{"type":"uint256","name":""}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address[]","name":""}],"name":"getOwners","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256[]","name":"_transactionIds"}],"name":"getTransactionIds","inputs":[{"type":"uint256","name":"from"},{"type":"uint256","name":"to"},{"type":"bool","name":"pending"},{"type":"bool","name":"executed"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"address[]","name":"_confirmations"}],"name":"getConfirmations","inputs":[{"type":"uint256","name":"transactionId"}],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"transactionCount","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeRequirement","inputs":[{"type":"uint256","name":"_required"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"confirmTransaction","inputs":[{"type":"uint256","name":"transactionId"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[{"type":"uint256","name":"transactionId"}],"name":"submitTransaction","inputs":[{"type":"address","name":"destination"},{"type":"uint256","name":"value"},{"type":"bytes","name":"data"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"changeDailyLimit","inputs":[{"type":"uint256","name":"_dailyLimit"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"MAX_OWNER_COUNT","inputs":[],"constant":true},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"required","inputs":[],"constant":true},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"replaceOwner","inputs":[{"type":"address","name":"owner"},{"type":"address","name":"newOwner"}],"constant":false},{"type":"function","stateMutability":"nonpayable","payable":false,"outputs":[],"name":"executeTransaction","inputs":[{"type":"uint256","name":"transactionId"}],"constant":false},{"type":"function","stateMutability":"view","payable":false,"outputs":[{"type":"uint256","name":""}],"name":"spentToday","inputs":[],"constant":true},{"type":"constructor","stateMutability":"nonpayable","payable":false,"inputs":[{"type":"address[]","name":"_owners"},{"type":"uint256","name":"_required"},{"type":"uint256","name":"_dailyLimit"}]},{"type":"fallback","stateMutability":"payable","payable":true},{"type":"event","name":"DailyLimitChange","inputs":[{"type":"uint256","name":"dailyLimit","indexed":false}],"anonymous":false},{"type":"event","name":"Confirmation","inputs":[{"type":"address","name":"sender","indexed":true},{"type":"uint256","name":"transactionId","indexed":true}],"anonymous":false},{"type":"event","name":"Revocation","inputs":[{"type":"address","name":"sender","indexed":true},{"type":"uint256","name":"transactionId","indexed":true}],"anonymous":false},{"type":"event","name":"Submission","inputs":[{"type":"uint256","name":"transactionId","indexed":true}],"anonymous":false},{"type":"event","name":"Execution","inputs":[{"type":"uint256","name":"transactionId","indexed":true}],"anonymous":false},{"type":"event","name":"ExecutionFailure","inputs":[{"type":"uint256","name":"transactionId","indexed":true}],"anonymous":false},{"type":"event","name":"Deposit","inputs":[{"type":"address","name":"sender","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerAddition","inputs":[{"type":"address","name":"owner","indexed":true}],"anonymous":false},{"type":"event","name":"OwnerRemoval","inputs":[{"type":"address","name":"owner","indexed":true}],"anonymous":false},{"type":"event","name":"RequirementChange","inputs":[{"type":"uint256","name":"required","indexed":false}],"anonymous":false}]
+}
\ No newline at end of file
diff --git a/infra/.terraform.lock.hcl b/infra/.terraform.lock.hcl
new file mode 100644
index 0000000..5df05f0
--- /dev/null
+++ b/infra/.terraform.lock.hcl
@@ -0,0 +1,21 @@
+# This file is maintained automatically by "terraform init".
+# Manual edits may be lost in future updates.
+
+provider "registry.terraform.io/hashicorp/aws" {
+ version = "4.0.0"
+ constraints = "4.0.0"
+ hashes = [
+ "h1:wHydn6CP2wkxUfcq4nRw2NdCc4+rERltXaNZ97U0zAo=",
+ "zh:02937cb37860b022e7d996726e7584ca23904baf7852d266f2dd7891ee088ae4",
+ "zh:259dd5790ec5f4e6814c9584c79834dce3d719e932ce662b21f13434e9441194",
+ "zh:2d230c8c92c3cb2c07471a4324d802c44365dcf99fe0d562cc737d1f964e9c1d",
+ "zh:380b04e78934519469e699c537516ae1674d15f77c6778c2738cd69374b661aa",
+ "zh:3d7121da1fa92166c9ea26f3c9839cef06833420d6c46978b4cbbfd0b5050791",
+ "zh:6b7f5a3b28ec3a631d689f599a39bfe98ca5b785353b01e374cff655b097a791",
+ "zh:7882291716d2d03df5ece721429770452db76c712fcff08964c3a7c0b639f703",
+ "zh:95250c5768610d69a28501f03176b6a05a5d5ac2ae317cb582d94b044b3272b3",
+ "zh:b16a622a76bee455c8b256d828f8a60515e1e9dad38420a4db1be9b9e16d474a",
+ "zh:c805822f0ba57e8063b6201e1f351aa4dbd5ad8886dedd25d809e5aeb9aa0259",
+ "zh:e1c3a0da5576aec4a48f897cd04b739c1f533cdb0005ce4c7f5bc45808b799b1",
+ ]
+}
diff --git a/infra/Makefile b/infra/Makefile
new file mode 100644
index 0000000..ac4a27e
--- /dev/null
+++ b/infra/Makefile
@@ -0,0 +1,13 @@
+export
+AWS_PROFILE=snowball
+#TF_LOG=DEBUG
+init:
+ terraform init
+plan:
+ terraform plan
+refresh:
+ terraform refresh
+show:
+ terraform show
+deploy:
+ terraform apply -auto-approve
\ No newline at end of file
diff --git a/infra/backend.tf b/infra/backend.tf
new file mode 100644
index 0000000..576fe30
--- /dev/null
+++ b/infra/backend.tf
@@ -0,0 +1,36 @@
+locals {
+ remote_state_bucket = "prod-snowball-terraform-state"
+ backend_region = "us-west-2"
+ vpc_remote_state_key = "vpc.tfstate"
+ project = "harvester"
+}
+
+provider "aws" {
+ region = "us-west-2"
+}
+
+terraform {
+ required_providers {
+ aws = {
+ source = "hashicorp/aws"
+ version = "4.0.0"
+ }
+ }
+ backend "s3" {
+ encrypt = true
+ key = "harvester.tfstate"
+ bucket = "prod-snowball-terraform-state"
+ dynamodb_table = "prod-snowball-terraform-state-lock"
+ region = "us-west-2"
+ }
+}
+
+data "terraform_remote_state" "vpc" {
+ backend = "s3"
+
+ config = {
+ region = local.backend_region
+ bucket = local.remote_state_bucket
+ key = local.vpc_remote_state_key
+ }
+}
diff --git a/infra/main.tf b/infra/main.tf
new file mode 100644
index 0000000..b525a12
--- /dev/null
+++ b/infra/main.tf
@@ -0,0 +1,145 @@
+locals {
+ task_definition = jsonencode([
+ {
+ name = local.task_name
+ image = "${aws_ecr_repository.repo.repository_url}:${local.version}"
+ essential = true,
+ dockerLabels = {
+ "com.datadoghq.ad.instances" : "[{\"host\":\"%%host%%\"}]",
+ "com.datadoghq.ad.check_names" : "[\"harvester\"]"
+ },
+ secrets = [
+ {
+ name = "SNOWBALL_KEY"
+ valueFrom = data.aws_ssm_parameter.snowball_key.arn
+ },
+ {
+ name = "DISCORD_KEY"
+ valueFrom = data.aws_ssm_parameter.discord_key.arn
+ },
+ {
+ name = "SNOWTRACE_KEY"
+ valueFrom = data.aws_ssm_parameter.snowtrace.arn
+ }
+ ]
+ environment = [
+ {
+ name = "WEBHOOK_URL"
+ value = data.aws_ssm_parameter.webhook.value
+ },
+ {
+ name = "WEBHOOK_OPTIMIZER"
+ value = data.aws_ssm_parameter.optimizer.value
+ }
+ ],
+ logConfiguration = {
+ logDriver = "awsfirelens"
+ secretOptions = [{
+ name = "apikey"
+ valueFrom = data.aws_ssm_parameter.dd_dog.arn
+ }]
+ options = {
+ Name = "datadog"
+ "dd_service" = "${local.env}-${local.task_name}"
+ "Host" = "http-intake.logs.datadoghq.com"
+ "dd_source" = "${local.env}-${local.task_name}"
+ "dd_message_key" = "log"
+ "dd_tags" = "project:${local.env}-${local.task_name}"
+ "TLS" = "on"
+ "provider" = "ecs"
+ }
+ }
+ },
+ {
+ name = "datadog-agent"
+ image = "datadog/agent:latest"
+ essential = true
+ secrets = [
+ {
+ name = "DD_API_KEY",
+ valueFrom = data.aws_ssm_parameter.dd_dog.arn
+ }
+ ],
+ environment = [
+ {
+ name = "ECS_FARGATE"
+ value = "true"
+ }
+ ]
+ },
+ {
+ name = "log_router"
+ image = "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable"
+ essential = true
+ firelensConfiguration = {
+ type = "fluentbit"
+ options = {
+ "enable-ecs-log-metadata" = "true"
+ }
+ }
+ }
+ ])
+}
+
+resource "aws_ecs_cluster" "this" {
+ name = "${local.env}-${local.cluster_name}"
+}
+
+resource "aws_ecr_repository" "repo" {
+ name = "${local.env}-${local.task_name}"
+ image_tag_mutability = "IMMUTABLE"
+
+ image_scanning_configuration {
+ scan_on_push = true
+ }
+
+ tags = {
+ Environment = local.env
+ Name = "${local.env}-${local.task_name}"
+ }
+}
+
+module "ecs_scheduled_task" {
+ source = "git@github.com:Snowball-Finance/terraform-ecs-schedule-task.git"
+ name = "${local.env}-${local.task_name}"
+ schedule_expression = "rate(12 hours)"
+ cluster_arn = aws_ecs_cluster.this.arn
+ subnets = data.terraform_remote_state.vpc.outputs.private_subnets
+ container_definitions = local.task_definition
+ is_enabled = true
+ task_count = 1
+ platform_version = "LATEST"
+ assign_public_ip = false
+ security_groups = [aws_security_group.this.id]
+ cpu = 256
+ memory = 512
+ requires_compatibilities = ["FARGATE"]
+ iam_path = "/service_role/"
+ description = "Scheduled ECS Task for Harvester"
+ enabled = true
+ create_ecs_events_role = true
+ create_ecs_task_execution_role = false
+ ecs_task_execution_role_arn = aws_iam_role.task_ecs_role.arn
+ task_role_arn = aws_iam_role.task_ecs_role.arn
+
+ tags = {
+ Environment = local.env
+ Project = local.project
+ }
+}
+
+resource "aws_security_group" "this" {
+ name = "${local.env}-${local.task_name}-Task-SG"
+ vpc_id = data.terraform_remote_state.vpc.outputs.id
+ egress {
+ from_port = 0
+ to_port = 0
+ protocol = -1
+ cidr_blocks = ["0.0.0.0/0"]
+ }
+
+ tags = {
+ Name = "${local.env}-${local.task_name}-Task-SG"
+ Environment = local.env
+ }
+}
diff --git a/infra/policy.tf b/infra/policy.tf
new file mode 100644
index 0000000..fbeb4d2
--- /dev/null
+++ b/infra/policy.tf
@@ -0,0 +1,63 @@
+data "aws_iam_policy_document" "ecs_task_policy" {
+ statement {
+ sid = "AllowECSAndTaskAssumeRole"
+ actions = ["sts:AssumeRole"]
+ effect = "Allow"
+ principals {
+ type = "Service"
+ identifiers = ["ecs.amazonaws.com", "ecs-tasks.amazonaws.com"]
+ }
+ }
+}
+
+resource "aws_iam_role" "task_ecs_role" {
+ name = "${local.env}-harvester-task-ecs-role"
+ assume_role_policy = data.aws_iam_policy_document.ecs_task_policy.json
+}
+
+data "aws_iam_policy_document" "task_policy" {
+
+ statement {
+ sid = "AllowReadToResourcesInListToTask"
+ effect = "Allow"
+ actions = [
+ "ecs:*",
+ "ecr:*"
+ ]
+
+ resources = ["*"]
+ }
+
+ statement {
+ sid = "AllowDecrypt"
+ effect = "Allow"
+ actions = [
+ "kms:Decrypt"
+ ]
+ resources = [data.aws_kms_key.kms_key.arn]
+ }
+
+ statement {
+ sid = "AllowAccessToSSM"
+ effect = "Allow"
+ actions = [
+ "ssm:GetParameters"
+ ]
+ resources = [
+ data.aws_ssm_parameter.dd_dog.arn,
+ data.aws_ssm_parameter.discord_key.arn,
+ data.aws_ssm_parameter.snowball_key.arn,
+ data.aws_ssm_parameter.snowtrace.arn
+ ]
+ }
+}
+
+resource "aws_iam_policy" "policy" {
+ name = "${local.env}-${local.cluster_name}-harvester-task-policy"
+ policy = data.aws_iam_policy_document.task_policy.json
+}
+
+resource "aws_iam_role_policy_attachment" "task" {
+ role = aws_iam_role.task_ecs_role.name
+ policy_arn = aws_iam_policy.policy.arn
+}
diff --git a/infra/variables.tf b/infra/variables.tf
new file mode 100644
index 0000000..a366671
--- /dev/null
+++ b/infra/variables.tf
@@ -0,0 +1,34 @@
+locals {
+ cluster_name = "snowball-scheduled-task"
+ env = "prod"
+ task_name = "harvester"
+ version = "1.0.5"
+}
+
+data "aws_ssm_parameter" "snowball_key" {
+ name = "${local.env}-snowball-key"
+}
+
+data "aws_ssm_parameter" "discord_key" {
+ name = "${local.env}-discord-key"
+}
+
+data "aws_ssm_parameter" "dd_dog" {
+ name = "${local.env}-data-dog-api-key"
+}
+
+data "aws_ssm_parameter" "webhook" {
+ name = "${local.env}-harvester-webhook"
+}
+
+data "aws_ssm_parameter" "snowtrace" {
+ name = "${local.env}-snowtrace-key"
+}
+
+data "aws_ssm_parameter" "optimizer" {
+ name = "${local.env}-optimizer-webhook"
+}
+
+data "aws_kms_key" "kms_key" {
+ key_id = "alias/${local.env}-kms-key"
+}
diff --git a/package-lock.json b/package-lock.json
index a7811f3..8244cd8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,243 +20,379 @@
}
},
"@ethersproject/abi": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.7.tgz",
- "integrity": "sha512-Cqktk+hSIckwP/W8O47Eef60VwmoSC/L3lY0+dIBhQPCNn9E4V7rwmm2aFrNRRDJfFlGuZ1khkQUOc3oBX+niw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz",
+ "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==",
"requires": {
- "@ethersproject/address": "^5.0.4",
- "@ethersproject/bignumber": "^5.0.7",
- "@ethersproject/bytes": "^5.0.4",
- "@ethersproject/constants": "^5.0.4",
- "@ethersproject/hash": "^5.0.4",
- "@ethersproject/keccak256": "^5.0.3",
- "@ethersproject/logger": "^5.0.5",
- "@ethersproject/properties": "^5.0.3",
- "@ethersproject/strings": "^5.0.4"
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/constants": "^5.5.0",
+ "@ethersproject/hash": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0"
}
},
"@ethersproject/abstract-provider": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz",
- "integrity": "sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ==",
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz",
+ "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==",
"requires": {
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/networks": "^5.0.7",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/transactions": "^5.0.9",
- "@ethersproject/web": "^5.0.12"
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/networks": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/transactions": "^5.5.0",
+ "@ethersproject/web": "^5.5.0"
}
},
"@ethersproject/abstract-signer": {
- "version": "5.0.14",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz",
- "integrity": "sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz",
+ "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==",
"requires": {
- "@ethersproject/abstract-provider": "^5.0.8",
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7"
+ "@ethersproject/abstract-provider": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0"
}
},
"@ethersproject/address": {
- "version": "5.0.11",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.0.11.tgz",
- "integrity": "sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz",
+ "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==",
"requires": {
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/keccak256": "^5.0.7",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/rlp": "^5.0.7"
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/rlp": "^5.5.0"
}
},
"@ethersproject/base64": {
- "version": "5.0.9",
- "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.0.9.tgz",
- "integrity": "sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz",
+ "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==",
"requires": {
- "@ethersproject/bytes": "^5.0.9"
+ "@ethersproject/bytes": "^5.5.0"
+ }
+ },
+ "@ethersproject/basex": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz",
+ "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==",
+ "requires": {
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0"
}
},
"@ethersproject/bignumber": {
- "version": "5.0.15",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.0.15.tgz",
- "integrity": "sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz",
+ "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==",
"requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "bn.js": "^4.4.0"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "bn.js": "^4.11.9"
}
},
"@ethersproject/bytes": {
- "version": "5.0.11",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.0.11.tgz",
- "integrity": "sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz",
+ "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==",
"requires": {
- "@ethersproject/logger": "^5.0.8"
+ "@ethersproject/logger": "^5.5.0"
}
},
"@ethersproject/constants": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.0.10.tgz",
- "integrity": "sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz",
+ "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==",
"requires": {
- "@ethersproject/bignumber": "^5.0.13"
+ "@ethersproject/bignumber": "^5.5.0"
}
},
- "@ethersproject/hash": {
- "version": "5.0.12",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.0.12.tgz",
- "integrity": "sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q==",
+ "@ethersproject/contracts": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz",
+ "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==",
"requires": {
- "@ethersproject/abstract-signer": "^5.0.10",
- "@ethersproject/address": "^5.0.9",
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/keccak256": "^5.0.7",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/strings": "^5.0.8"
+ "@ethersproject/abi": "^5.5.0",
+ "@ethersproject/abstract-provider": "^5.5.0",
+ "@ethersproject/abstract-signer": "^5.5.0",
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/constants": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/transactions": "^5.5.0"
+ }
+ },
+ "@ethersproject/hash": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz",
+ "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==",
+ "requires": {
+ "@ethersproject/abstract-signer": "^5.5.0",
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0"
+ }
+ },
+ "@ethersproject/hdnode": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz",
+ "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==",
+ "requires": {
+ "@ethersproject/abstract-signer": "^5.5.0",
+ "@ethersproject/basex": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/pbkdf2": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/sha2": "^5.5.0",
+ "@ethersproject/signing-key": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0",
+ "@ethersproject/transactions": "^5.5.0",
+ "@ethersproject/wordlists": "^5.5.0"
+ }
+ },
+ "@ethersproject/json-wallets": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz",
+ "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==",
+ "requires": {
+ "@ethersproject/abstract-signer": "^5.5.0",
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/hdnode": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/pbkdf2": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/random": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0",
+ "@ethersproject/transactions": "^5.5.0",
+ "aes-js": "3.0.0",
+ "scrypt-js": "3.0.1"
}
},
"@ethersproject/keccak256": {
- "version": "5.0.9",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.0.9.tgz",
- "integrity": "sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz",
+ "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==",
"requires": {
- "@ethersproject/bytes": "^5.0.9",
- "js-sha3": "0.5.7"
- },
- "dependencies": {
- "js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
- }
+ "@ethersproject/bytes": "^5.5.0",
+ "js-sha3": "0.8.0"
}
},
"@ethersproject/logger": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.0.10.tgz",
- "integrity": "sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw=="
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz",
+ "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg=="
},
"@ethersproject/networks": {
- "version": "5.0.9",
- "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.0.9.tgz",
- "integrity": "sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.0.tgz",
+ "integrity": "sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA==",
"requires": {
- "@ethersproject/logger": "^5.0.8"
+ "@ethersproject/logger": "^5.5.0"
}
},
- "@ethersproject/properties": {
- "version": "5.0.9",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.0.9.tgz",
- "integrity": "sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg==",
+ "@ethersproject/pbkdf2": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz",
+ "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==",
"requires": {
- "@ethersproject/logger": "^5.0.8"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/sha2": "^5.5.0"
}
},
- "@ethersproject/rlp": {
- "version": "5.0.9",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.0.9.tgz",
- "integrity": "sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA==",
- "requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8"
+ "@ethersproject/properties": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz",
+ "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==",
+ "requires": {
+ "@ethersproject/logger": "^5.5.0"
+ }
+ },
+ "@ethersproject/providers": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.0.tgz",
+ "integrity": "sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw==",
+ "requires": {
+ "@ethersproject/abstract-provider": "^5.5.0",
+ "@ethersproject/abstract-signer": "^5.5.0",
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/basex": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/constants": "^5.5.0",
+ "@ethersproject/hash": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/networks": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/random": "^5.5.0",
+ "@ethersproject/rlp": "^5.5.0",
+ "@ethersproject/sha2": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0",
+ "@ethersproject/transactions": "^5.5.0",
+ "@ethersproject/web": "^5.5.0",
+ "bech32": "1.1.4",
+ "ws": "7.4.6"
+ },
+ "dependencies": {
+ "ws": {
+ "version": "7.4.6",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
+ "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
+ }
}
},
- "@ethersproject/signing-key": {
- "version": "5.0.11",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.0.11.tgz",
- "integrity": "sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ==",
+ "@ethersproject/random": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.0.tgz",
+ "integrity": "sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ==",
"requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "elliptic": "6.5.4"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0"
}
},
- "@ethersproject/strings": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.0.10.tgz",
- "integrity": "sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w==",
+ "@ethersproject/rlp": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz",
+ "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==",
"requires": {
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/constants": "^5.0.8",
- "@ethersproject/logger": "^5.0.8"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0"
}
},
- "@ethersproject/transactions": {
- "version": "5.0.11",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.0.11.tgz",
- "integrity": "sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA==",
+ "@ethersproject/sha2": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz",
+ "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==",
"requires": {
- "@ethersproject/address": "^5.0.9",
- "@ethersproject/bignumber": "^5.0.13",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/constants": "^5.0.8",
- "@ethersproject/keccak256": "^5.0.7",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/rlp": "^5.0.7",
- "@ethersproject/signing-key": "^5.0.8"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "hash.js": "1.1.7"
}
},
- "@ethersproject/web": {
- "version": "5.0.14",
- "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.0.14.tgz",
- "integrity": "sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA==",
+ "@ethersproject/signing-key": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz",
+ "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==",
"requires": {
- "@ethersproject/base64": "^5.0.7",
- "@ethersproject/bytes": "^5.0.9",
- "@ethersproject/logger": "^5.0.8",
- "@ethersproject/properties": "^5.0.7",
- "@ethersproject/strings": "^5.0.8"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "bn.js": "^4.11.9",
+ "elliptic": "6.5.4",
+ "hash.js": "1.1.7"
}
},
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "@ethersproject/solidity": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz",
+ "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==",
"requires": {
- "defer-to-connect": "^1.0.1"
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/sha2": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0"
}
},
- "@types/bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==",
+ "@ethersproject/strings": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz",
+ "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==",
"requires": {
- "@types/node": "*"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/constants": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0"
}
},
- "@types/node": {
- "version": "12.20.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.6.tgz",
- "integrity": "sha512-sRVq8d+ApGslmkE9e3i+D3gFGk7aZHAT+G4cIpIEdLJYPsWiSPwcAnJEjddLQQDqV3Ra2jOclX/Sv6YrvGYiWA=="
+ "@ethersproject/transactions": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz",
+ "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==",
+ "requires": {
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/constants": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/rlp": "^5.5.0",
+ "@ethersproject/signing-key": "^5.5.0"
+ }
+ },
+ "@ethersproject/units": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz",
+ "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==",
+ "requires": {
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/constants": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0"
+ }
+ },
+ "@ethersproject/wallet": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz",
+ "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==",
+ "requires": {
+ "@ethersproject/abstract-provider": "^5.5.0",
+ "@ethersproject/abstract-signer": "^5.5.0",
+ "@ethersproject/address": "^5.5.0",
+ "@ethersproject/bignumber": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/hash": "^5.5.0",
+ "@ethersproject/hdnode": "^5.5.0",
+ "@ethersproject/json-wallets": "^5.5.0",
+ "@ethersproject/keccak256": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/random": "^5.5.0",
+ "@ethersproject/signing-key": "^5.5.0",
+ "@ethersproject/transactions": "^5.5.0",
+ "@ethersproject/wordlists": "^5.5.0"
+ }
},
- "@types/pbkdf2": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz",
- "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==",
+ "@ethersproject/web": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.0.tgz",
+ "integrity": "sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA==",
"requires": {
- "@types/node": "*"
+ "@ethersproject/base64": "^5.5.0",
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0"
}
},
- "@types/secp256k1": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.1.tgz",
- "integrity": "sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog==",
+ "@ethersproject/wordlists": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz",
+ "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==",
"requires": {
- "@types/node": "*"
+ "@ethersproject/bytes": "^5.5.0",
+ "@ethersproject/hash": "^5.5.0",
+ "@ethersproject/logger": "^5.5.0",
+ "@ethersproject/properties": "^5.5.0",
+ "@ethersproject/strings": "^5.5.0"
}
},
"abort-controller": {
@@ -267,372 +403,39 @@
"event-target-shim": "^5.0.0"
}
},
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "array-filter": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
- "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM="
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "async-limiter": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
- "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+ "aes-js": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
+ "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0="
},
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
- "available-typed-arrays": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz",
- "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==",
- "requires": {
- "array-filter": "^1.0.0"
- }
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "base-x": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz",
- "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "axios": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz",
+ "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==",
"requires": {
- "tweetnacl": "^0.14.3"
+ "follow-redirects": "^1.14.4"
}
},
- "bignumber.js": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz",
- "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA=="
- },
- "blakejs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz",
- "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U="
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+ "bech32": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
+ "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
},
"bn.js": {
"version": "4.12.0",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
},
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- }
- },
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
},
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
- }
- }
- },
- "browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "requires": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz",
- "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw=="
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
- "bs58": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
- "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
- "requires": {
- "base-x": "^3.0.2"
- }
- },
- "bs58check": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz",
- "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==",
- "requires": {
- "bs58": "^4.0.0",
- "create-hash": "^1.1.0",
- "safe-buffer": "^5.1.2"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-to-arraybuffer": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz",
- "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo="
- },
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
- },
- "bufferutil": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.3.tgz",
- "integrity": "sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==",
- "requires": {
- "node-gyp-build": "^4.2.0"
- }
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
- }
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "cids": {
- "version": "0.7.5",
- "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz",
- "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==",
- "requires": {
- "buffer": "^5.5.0",
- "class-is": "^1.1.0",
- "multibase": "~0.6.0",
- "multicodec": "^1.0.0",
- "multihashes": "~0.4.15"
- },
- "dependencies": {
- "multicodec": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz",
- "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==",
- "requires": {
- "buffer": "^5.6.0",
- "varint": "^5.0.0"
- }
- }
- }
- },
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "class-is": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz",
- "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw=="
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -641,246 +444,26 @@
"delayed-stream": "~1.0.0"
}
},
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "content-hash": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz",
- "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==",
- "requires": {
- "cids": "^0.7.1",
- "multicodec": "^0.5.5",
- "multihashes": "^0.4.15"
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "cookiejar": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
- "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cors": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
- "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
- "create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "requires": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "defer-to-connect": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- }
- },
"discord.js": {
- "version": "12.5.1",
- "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.1.tgz",
- "integrity": "sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==",
+ "version": "12.5.3",
+ "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz",
+ "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==",
"requires": {
"@discordjs/collection": "^0.1.6",
"@discordjs/form-data": "^3.0.1",
"abort-controller": "^3.0.0",
"node-fetch": "^2.6.1",
- "prism-media": "^1.2.2",
+ "prism-media": "^1.2.9",
"setimmediate": "^1.0.5",
"tweetnacl": "^1.0.3",
- "ws": "^7.3.1"
- },
- "dependencies": {
- "tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
- },
- "ws": {
- "version": "7.4.4",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
- "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw=="
- }
- }
- },
- "dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w=="
- },
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "ws": "^7.4.4"
}
},
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
"elliptic": {
"version": "6.5.4",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
@@ -895,2116 +478,156 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
+ "ethers": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz",
+ "integrity": "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==",
+ "requires": {
+ "@ethersproject/abi": "5.5.0",
+ "@ethersproject/abstract-provider": "5.5.1",
+ "@ethersproject/abstract-signer": "5.5.0",
+ "@ethersproject/address": "5.5.0",
+ "@ethersproject/base64": "5.5.0",
+ "@ethersproject/basex": "5.5.0",
+ "@ethersproject/bignumber": "5.5.0",
+ "@ethersproject/bytes": "5.5.0",
+ "@ethersproject/constants": "5.5.0",
+ "@ethersproject/contracts": "5.5.0",
+ "@ethersproject/hash": "5.5.0",
+ "@ethersproject/hdnode": "5.5.0",
+ "@ethersproject/json-wallets": "5.5.0",
+ "@ethersproject/keccak256": "5.5.0",
+ "@ethersproject/logger": "5.5.0",
+ "@ethersproject/networks": "5.5.0",
+ "@ethersproject/pbkdf2": "5.5.0",
+ "@ethersproject/properties": "5.5.0",
+ "@ethersproject/providers": "5.5.0",
+ "@ethersproject/random": "5.5.0",
+ "@ethersproject/rlp": "5.5.0",
+ "@ethersproject/sha2": "5.5.0",
+ "@ethersproject/signing-key": "5.5.0",
+ "@ethersproject/solidity": "5.5.0",
+ "@ethersproject/strings": "5.5.0",
+ "@ethersproject/transactions": "5.5.0",
+ "@ethersproject/units": "5.5.0",
+ "@ethersproject/wallet": "5.5.0",
+ "@ethersproject/web": "5.5.0",
+ "@ethersproject/wordlists": "5.5.0"
}
},
- "es-abstract": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz",
- "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==",
- "requires": {
- "call-bind": "^1.0.2",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
- "is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.2",
- "is-string": "^1.0.5",
- "object-inspect": "^1.9.0",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.2",
- "string.prototype.trimend": "^1.0.4",
- "string.prototype.trimstart": "^1.0.4",
- "unbox-primitive": "^1.0.0"
- }
+ "event-target-shim": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
},
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
+ "follow-redirects": {
+ "version": "1.14.4",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
+ "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g=="
},
- "es5-ext": {
- "version": "0.10.53",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
- "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
"requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.3",
- "next-tick": "~1.0.0"
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
}
},
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
}
},
- "es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "requires": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ "js-sha3": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+ "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
},
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ "mime-db": {
+ "version": "1.50.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz",
+ "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A=="
},
- "eth-ens-namehash": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz",
- "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=",
+ "mime-types": {
+ "version": "2.1.33",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz",
+ "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==",
"requires": {
- "idna-uts46-hx": "^2.3.1",
- "js-sha3": "^0.5.7"
- },
- "dependencies": {
- "js-sha3": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz",
- "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc="
- }
+ "mime-db": "1.50.0"
}
},
- "eth-lib": {
- "version": "0.1.29",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz",
- "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==",
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "nano-json-stream-parser": "^0.1.2",
- "servify": "^0.1.12",
- "ws": "^3.0.0",
- "xhr-request-promise": "^0.1.2"
- }
+ "minimalistic-assert": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+ "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
},
- "ethereum-bloom-filters": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz",
- "integrity": "sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg==",
- "requires": {
- "js-sha3": "^0.8.0"
- }
+ "minimalistic-crypto-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
},
- "ethereum-cryptography": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz",
- "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==",
+ "node-fetch": {
+ "version": "2.6.5",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz",
+ "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==",
"requires": {
- "@types/pbkdf2": "^3.0.0",
- "@types/secp256k1": "^4.0.1",
- "blakejs": "^1.1.0",
- "browserify-aes": "^1.2.0",
- "bs58check": "^2.1.2",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "hash.js": "^1.1.7",
- "keccak": "^3.0.0",
- "pbkdf2": "^3.0.17",
- "randombytes": "^2.1.0",
- "safe-buffer": "^5.1.2",
- "scrypt-js": "^3.0.0",
- "secp256k1": "^4.0.1",
- "setimmediate": "^1.0.5"
+ "whatwg-url": "^5.0.0"
}
},
- "ethereumjs-common": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz",
- "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA=="
+ "prism-media": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz",
+ "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g=="
},
- "ethereumjs-tx": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz",
- "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==",
- "requires": {
- "ethereumjs-common": "^1.5.0",
- "ethereumjs-util": "^6.0.0"
- }
- },
- "ethereumjs-util": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
- "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
- "requires": {
- "@types/bn.js": "^4.11.3",
- "bn.js": "^4.11.0",
- "create-hash": "^1.1.2",
- "elliptic": "^6.5.2",
- "ethereum-cryptography": "^0.1.3",
- "ethjs-util": "0.1.6",
- "rlp": "^2.2.3"
- }
- },
- "ethjs-unit": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz",
- "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=",
- "requires": {
- "bn.js": "4.11.6",
- "number-to-bn": "1.7.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
- }
- }
- },
- "ethjs-util": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz",
- "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==",
- "requires": {
- "is-hex-prefixed": "1.0.0",
- "strip-hex-prefix": "1.0.0"
- }
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "eventemitter3": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
- "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ=="
- },
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- }
- },
- "ext": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
- "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
- "requires": {
- "type": "^2.0.0"
- },
- "dependencies": {
- "type": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
- "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- }
- },
- "foreach": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
- "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
- },
- "forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
- },
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
- },
- "fs-extra": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
- "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs-minipass": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
- "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
- },
- "har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-bigints": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
- "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA=="
- },
- "has-symbol-support-x": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz",
- "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw=="
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
- },
- "has-to-string-tag-x": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz",
- "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==",
- "requires": {
- "has-symbol-support-x": "^1.4.1"
- }
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- }
- }
- },
- "http-https": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",
- "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs="
- },
- "http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "idna-uts46-hx": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz",
- "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==",
- "requires": {
- "punycode": "2.1.0"
- },
- "dependencies": {
- "punycode": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz",
- "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0="
- }
- }
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
- },
- "is-arguments": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
- "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "is-bigint": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz",
- "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg=="
- },
- "is-boolean-object": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz",
- "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==",
- "requires": {
- "call-bind": "^1.0.0"
- }
- },
- "is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="
- },
- "is-date-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
- "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
- },
- "is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ=="
- },
- "is-generator-function": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz",
- "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ=="
- },
- "is-hex-prefixed": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
- "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ="
- },
- "is-negative-zero": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
- },
- "is-number-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz",
- "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw=="
- },
- "is-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
- "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA=="
- },
- "is-plain-obj": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
- "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
- },
- "is-regex": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
- "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
- "requires": {
- "call-bind": "^1.0.2",
- "has-symbols": "^1.0.1"
- }
- },
- "is-retry-allowed": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
- "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg=="
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
- },
- "is-string": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
- "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ=="
- },
- "is-symbol": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
- "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
- "requires": {
- "has-symbols": "^1.0.1"
- }
- },
- "is-typed-array": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz",
- "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==",
- "requires": {
- "available-typed-arrays": "^1.0.2",
- "call-bind": "^1.0.2",
- "es-abstract": "^1.18.0-next.2",
- "foreach": "^2.0.5",
- "has-symbols": "^1.0.1"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "isurl": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
- "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
- "requires": {
- "has-to-string-tag-x": "^1.2.0",
- "is-object": "^1.0.1"
- }
- },
- "js-sha3": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
- "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
- },
- "jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "keccak": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
- "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==",
- "requires": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "requires": {
- "json-buffer": "3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
- },
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
- },
- "mime-db": {
- "version": "1.46.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
- "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
- },
- "mime-types": {
- "version": "2.1.29",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
- "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
- "requires": {
- "mime-db": "1.46.0"
- }
- },
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
- },
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "requires": {
- "dom-walk": "^0.1.0"
- }
- },
- "minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "minipass": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
- "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
- "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
- },
- "mkdirp-promise": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz",
- "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=",
- "requires": {
- "mkdirp": "*"
- }
- },
- "mock-fs": {
- "version": "4.13.0",
- "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.13.0.tgz",
- "integrity": "sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA=="
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "multibase": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz",
- "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==",
- "requires": {
- "base-x": "^3.0.8",
- "buffer": "^5.5.0"
- }
- },
- "multicodec": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz",
- "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==",
- "requires": {
- "varint": "^5.0.0"
- }
- },
- "multihashes": {
- "version": "0.4.21",
- "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz",
- "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==",
- "requires": {
- "buffer": "^5.5.0",
- "multibase": "^0.7.0",
- "varint": "^5.0.0"
- },
- "dependencies": {
- "multibase": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz",
- "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==",
- "requires": {
- "base-x": "^3.0.8",
- "buffer": "^5.5.0"
- }
- }
- }
- },
- "nano-json-stream-parser": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz",
- "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18="
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
- },
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
- },
- "node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA=="
- },
- "node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
- },
- "node-gyp-build": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.3.tgz",
- "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg=="
- },
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
- },
- "number-to-bn": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz",
- "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=",
- "requires": {
- "bn.js": "4.11.6",
- "strip-hex-prefix": "1.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.11.6",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
- "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
- }
- }
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-inspect": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
- "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw=="
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "oboe": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz",
- "integrity": "sha1-VVQoTFQ6ImbXo48X4HOCH73jk80=",
- "requires": {
- "http-https": "^1.0.0"
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1"
- }
- },
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
- },
- "p-timeout": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
- "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
- "requires": {
- "p-finally": "^1.0.0"
- }
- },
- "parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-headers": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz",
- "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA=="
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
- },
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "pbkdf2": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
- "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
- "requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
- "performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
- },
- "prism-media": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz",
- "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q=="
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
- },
- "proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
- "requires": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.1"
- }
- },
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
- },
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
- },
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
- },
- "query-string": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz",
- "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==",
- "requires": {
- "decode-uri-component": "^0.2.0",
- "object-assign": "^4.1.0",
- "strict-uri-encode": "^1.0.0"
- }
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "dependencies": {
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
- }
- }
- },
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "requires": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "rlp": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
- "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
- "requires": {
- "bn.js": "^4.11.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "scrypt-js": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
- "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
- },
- "secp256k1": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz",
- "integrity": "sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==",
- "requires": {
- "elliptic": "^6.5.2",
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0"
- }
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- }
- }
- },
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- }
- },
- "servify": {
- "version": "0.1.12",
- "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz",
- "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==",
- "requires": {
- "body-parser": "^1.16.0",
- "cors": "^2.8.1",
- "express": "^4.14.0",
- "request": "^2.79.0",
- "xhr": "^2.3.3"
- }
+ "scrypt-js": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz",
+ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA=="
},
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
},
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "simple-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
- },
- "simple-get": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz",
- "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==",
- "requires": {
- "decompress-response": "^3.3.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
- },
- "strict-uri-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
- "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
- },
- "string.prototype.trimend": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
- "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz",
- "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==",
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- }
- }
- },
- "strip-hex-prefix": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
- "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
- "requires": {
- "is-hex-prefixed": "1.0.0"
- }
- },
- "swarm-js": {
- "version": "0.1.40",
- "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz",
- "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==",
- "requires": {
- "bluebird": "^3.5.0",
- "buffer": "^5.0.5",
- "eth-lib": "^0.1.26",
- "fs-extra": "^4.0.2",
- "got": "^7.1.0",
- "mime-types": "^2.1.16",
- "mkdirp-promise": "^5.0.1",
- "mock-fs": "^4.1.0",
- "setimmediate": "^1.0.5",
- "tar": "^4.0.2",
- "xhr-request": "^1.0.1"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
- "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
- },
- "got": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz",
- "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==",
- "requires": {
- "decompress-response": "^3.2.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-plain-obj": "^1.1.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "isurl": "^1.0.0-alpha5",
- "lowercase-keys": "^1.0.0",
- "p-cancelable": "^0.3.0",
- "p-timeout": "^1.1.1",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "url-parse-lax": "^1.0.0",
- "url-to-options": "^1.0.1"
- }
- },
- "p-cancelable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
- "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw=="
- },
- "prepend-http": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
- "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
- "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
- "requires": {
- "prepend-http": "^1.0.1"
- }
- }
- }
- },
- "tar": {
- "version": "4.4.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
- "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- },
- "dependencies": {
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
- }
- }
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
- },
- "to-readable-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
- "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
- },
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
- },
- "tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
- "safe-buffer": "^5.0.1"
- }
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
- },
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- }
- },
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
- "ultron": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
- "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
- },
- "unbox-primitive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.0.tgz",
- "integrity": "sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA==",
- "requires": {
- "function-bind": "^1.1.1",
- "has-bigints": "^1.0.0",
- "has-symbols": "^1.0.0",
- "which-boxed-primitive": "^1.0.1"
- }
- },
- "underscore": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
- "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
- },
- "uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "url-set-query": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz",
- "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk="
- },
- "url-to-options": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
- "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="
- },
- "utf-8-validate": {
- "version": "5.0.4",
- "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.4.tgz",
- "integrity": "sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==",
- "requires": {
- "node-gyp-build": "^4.2.0"
- }
- },
- "utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
- "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ=="
- },
- "util": {
- "version": "0.12.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz",
- "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==",
- "requires": {
- "inherits": "^2.0.3",
- "is-arguments": "^1.0.4",
- "is-generator-function": "^1.0.7",
- "is-typed-array": "^1.1.3",
- "safe-buffer": "^5.1.2",
- "which-typed-array": "^1.1.2"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- },
- "varint": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
- "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
- },
- "vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
- },
- "verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "web3": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3/-/web3-1.3.4.tgz",
- "integrity": "sha512-D6cMb2EtTMLHgdGbkTPGl/Qi7DAfczR+Lp7iFX3bcu/bsD9V8fZW69hA8v5cRPNGzXUwVQebk3bS17WKR4cD2w==",
- "requires": {
- "web3-bzz": "1.3.4",
- "web3-core": "1.3.4",
- "web3-eth": "1.3.4",
- "web3-eth-personal": "1.3.4",
- "web3-net": "1.3.4",
- "web3-shh": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-bzz": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.3.4.tgz",
- "integrity": "sha512-DBRVQB8FAgoAtZCpp2GAGPCJjgBgsuwOKEasjV044AAZiONpXcKHbkO6G1SgItIixnrJsRJpoGLGw52Byr6FKw==",
- "requires": {
- "@types/node": "^12.12.6",
- "got": "9.6.0",
- "swarm-js": "^0.1.40",
- "underscore": "1.9.1"
- }
- },
- "web3-core": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.3.4.tgz",
- "integrity": "sha512-7OJu46RpCEfTerl+gPvHXANR2RkLqAfW7l2DAvQ7wN0pnCzl9nEfdgW6tMhr31k3TR2fWucwKzCyyxMGzMHeSA==",
- "requires": {
- "@types/bn.js": "^4.11.5",
- "@types/node": "^12.12.6",
- "bignumber.js": "^9.0.0",
- "web3-core-helpers": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-core-requestmanager": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-core-helpers": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.3.4.tgz",
- "integrity": "sha512-n7BqDalcTa1stncHMmrnFtyTgDhX5Fy+avNaHCf6qcOP2lwTQC8+mdHVBONWRJ6Yddvln+c8oY/TAaB6PzWK0A==",
- "requires": {
- "underscore": "1.9.1",
- "web3-eth-iban": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-core-method": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.3.4.tgz",
- "integrity": "sha512-JxmQrujsAWYRRN77P/RY7XuZDCzxSiiQJrgX/60Lfyf7FF1Y0le4L/UMCi7vUJnuYkbU1Kfl9E0udnqwyPqlvQ==",
- "requires": {
- "@ethersproject/transactions": "^5.0.0-beta.135",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.3.4",
- "web3-core-promievent": "1.3.4",
- "web3-core-subscriptions": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-core-promievent": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.3.4.tgz",
- "integrity": "sha512-V61dZIeBwogg6hhZZUt0qL9hTp1WDhnsdjP++9fhTDr4vy/Gz8T5vibqT2LLg6lQC8i+Py33yOpMeMNjztaUaw==",
- "requires": {
- "eventemitter3": "4.0.4"
- }
- },
- "web3-core-requestmanager": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.3.4.tgz",
- "integrity": "sha512-xriouCrhVnVDYQ04TZXdEREZm0OOJzkSEsoN5bu4JYsA6e/HzROeU+RjDpMUxFMzN4wxmFZ+HWbpPndS3QwMag==",
- "requires": {
- "underscore": "1.9.1",
- "util": "^0.12.0",
- "web3-core-helpers": "1.3.4",
- "web3-providers-http": "1.3.4",
- "web3-providers-ipc": "1.3.4",
- "web3-providers-ws": "1.3.4"
- }
- },
- "web3-core-subscriptions": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.3.4.tgz",
- "integrity": "sha512-drVHVDxh54hv7xmjIm44g4IXjfGj022fGw4/meB5R2D8UATFI40F73CdiBlyqk3DysP9njDOLTJFSQvEkLFUOg==",
- "requires": {
- "eventemitter3": "4.0.4",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.3.4"
- }
- },
- "web3-eth": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.3.4.tgz",
- "integrity": "sha512-8OIVMLbvmx+LB5RZ4tDhXuFGWSdNMrCZ4HM0+PywQ08uEcmAcqTMFAn4vdPii+J8gCatZR501r1KdzX3SDLoPw==",
- "requires": {
- "underscore": "1.9.1",
- "web3-core": "1.3.4",
- "web3-core-helpers": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-core-subscriptions": "1.3.4",
- "web3-eth-abi": "1.3.4",
- "web3-eth-accounts": "1.3.4",
- "web3-eth-contract": "1.3.4",
- "web3-eth-ens": "1.3.4",
- "web3-eth-iban": "1.3.4",
- "web3-eth-personal": "1.3.4",
- "web3-net": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-eth-abi": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.3.4.tgz",
- "integrity": "sha512-PVSLXJ2dzdXsC+R24llIIEOS6S1KhG5qwNznJjJvXZFe3sqgdSe47eNvwUamZtCBjcrdR/HQr+L/FTxqJSf80Q==",
- "requires": {
- "@ethersproject/abi": "5.0.7",
- "underscore": "1.9.1",
- "web3-utils": "1.3.4"
- }
- },
- "web3-eth-accounts": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.3.4.tgz",
- "integrity": "sha512-gz9ReSmQEjqbYAjpmAx+UZF4CVMbyS4pfjSYWGAnNNI+Xz0f0u0kCIYXQ1UEaE+YeLcYiE+ZlZdgg6YoatO5nA==",
- "requires": {
- "crypto-browserify": "3.12.0",
- "eth-lib": "0.2.8",
- "ethereumjs-common": "^1.3.2",
- "ethereumjs-tx": "^2.1.1",
- "scrypt-js": "^3.0.1",
- "underscore": "1.9.1",
- "uuid": "3.3.2",
- "web3-core": "1.3.4",
- "web3-core-helpers": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-utils": "1.3.4"
- },
- "dependencies": {
- "eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
- }
- }
- },
- "web3-eth-contract": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.3.4.tgz",
- "integrity": "sha512-Fvy8ZxUksQY2ePt+XynFfOiSqxgQtMn4m2NJs6VXRl2Inl17qyRi/nIJJVKTcENLocm+GmZ/mxq2eOE5u02nPg==",
- "requires": {
- "@types/bn.js": "^4.11.5",
- "underscore": "1.9.1",
- "web3-core": "1.3.4",
- "web3-core-helpers": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-core-promievent": "1.3.4",
- "web3-core-subscriptions": "1.3.4",
- "web3-eth-abi": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-eth-ens": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.3.4.tgz",
- "integrity": "sha512-b0580tQyQwpV2wyacwQiBEfQmjCUln5iPhge3IBIMXaI43BUNtH3lsCL9ERFQeOdweB4o+6rYyNYr6xbRcSytg==",
- "requires": {
- "content-hash": "^2.5.2",
- "eth-ens-namehash": "2.0.8",
- "underscore": "1.9.1",
- "web3-core": "1.3.4",
- "web3-core-helpers": "1.3.4",
- "web3-core-promievent": "1.3.4",
- "web3-eth-abi": "1.3.4",
- "web3-eth-contract": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-eth-iban": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.3.4.tgz",
- "integrity": "sha512-Y7/hLjVvIN/OhaAyZ8L/hxbTqVX6AFTl2RwUXR6EEU9oaLydPcMjAx/Fr8mghUvQS3QJSr+UGubP3W4SkyNiYw==",
- "requires": {
- "bn.js": "^4.11.9",
- "web3-utils": "1.3.4"
- }
- },
- "web3-eth-personal": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.3.4.tgz",
- "integrity": "sha512-JiTbaktYVk1j+S2EDooXAhw5j/VsdvZfKRmHtXUe/HizPM9ETXmj1+ne4RT6m+950jQ7DJwUF3XU1FKYNtEDwQ==",
- "requires": {
- "@types/node": "^12.12.6",
- "web3-core": "1.3.4",
- "web3-core-helpers": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-net": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-net": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.3.4.tgz",
- "integrity": "sha512-wVyqgVC3Zt/0uGnBiR3GpnsS8lvOFTDgWZMxAk9C6Guh8aJD9MUc7pbsw5rHrPUVe6S6RUfFJvh/Xq8oMIQgSw==",
- "requires": {
- "web3-core": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-utils": "1.3.4"
- }
- },
- "web3-providers-http": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.3.4.tgz",
- "integrity": "sha512-aIg/xHXvxpqpFU70sqfp+JC3sGkLfAimRKTUhG4oJZ7U+tTcYTHoxBJj+4A3Id4JAoKiiv0k1/qeyQ8f3rMC3g==",
- "requires": {
- "web3-core-helpers": "1.3.4",
- "xhr2-cookies": "1.1.0"
- }
- },
- "web3-providers-ipc": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.3.4.tgz",
- "integrity": "sha512-E0CvXEJElr/TIlG1YfJeO3Le5NI/4JZM+1SsEdiPIfBUAJN18oOoum138EBGKv5+YaLKZUtUuJSXWjIIOR/0Ig==",
- "requires": {
- "oboe": "2.1.5",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.3.4"
- }
- },
- "web3-providers-ws": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.3.4.tgz",
- "integrity": "sha512-WBd9hk2fUAdrbA3kUyUk94ZeILtE6txLeoVVvIKAw2bPegx+RjkLyxC1Du0oceKgQ/qQWod8CCzl1E/GgTP+MQ==",
- "requires": {
- "eventemitter3": "4.0.4",
- "underscore": "1.9.1",
- "web3-core-helpers": "1.3.4",
- "websocket": "^1.0.32"
- }
- },
- "web3-shh": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.3.4.tgz",
- "integrity": "sha512-zoeww5mxLh3xKcqbX85irQbtFe5pc5XwrgjvmdMkhkOdZzPASlWOgqzUFtaPykpLwC3yavVx4jG5RqifweXLUA==",
- "requires": {
- "web3-core": "1.3.4",
- "web3-core-method": "1.3.4",
- "web3-core-subscriptions": "1.3.4",
- "web3-net": "1.3.4"
- }
- },
- "web3-utils": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.3.4.tgz",
- "integrity": "sha512-/vC2v0MaZNpWooJfpRw63u0Y3ag2gNjAWiLtMSL6QQLmCqCy4SQIndMt/vRyx0uMoeGt1YTwSXEcHjUzOhLg0A==",
- "requires": {
- "bn.js": "^4.11.9",
- "eth-lib": "0.2.8",
- "ethereum-bloom-filters": "^1.0.6",
- "ethjs-unit": "0.1.6",
- "number-to-bn": "1.7.0",
- "randombytes": "^2.1.0",
- "underscore": "1.9.1",
- "utf8": "3.0.0"
- },
- "dependencies": {
- "eth-lib": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
- "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
- "requires": {
- "bn.js": "^4.11.6",
- "elliptic": "^6.4.0",
- "xhr-request-promise": "^0.1.2"
- }
- }
- }
- },
- "websocket": {
- "version": "1.0.33",
- "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.33.tgz",
- "integrity": "sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA==",
- "requires": {
- "bufferutil": "^4.0.1",
- "debug": "^2.2.0",
- "es5-ext": "^0.10.50",
- "typedarray-to-buffer": "^3.1.5",
- "utf-8-validate": "^5.0.2",
- "yaeti": "^0.0.6"
- }
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
+ "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
},
- "which-boxed-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
- "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
- "requires": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- }
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
- "which-typed-array": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz",
- "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==",
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
- "available-typed-arrays": "^1.0.2",
- "call-bind": "^1.0.0",
- "es-abstract": "^1.18.0-next.1",
- "foreach": "^2.0.5",
- "function-bind": "^1.1.1",
- "has-symbols": "^1.0.1",
- "is-typed-array": "^1.1.3"
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
}
},
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
"ws": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
- "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
- "requires": {
- "async-limiter": "~1.0.0",
- "safe-buffer": "~5.1.0",
- "ultron": "~1.1.0"
- }
- },
- "xhr": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz",
- "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==",
- "requires": {
- "global": "~4.4.0",
- "is-function": "^1.0.1",
- "parse-headers": "^2.0.0",
- "xtend": "^4.0.0"
- }
- },
- "xhr-request": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz",
- "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==",
- "requires": {
- "buffer-to-arraybuffer": "^0.0.5",
- "object-assign": "^4.1.1",
- "query-string": "^5.0.1",
- "simple-get": "^2.7.0",
- "timed-out": "^4.0.1",
- "url-set-query": "^1.0.0",
- "xhr": "^2.0.4"
- }
- },
- "xhr-request-promise": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz",
- "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==",
- "requires": {
- "xhr-request": "^1.1.0"
- }
- },
- "xhr2-cookies": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz",
- "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=",
- "requires": {
- "cookiejar": "^2.1.1"
- }
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- },
- "yaeti": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
- "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc="
- },
- "yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
+ "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w=="
}
}
}
diff --git a/package.json b/package.json
index 95f1158..0ebbc18 100644
--- a/package.json
+++ b/package.json
@@ -17,8 +17,9 @@
"start": "node src/main/Main.js"
},
"dependencies": {
- "discord.js": "^12.5.1",
- "web3": "^1.3.4"
+ "axios": "^0.23.0",
+ "discord.js": "^12.5.3",
+ "ethers": "^5.5.1"
},
"license": "MIT"
}
diff --git a/src/main/DiscordBot.js b/src/main/DiscordBot.js
deleted file mode 100644
index d87f9ab..0000000
--- a/src/main/DiscordBot.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const { Client, MessageEmbed } = require('discord.js');
-
-const DiscordBot = {
- client: new Client(),
-
- login(token) {
- console.log('DiscordBot: Logging in ...');
- DiscordBot.client.login(token);
- return new Promise((resolve, reject) => {
- DiscordBot.client.on('ready', resolve);
- });
- },
-
- makeEmbed(embedObject) {
- let embed = new MessageEmbed()
- .setTitle(embedObject.Title)
- .setColor(embedObject.Color)
- .setTimestamp()
- .setDescription(embedObject.Description);
- if (embedObject.Fields != undefined) {
- embedObject.Fields.forEach( (element) => {
- embed.addField(element.name,element.value,true)
- });
- };
- if (embedObject.Thumbnail != undefined) {
- embed.setThumbnail(embedObject.Thumbnail);
- };
- if (embedObject.Footer != undefined) {
- embed.setFooter(embedObject.Footer);
- }
- if (embedObject.URL != undefined) {
- embed.setURL(embedObject.URL);
- }
- return embed;
- },
-
- sendMessage(message, channelId) {
- console.log('DiscordBot: Sending message ...');
- DiscordBot.client.channels.cache.get(channelId).send(message);
- },
-
-};
-
-
-
-module.exports = DiscordBot;
diff --git a/src/main/Main.js b/src/main/Main.js
index 687a586..399d7ea 100644
--- a/src/main/Main.js
+++ b/src/main/Main.js
@@ -1,82 +1,467 @@
+const { doOptimize } = require('./Optimizer');
const CONFIG = require('../../config/Config');
const ABI = require('../../config/abi.json');
-const Web3 = require('web3');
-const web3 = new Web3(new Web3.providers.HttpProvider('https://api.avax.network/ext/bc/C/rpc'));
const Util = require('./Util');
-const DiscordBot = require('./DiscordBot');
-const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
-const WAVAX_ADDRESS = '0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7';
-const PNG_ADDRESS = '0x60781c2586d68229fde47564546784ab3faca982';
-const DAI_ADDRESS = '0xba7deebbfc5fa1100fb055a87773e1e99cd3507a';
+const { WANTS, OPTIMIZER_POOLS } = require('../../config/Wants');
+const VALUATION = require('../../config/Valuation');
+const {
+ ZERO_ADDRESS,
+ WAVAX_ADDRESS,
+ PNG_ADDRESS,
+ JOE_ADDRESS,
+ BENQI_ADDRESS,
+ MAX_GAS_LIMIT_EARN,
+ MAX_GAS_LIMIT_LEV,
+ MAX_GAS_LIMIT_HARV,
+ MAX_GAS_PRICE,
+ PROVIDERS_URL,
+ AXIAL_ADDRESS,
+ MIN_APR_TO_LEVERAGE,
+ TEDDY_ADDRESS,
+ TJ_MASTERCHEF,
+ AXIAL_MASTERCHEF,
+ QI_ADDRESS,
+ RETRY_TXS,
+ PTP_ADDRESS,
+ MIN_TVL_TO_HARVEST_FOLDING
+} = require('../../config/Constants');
+const { ethers } = require('ethers');
+const Config = require('../../config/Config');
+
+var provider, signer, currentBlockNumber, blocksDaily;
+var masterchefPoolIds = [];
+var minichefRewarders = [];
// Authenticate our wallet
if (CONFIG.EXECUTION.ENABLED) {
- web3.eth.accounts.wallet.add(CONFIG.WALLET.KEY);
console.log(`WARNING!! Test mode is disabled. Real harvesting might begin!!`);
}
+const selectBestProvider = async () => {
+
+ for (const url of PROVIDERS_URL) {
+ const currentProvider = new ethers.providers.
+ StaticJsonRpcProvider(url);
+
+ //do a quick call to check if the node is sync
+ try {
+ //avalanche burn address
+ await currentProvider.getBalance('0x0100000000000000000000000000000000000000');
+ return currentProvider;
+ } catch (error) {
+ console.error(error);
+ }
+ }
+ if (!provider) {
+ throw Error("Can't stabilish connection with the blockchain.");
+ }
+}
+
// Globals to manage consistent scheduling with a window of variance
// Do not touch these :)
let executionWindowCenter = Date.now();
let executionDrift = 0;
-// Manually trigger first harvest cycle
-DiscordBot.login(CONFIG.DISCORD.TOKEN).then(harvest);
+//if execution is enabled it makes a window, if not it just harvests in testmode
+const scheduledHarvest =
+ CONFIG.EXECUTION.ENABLED && CONFIG.EXECUTION.CONTAINER_MODE
+ ? scheduleNextHarvest
+ : harvest;
+scheduledHarvest();
-function harvest() {
- initHarvests()
- .then(addRequirements)
+async function harvest() {
+ const harvests = await initHarvests();
+ await addRequirements(harvests)
.then(addCalculations)
- .then(addTx)
- .then(addGas)
+ .then(addEarnTx)
+ .then(addHarvestTx)
+ .then(addLeverageTx)
+ .then(addDeleverageTx)
.then(addDecisions)
.then(doHarvesting)
.then(doEarning)
- .then(scheduleNextHarvest)
+ .then(doLeveraging)
+ .then(doSync)
+ .then(doDeleveraging)
+ .then(sendDiscord)
+ .then(async () => { await doOptimize(signer) })
+ .then(() => {
+ if (CONFIG.EXECUTION.CONTAINER_MODE) {
+ process.exit();
+ } else {
+ scheduleNextHarvest();
+ }
+ })
.catch(handleError);
}
-async function initHarvests() {
- const harvests = [];
+async function getSnowglobes() {
+ const gauge_proxy = new ethers.Contract(WANTS.GAUGE_PROXY_ADDRESS, ABI.GAUGE_PROXY, signer);
- const gasPrice = await web3.eth.getGasPrice();
+ const pools = await gauge_proxy.tokens();
- for (const [wantAddress, friendlyName] of Object.entries(CONFIG.WANTS)) {
- const { controller, want, snowglobe, strategy } = await initializeContracts(CONFIG.CONTROLLERS, wantAddress);
- const snowglobeSymbol = await snowglobe.methods.symbol().call();
- const wantSymbol = await want.methods.symbol().call();
- const wantDecimals = parseInt(await want.methods.decimals().call());
+ return [
+ // remove omitted overrides
+ ...pools.filter(pool => !WANTS.OVERRIDE_OMIT.includes(pool)),
- harvests.push({
- name: friendlyName,
- controller,
- want,
- wantSymbol,
- wantDecimals,
- snowglobe,
- snowglobeSymbol,
- strategy,
- gasPrice,
+ // append add overrides
+ ...WANTS.OVERRIDE_ADD,
+ ];
+}
+
+async function initHarvests(retrys = 0) {
+ provider = await selectBestProvider();
+ signer = new ethers.Wallet(CONFIG.WALLET.KEY, provider);
+
+ const gasPrice = await provider.getGasPrice();
+ //we shouldnt harvest if the gas price is too high
+ if (gasPrice > MAX_GAS_PRICE) {
+ if (retrys > 35) { //try 6 hours
+ throw new Error("Tried too many times, aborting.");
+ }
+ console.log("Gas too high, awaiting 10min before trying again.");
+ await Util.wait(600000); //wait 10 minutes
+ return initHarvests(retrys += 1);
+ }
+
+ const getBlocks24h = async (currentBlockNumber) => {
+ let currentBlock, yesterdayBlock;
+ await Promise.all([
+ provider.getBlock(currentBlockNumber),
+ provider.getBlock(currentBlockNumber - 20000)
+ ]).then(res => {
+ currentBlock = res[0]
+ yesterdayBlock = res[1]
+ });
+
+ const secondsInDay = 86400;
+
+ return ((secondsInDay / (currentBlock.timestamp - yesterdayBlock.timestamp)) * 20000) * 0.85;
+ }
+
+ currentBlockNumber = await provider.getBlockNumber();
+ blocksDaily = Math.floor(await getBlocks24h(currentBlockNumber));
+
+ const snowglobes = await getSnowglobes();
+
+ const handleRejection = (snowglobe, err) => {
+ console.error(`Could not initialize contracts for snowglobe (${Util.cchainAddressLink(snowglobe)})`);
+ console.error(err);
+ };
+
+ const masterchefs = [AXIAL_MASTERCHEF, TJ_MASTERCHEF];
+ const pangolinMinichef = '0x1f806f7C8dED893fd3caE279191ad7Aa3798E928';
+
+ for (const address of masterchefs) {
+ const mcContract = new ethers.Contract(address, ABI.MASTERCHEF_V3, signer);
+ const poolLength = await mcContract.poolLength();
+
+ let arrayPoolInfo = [];
+ for (let i = 0; i < poolLength; i++) {
+ const poolInfo = await mcContract.poolInfo(i);
+ arrayPoolInfo.push(poolInfo);
+ }
+ masterchefPoolIds.push(arrayPoolInfo);
+ }
+
+ const pangolinMinichefContract = new ethers.Contract(pangolinMinichef, ABI.MINICHEF_V2, signer);
+ const minichefLpTokens = await pangolinMinichefContract.lpTokens();
+ for (let i = 0; i < minichefLpTokens.length; i++) {
+ const rewarderAddress = await pangolinMinichefContract.rewarder(i);
+ minichefRewarders.push({
+ rewarderAddress,
+ address: minichefLpTokens[i],
});
}
- return harvests;
+ const results = [];
+ for (const snowglobeAddress of snowglobes) {
+ try {
+ const { controller, want, snowglobe, strategy, type, wantAddress, strategyName } = await initializeContracts(WANTS.CONTROLLERS, snowglobeAddress);
+ const snowglobeSymbol = await snowglobe.symbol();
+ const wantSymbol = await want.symbol();
+ const wantDecimals = parseInt(await want.decimals());
+
+ let name;
+ switch (type) {
+ case "LP":
+ const token0_addr = await want.token0();
+ const token1_addr = await want.token1();
+ const token0 = new ethers.Contract(token0_addr, ABI.ERC20, signer);
+ const token1 = new ethers.Contract(token1_addr, ABI.ERC20, signer);
+ const token0_name = await token0.symbol();
+ const token1_name = await token1.symbol();
+ name = `${token0_name}-${token1_name}`;
+ break;
+ default:
+ name = wantSymbol;
+ break;
+ }
+
+ results.push({
+ name,
+ strategyName,
+ type,
+ controller,
+ want,
+ wantSymbol,
+ wantDecimals,
+ wantAddress,
+ snowglobe,
+ snowglobeSymbol,
+ strategy,
+ gasPrice,
+ });
+ } catch (error) {
+ console.log(error.message);
+ }
+ };
+ return results;
}
-function addRequirements(harvests) {
- const addHarvestFees = async (harvest) => ({
- ...harvest,
- harvestable: web3.utils.toBN(await harvest.strategy.methods.getHarvestable().call()),
- treasuryFee: web3.utils.toBN(await harvest.strategy.methods.performanceTreasuryFee().call()),
- treasuryMax: web3.utils.toBN(await harvest.strategy.methods.performanceTreasuryFee().call()),
- balance: web3.utils.toBN(await harvest.snowglobe.methods.balance().call()),
- available: web3.utils.toBN(await harvest.snowglobe.methods.available().call()),
- priceWAVAX: await estimatePriceOfAsset(WAVAX_ADDRESS, 18),
- pricePNG: await estimatePriceOfAsset(PNG_ADDRESS, 18),
- priceWant: await getPoolShareAsUSD(harvest.want),
- });
- return Promise.all(harvests.map(addHarvestFees))
+async function addRequirements(harvests) {
+ const priceMap = async (harvest, isAxial, isPlatypus) => {
+ if (isAxial) {
+ return await estimatePriceOfAsset(AXIAL_ADDRESS, 18);
+ }
+
+ if (isPlatypus) {
+ return await estimatePriceOfAsset(PTP_ADDRESS, 18);
+ }
+
+ switch (harvest.wantSymbol) {
+ case 'PGL': case 'PNG': return await estimatePriceOfAsset(PNG_ADDRESS, 18);
+ case 'JLP': return await estimatePriceOfAsset(JOE_ADDRESS, 18);
+ case 'xJOE': return await estimatePriceOfAsset(JOE_ADDRESS, 18);
+ }
+
+ switch (harvest.type) {
+ case 'BENQI':
+ return await estimatePriceOfAsset(BENQI_ADDRESS, 18);
+ case 'BANKER':
+ return await estimatePriceOfAsset(JOE_ADDRESS, 18);
+ case 'AAVE':
+ return await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
+ case 'TEDDY':
+ return await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
+ default:
+ return await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
+ }
+ }
+
+ const rewardMap = (harvest, isAxial, isPlatypus) => {
+ if (isAxial) {
+ return {
+ symbol: "AXIAL",
+ address: AXIAL_ADDRESS
+ };
+ }
+
+ if (isPlatypus) {
+ return {
+ symbol: "PTP",
+ address: PTP_ADDRESS
+ };
+ }
+
+ switch (harvest.type) {
+ case 'BENQI':
+ return {
+ symbol: "QI",
+ address: QI_ADDRESS
+ };
+ case 'AAVE':
+ return {
+ symbol: "WAVAX",
+ address: WAVAX_ADDRESS
+ };
+ case 'BANKER':
+ return {
+ symbol: "JOE",
+ address: JOE_ADDRESS
+ };
+ case 'TEDDY':
+ return {
+ symbol: "WAVAX",
+ address: WAVAX_ADDRESS
+ };
+ }
+ switch (harvest.wantSymbol) {
+ case 'PGL': case 'PNG': return {
+ symbol: "PNG",
+ address: PNG_ADDRESS
+ };
+ case 'JLP': return {
+ symbol: "JOE",
+ address: JOE_ADDRESS
+ };
+ default: return {
+ symbol: harvest.wantSymbol,
+ address: harvest.wantAddress
+ };
+ }
+ };
+
+ const addHarvestFees = async (harvest) => {
+ let isAxial = false;
+ let isPlatypus = false;
+ let masterchefPlatypus;
+
+ try {
+ masterchefPlatypus = await harvest.strategy.masterChefPlatypus();
+ isPlatypus = true;
+ } catch (error) {
+ //not platypus pool
+ }
+
+ try {
+ await harvest.strategy.masterChefAxialV3();
+ isAxial = true;
+ } catch (error) {
+ //not axial pool
+ }
+
+ if (!priceMap(harvest, isAxial, isPlatypus) ||
+ !rewardMap(harvest, isAxial, isPlatypus)) {
+ throw new Error(`Unknown symbol: ${harvest.wantSymbol}`);
+ }
+
+ let harvestable;
+ let harvestOverride = false;
+
+ //account for extra rewards
+ try {
+ if (harvest.type === "AAVE") {
+ harvestable = await harvest.strategy.getWavaxAccrued();
+ } else {
+ harvestable = await harvest.strategy.getHarvestable();
+
+ try {
+ const harvestedToken = rewardMap(harvest, isAxial, isPlatypus);
+ const tokenContract = new ethers.Contract(harvestedToken.address, ABI.ERC20, signer);
+ const storedToken = await tokenContract.balanceOf(harvest.strategy.address);
+ harvestable = harvestable.add(storedToken);
+ } catch (error) {
+ console.error("Error fetching strategy balance.")
+ console.error(error);
+ }
+
+ }
+ } catch (err) {
+ // This fails for certain strategies where the strategy lacks a `rewarder`
+ // Assuming the harvest should happen for now
+ harvestable = ethers.BigNumber.from("0");
+ harvestOverride = true;
+ }
+
+ let bonusTokens = [];
+ try {
+ let masterchefAddress, poolInfo;
+ if (harvest.strategyName.startsWith("StrategyJoe")) {
+ masterchefAddress = TJ_MASTERCHEF;
+ poolInfo = getPoolInfo(harvest.wantAddress, masterchefAddress);
+
+ } else if (harvest.strategyName.startsWith("StrategyAxial")) {
+ masterchefAddress = AXIAL_MASTERCHEF;
+ poolInfo = getPoolInfo(harvest.wantAddress, masterchefAddress);
+ }
+
+ if (poolInfo && poolInfo.poolId > -1) {
+ const masterchefContract = new ethers.Contract(masterchefAddress, ABI.MASTERCHEF_V3, signer);
+ const strategyInfo = await masterchefContract.pendingTokens(poolInfo.poolId, harvest.strategy.address);
+ const addressBonusToken = strategyInfo.bonusTokenAddress;
+
+ if (strategyInfo.pendingBonusToken.gt("0x0")) {
+ const bonusTokenContract = new ethers.Contract(addressBonusToken, ABI.ERC20, signer);
+ const balanceOfRewarder = await bonusTokenContract.balanceOf(poolInfo.poolInfo.rewarder);
+ if (balanceOfRewarder.gt("0x0")) {
+ let harvestableBonusToken = strategyInfo.pendingBonusToken;
+ const decimalsBonusToken = await bonusTokenContract.decimals();
+ const balanceOfStrategy = await bonusTokenContract.balanceOf(harvest.strategy.address);
+
+ harvestableBonusToken = harvestableBonusToken.add(balanceOfStrategy);
+ const bonusRewardPrice = await estimatePriceOfAsset(addressBonusToken, decimalsBonusToken);
+
+ bonusTokens.push(
+ {
+ decimals: decimalsBonusToken,
+ address: addressBonusToken,
+ harvestable: harvestableBonusToken,
+ price: bonusRewardPrice
+ }
+ )
+ }
+ }
+ }
+
+ if (harvest.strategyName.startsWith("StrategyPng")) {
+ const poolIndex = minichefRewarders.findIndex(o => o.address.toLowerCase() === harvest.wantAddress.toLowerCase());
+
+ if (poolIndex > -1 && minichefRewarders[poolIndex].rewarderAddress !== ZERO_ADDRESS) {
+ const rewarderContract = new ethers.Contract(minichefRewarders[poolIndex].rewarderAddress, ABI.PANGOLIN_REWARDER, signer);
+ const extraMultipliers = await rewarderContract.getRewardMultipliers();
+ const addressBonusTokens = await rewarderContract.getRewardTokens();
+
+ for (let i = 0; i < extraMultipliers.length; i++) {
+ const extraMultiplier = extraMultipliers[i];
+
+ if (harvestable > 0 && extraMultiplier > 0) {
+ const addressBonusToken = addressBonusTokens[i];
+ let harvestableBonusToken = harvestable.mul(extraMultiplier).div("1" + "0".repeat(18));
+
+ const bonusTokenContract = new ethers.Contract(addressBonusToken, ABI.ERC20, signer);
+ const balanceOfRewarder = await bonusTokenContract.balanceOf(minichefRewarders[poolIndex].rewarderAddress);
+
+ if (balanceOfRewarder.gt("0x0")) {
+ const decimalsBonusToken = await bonusTokenContract.decimals();
+ const balanceOfStrategy = await bonusTokenContract.balanceOf(harvest.strategy.address);
+ harvestableBonusToken = harvestableBonusToken.add(balanceOfStrategy);
+ const bonusRewardPrice = await estimatePriceOfAsset(addressBonusToken, decimalsBonusToken);
+
+ bonusTokens.push({
+ address: addressBonusToken,
+ harvestable: harvestableBonusToken,
+ decimals: decimalsBonusToken,
+ price: bonusRewardPrice
+ })
+ }
+ }
+ }
+ }
+ }
+
+ } catch (error) {
+ console.error(error);
+ }
+
+ var keep, keepMax;
+ try {
+ keep = ethers.BigNumber.from(await harvest.strategy.keep());
+ keepMax = ethers.BigNumber.from(await harvest.strategy.keepMax());
+ } catch (error) {
+ //old strategy
+ }
+ return {
+ ...harvest,
+ harvestable,
+ harvestOverride,
+ harvestSymbol: rewardMap(harvest, isAxial, isPlatypus).symbol,
+ keep,
+ keepMax,
+ treasuryFee: ethers.BigNumber.from(await harvest.strategy.performanceTreasuryFee()),
+ treasuryMax: ethers.BigNumber.from(await harvest.strategy.performanceTreasuryMax()),
+ balance: await harvest.snowglobe.balance(),
+ available: await harvest.snowglobe.available(),
+ priceWAVAX: await priceMap({ type: 'ERC20', wantSymbol: 'WAVAX' }),
+ rewardPrice: await priceMap(harvest, isAxial, isPlatypus),
+ priceWant: harvest.type === 'LP'
+ ? await getPoolShareAsUSD(harvest.want)
+ : await estimatePriceOfAsset(harvest.wantAddress, harvest.wantDecimals, isAxial, isPlatypus),
+ bonusTokens
+ }
+ };
+ return await Promise.all(harvests.map(addHarvestFees))
.catch(err => {
console.error(`Error fetching requirements from strategy`);
throw err;
@@ -84,183 +469,491 @@ function addRequirements(harvests) {
}
function addCalculations(harvests) {
- const addHarvestGain = async (harvest) => ({
- ...harvest,
- gainWAVAX: harvest.harvestable.mul(harvest.pricePNG).div(harvest.priceWAVAX),
- gainUSD: harvest.harvestable.mul(harvest.pricePNG).div(Util.offset(18)),
- ratio: harvest.available.muln(100).div(harvest.balance),
- availableUSD: harvest.available.mul(harvest.priceWant).div(Util.offset(harvest.wantDecimals)),
- });
- return Promise.all(harvests.map(addHarvestGain))
- .catch(err => {
- console.error(`Error adding calculations`);
- throw err;
- });
+ const addHarvestGain = (harvest) => {
+ let gainWAVAX = harvest.harvestable.mul(harvest.rewardPrice).div(harvest.priceWAVAX);
+ let gainUSD = harvest.harvestable.mul(harvest.rewardPrice).div(Util.offset(18));
+
+ try {
+ const bonusTokens = harvest.bonusTokens;
+ for (const bonusToken of bonusTokens) {
+ if (bonusToken.address && bonusToken.harvestable && bonusToken.price) {
+ const gainWAVAXBonus = bonusToken.harvestable.mul(bonusToken.price).div(harvest.priceWAVAX);
+ const gainUSDBonus = bonusToken.harvestable.mul(bonusToken.price).div(Util.offset(18));
+
+ gainWAVAX = gainWAVAX.add(gainWAVAXBonus);
+ gainUSD = gainUSD.add(gainUSDBonus);
+ }
+ }
+ } catch (error) {
+ console.error(error);
+ }
+
+ const ratio = harvest.balance.isZero() ? ethers.BigNumber.from(100) : harvest.available.mul(100).div(harvest.balance);
+ const adjust = (harvest.wantDecimals - 18);
+ const availableUSD = harvest.available.mul(harvest.priceWant).div(Util.offset(18 + adjust));
+
+ return {
+ gainWAVAX,
+ gainUSD,
+ ratio,
+ availableUSD,
+ ...harvest,
+ }
+ };
+ return harvests.map(addHarvestGain);
}
-function addTx(harvests) {
- const addHarvestTx = async (harvest) => ({
- ...harvest,
- harvestTx: harvest.strategy.methods.harvest(),
- earnTx: harvest.snowglobe.methods.earn(),
- });
- return Promise.all(harvests.map(addHarvestTx))
- .catch(err => {
- console.error(`Error adding tx`);
- throw err;
- });
+async function addEarnTx(harvests) {
+ const addTx = async (harvest) => {
+ const earnTx = harvest.snowglobe.earn;
+ const snowglobeUnsigned = new ethers.Contract(harvest.snowglobe.address, ABI.SNOWGLOBE, provider);
+ const estGas = await snowglobeUnsigned.estimateGas.earn({ from: CONFIG.WALLET.ADDRESS });
+ const earnGas = estGas > MAX_GAS_LIMIT_EARN ? estGas : MAX_GAS_LIMIT_EARN;
+ return {
+ ...harvest,
+ earnTx,
+ earnGas: ethers.BigNumber.from(earnGas),//await earnTx.estimateGas({from: CONFIG.WALLET.ADDRESS}),
+ };
+ };
+ const handleRejection = (harvest, err) => {
+ console.error(`Skipping ${harvest.name} due to earn() error (snowglobe: ${harvest.snowglobe.address})`);
+ console.error(err);
+ };
+ return Promise.allSettled(harvests.map(addTx))
+ .then(results => handleSettledPromises(results, harvests, handleRejection));
}
-async function addGas(harvests) {
- const addHarvestGas = async (harvest) => ({
- ...harvest,
- harvestGas: await harvest.harvestTx.estimateGas({from: CONFIG.WALLET.ADDRESS}),
- earnGas: await harvest.earnTx.estimateGas({from: CONFIG.WALLET.ADDRESS}),
- });
- return Promise.all(harvests.map(addHarvestGas))
- .catch(err => {
- console.error(`Error adding gas`);
- throw err;
- });
+async function addHarvestTx(harvests) {
+ const addTx = async (harvest) => {
+ const harvestTx = harvest.strategy.harvest;
+ const strategyUnsigned = new ethers.Contract(harvest.strategy.address, ABI.STRATEGY, provider);
+ const estGas = await strategyUnsigned.estimateGas.harvest({ from: CONFIG.WALLET.ADDRESS });
+ const harvestGas = estGas > MAX_GAS_LIMIT_HARV ? estGas : MAX_GAS_LIMIT_HARV;
+ //avoid rate limiting by snowtrace
+ await Util.wait(Math.floor((300000*Math.random())));
+ const harvestedLast24h = await ran24h(harvest.strategy.address, "0x4641257d");
+ console.log(harvestedLast24h, harvest.strategy.address);
+ return {
+ ...harvest,
+ harvestTx,
+ harvestedLast24h,
+ harvestGas: ethers.BigNumber.from(harvestGas),//await harvestTx.estimateGas({from: CONFIG.WALLET.ADDRESS}),
+ };
+ };
+ const handleRejection = (harvest, err) => {
+ console.error(`Skipping ${harvest.name} due to harvest() error (strategy: ${Util.cchainAddressLink(harvest.strategy.address)})`);
+ console.error(err);
+ };
+ return Promise.allSettled(harvests.map(addTx))
+ .then(results => handleSettledPromises(results, harvests, handleRejection));
+}
+
+async function addLeverageTx(harvests) {
+ const addTx = async (harvest) => {
+ if (harvest.type === 'BENQI' || harvest.type === 'AAVE' || harvest.type === 'BANKER') {
+ try {
+ //test if the strategy can be leveraged
+ await harvest.strategy.getMaxLeverage();
+
+ const leverageTx = harvest.strategy.leverageToMax;
+ const strategyUnsigned = new ethers.Contract(harvest.strategy.address, ABI.STRATEGY, provider);
+ const estGas = await strategyUnsigned.estimateGas.leverageToMax({ from: CONFIG.WALLET.ADDRESS });
+ const leverageGas = estGas > MAX_GAS_LIMIT_LEV ? estGas : MAX_GAS_LIMIT_LEV;
+ return {
+ ...harvest,
+ leverageTx,
+ leverageGas: ethers.BigNumber.from(leverageGas), //await leverageTx.estimateGas({from: CONFIG.WALLET.ADDRESS}),
+ }
+ } catch (error) {
+ console.log(harvest.name, "Leverage");
+ console.log(error.message);
+ //cant be leveraged
+ return { ...harvest };
+ }
+ } else {
+ return { ...harvest };
+ }
+ }
+
+ const handleRejection = (harvest, err) => {
+ console.error(`Skipping ${harvest.name} due to leverageToMax() error (strategy: ${Util.cchainAddressLink(harvest.strategy.address)})`);
+ console.error(err);
+ };
+ return Promise.allSettled(harvests.map(addTx))
+ .then(results => handleSettledPromises(results, harvests, handleRejection));
+}
+
+async function addDeleverageTx(harvests) {
+ const addTx = async (harvest) => {
+ if (harvest.type === 'BENQI' || harvest.type === 'AAVE' || harvest.type === 'BANKER') {
+ try {
+ //test if the strategy can be leveraged
+ await harvest.strategy.getMaxLeverage();
+
+ const strategyUnsigned = new ethers.Contract(harvest.strategy.address, ABI.STRATEGY, provider);
+ const unleveragedSupply = await strategyUnsigned.callStatic["getSuppliedUnleveraged()"]({ from: CONFIG.WALLET.ADDRESS, gasLimit: 7_000_000 });
+ const idealSupply = await strategyUnsigned.callStatic["getLeveragedSupplyTarget(uint256)"](unleveragedSupply, { from: CONFIG.WALLET.ADDRESS, gasLimit: 7_000_000 });
+
+ const optimizedIndex = OPTIMIZER_POOLS.findIndex(
+ o => o.snowglobe.toLowerCase() === harvest.snowglobe.address.toLowerCase()
+ );
+
+ let optimizedPool;
+ if (optimizedIndex > -1) {
+ optimizedPool = OPTIMIZER_POOLS[optimizedIndex].contracts.find(
+ o => o.strategy.toLowerCase() === harvest.strategy.address.toLowerCase()
+ )
+ }
+
+ const snowglobeAddr = optimizedPool ? optimizedPool.fixedSnowglobe : harvest.snowglobe.address;
+
+ const poolState = await Util.getPoolAPIInfo(snowglobeAddr);
+ const deposited = await strategyUnsigned.balanceOfPool();
+ const supplied = await strategyUnsigned.getSuppliedView();
+ const currLev = supplied / deposited;
+
+ const notSafe = await strategyUnsigned.callStatic["sync()"]({ from: CONFIG.WALLET.ADDRESS, gasLimit: 7_000_000 });
+ const estGasSync = await strategyUnsigned.estimateGas.sync({ from: CONFIG.WALLET.ADDRESS });
+ const estGasDeleverageToMin = await strategyUnsigned.estimateGas.deleverageToMin({ from: CONFIG.WALLET.ADDRESS });
+
+ const syncTx = harvest.strategy.sync;
+ const deleverageTx = harvest.strategy.deleverageUntil;
+
+ const syncGas = estGasSync > MAX_GAS_LIMIT_HARV ? estGasSync : MAX_GAS_LIMIT_HARV;
+ const deleverageGas = estGasDeleverageToMin > MAX_GAS_LIMIT_HARV ? estGasDeleverageToMin : MAX_GAS_LIMIT_HARV;
+ return {
+ ...harvest,
+ syncTx,
+ deleverageTx,
+ unleveragedSupply,
+ idealSupply,
+ notSafe,
+ syncGas: ethers.BigNumber.from(syncGas),
+ deleverageGas: ethers.BigNumber.from(deleverageGas),
+ currLev,
+ poolState
+ }
+ } catch (error) {
+ console.log(harvest.name, "Deleverage");
+ console.log(error.message);
+ //cant be synced or deleveraged
+ return { ...harvest };
+ }
+ } else {
+ return { ...harvest };
+ }
+ }
+
+ const handleRejection = (harvest, err) => {
+ console.error(`Skipping ${harvest.name} due to sync() error (strategy: ${Util.cchainAddressLink(harvest.strategy.address)})`);
+ console.error(err);
+ };
+ return Promise.allSettled(harvests.map(addTx))
+ .then(results => handleSettledPromises(results, harvests, handleRejection));
}
function addDecisions(harvests) {
const addHarvestDecision = (harvest) => {
console.log(`Determining execution decisions for ${harvest.name}`);
- const cost = web3.utils.toBN(harvest.harvestGas).mul(web3.utils.toBN(harvest.gasPrice));
- const gain = harvest.gainWAVAX.mul(harvest.treasuryFee).div(harvest.treasuryMax);
- const FIVE_THOUSAND_USD = web3.utils.toBN('5000' + '0'.repeat(18));
- const harvestDecision = cost.lt(gain);
+ const cost = harvest.harvestGas.mul(harvest.gasPrice);
+ var gain;
+ if (harvest.treasuryFee.gt("0x0")) {
+ gain = harvest.gainWAVAX.mul(harvest.treasuryFee).div(harvest.treasuryMax);
+ } else {
+ gain = harvest.gainWAVAX.mul(harvest.keep).div(harvest.keepMax);
+ }
+ const ONE_THOUSAND_USD = ethers.BigNumber.from('1000' + '0'.repeat(18));
+ const isFolding = (harvest.type === "BANKER" || harvest.type === "AAVE" || harvest.type === "BENQI");
+
+ let harvestDecision = (cost.lt(gain)
+ || harvest.harvestOverride
+ || (isFolding && harvest.poolState
+ && !harvest.poolState.deprecated
+ && harvest.poolState.tvlStaked > MIN_TVL_TO_HARVEST_FOLDING)
+ || harvest.name === "QI")
+ && !harvest.harvestedLast24h //added QI manually because the benqi rewarder contract have a bad view of pending rewards
+
+ if (harvest.harvestOverride && !cost.lt(gain)) {
+ console.log(`Harvest decision overridden by flag!`);
+ }
+
+ let earnDecision = harvest.ratio.gte(1) && harvest.availableUSD.gt(ONE_THOUSAND_USD);
+
+ let leverageDecision = false, syncDecision = false, deleverageDecision = false;
+ if (harvest.leverageTx && harvest.syncTx && harvest.deleverageTx) {
+ //if it's not safe we want to drop some of leveraging
+ if (harvest.poolState) {
+ const shouldLeverage = (harvest.poolState.dailyAPR > MIN_APR_TO_LEVERAGE
+ && !harvest.poolState.deprecated
+ && harvest.poolState.tvlStaked > MIN_TVL_TO_HARVEST_FOLDING
+ );
+ console.log(harvest.currLev, harvest.notSafe, harvest.poolState.dailyAPR, MIN_APR_TO_LEVERAGE)
+ if (harvest.currLev > 1.2 && !shouldLeverage) {
+ //we shouldn't be leveraging this pool!
+ deleverageDecision = true;
+ }
+ syncDecision = (!deleverageDecision && harvest.notSafe);
+
+ if (!deleverageDecision && !syncDecision && shouldLeverage) {
+ if (harvest.unleveragedSupply.lte(harvest.idealSupply)) {
+ //if it's safe we gonna leverage
+ leverageDecision = true;
+ }
+ }
+ } else {
+ if (harvest.currLev > 1.2) {
+ //if can't find the pool just deleverage stuff for safety
+ deleverageDecision = true;
+ }
+ }
+ }
+ console.log(harvest.type, harvest.name, gain / 1e18, cost / 1e18);
console.log(`Harvest decision: ${harvestDecision}`);
- const earnDecision = harvest.ratio.gten(1) && harvest.availableUSD.gt(FIVE_THOUSAND_USD);
console.log(`Earn decision: ${earnDecision}`);
+ console.log(`Leverage decision: ${leverageDecision}`);
+ console.log(`Sync decision: ${syncDecision}`);
+ console.log(`Deleverage decision: ${deleverageDecision}`);
return {
...harvest,
harvestDecision,
earnDecision,
+ leverageDecision,
+ deleverageDecision,
+ syncDecision
};
};
- return harvests.map(addHarvestDecision);
+ return harvests.map(obj => addHarvestDecision(obj));
}
+const executeTx = async (harvest, decision, tx, type, params = [], lastTry = 0) => {
+ if (!decision) return null;
+ if (!CONFIG.EXECUTION.ENABLED) return console.log(`Would ${type} strategy ${harvest.name} (${harvest.strategy.address}). Set CONFIG.EXECUTION.ENABLED to enable harvesting`);
+ console.log(`${type} strategy address: ${harvest.strategy.address} (${harvest.name}) ...`);
+ try {
+ //add extra gas to be safe
+ const plusGas = ethers.utils.parseUnits("5", 9);
+ const gasPrice = (await provider.getGasPrice()).add(plusGas);
+ let transaction
+ if (params.length > 0) {
+ transaction = await tx(...params, { gasLimit: 7_000_000, gasPrice: gasPrice });
+ } else {
+ transaction = await tx({ gasLimit: 7_000_000, gasPrice: gasPrice });
+ }
+ const finishedTx = await transaction.wait(1);
+ return finishedTx;
+ } catch (error) {
+ console.log(error.message);
+ if (RETRY_TXS > lastTry) {
+ return executeTx(harvest, decision, tx, type, params, lastTry += 1)
+ }
+ return null;
+ }
+};
async function doHarvesting(harvests) {
- let nonce = await web3.eth.getTransactionCount(CONFIG.WALLET.ADDRESS);
- const executeHarvestTx = async (harvest) => {
- if (!harvest.harvestDecision) return null;
- if (!CONFIG.EXECUTION.ENABLED) return console.log(`Would have harvested strategy ${harvest.name} (${harvest.strategy._address}). Set CONFIG.EXECUTION.ENABLED to enable harvesting`);
- console.log(`Harvesting strategy address: ${harvest.strategy._address} (${harvest.name}) ...`);
- return await harvest.harvestTx.send({ from: CONFIG.WALLET.ADDRESS, gas: harvest.harvestGas, gasPrice: harvest.gasPrice, nonce: nonce++ });
+ let results = [];
+ for (const harvest of harvests) {
+ results.push(await executeTx(harvest, harvest.harvestDecision, harvest.harvestTx, "Harvest"));
+ }
+
+ logResults({ results, harvests, type: "Harvest" });
+ var payload = {
+ harvests, results: {
+ harvest: results
+ }
};
+ return payload;
+}
+
+async function doEarning(payload) {
+ await Util.wait(5000); // Allow arbitrarily 5 seconds before beginning earn() calls for the provider to sync the nonce
- const results = await Promise.allSettled(harvests.map(executeHarvestTx));
- logHarvestingResults({ results, harvests });
- await discordHarvestUpdate({ results, harvests });
- return harvests;
+ let results = [];
+ for (const harvest of payload.harvests) {
+ results.push(await executeTx(harvest, harvest.earnDecision, harvest.earnTx, "Earn"));
+ }
+
+ logResults({ results, harvests: payload.harvests, type: "Earn" });
+
+ payload.results.earn = results;
+
+ return payload;
}
-async function doEarning(harvests) {
+async function doLeveraging(payload) {
await Util.wait(5000); // Allow arbitrarily 5 seconds before beginning earn() calls for the provider to sync the nonce
- let nonce = await web3.eth.getTransactionCount(CONFIG.WALLET.ADDRESS);
- const executeEarnTx = async (harvest) => {
- if (!harvest.earnDecision) return null;
- if (!CONFIG.EXECUTION.ENABLED) return console.log(`Would have swept ${harvest.snowglobe._address}. Set CONFIG.EXECUTION.ENABLED to enable sweeping`);
- console.log(`Sweeping snowglobe address: ${harvest.snowglobe._address} (${harvest.name}) ...`);
- return await harvest.earnTx.send({ from: CONFIG.WALLET.ADDRESS, gas: harvest.earnGas, gasPrice: harvest.gasPrice, nonce: nonce++ });
- };
+ let results = [];
+ for (const harvest of payload.harvests) {
+ results.push(await executeTx(harvest, harvest.leverageDecision, harvest.leverageTx, "Leverage"));
+ }
+
+ logResults({ results, harvests: payload.harvests, type: "Leverage" });
- const results = await Promise.allSettled(harvests.map(executeEarnTx));
- logEarnResults({ results, harvests });
- await discordEarnUpdate({ results, harvests });
- return harvests;
+ payload.results.leverage = results;
+
+ return payload;
}
+async function doSync(payload) {
+ await Util.wait(5000); // Allow arbitrarily 5 seconds before beginning earn() calls for the provider to sync the nonce
+
+ let results = [];
+ for (const harvest of payload.harvests) {
+ results.push(await executeTx(harvest, harvest.syncDecision, harvest.syncTx, "Sync"));
+ }
-function logHarvestingResults({ results, harvests }) {
- for (let i = 0; i < results.length; i++) {
- const harvest = harvests[i];
- if (!harvest.harvestDecision) continue;
- const {reason, value} = results[i];
- console.log(`--------------------------------------------------------------------`);
- if (value || !CONFIG.EXECUTION.ENABLED) {
- // Successfully called harvest() or a test run
- console.log(`Strategy: ${harvest.name} (${value?.to ?? harvest.strategy._address})`);
- console.log(`Reinvested: ${Util.displayBNasFloat(harvest.harvestable, 18)} PNG ($${Util.displayBNasFloat(harvest.gainUSD, 18)})`);
- console.log(`Transaction: ${value?.transactionHash ?? '[real tx hash]'}`);
- } else {
- // Failed to execute harvest()
- console.error(`Failed to harvest for strategy ${value?.to ?? harvest.strategy._address} (${harvest.name})`);
- console.error(reason);
+ logResults({ results, harvests: payload.harvests, type: "Sync" });
+
+ payload.results.sync = results;
+
+ return payload;
+}
+
+async function doDeleveraging(payload) {
+ await Util.wait(5000); // Allow arbitrarily 5 seconds before beginning earn() calls for the provider to sync the nonce
+
+ let results = [];
+ for (const harvest of payload.harvests) {
+ let params = [];
+ if (harvest.deleverageDecision) {
+ const deposited = await harvest.strategy.balanceOfPool();
+ const BNSupply = floatToBN((deposited / 10 ** harvest.wantDecimals) * 1.01, harvest.wantDecimals);
+ params = [BNSupply];
+ console.log(harvest.name, harvest.type);
+ console.log(deposited / 10 ** harvest.wantDecimals, params[0] / 10 ** harvest.wantDecimals);
}
+ results.push(
+ await executeTx(
+ harvest, harvest.deleverageDecision, harvest.deleverageTx, "Deleverage", params
+ )
+ );
}
- console.log(`--------------------------------------------------------------------`);
- return { results, harvests };
+
+ logResults({ results, harvests: payload.harvests, type: "Deleverage" });
+
+ payload.results.deleverage = results;
+
+ return payload;
}
-function logEarnResults({ results, harvests }) {
- for (let i = 0; i < results.length; i++) {
- const harvest = harvests[i];
- if (!harvest.earnDecision) continue;
- const {reason, value} = results[i];
+async function sendDiscord(payload) {
+ //we need to await for our discord calls when running at container mode, and we can't let it await
+ //between transactions because it opens margin for frontrunning
+
+ await discordUpdate({ results: payload.results, harvests: payload.harvests })
+}
+
+function logResults(params) {
+ for (let i = 0; i < params.results.length; i++) {
+ const harvest = params.harvests[i];
+ const txType = params.type;
+ const value = params.results[i];
+ switch (txType) {
+ case "Harvest":
+ if (!harvest.harvestDecision) {
+ continue;
+ }
+ break;
+ case "Earn":
+ if (!harvest.earnDecision) {
+ continue;
+ }
+ break;
+ case "Leverage":
+ if (!harvest.leverageDecision) {
+ continue;
+ }
+ break;
+ case "Sync":
+ if (!harvest.syncDecision) {
+ continue;
+ }
+ break;
+ case "Deleverage":
+ if (!harvest.deleverageDecision) {
+ continue;
+ }
+ break;
+ }
console.log(`--------------------------------------------------------------------`);
if (value || !CONFIG.EXECUTION.ENABLED) {
- // Successfully called earn() or a test run
- console.log(`Snowglobe: ${harvest.name} (${value?.to ?? harvest.snowglobe._address})`);
- console.log(`Swept: ${Util.displayBNasFloat(harvest.available, 18, 5)} ${harvest.wantSymbol} ($${Util.displayBNasFloat(harvest.availableUSD, 18)})`);
+ // Successfully called transaction or a test run
+ console.log(`Snowglobe: ${harvest.name} (${value?.to ?? harvest.snowglobe.address})`);
+ if (txType === "Harvest") {
+ console.log(`Reinvested: ${harvest.harvestOverride ? 'Unknown' : Util.displayBNasFloat(harvest.harvestable, 18)} ${harvest.harvestSymbol} ($${harvest.harvestOverride ? '?.??' : Util.displayBNasFloat(harvest.gainUSD, 18)})`);
+ } else if (txType === "Earn") {
+ console.log(`${txType}: ${Util.displayBNasFloat(harvest.available, harvest.wantDecimals, 5)} ${harvest.wantSymbol} ($${Util.displayBNasFloat(harvest.availableUSD, 18)})`);
+ } else {
+ console.log(`${txType}`)
+ }
console.log(`Transaction: ${value?.transactionHash ?? '[real tx hash]'}`);
} else {
- // Failed to execute earn()
- console.error(`Failed to sweep for snowglobe ${value?.to ?? harvest.snowglobe._address} (${harvest.name})`);
- console.error(reason);
+ // Failed to execute transaction
+ console.error(`Failed to ${txType} for snowglobe ${value?.to ?? harvest.snowglobe.address} (${harvest.name})`);
}
}
console.log(`--------------------------------------------------------------------`);
- return { results, harvests };
+ return params;
}
-async function discordHarvestUpdate({ results, harvests }) {
+async function discordUpdate({ results, harvests }) {
if (!CONFIG.EXECUTION.ENABLED) return console.log(`Discord notifications are disabled while in test mode`);
if (!CONFIG.DISCORD.ENABLED) return console.log(`Did not notify discord. Set CONFIG.DISCORD.ENABLED to send notifications to #harvests`);
+ for (let i = 0; i < harvests.length; i++) {
+ const notifList = [];
+ if (harvests[i].harvestDecision && results.harvest[i]) {
+ notifList.push({ harvest: true, txHash: results.harvest[i]?.transactionHash });
+ }
+ if (harvests[i].earnDecision && results.earn[i]) {
+ notifList.push({ earn: true, txHash: results.earn[i]?.transactionHash });
+ }
+ if (harvests[i].leverageDecision && results.leverage[i]) {
+ notifList.push({ leverage: true, txHash: results.leverage[i]?.transactionHash });
+ }
+ if (harvests[i].syncDecision && results.sync[i]) {
+ notifList.push({ sync: true, txHash: results.sync[i]?.transactionHash });
+ }
+ if (harvests[i].deleverageDecision && results.deleverage[i]) {
+ notifList.push({ deleverage: true, txHash: results.deleverage[i]?.transactionHash });
+ }
- for (let i = 0; i< results.length; i++) {
- const {reason, value} = results[i];
- const harvest = harvests[i];
- if (!harvest.harvestDecision) continue;
- if (value) {
- const embedObj = {
- Color:'0x00aaff',
- Title:`Strategy: ${harvest.name}`,
- Thumbnail:Util.thumbnailLink(harvest.name),
- URL:Util.cchainTransactionLink(value.transactionHash),
+ for (const event of notifList) {
+ await Util.wait(3000);
+ const embed = {
+ "embeds": [
+ {
+ "title": null,
+ "description": null,
+ "url": Util.cchainTransactionLink(event.txHash),
+ "color": 43775,
+ "timestamp": new Date(Date.now()).toISOString()
+ }
+ ]
};
- const message = `**Reinvested:** ${Util.displayBNasFloat(harvest.harvestable, 18, 2)} **PNG**\n`+
- `**Value**: $${Util.displayBNasFloat(harvest.gainUSD, 18, 2)}`;
- embedObj.Description = message;
- DiscordBot.sendMessage(DiscordBot.makeEmbed(embedObj), CONFIG.DISCORD.CHANNEL);
- }
- }
-}
-async function discordEarnUpdate({ results, harvests }) {
- if (!CONFIG.EXECUTION.ENABLED) return console.log(`Discord notifications are disabled while in test mode`);
- if (!CONFIG.DISCORD.ENABLED) return console.log(`Did not notify discord. Set CONFIG.DISCORD.ENABLED to send notifications to #harvests`);
+ if (event.harvest) {
+ embed.embeds[0].title = `Strategy: ${harvests[i].name}`;
+ embed.embeds[0].description = `**Reinvested:** ${harvests[i].harvestOverride ? 'Unknown' : Util.displayBNasFloat(harvests[i].harvestable, 18, 2)} **${harvests[i].harvestSymbol}**\n` +
+ `**Value**: $${harvests[i].harvestOverride ? '?.??' : Util.displayBNasFloat(harvests[i].gainUSD, 18, 2)}`;
+ } else if (event.earn) {
+ embed.embeds[0].title = `Snowglobe: ${harvests[i].name}`;
+ embed.embeds[0].description = `**Swept:** ${Util.displayBNasFloat(harvests[i].available, harvests[i].wantDecimals, 5)} **${harvests[i].wantSymbol}**\n` +
+ `**Value**: $${Util.displayBNasFloat(harvests[i].availableUSD, 18, 2)}`;
+ } else if (event.leverage) {
+ embed.embeds[0].title = `Strategy: ${harvests[i].name}`;
+ embed.embeds[0].description = `**Leveraged**`;
+ } else if (event.sync) {
+ embed.embeds[0].title = `Strategy: ${harvests[i].name}`;
+ embed.embeds[0].description = `**Synced**`;
+ } else if (event.deleverage) {
+ embed.embeds[0].title = `Strategy: ${harvests[i].name}`;
+ embed.embeds[0].description = `**Deleveraged**`;
+ }
- for (let i = 0; i< results.length; i++) {
- const {reason, value} = results[i];
- const harvest = harvests[i];
- if (!harvest.earnDecision) continue;
- if (value) {
- const embedObj = {
- Color:'0x00aaff',
- Title:`Snowglobe: ${harvest.name}`,
- Thumbnail:Util.thumbnailLink(harvest.name),
- URL:Util.cchainTransactionLink(value.transactionHash),
- };
- const message = `**Swept:** ${Util.displayBNasFloat(harvest.available, 18, 5)} **${harvest.wantSymbol}**\n`+
- `**Value**: $${Util.displayBNasFloat(harvest.availableUSD, 18, 2)}`;
- embedObj.Description = message;
- DiscordBot.sendMessage(DiscordBot.makeEmbed(embedObj), CONFIG.DISCORD.CHANNEL);
+ if (embed.embeds[0].title) {
+ await Util.sendDiscord(CONFIG.DISCORD.WEBHOOK_URL, embed);
+ }
}
}
}
@@ -270,7 +963,16 @@ function handleError(err) {
setTimeout(() => process.exit(1), 1000); // Ensure stderr has time to flush buffer
}
-function scheduleNextHarvest() {
+function handleSettledPromises(results, originals, rejectCallback) {
+ results.forEach((result, i) => {
+ if (result.status !== 'fulfilled') rejectCallback(originals[i], new Error(result.reason.message))
+ });
+ return results
+ .filter(result => result.status === 'fulfilled')
+ .map(result => result.value);
+}
+
+async function scheduleNextHarvest() {
executionWindowCenter += CONFIG.EXECUTION.INTERVAL;
executionDrift = Util.randomIntFromInterval(-1 * CONFIG.EXECUTION.INTERVAL_WINDOW, CONFIG.EXECUTION.INTERVAL_WINDOW);
const now = Date.now();
@@ -279,62 +981,260 @@ function scheduleNextHarvest() {
console.log(`New execution window: ${new Date(executionWindowCenter - CONFIG.EXECUTION.INTERVAL_WINDOW).toLocaleTimeString()} - ${new Date(executionWindowCenter + CONFIG.EXECUTION.INTERVAL_WINDOW).toLocaleTimeString()}`);
console.log(`Scheduled next harvest() for ${new Date(now + delay).toLocaleString()}`);
console.log();
- setTimeout(harvest, delay);
+ await Util.wait(delay);
+ await harvest();
}
///// Helper functions
-async function initializeContracts(controllerAddresses, wantAddress) {
- if (!web3.utils.isAddress(wantAddress)) throw new Error(`Invalid want address ${wantAddress}`);
+async function initializeContracts(controllerAddresses, snowglobeAddress) {
+ if (!ethers.utils.isAddress(snowglobeAddress)) throw new Error(`Invalid snowGlobe address ${snowglobeAddress}`);
for (const controllerAddress of controllerAddresses) {
- if (!web3.utils.isAddress(controllerAddress)) throw new Error(`Invalid controller address ${controllerAddress}`);
+ if (!ethers.utils.isAddress(controllerAddress)) throw new Error(`Invalid controller address ${controllerAddress}`);
+
+ const controller = new ethers.Contract(controllerAddress, ABI.CONTROLLER, signer);
+ const snowglobe = new ethers.Contract(snowglobeAddress, ABI.SNOWGLOBE, signer);
+
+ const wantAddress = await snowglobe.token();
+ if (wantAddress === ZERO_ADDRESS) continue;
+
+ const strategyAddress = await controller.strategies(wantAddress);
+ if (strategyAddress === ZERO_ADDRESS) continue;
- const controller = new web3.eth.Contract(ABI.CONTROLLER, controllerAddress);
- const snowglobeAddress = await controller.methods.globes(wantAddress).call();
- const strategyAddress = await controller.methods.strategies(wantAddress).call();
+ const controllerSnowglobeAddress = await controller.globes(wantAddress);
- if (strategyAddress !== ZERO_ADDRESS && snowglobeAddress !== ZERO_ADDRESS) return {
+ if (controllerSnowglobeAddress !== snowglobeAddress) continue;
+
+ let type, poolToken = new ethers.Contract(wantAddress, ABI.UNI_V2_POOL, signer);
+ const strategyContract = new ethers.Contract(strategyAddress, ABI.STRATEGY, signer);
+
+ const strategyName = await strategyContract.getName();
+
+ try {
+ //test if this is an LP Token
+ await poolToken.token1();
+ type = 'LP';
+ } catch (error) {
+ //not LP
+ poolToken = new ethers.Contract(wantAddress, ABI.ERC20, signer);
+ try {
+ //test if this is from benqi
+ await strategyContract.benqi();
+ type = 'BENQI';
+ } catch (error) {
+ //AAVE pool
+ try {
+ await strategyContract.getWavaxAccrued();
+ type = 'AAVE';
+ } catch (error) {
+ try {
+ //test if this is from banker joe
+ await strategyContract.jToken();
+ type = 'BANKER';
+ } catch (error) {
+ try {
+ //test if this is from teddy
+ await strategyContract.stake_teddy_rewards();
+ type = 'TEDDY';
+ } catch (error) {
+ type = 'ERC20';
+ }
+ }
+ }
+ }
+ }
+
+ return {
controller,
- want: new web3.eth.Contract(ABI.PANGOLIN_POOL, wantAddress),
- snowglobe: new web3.eth.Contract(ABI.SNOWGLOBE, snowglobeAddress),
- strategy: new web3.eth.Contract(ABI.STRATEGY, strategyAddress),
+ snowglobe,
+ want: poolToken,
+ wantAddress,
+ type,
+ strategyName,
+ strategy: strategyContract,
};
}
- throw new Error(`Could not identify a strategy & snowglobe for want address ${wantAddress}`);
+
+ throw new Error(`Could not identify contracts for snowglobe ${snowglobeAddress}`);
}
async function getPoolShareAsUSD(poolContract) {
- const token0Address = (await poolContract.methods.token0().call()).toLowerCase();
- const token1Address = (await poolContract.methods.token1().call()).toLowerCase();
- const { _reserve0, _reserve1 } = await poolContract.methods.getReserves().call();
- const reserve0 = web3.utils.toBN(_reserve0);
- const reserve1 = web3.utils.toBN(_reserve1);
- const totalSupply = web3.utils.toBN(await poolContract.methods.totalSupply().call());
-
- if (token0Address === WAVAX_ADDRESS) {
- const priceWAVAX = await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
- return reserve0.muln(2).mul(priceWAVAX).div(totalSupply);
- } else if (token1Address === WAVAX_ADDRESS) {
- const priceWAVAX = await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
- return reserve1.muln(2).mul(priceWAVAX).div(totalSupply);
- } else if (token0Address === PNG_ADDRESS) {
- const pricePNG = await estimatePriceOfAsset(PNG_ADDRESS, 18);
- return reserve0.muln(2).mul(pricePNG).div(totalSupply);
- } else if (token1Address === PNG_ADDRESS) {
- const pricePNG = await estimatePriceOfAsset(PNG_ADDRESS, 18);
- return reserve1.muln(2).mul(pricePNG).div(totalSupply);
+ const token0Address = await poolContract.token0();
+ const token1Address = await poolContract.token1();
+ const reserves = await poolContract.getReserves();
+ const totalSupply = await poolContract.totalSupply();
+ try {
+ if (token0Address === WAVAX_ADDRESS) {
+ const priceWAVAX = await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
+ return reserves._reserve0.mul(2).mul(priceWAVAX).div(totalSupply);
+ } else if (token1Address === WAVAX_ADDRESS) {
+ const priceWAVAX = await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
+ return reserves._reserve1.mul(2).mul(priceWAVAX).div(totalSupply);
+ } else if (token0Address === PNG_ADDRESS) {
+ const pricePNG = await estimatePriceOfAsset(PNG_ADDRESS, 18);
+ return reserves._reserve0.mul(2).mul(pricePNG).div(totalSupply);
+ } else if (token1Address === PNG_ADDRESS) {
+ const pricePNG = await estimatePriceOfAsset(PNG_ADDRESS, 18);
+ return reserves._reserve1.mul(2).mul(pricePNG).div(totalSupply);
+ } else if (token0Address === JOE_ADDRESS) {
+ const priceJOE = await estimatePriceOfAsset(JOE_ADDRESS, 18);
+ return reserves._reserve0.mul(2).mul(priceJOE).div(totalSupply);
+ } else if (token1Address === JOE_ADDRESS) {
+ const priceJOE = await estimatePriceOfAsset(JOE_ADDRESS, 18);
+ return reserves._reserve1.mul(2).mul(priceJOE).div(totalSupply);
+ } else {
+ try {
+ const token0Contract = new ethers.Contract(token0Address, ABI.ERC20, signer);
+ const token0Decimals = await token0Contract.decimals();
+ const priceToken0 = await estimatePriceOfAsset(token0Address, token0Decimals);
+ const correction = ethers.BigNumber.from(18 - token0Decimals);
+ let priceLP;
+ if (correction > 0) {
+ priceLP = reserves._reserve0.mul(ethers.BigNumber.from(10).pow(correction)).mul(2).mul(priceToken0).div(totalSupply);
+ } else {
+ priceLP = reserves._reserve0.mul(2).mul(priceToken0).div(totalSupply);
+ }
+
+ return priceLP
+ } catch (error) {
+ const token1Contract = new ethers.Contract(token1Address, ABI.ERC20, signer);
+ const token1Decimals = await token1Contract.decimals();
+ const priceToken1 = await estimatePriceOfAsset(token1Address, token1Decimals);
+ const correction = ethers.BigNumber.from(18 - token1Decimals);
+ let priceLP;
+ if (correction > 0) {
+ priceLP = reserves._reserve1.mul(ethers.BigNumber.from(10).pow(correction)).mul(2).mul(priceToken1).div(totalSupply);
+ } else {
+ priceLP = reserves._reserve1.mul(2).mul(priceToken1).div(totalSupply);
+ }
+
+ return priceLP
+ }
+ }
+ } catch (error) {
+ console.error(`Could not convert want address ${poolContract.address} to USD`);
+ console.error(error.message);
+ return ethers.BigNumber.from('0');
+ }
+}
+
+async function estimatePriceOfAsset(assetAddress, assetDecimals, isAxial = false, isPlatypus = false) {
+ if (isAxial || isPlatypus) {
+ const virtualPrice = ethers.utils.parseUnits("1", 18);
+ return virtualPrice;
+ }
+ const { ROUTER, ROUTE } = VALUATION(assetAddress);
+ const destination = ROUTE[ROUTE.length - 1];
+ const destinationContract = new ethers.Contract(destination, ABI.ERC20, signer);
+ const destinationDecimals = parseInt(await destinationContract.decimals());
+ const correction = ethers.BigNumber.from(assetDecimals - destinationDecimals);
+
+ const routerContract = new ethers.Contract(ROUTER, ABI.UNI_V2_ROUTER, signer);
+ let output;
+ if (ROUTE.length === 2) {
+ const [token0, token1] = await routerContract.getAmountsOut('1' + '0'.repeat(assetDecimals), ROUTE);
+ output = token1;
} else {
- console.error(`Could not convert want address ${poolContract._address} to USD`);
- return web3.utils.toBN('0');
+ const [token0, token1, token2] = await routerContract.getAmountsOut('1' + '0'.repeat(assetDecimals), ROUTE);
+ output = token2;
}
+
+ let price = output;
+ if (correction > 0) {
+ price = output.mul(ethers.BigNumber.from(10).pow(correction));
+ }
+
+ //calculate the value of the token through AVAX price
+ if (destination === WAVAX_ADDRESS) {
+ const priceWAVAX = await estimatePriceOfAsset(WAVAX_ADDRESS, 18);
+ price = price.mul(priceWAVAX).div('1' + '0'.repeat(18));
+ }
+ return price;
+}
+
+const roundDown = (value, decimals = 18) => {
+ const valueString = value.toString();
+ const integerString = valueString.split('.')[0];
+ const decimalsString = valueString.split('.')[1];
+ if (!decimalsString) {
+ return integerString
+ }
+ return `${integerString}.${decimalsString.slice(0, decimals)}`;
+}
+
+const floatToBN = (number, decimals = 18) => {
+ try {
+ if (number > 0) {
+ return ethers.utils.parseUnits(roundDown(number, decimals), decimals);
+ } else {
+ return ethers.utils.parseUnits("0");
+ }
+ } catch (error) {
+ console.error(error.message);
+ }
+}
+
+const getPoolInfo = (want, mcAddress) => {
+ let arrayIndex = -1;
+ switch (mcAddress.toLowerCase()) {
+ case AXIAL_MASTERCHEF.toLowerCase():
+ arrayIndex = 0;
+ break;
+ case TJ_MASTERCHEF.toLowerCase():
+ arrayIndex = 1;
+ break;
+ default:
+ throw new Error("Masterchef not found");
+ }
+
+ const poolId = masterchefPoolIds[arrayIndex].findIndex(o => o.lpToken.toLowerCase() === want.toLowerCase());
+ const poolInfo = masterchefPoolIds[arrayIndex][poolId];
+ return {
+ poolId,
+ poolInfo
+ };
}
-async function estimatePriceOfAsset(assetAddress, assetDecimals) {
- const PANGOLIN_ROUTER_ADDRESS = '0xe54ca86531e17ef3616d22ca28b0d458b6c89106';
+const ran24h = async (strategyAddress, topic) => {
+
+ async function queryTransactions(startblock, endblock) {
+ const axios = require('axios');
+
+ const config = {
+ method: 'get',
+ url: `https://api.snowtrace.io/api` +
+ `?module=account` +
+ `&action=txlist` +
+ `&address=${strategyAddress}` +
+ `&startblock=${startblock}` +
+ `&endblock=${endblock}` +
+ `&sort=asc` +
+ `&apikey=${Config.SNOWTRACE.API_KEY}`,
+ headers: {}
+ };
+
+ const result = await axios(config);
+
+ return result.data;
+ }
+
+ const txs = await queryTransactions(currentBlockNumber - blocksDaily, currentBlockNumber);
+
+ if (!txs.result) {
+ return;
+ }
+
+ let foundTopic = false;
+
+ for (const transaction of txs.result) {
+
+ if (transaction.input === topic) {
+ foundTopic = true;
+ }
+ }
+
+ return foundTopic;
- const routerContract = new web3.eth.Contract(ABI.PANGOLIN_ROUTER, PANGOLIN_ROUTER_ADDRESS);
- const [input, output] = await routerContract.methods.getAmountsOut('1' + '0'.repeat(assetDecimals), [assetAddress, DAI_ADDRESS]).call();
- return web3.utils.toBN(output);
}
diff --git a/src/main/Optimizer.js b/src/main/Optimizer.js
new file mode 100644
index 0000000..61de475
--- /dev/null
+++ b/src/main/Optimizer.js
@@ -0,0 +1,128 @@
+const { ethers } = require("ethers");
+const { OPTIMIZER_CONTROLLER, OPTIMIZER_POOLS } = require("../../config/Wants");
+const Utils = require('./Util.js');
+const ABI = require('../../config/abi.json');
+const CONFIG = require('../../config/Config');
+const Constants = require("../../config/Constants");
+
+//TO-DO add totalTVL
+async function doOptimize(signer) {
+ const optimizerController = new ethers.Contract(OPTIMIZER_CONTROLLER, ABI.CONTROLLER, signer);
+
+ let timelockOperations = [];
+
+ let discordDescription = "";
+ for (const pool of OPTIMIZER_POOLS) {
+ const currentStrategy = await optimizerController.strategies(pool.LP);
+
+ let currentPoolInfo = {
+ yearlyAPY: 0
+ };
+ let infoList = [];
+ for (const contract of pool.contracts) {
+ if (contract.strategy.toLowerCase() === currentStrategy.toLowerCase()) {
+ currentPoolInfo = await Utils.getPoolAPIInfo(contract.fixedSnowglobe);
+ continue;
+ }
+
+ const poolInfo = await Utils.getPoolAPIInfo(contract.fixedSnowglobe);
+ if (!poolInfo) {
+ throw new Error("Pool not found in API");
+ }
+
+ infoList.push(
+ {
+ name: poolInfo.name,
+ source: poolInfo.source,
+ APY: poolInfo.yearlyAPY,
+ TVL: poolInfo.tvlStaked,
+ strategy: contract.strategy,
+ snowglobe: pool.snowglobe,
+ }
+ )
+ }
+
+ //search for the best APY with a .3% buffer
+ let bestAPY = currentPoolInfo ? Number(currentPoolInfo.yearlyAPY) + 0.05 : 0;
+ let bestIndex = -1;
+ let poolName = "", source = "";
+ for (let i = 0; i < infoList.length; i++) {
+ if(Number(infoList[i].APY) > bestAPY){
+ //found best APY for pool
+ bestIndex = i;
+ bestAPY = Number(infoList[i].APY);
+ poolName = infoList[i].name;
+ source = infoList[i].source
+ }
+ }
+
+ if(bestIndex > -1){
+ discordDescription = discordDescription.length > 0 ? discordDescription + "\n" : "";
+ discordDescription = discordDescription +
+ `**APY Update** for ${poolName} \n`+
+ `**New Source**: ${source} \n`+
+ `**Old APY**: ${currentPoolInfo.yearlyAPY.toFixed(2)}% - **New APY**: ${bestAPY.toFixed(2)}%`
+
+ //prepare batch
+ const IStrategy = new ethers.utils.Interface(ABI.STRATEGY);
+ const ISnowglobe = new ethers.utils.Interface(ABI.SNOWGLOBE);
+
+ const encodedHarvest = IStrategy.encodeFunctionData("harvest", []);
+ const encodedLeverage = IStrategy.encodeFunctionData("leverageToMax", []);
+ const encodedEarn = ISnowglobe.encodeFunctionData("earn", []);
+
+ const IController = new ethers.utils.Interface(ABI.CONTROLLER);
+ const encodedSetStrategy = IController.encodeFunctionData("setStrategy", [pool.LP, infoList[bestIndex].strategy]);
+
+ let timelockTargets = [], timelockData = []
+
+ timelockData.push(encodedHarvest);
+ timelockTargets.push(currentStrategy);
+
+ timelockData.push(encodedSetStrategy);
+ timelockTargets.push(OPTIMIZER_CONTROLLER);
+
+ timelockData.push(encodedEarn);
+ timelockTargets.push(infoList[bestIndex].snowglobe);
+
+ if(bestAPY / 365 > Constants.MIN_APR_TO_LEVERAGE){
+ timelockData.push(encodedLeverage);
+ timelockTargets.push(infoList[bestIndex].strategy);
+ }
+ timelockOperations.push({
+ "targets": timelockTargets,
+ "data": timelockData
+ })
+ }
+ }
+ console.log(timelockOperations);
+
+ if(timelockOperations.length > 0){
+ let executeData = {};
+ for(let i = 0;i < timelockOperations.length;i++){
+ const optimizerIndex = `Optimizer${i}`;
+ executeData[optimizerIndex] = timelockOperations[i];
+ }
+
+ discordDescription += `\n\n**Run as deploy.json to Execute**:\n ${JSON.stringify(executeData)}`;
+
+ const embed = {
+ "embeds": [
+ {
+ "title": "New Optimizer Batch for TimelockController",
+ "description": discordDescription,
+ "color": 43775,
+ "timestamp": new Date(Date.now()).toISOString()
+ }
+ ]
+ };
+
+ console.log(embed);
+
+ if(CONFIG.DISCORD.ENABLED){
+ await Utils.sendDiscord(CONFIG.DISCORD.WEBHOOK_OPTIMIZER, embed);
+ }
+ }
+}
+
+module.exports = { doOptimize }
\ No newline at end of file
diff --git a/src/main/Util.js b/src/main/Util.js
index a09f888..8b56231 100644
--- a/src/main/Util.js
+++ b/src/main/Util.js
@@ -1,14 +1,72 @@
-const Web3 = require('web3');
+const { default: axios } = require('axios');
+const { ethers } = require('ethers');
const Util = {
- BN_TEN: Web3.utils.toBN(10),
- BN_ZERO: Web3.utils.toBN(0),
+ async sendDiscord(webhook, content) {
+ await axios({
+ url: webhook,
+ method: 'post',
+ data: JSON.stringify(content),
+ headers: {
+ 'Content-Type': "application/json"
+ }
+ }).then(res => {
+ if (res.status !== 204) {
+ console.error(`Could not post to Discord ${res.status}: ${res.statusText}`)
+ }
+ }).catch(err => {
+ console.error("Could not post to Discord: ", err)
+ })
+ },
+
+ async getPoolAPIInfo(snowglobeAddress) {
+ const data = JSON.stringify({
+ query:
+ `{
+ PoolsInfoByAddress(address: "${snowglobeAddress}"){
+ name
+ source
+ dailyAPR
+ yearlyAPY
+ tvlStaked
+ deprecated
+ }
+ }`,
+ variables: {}
+ });
+
+ const config = {
+ method: 'post',
+ url: 'https://api.snowapi.net/graphql',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ data: data
+ };
+
+ try {
+ const query = await axios(config);
+ return query.data.data.PoolsInfoByAddress;
+ } catch (error) {
+ console.error(error);
+ }
+ },
convertBNtoFloat(bigNumber, decimals) {
return Util.convertStringToFloat(bigNumber.toString(), decimals);
},
+ roundDown(value, decimals = 18) {
+ const valueString = value.toString();
+ const integerString = valueString.split('.')[0];
+ const decimalsString = valueString.split('.')[1];
+ if (!decimalsString) {
+ return integerString
+ }
+ return `${integerString}.${decimalsString.slice(0, decimals)}`;
+ },
+
convertStringToFloat(stringNumber, decimals) {
const isNegative = stringNumber[0] === '-';
const unsignedString = stringNumber.replace('-', '');
@@ -32,7 +90,7 @@ const Util = {
},
offset(decimals) {
- return Web3.utils.toBN('1' + '0'.repeat(decimals));
+ return ethers.BigNumber.from('1' + '0'.repeat(decimals));
},
wait(ms) {