From f3af81fd90f2bc91dd052ba42a955c8790ce5874 Mon Sep 17 00:00:00 2001 From: Leandro Yalet Date: Thu, 7 May 2020 11:41:29 -0300 Subject: [PATCH] feat(rns): new placement events (#66) --- package-lock.json | 462 +-------------------------- src/rns/hooks/domain.hooks.ts | 11 +- src/rns/hooks/sold-domain.hooks.ts | 11 +- src/rns/hooks/utils.ts | 13 - src/rns/models/domain-offer.model.ts | 2 +- src/rns/rns.blockchain.ts | 106 +++--- 6 files changed, 85 insertions(+), 520 deletions(-) delete mode 100644 src/rns/hooks/utils.ts diff --git a/package-lock.json b/package-lock.json index 39dd6db8..41a476a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2112,16 +2112,12 @@ }, "@rsksmart/rif-marketplace-nfts": { "version": "0.0.2", - "resolved": "github:rsksmart/rif-marketplace-nfts#08e424f0844dcc98a0b1ee3ddff4f1f181f85d3e", + "resolved": "https://registry.npmjs.org/@rsksmart/rif-marketplace-nfts/-/rif-marketplace-nfts-0.0.2.tgz", + "integrity": "sha512-ij/CRGi8MWlX1RDC5MPF5970ONxORzvqyPc4evGP+RugG+y1Apiifddp/XoBEG8HwO9TnBCRi2EWauccXmxklQ==", "requires": { "@openzeppelin/contracts": "^2.5.0", "@rsksmart/erc677": "^1.0.1", - "solidity-bytes-utils": "0.0.8", - "typechain": "^1.0.5", - "typechain-target-ethers": "^1.0.4", - "typechain-target-truffle": "^1.0.2", - "typechain-target-web3-v1": "^1.0.4", - "typechain-target-web3-v2": "^1.0.0" + "solidity-bytes-utils": "0.0.8" } }, "@rsksmart/rif-marketplace-storage": { @@ -2442,14 +2438,6 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "requires": { - "@types/node": "*" - } - }, "@types/mocha": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", @@ -2490,11 +2478,6 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "@types/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ==" - }, "@types/qs": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.1.tgz", @@ -2505,14 +2488,6 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==" }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "requires": { - "@types/node": "*" - } - }, "@types/serve-favicon": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@types/serve-favicon/-/serve-favicon-2.5.0.tgz", @@ -3205,14 +3180,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "requires": { - "typical": "^2.6.1" - } - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -5474,16 +5441,6 @@ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", "dev": true }, - "command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "requires": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -10302,25 +10259,6 @@ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", "dev": true }, - "find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", - "requires": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "requires": { - "typical": "^2.6.0" - } - } - } - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -17908,11 +17846,6 @@ "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" - }, "pretty-bytes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", @@ -22302,25 +22235,6 @@ } } }, - "test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", - "requires": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "requires": { - "typical": "^2.6.0" - } - } - } - }, "testrpc": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", @@ -22775,27 +22689,6 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, - "ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==" - }, - "ts-generator": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.0.8.tgz", - "integrity": "sha512-Gi+aZCELpVL7Mqb+GuMgM+n8JZ/arZZib1iD/R9Ok8JDjOCOCrqS9b1lr72ku7J45WeDCFZxyJoRsiQvhokCnw==", - "requires": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^1.13.2", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^1.14.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - } - }, "ts-node": { "version": "8.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.9.1.tgz", @@ -23081,350 +22974,6 @@ "mime-types": "~2.1.24" } }, - "typechain": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-1.0.5.tgz", - "integrity": "sha512-gbQmJXPKuYQ0p3tK+dMhpdQql/UPtSnkPQXw2QM/aqwCengI86z2vEM2e5rVQpmk/blFx1PYNdApSDxE12rR1Q==", - "requires": { - "command-line-args": "^4.0.7", - "debug": "^3.0.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-generator": "^0.0.8" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.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==" - } - } - }, - "typechain-target-ethers": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typechain-target-ethers/-/typechain-target-ethers-1.0.4.tgz", - "integrity": "sha512-ay4qcan8erubMgBUcMErKplwQXydWCo/mBmrYGfbnnbUYzRe99jGs4uuSEi1JH2jGDtRi1sRDpIW0q9V4fd14A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "typechain-target-truffle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typechain-target-truffle/-/typechain-target-truffle-1.0.2.tgz", - "integrity": "sha512-XF3Iq2IzR+Pqvx6fcKIKGXNEk3lEcY24vYv9VqoVPfPB6vUM09PRLJCeLm1/ag6Pr2PICKUA0f4Es+YTR3ESKA==", - "requires": { - "lodash": "^4.17.15" - } - }, - "typechain-target-web3-v1": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typechain-target-web3-v1/-/typechain-target-web3-v1-1.0.4.tgz", - "integrity": "sha512-jQ6eCfY7QorBq6kQDjSy5LMuImZGkp6IXR6FXZp7/ulITIxAfb6Dxh+yvh0NN/zboLnMPvvSJi6tHWCqlwfSDA==", - "requires": { - "lodash": "^4.17.15", - "web3": "^1.2.4" - }, - "dependencies": { - "@types/node": { - "version": "10.17.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.21.tgz", - "integrity": "sha512-PQKsydPxYxF1DsAFWmunaxd3sOi3iMt6Zmx/tgaagHYmwJ/9cRH91hQkeJZaUGWbvn0K5HlSVEXkn5U/llWPpQ==" - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "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" - } - }, - "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" - } - }, - "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=" - }, - "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": { - "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" - } - } - } - }, - "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" - } - }, - "web3": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.7.tgz", - "integrity": "sha512-jAAJHMfUlTps+jH2li1ckDFEpPrEEriU/ubegSTGRl3KRdNhEqT93+3kd7FHJTn3NgjcyURo2+f7Da1YcZL8Mw==", - "requires": { - "web3-bzz": "1.2.7", - "web3-core": "1.2.7", - "web3-eth": "1.2.7", - "web3-eth-personal": "1.2.7", - "web3-net": "1.2.7", - "web3-shh": "1.2.7", - "web3-utils": "1.2.7" - } - }, - "web3-bzz": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.7.tgz", - "integrity": "sha512-iTIWBR+Z+Bn09WprtKm46LmyNOasg2lUn++AjXkBTB8UNxlUybxtza84yl2ETTZUs0zuFzdSSAEgbjhygG+9oA==", - "requires": { - "@types/node": "^10.12.18", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - } - }, - "web3-core": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.7.tgz", - "integrity": "sha512-QA0MTae0gXcr3KHe3cQ4x56+Wh43ZKWfMwg1gfCc3NNxPRM1jJ8qudzyptCAUcxUGXWpDG8syLIn1APDz5J8BQ==", - "requires": { - "@types/bn.js": "^4.11.4", - "@types/node": "^12.6.1", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.7", - "web3-core-method": "1.2.7", - "web3-core-requestmanager": "1.2.7", - "web3-utils": "1.2.7" - }, - "dependencies": { - "@types/node": { - "version": "12.12.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.37.tgz", - "integrity": "sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==" - } - } - }, - "web3-core-helpers": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.7.tgz", - "integrity": "sha512-bdU++9QATGeCetVrMp8pV97aQtVkN5oLBf/TWu/qumC6jK/YqrvLlBJLdwbz0QveU8zOSap6GCvJbqKvmmbV2A==", - "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.7", - "web3-utils": "1.2.7" - } - }, - "web3-core-method": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.7.tgz", - "integrity": "sha512-e1TI0QUnByDMbQ8QHwnjxfjKw0LIgVRY4TYrlPijET9ebqUJU1HCayn/BHIMpV6LKyR1fQj9EldWyT64wZQXkg==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.7", - "web3-core-promievent": "1.2.7", - "web3-core-subscriptions": "1.2.7", - "web3-utils": "1.2.7" - } - }, - "web3-core-promievent": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.7.tgz", - "integrity": "sha512-jNmsM/czCeMGQqKKwM9/HZVTJVIF96hdMVNN/V9TGvp+EEE7vDhB4pUocDnc/QF9Z/5QFBCVmvNWttlRgZmU0A==", - "requires": { - "eventemitter3": "3.1.2" - } - }, - "web3-core-requestmanager": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.7.tgz", - "integrity": "sha512-HJb/txjHixu1dxIebiZQKBoJCaNu4gsh7mq/uj6Z/w6tIHbybL90s/7ADyMED353yyJ2tDWtYJqeMVAR+KtdaA==", - "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.7", - "web3-providers-http": "1.2.7", - "web3-providers-ipc": "1.2.7", - "web3-providers-ws": "1.2.7" - } - }, - "web3-eth-iban": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.7.tgz", - "integrity": "sha512-2NrClz1PoQ3nSJBd+91ylCOVga9qbTxjRofq/oSCoHVAEvz3WZyttx9k5DC+0rWqwJF1h69ufFvdHAAlmN/4lg==", - "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.2.7" - } - }, - "web3-eth-personal": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.7.tgz", - "integrity": "sha512-2OAa1Spz0uB29dwCM8+1y0So7E47A4gKznjBEwXIYEcUIsvwT5X7ofFhC2XxyRpqlIWZSQAxRSSJFyupRRXzyw==", - "requires": { - "@types/node": "^12.6.1", - "web3-core": "1.2.7", - "web3-core-helpers": "1.2.7", - "web3-core-method": "1.2.7", - "web3-net": "1.2.7", - "web3-utils": "1.2.7" - }, - "dependencies": { - "@types/node": { - "version": "12.12.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.37.tgz", - "integrity": "sha512-4mXKoDptrXAwZErQHrLzpe0FN/0Wmf5JRniSVIdwUrtDf9wnmEV1teCNLBo/TwuXhkK/bVegoEn/wmb+x0AuPg==" - } - } - }, - "web3-net": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.7.tgz", - "integrity": "sha512-j9qeZrS1FNyCeA0BfdLojkxOZQz3FKa1DJI+Dw9fEVhZS68vLOFANu2RB96gR9BoPHo5+k5D3NsKOoxt1gw3Gg==", - "requires": { - "web3-core": "1.2.7", - "web3-core-method": "1.2.7", - "web3-utils": "1.2.7" - } - }, - "web3-providers-http": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.7.tgz", - "integrity": "sha512-vazGx5onuH/zogrwkUaLFJwFcJ6CckP65VFSHoiV+GTQdkOqgoDIha7StKkslvDz4XJ2FuY/zOZHbtuOYeltXQ==", - "requires": { - "web3-core-helpers": "1.2.7", - "xhr2-cookies": "1.1.0" - } - }, - "web3-providers-ipc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.7.tgz", - "integrity": "sha512-/zc0y724H2zbkV4UbGGMhsEiLfafjagIzfrsWZnyTZUlSB0OGRmmFm2EkLJAgtXrLiodaHHyXKM0vB8S24bxdA==", - "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.7" - } - }, - "web3-providers-ws": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.7.tgz", - "integrity": "sha512-b5XzqDpRkNVe6MFs5K6iqOEyjQikHtg3KuU2/ClCDV37hm0WN4xCRVMC0LwegulbDXZej3zT9+1CYzGaGFREzA==", - "requires": { - "@web3-js/websocket": "^1.0.29", - "eventemitter3": "^4.0.0", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.7" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" - } - } - }, - "web3-shh": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.7.tgz", - "integrity": "sha512-f6PAgcpG0ZAo98KqCmeHoDEx5qzm3d5plet18DkT4U6WIeYowKdec8vZaLPRR7c2XreXFJ2gQf45CB7oqR7U/w==", - "requires": { - "web3-core": "1.2.7", - "web3-core-method": "1.2.7", - "web3-core-subscriptions": "1.2.7", - "web3-net": "1.2.7" - } - }, - "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" - } - } - } - }, - "typechain-target-web3-v2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typechain-target-web3-v2/-/typechain-target-web3-v2-1.0.0.tgz", - "integrity": "sha512-HggArMMcmLMRjWgT9FCqss2HUFvtDuQZ0hllfvgEJp572SHZP8WoJ1KGb+1fSOe5EX0qaYDlqWejb4el2JsjpA==", - "requires": { - "lodash": "^4.17.15" - } - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -23444,11 +22993,6 @@ "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, - "typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=" - }, "uberproto": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/uberproto/-/uberproto-2.0.6.tgz", diff --git a/src/rns/hooks/domain.hooks.ts b/src/rns/hooks/domain.hooks.ts index 787ef476..4f2d8c94 100644 --- a/src/rns/hooks/domain.hooks.ts +++ b/src/rns/hooks/domain.hooks.ts @@ -1,6 +1,5 @@ import { HookContext } from '@feathersjs/feathers' import { disallow } from 'feathers-hooks-common' -import { setOwnerAddressParamHook } from './utils' export default { before: { @@ -10,9 +9,17 @@ export default { raw: false, nest: true } + + if (!context.params.query) { + context.params.query = {} + } + + if (context.params.route?.ownerAddress) { + context.params.query.ownerAddress = context.params.route.ownerAddress.toLowerCase() + } } ], - find: [setOwnerAddressParamHook], + find: [], get: [], create: disallow(), update: disallow(), diff --git a/src/rns/hooks/sold-domain.hooks.ts b/src/rns/hooks/sold-domain.hooks.ts index c9dc7d71..eacc7138 100644 --- a/src/rns/hooks/sold-domain.hooks.ts +++ b/src/rns/hooks/sold-domain.hooks.ts @@ -2,7 +2,6 @@ import { HookContext } from '@feathersjs/feathers' import { disallow } from 'feathers-hooks-common' import Domain from '../models/domain.model' -import { setOwnerAddressParamHook } from './utils' export default { before: { @@ -13,9 +12,17 @@ export default { nest: true, include: [Domain] } + + if (!context.params.query) { + context.params.query = {} + } + + if (context.params.route?.ownerAddress) { + context.params.query.sellerAddress = context.params.route.ownerAddress.toLowerCase() + } } ], - find: [setOwnerAddressParamHook], + find: [], get: [], create: disallow(), update: disallow(), diff --git a/src/rns/hooks/utils.ts b/src/rns/hooks/utils.ts deleted file mode 100644 index 1c659967..00000000 --- a/src/rns/hooks/utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { HookContext } from '@feathersjs/feathers' - -export function setOwnerAddressParamHook (context: HookContext): HookContext { - if (!context.params.query) { - context.params.query = {} - } - - if (context.params.route?.ownerAddress) { - context.params.query.ownerAddress = context.params.route.ownerAddress.toLowerCase() - } - - return context -} diff --git a/src/rns/models/domain-offer.model.ts b/src/rns/models/domain-offer.model.ts index 15d58475..f4408e91 100644 --- a/src/rns/models/domain-offer.model.ts +++ b/src/rns/models/domain-offer.model.ts @@ -29,6 +29,6 @@ export default class DomainOffer extends Model { @Column({ type: DataType.DATE }) creationDate!: number - @Column({ type: DataType.ENUM('ACTIVE', 'CANCELED') }) + @Column({ type: DataType.ENUM('ACTIVE', 'CANCELED', 'SOLD') }) status!: string } diff --git a/src/rns/rns.blockchain.ts b/src/rns/rns.blockchain.ts index 1ac3eb2f..0767de0d 100644 --- a/src/rns/rns.blockchain.ts +++ b/src/rns/rns.blockchain.ts @@ -35,7 +35,7 @@ async function transferHandler (eventData: EventData): Promise { if (soldDomain) { logger.info(`Transfer event: SoldDomain ${tokenId} created`) } - const [affectedRows, realAffectedRows] = await Domain.update({ ownerAddress }, { where: { tokenId } }) + const [affectedRows] = await Domain.update({ ownerAddress }, { where: { tokenId } }) if (affectedRows) { logger.info(`Transfer event: Updated Domain ${domain} -> ${tokenId}`) @@ -47,6 +47,8 @@ async function transferHandler (eventData: EventData): Promise { } async function expirationChangedHandler (eventData: EventData): Promise { + // event ExpirationChanged(uint256 tokenId, uint expirationTime); + const tokenId = Utils.numberToHex(eventData.returnValues.tokenId) const expirationDate = eventData.returnValues.expirationTime * 1000 const [domain, created] = await Domain.upsert({ tokenId, expirationDate }, { returning: true }) @@ -64,7 +66,7 @@ async function nameChangedHandler (eventData: EventData): Promise { const label = name.substring(0, name.indexOf('.')) const tokenId = Utils.sha3(label) - const [affectedRows, realAffectedRows] = await Domain.update({ name: name }, { where: { tokenId: tokenId } }) + const [affectedRows] = await Domain.update({ name: name }, { where: { tokenId: tokenId } }) if (affectedRows) { logger.info(`NameChanged event: Updated Domain ${name} -> ${tokenId}`) @@ -73,67 +75,85 @@ async function nameChangedHandler (eventData: EventData): Promise { } } -async function updatePlacementHandler (eventData: EventData): Promise { - // UpdatePlacement(tokenId, paymentToken, cost) +async function tokenPlacedHandler (eventData: EventData): Promise { + // event TokenPlaced(uint256 indexed tokenId, address indexed paymentToken, uint256 cost); + const transactionHash = eventData.transactionHash const tokenId = Utils.numberToHex(eventData.returnValues.tokenId) const paymentToken = eventData.returnValues.paymentToken const cost = eventData.returnValues.cost - if (cost === '0') { - // Canceled or sold - logger.info(`Canceled or sold: ${tokenId}`) - const lastOffer = await DomainOffer.findOne({ where: { tokenId: tokenId, status: 'ACTIVE' } }) + const domain = await Domain.findByPk(tokenId) - if (lastOffer) { - logger.info(`Found last offer for ${tokenId}`) - lastOffer.status = 'CANCELED' - lastOffer.save() + if (!domain) { + throw new Error(`Domain with token ID ${tokenId} not found!`) + } - const [affectedRows, realAffectedRows] = await SoldDomain.update({ - price: lastOffer.price, - paymentToken: lastOffer.paymentToken, - soldDate: Date.now() - }, { where: { id: transactionHash } }) + const domainOffer = await DomainOffer.create({ + offerId: transactionHash, + sellerAddress: domain.ownerAddress, + tokenId: tokenId, + paymentToken: paymentToken, + price: cost, + creationDate: Date.now(), // TODO: get from block timestamp + status: 'ACTIVE' + }) + + if (domainOffer) { + logger.info(`TokenPlaced event: ${tokenId} created`) + } +} - if (affectedRows) { - logger.info(`UpdatePlacement event: Sold Domain ${tokenId}`) - } else { - logger.info(`UpdatePlacement event: no Domain ${tokenId} updated`) - } - } +async function tokenUnplacedHandler (eventData: EventData): Promise { + // event TokenUnplaced(uint256 indexed tokenId); + + const tokenId = Utils.numberToHex(eventData.returnValues.tokenId) + + const [affectedRows] = await DomainOffer.update({ + status: 'CANCELED' + }, { where: { tokenId: tokenId, status: 'ACTIVE' } }) + + if (affectedRows) { + logger.info(`TokenUnplaced event: ${tokenId} updated`) } else { - const price = cost + logger.info(`TokenUnplaced event: ${tokenId} not updated`) + } +} - const domain = await Domain.findByPk(tokenId) +async function tokenSoldHandler (eventData: EventData): Promise { + // event TokenSold(uint256 indexed tokenId); - if (!domain) { - throw new Error(`Domain with token ID ${tokenId} not found!`) - } + const transactionHash = eventData.transactionHash + const tokenId = Utils.numberToHex(eventData.returnValues.tokenId) + + const lastOffer = await DomainOffer.findOne({ where: { tokenId: tokenId, status: 'ACTIVE' } }) + + if (lastOffer) { + logger.info(`Found last offer for ${tokenId}`) + lastOffer.status = 'SOLD' + lastOffer.save() - const domainOffer = await DomainOffer.create({ - offerId: transactionHash, - sellerAddress: domain.ownerAddress, - tokenId: tokenId, - paymentToken: paymentToken, - price: price, - creationDate: Date.now(), // TODO: get from block timestamp - status: 'ACTIVE' - }) - - if (domainOffer) { - logger.info(`UpdatePlacement event: Domain ${tokenId} created`) + const [affectedRows] = await SoldDomain.update({ + price: lastOffer.price, + paymentToken: lastOffer.paymentToken, + soldDate: Date.now() + }, { where: { id: transactionHash } }) + + if (affectedRows) { + logger.info(`TokenSold event: ${tokenId}`) + } else { + logger.info(`TokenSold event: ${tokenId} not updated`) } } - - logger.info(`UpdatePlacement: ${tokenId}, ${paymentToken}, ${cost}`) } const commands = { Transfer: transferHandler, ExpirationChanged: expirationChangedHandler, NameChanged: nameChangedHandler, - UpdatePlacement: updatePlacementHandler + TokenPlaced: tokenPlacedHandler, + TokenUnplaced: tokenUnplacedHandler, + TokenSold: tokenSoldHandler } function isValidEvent (value: string): value is keyof typeof commands {