diff --git a/Dockerfile b/Dockerfile index 0e0aba4..1702508 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,13 @@ +# syntax=docker/dockerfile:experimental +# export DOCKER_BUILDKIT=1 + FROM node:12 WORKDIR /app +RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts && echo "Host github.com\n\tUser git" > ~/.ssh/config + COPY package.json yarn.lock ./ -RUN yarn && yarn cache clean --force +RUN --mount=type=ssh yarn && yarn cache clean --force COPY . . -EXPOSE 8000 -# HEALTHCHECK CMD curl -f http://localhost:8000/status ENTRYPOINT ["yarn"] -CMD ["server"] diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..693ca4a --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,90 @@ +version: '2' + +services: + kovan: + image: tornadocash/relayer + restart: always + command: server + env_file: .env + expose: [ 8000 ] + environment: + VIRTUAL_HOST: example.duckdns.org + LETSENCRYPT_HOST: example.duckdns.org + REDIS_URL: redis://redis/0 + nginx_proxy_read_timeout: 600 + depends_on: + - redis + + tree-monitor: + image: tornadocash/relayer + restart: always + command: tree-monitor + env_file: .env + environment: + REDIS_URL: redis://redis/0 + + worker1: + image: tornadocash/relayer + restart: always + command: worker + env_file: .env + environment: + REDIS_URL: redis://redis/0 + +# worker2: +# image: tornadocash/relayer +# restart: always +# command: worker +# env_file: .env +# environment: +# PRIVATE_KEY: qwe +# REDIS_URL: redis://redis/0 + + redis: + image: redis + restart: always + command: [redis-server, --appendonly, 'yes'] + volumes: + - redis:/data + + nginx: + image: nginx:alpine + container_name: nginx + restart: always + ports: + - 80:80 + - 443:443 + volumes: + - conf:/etc/nginx/conf.d + - vhost:/etc/nginx/vhost.d + - html:/usr/share/nginx/html + - certs:/etc/nginx/certs + logging: + driver: none + + dockergen: + image: poma/docker-gen + container_name: dockergen + restart: always + command: -notify-sighup nginx -watch /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf + volumes_from: + - nginx + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + + letsencrypt: + image: jrcs/letsencrypt-nginx-proxy-companion + container_name: letsencrypt + restart: always + environment: + NGINX_DOCKER_GEN_CONTAINER: dockergen + volumes_from: + - nginx + - dockergen + +volumes: + conf: + vhost: + html: + certs: + redis: diff --git a/docker-compose.yml b/docker-compose.yml index 7cec4b4..9b48b95 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,46 +1,51 @@ version: '2' services: - kovan: + server: image: tornadocash/relayer restart: always command: server + env_file: .env + expose: [ 8000 ] + ports: [ 8000 ] environment: - VIRTUAL_HOST: example.duckdns.org - LETSENCRYPT_HOST: example.duckdns.org - NET_ID: 42 - RPC_URL: https://kovan.infura.io - # ORACLE_RPC_URL should always point to the mainnet - ORACLE_RPC_URL: https://mainnet.infura.io - # without 0x prefix - PRIVATE_KEY: - # 2.5 means 2.5% - RELAYER_FEE: 2.5 REDIS_URL: redis://redis/0 nginx_proxy_read_timeout: 600 depends_on: - redis - tree-monitor: + treeWatcher: image: tornadocash/relayer restart: always - command: tree-monitor + command: treeWatcher + env_file: .env environment: - qwe: ads + REDIS_URL: redis://redis/0 + + priceWatcher: + image: tornadocash/relayer + restart: always + command: priceWatcher + env_file: .env + environment: + REDIS_URL: redis://redis/0 worker1: image: tornadocash/relayer restart: always command: worker + env_file: .env environment: - PRIVATE_KEY: qwe + REDIS_URL: redis://redis/0 - worker2: - image: tornadocash/relayer - restart: always - command: worker - environment: - PRIVATE_KEY: qwe +# worker2: +# image: tornadocash/relayer +# restart: always +# command: worker +# env_file: .env +# environment: +# PRIVATE_KEY: qwe +# REDIS_URL: redis://redis/0 redis: image: redis @@ -49,44 +54,6 @@ services: volumes: - redis:/data - nginx: - image: nginx:alpine - container_name: nginx - restart: always - ports: - - 80:80 - - 443:443 - volumes: - - conf:/etc/nginx/conf.d - - vhost:/etc/nginx/vhost.d - - html:/usr/share/nginx/html - - certs:/etc/nginx/certs - logging: - driver: none - - dockergen: - image: poma/docker-gen - container_name: dockergen - restart: always - command: -notify-sighup nginx -watch /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf - volumes_from: - - nginx - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - - letsencrypt: - image: jrcs/letsencrypt-nginx-proxy-companion - container_name: letsencrypt - restart: always - environment: - NGINX_DOCKER_GEN_CONTAINER: dockergen - volumes_from: - - nginx - - dockergen - volumes: - conf: - vhost: - html: - certs: redis: + diff --git a/package.json b/package.json index f10b559..727c119 100644 --- a/package.json +++ b/package.json @@ -19,15 +19,16 @@ "ajv": "^6.12.5", "async-mutex": "^0.2.4", "bull": "^3.12.1", - "circomlib": "git+https://github.com/tornadocash/circomlib.git#5beb6aee94923052faeecea40135d45b6ce6172c", + "circomlib": "git+ssh://github.com/tornadocash/circomlib.git#5beb6aee94923052faeecea40135d45b6ce6172c", "dotenv": "^8.2.0", "express": "^4.17.1", "fixed-merkle-tree": "^0.4.0", "gas-price-oracle": "^0.1.5", "ioredis": "^4.14.1", "node-fetch": "^2.6.0", - "tornado-cash-anonymity-mining": "git+https://github.com/tornadocash/tornado-anonymity-mining.git#dd4b996b89580fad986604e507a7e56ad64a3f71", - "tx-manager": "git+https://github.com/tornadocash/tx-manager.git#df118be318b007e597e157504d105dfa3e6322a1", + "tornado-cash-anonymity-mining": "git+ssh://github.com/tornadocash/tornado-anonymity-mining.git#dd4b996b89580fad986604e507a7e56ad64a3f71", + "tx-manager": "git+ssh://github.com/tornadocash/tx-manager.git#df118be318b007e597e157504d105dfa3e6322a1", + "torn-token": "git+ssh://github.com/tornadocash/torn-token.git#b90fc5adccbf9a87c3bdac6175a0e038a9ed3dd8", "uuid": "^8.3.0", "web3": "^1.3.0", "web3-core-promievent": "^1.3.0", diff --git a/src/config.js b/src/config.js index dde334e..95b970b 100644 --- a/src/config.js +++ b/src/config.js @@ -13,142 +13,7 @@ module.exports = { swapAddress: '0xFc82977BfAEBE93486Ac42ac7c8Ea1043f9a3500', minerMerkleTreeHeight: 10, privateKey: process.env.PRIVATE_KEY, - instances: { - netId1: { - eth: { - instanceAddress: { - 0.1: '0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc', - 1: '0x47CE0C6eD5B0Ce3d3A51fdb1C52DC66a7c3c2936', - 10: '0x910Cbd523D972eb0a6f4cAe4618aD62622b39DbF', - 100: '0xA160cdAB225685dA1d56aa342Ad8841c3b53f291', - }, - symbol: 'ETH', - decimals: 18, - }, - dai: { - instanceAddress: { - 100: '0xD4B88Df4D29F5CedD6857912842cff3b20C8Cfa3', - 1000: '0xFD8610d20aA15b7B2E3Be39B396a1bC3516c7144', - 10000: '0xF60dD140cFf0706bAE9Cd734Ac3ae76AD9eBC32A', - 100000: undefined, - }, - tokenAddress: '0x6B175474E89094C44Da98b954EedeAC495271d0F', - symbol: 'DAI', - decimals: 18, - }, - cdai: { - instanceAddress: { - 5000: '0x22aaA7720ddd5388A3c0A3333430953C68f1849b', - 50000: '0xBA214C1c1928a32Bffe790263E38B4Af9bFCD659', - 500000: '0xb1C8094B234DcE6e03f10a5b673c1d8C69739A00', - 5000000: undefined, - }, - tokenAddress: '0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643', - symbol: 'cDAI', - decimals: 8, - }, - usdc: { - instanceAddress: { - 100: '0xd96f2B1c14Db8458374d9Aca76E26c3D18364307', - 1000: '0x4736dCf1b7A3d580672CcE6E7c65cd5cc9cFBa9D', - 10000: '0xD691F27f38B395864Ea86CfC7253969B409c362d', - 100000: undefined, - }, - tokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - symbol: 'USDC', - decimals: 6, - }, - cusdc: { - instanceAddress: { - 5000: '0xaEaaC358560e11f52454D997AAFF2c5731B6f8a6', - 50000: '0x1356c899D8C9467C7f71C195612F8A395aBf2f0a', - 500000: '0xA60C772958a3eD56c1F15dD055bA37AC8e523a0D', - 5000000: undefined, - }, - tokenAddress: '0x39AA39c021dfbaE8faC545936693aC917d5E7563', - symbol: 'cUSDC', - decimals: 8, - }, - usdt: { - instanceAddress: { - 100: '0x169AD27A470D064DEDE56a2D3ff727986b15D52B', - 1000: '0x0836222F2B2B24A3F36f98668Ed8F0B38D1a872f', - 10000: '0xF67721A2D8F736E75a49FdD7FAd2e31D8676542a', - 100000: '0x9AD122c22B14202B4490eDAf288FDb3C7cb3ff5E', - }, - tokenAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7', - symbol: 'USDT', - decimals: 6, - }, - }, - netId42: { - eth: { - instanceAddress: { - 0.1: '0x8b3f5393bA08c24cc7ff5A66a832562aAB7bC95f', - 1: '0xD6a6AC46d02253c938B96D12BE439F570227aE8E', - 10: '0xe1BE96331391E519471100c3c1528B66B8F4e5a7', - 100: '0xd037E0Ac98Dab2fCb7E296c69C6e52767Ae5414D', - }, - symbol: 'ETH', - decimals: 18, - }, - dai: { - instanceAddress: { - 100: '0xdf2d3cC5F361CF95b3f62c4bB66deFe3FDE47e3D', - 1000: '0xD96291dFa35d180a71964D0894a1Ae54247C4ccD', - 10000: '0xb192794f72EA45e33C3DF6fe212B9c18f6F45AE3', - 100000: undefined, - }, - tokenAddress: '0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa', - symbol: 'DAI', - decimals: 18, - }, - cdai: { - instanceAddress: { - 5000: '0x6Fc9386ABAf83147b3a89C36D422c625F44121C8', - 50000: '0x7182EA067e0f050997444FCb065985Fd677C16b6', - 500000: '0xC22ceFd90fbd1FdEeE554AE6Cc671179BC3b10Ae', - 5000000: undefined, - }, - tokenAddress: '0xe7bc397DBd069fC7d0109C0636d06888bb50668c', - symbol: 'cDAI', - decimals: 8, - }, - usdc: { - instanceAddress: { - 100: '0x137E2B6d185018e7f09f6cf175a970e7fC73826C', - 1000: '0xcC7f1633A5068E86E3830e692e3e3f8f520525Af', - 10000: '0x28C8f149a0ab8A9bdB006B8F984fFFCCE52ef5EF', - 100000: undefined, - }, - tokenAddress: '0x75B0622Cec14130172EaE9Cf166B92E5C112FaFF', - symbol: 'USDC', - decimals: 6, - }, - cusdc: { - instanceAddress: { - 5000: '0xc0648F28ABA385c8a1421Bbf1B59e3c474F89cB0', - 50000: '0x0C53853379c6b1A7B74E0A324AcbDD5Eabd4981D', - 500000: '0xf84016A0E03917cBe700D318EB1b7a53e6e3dEe1', - 5000000: undefined, - }, - tokenAddress: '0xcfC9bB230F00bFFDB560fCe2428b4E05F3442E35', - symbol: 'cUSDC', - decimals: 8, - }, - usdt: { - instanceAddress: { - 100: '0x327853Da7916a6A0935563FB1919A48843036b42', - 1000: '0x531AA4DF5858EA1d0031Dad16e3274609DE5AcC0', - 10000: '0x0958275F0362cf6f07D21373aEE0cf37dFe415dD', - 100000: '0x14aEd24B67EaF3FF28503eB92aeb217C47514364', - }, - tokenAddress: '0x03c5F29e9296006876d8DF210BCFfD7EA5Db1Cf1', - symbol: 'USDT', - decimals: 6, - }, - }, - }, + instances: require('torn-token').instances, port: process.env.APP_PORT || 8000, tornadoServiceFee: Number(process.env.REGULAR_TORNADO_WITHDRAW_FEE), miningServiceFee: Number(process.env.MINING_SERVICE_FEE), diff --git a/yarn.lock b/yarn.lock index c48b260..0cf6ea3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -145,6 +145,11 @@ "@ethersproject/rlp" "^5.0.3" "@ethersproject/signing-key" "^5.0.4" +"@openzeppelin/contracts@^3.1.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.2.0.tgz#3e6b3a7662d8ed64271ade96ef42655db983fd9d" + integrity sha512-bUOmkSoPkjnUyMiKo6RYnb0VHBk5D9KKDAgNLzF41aqAM3TeE0yGdFF5dVRcV60pZdJLlyFT/jjXIZCWyyEzAQ== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -464,7 +469,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== -bn.js@^5.1.1: +bn.js@^5.1.1, bn.js@^5.1.2: version "5.1.3" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== @@ -742,6 +747,16 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: typedarray-to-buffer "^3.1.5" web3 "^1.2.11" +"circomlib@git+ssh://github.com/tornadocash/circomlib.git#5beb6aee94923052faeecea40135d45b6ce6172c": + version "0.0.20" + resolved "git+ssh://github.com/tornadocash/circomlib.git#5beb6aee94923052faeecea40135d45b6ce6172c" + dependencies: + blake-hash "^1.1.0" + blake2b "^2.1.3" + snarkjs "git+https://github.com/tornadocash/snarkjs.git#869181cfaf7526fe8972073d31655493a04326d5" + typedarray-to-buffer "^3.1.5" + web3 "^1.2.11" + class-is@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" @@ -1578,6 +1593,18 @@ ethereumjs-util@^6.0.0: ethjs-util "0.1.6" rlp "^2.2.3" +ethereumjs-util@^7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.6.tgz#ce4a6391a163cd1f2217b5276273f83bdacc7ab2" + integrity sha512-E9aJ9W7XZkcBqIblfstBU+0nGSjF9Dz/Ps7s1NTFOgDZM8pwD+nX1P1GBJeSqB6Osxhj2UtuxVCqjvmrj2svzw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.4" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -3461,7 +3488,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.3: +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: version "2.2.6" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== @@ -3893,9 +3920,19 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -"tornado-cash-anonymity-mining@git+https://github.com/tornadocash/tornado-anonymity-mining.git#dd4b996b89580fad986604e507a7e56ad64a3f71": +"torn-token@git+ssh://github.com/tornadocash/torn-token.git#b90fc5adccbf9a87c3bdac6175a0e038a9ed3dd8": version "1.0.0" - resolved "git+https://github.com/tornadocash/tornado-anonymity-mining.git#dd4b996b89580fad986604e507a7e56ad64a3f71" + resolved "git+ssh://github.com/tornadocash/torn-token.git#b90fc5adccbf9a87c3bdac6175a0e038a9ed3dd8" + dependencies: + "@openzeppelin/contracts" "^3.1.0" + dotenv "^8.2.0" + eth-sig-util "^2.5.3" + ethereumjs-util "^7.0.3" + web3 "^1.2.11" + +"tornado-cash-anonymity-mining@git+ssh://github.com/tornadocash/tornado-anonymity-mining.git#dd4b996b89580fad986604e507a7e56ad64a3f71": + version "1.0.0" + resolved "git+ssh://github.com/tornadocash/tornado-anonymity-mining.git#dd4b996b89580fad986604e507a7e56ad64a3f71" dependencies: circomlib "git+https://github.com/tornadocash/circomlib.git#5beb6aee94923052faeecea40135d45b6ce6172c" decimal.js "^10.2.0" @@ -3945,9 +3982,9 @@ tweetnacl@^1.0.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== -"tx-manager@git+https://github.com/tornadocash/tx-manager.git#df118be318b007e597e157504d105dfa3e6322a1": +"tx-manager@git+ssh://github.com/tornadocash/tx-manager.git#df118be318b007e597e157504d105dfa3e6322a1": version "0.1.0" - resolved "git+https://github.com/tornadocash/tx-manager.git#df118be318b007e597e157504d105dfa3e6322a1" + resolved "git+ssh://github.com/tornadocash/tx-manager.git#df118be318b007e597e157504d105dfa3e6322a1" dependencies: async-mutex "^0.2.4" gas-price-oracle "^0.1.5"