diff --git a/package-lock.json b/package-lock.json index 2122396..c908efd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -257,6 +257,14 @@ "resolved": "https://registry.npmjs.org/@types/base-x/-/base-x-1.0.29.tgz", "integrity": "sha1-ii1z5KXDEhdXpfiHDPpFCWVRhrY=" }, + "@types/bn.js": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.3.tgz", + "integrity": "sha512-auZ3vEo3UW8tZc9NhF0MTnutKlf+YhsfC3+dwskFcil/EoqqZF60pGuJ2v2Ae1OJTUp3DJnjOJMqrpkmKB904w==", + "requires": { + "@types/node": "*" + } + }, "@types/bs58": { "version": "3.0.30", "resolved": "https://registry.npmjs.org/@types/bs58/-/bs58-3.0.30.tgz", @@ -410,6 +418,16 @@ "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.8.9.tgz", "integrity": "sha512-vfzZGgZKRFy7KEWcBGfIFk+h6B+thDCLfkD1exMBMRlUsx2icA+J6y4kAbZs/TjSTeY1duw89QUU133TSzr60Q==" }, + "@types/web3": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/web3/-/web3-1.0.12.tgz", + "integrity": "sha512-CZDwP4Opy2BjWfux+o05DXG0SSIyj7BQt7kYR+M8a8f/wTjJgre1JEECYUQ8Yu9NQg4yX4g7BjW2/Bd1KbZHOg==", + "dev": true, + "requires": { + "@types/bn.js": "*", + "@types/underscore": "*" + } + }, "@webassemblyjs/ast": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", @@ -3063,6 +3081,22 @@ } } }, + "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=", + "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=" + } + } + }, "eth-json-rpc-infura": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.1.2.tgz", @@ -3364,6 +3398,65 @@ } } }, + "ethers": { + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", + "integrity": "sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw==", + "requires": { + "@types/node": "^10.3.2", + "aes-js": "3.0.0", + "bn.js": "^4.4.0", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.3", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, "ethjs-abi": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/ethjs-abi/-/ethjs-abi-0.1.8.tgz", @@ -4866,6 +4959,21 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, + "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.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", @@ -7220,6 +7328,11 @@ "nan": "^2.0.8" } }, + "scrypt-js": { + "version": "2.0.3", + "resolved": "http://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", + "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" + }, "scrypt.js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", @@ -9089,17 +9202,262 @@ } }, "web3": { - "version": "1.0.0-beta.35", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.35.tgz", - "integrity": "sha512-xwDmUhvTcHQvvNnOPcPZZgCxKUsI2e+GbHy7JkTK3/Rmnutazy8x7fsAXT9myw7V1qpi3GgLoZ3fkglSUbg1Mg==", - "requires": { - "web3-bzz": "1.0.0-beta.35", - "web3-core": "1.0.0-beta.35", - "web3-eth": "1.0.0-beta.35", - "web3-eth-personal": "1.0.0-beta.35", - "web3-net": "1.0.0-beta.35", - "web3-shh": "1.0.0-beta.35", - "web3-utils": "1.0.0-beta.35" + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.36.tgz", + "integrity": "sha512-fZDunw1V0AQS27r5pUN3eOVP7u8YAvyo6vOapdgVRolAu5LgaweP7jncYyLINqIX9ZgWdS5A090bt+ymgaYHsw==", + "requires": { + "web3-bzz": "1.0.0-beta.36", + "web3-core": "1.0.0-beta.36", + "web3-eth": "1.0.0-beta.36", + "web3-eth-personal": "1.0.0-beta.36", + "web3-net": "1.0.0-beta.36", + "web3-shh": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + }, + "web3-bzz": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.36.tgz", + "integrity": "sha512-clDRS/ziboJ5ytnrfxq80YSu9HQsT0vggnT3BkoXadrauyEE/9JNLxRu016jjUxqdkfdv4MgIPDdOS3Bv2ghiw==", + "requires": { + "got": "7.1.0", + "swarm-js": "0.1.37", + "underscore": "1.8.3" + } + }, + "web3-core": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", + "integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", + "requires": { + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-core-requestmanager": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", + "integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", + "requires": { + "underscore": "1.8.3", + "web3-eth-iban": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", + "integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-promievent": "1.0.0-beta.36", + "web3-core-subscriptions": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-core-promievent": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", + "integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", + "requires": { + "any-promise": "1.3.0", + "eventemitter3": "1.1.1" + } + }, + "web3-core-requestmanager": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", + "integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36", + "web3-providers-http": "1.0.0-beta.36", + "web3-providers-ipc": "1.0.0-beta.36", + "web3-providers-ws": "1.0.0-beta.36" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", + "integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", + "requires": { + "eventemitter3": "1.1.1", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36" + } + }, + "web3-eth": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.36.tgz", + "integrity": "sha512-uEa0UnbnNHUB4N2O1U+LsvxzSPJ/w3azy5115IseaUdDaiz6IFFgFfFP3ssauayQNCf7v2F44GXLfPhrNeb/Sw==", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.36", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-core-subscriptions": "1.0.0-beta.36", + "web3-eth-abi": "1.0.0-beta.36", + "web3-eth-accounts": "1.0.0-beta.36", + "web3-eth-contract": "1.0.0-beta.36", + "web3-eth-ens": "1.0.0-beta.36", + "web3-eth-iban": "1.0.0-beta.36", + "web3-eth-personal": "1.0.0-beta.36", + "web3-net": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", + "integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", + "requires": { + "ethers": "4.0.0-beta.1", + "underscore": "1.8.3", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.36.tgz", + "integrity": "sha512-MmgIlBEZ0ILLWV4+wfMrbeVVMU/VmQnCpgSDcw7wHKOKu47bKncJ6rVqVsUbC6d9F613Rios+Yj2Ua6SCHtmrg==", + "requires": { + "any-promise": "1.3.0", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.7", + "scrypt.js": "0.2.0", + "underscore": "1.8.3", + "uuid": "2.0.1", + "web3-core": "1.0.0-beta.36", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz", + "integrity": "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=", + "requires": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", + "integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.36", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-core-promievent": "1.0.0-beta.36", + "web3-core-subscriptions": "1.0.0-beta.36", + "web3-eth-abi": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", + "integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", + "requires": { + "bn.js": "4.11.6", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.36.tgz", + "integrity": "sha512-+oxvhojeWh4C/XtnlYURWRR3F5Cg7bQQNjtN1ZGnouKAZyBLoYDVVJ6OaPiveNtfC9RKnzLikn9/Uqc0xz410A==", + "requires": { + "web3-core": "1.0.0-beta.36", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-net": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-net": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.36.tgz", + "integrity": "sha512-BriXK0Pjr6Hc/VDq1Vn8vyOum4JB//wpCjgeGziFD6jC7Of8YaWC7AJYXje89OckzfcqX1aJyJlBwDpasNkAzQ==", + "requires": { + "web3-core": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-providers-http": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", + "integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", + "requires": { + "web3-core-helpers": "1.0.0-beta.36", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", + "integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", + "requires": { + "oboe": "2.1.3", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36" + } + }, + "web3-providers-ws": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", + "integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + } + }, + "web3-shh": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.36.tgz", + "integrity": "sha512-bREGHS/WprYFSvGUhyIk8RSpT2Z5SvJOKGBrsUW2nDIMWO6z0Op8E7fzC6GXY2HZfZliAqq6LirbXLgcLRWuPw==", + "requires": { + "web3-core": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-core-subscriptions": "1.0.0-beta.36", + "web3-net": "1.0.0-beta.36" + } + }, + "web3-utils": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", + "integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", + "requires": { + "bn.js": "4.11.6", + "eth-lib": "0.1.27", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.8.3", + "utf8": "2.1.1" + } + } } }, "web3-bzz": { @@ -9262,6 +9620,169 @@ "web3-utils": "1.0.0-beta.35" } }, + "web3-eth-ens": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.36.tgz", + "integrity": "sha512-8ZdD7XoJfSX3jNlZHSLe4G837xQ0v5a8cHCcDcd1IoqoY855X9SrIQ0Xdqia9p4mR1YcH1vgmkXY9/3hsvxS7g==", + "requires": { + "eth-ens-namehash": "2.0.8", + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.36", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-promievent": "1.0.0-beta.36", + "web3-eth-abi": "1.0.0-beta.36", + "web3-eth-contract": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + }, + "web3-core": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.36.tgz", + "integrity": "sha512-C2QW9CMMRZdYAiKiLkMrKRSp+gekSqTDgZTNvlxAdN1hXn4d9UmcmWSJXOmIHqr5N2ISbRod+bW+qChODxVE3Q==", + "requires": { + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-core-requestmanager": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.36.tgz", + "integrity": "sha512-gu74l0htiGWuxLQuMnZqKToFvkSM+UFPE7qUuy1ZosH/h2Jd+VBWg6k4CyNYVYfP0hL5x3CN8SBmB+HMowo55A==", + "requires": { + "underscore": "1.8.3", + "web3-eth-iban": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.36.tgz", + "integrity": "sha512-dJsP3KkGaqBBSdxfzvLsYPOmVaSs1lR/3oKob/gtUYG7UyTnwquwliAc7OXj+gqRA2E/FHZcM83cWdl31ltdSA==", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-promievent": "1.0.0-beta.36", + "web3-core-subscriptions": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-core-promievent": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.36.tgz", + "integrity": "sha512-RGIL6TjcOeJTullFLMurChPTsg94cPF6LI763y/sPYtXTDol1vVa+J5aGLp/4WW8v+s+1bSQO6zYq2ZtkbmtEQ==", + "requires": { + "any-promise": "1.3.0", + "eventemitter3": "1.1.1" + } + }, + "web3-core-requestmanager": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.36.tgz", + "integrity": "sha512-/CHuaMbiMDu1v8ANGYI7yFCnh1GaCWx5pKnUPJf+QTk2xAAw+Bvd97yZJIWPOK5AOPUIzxgwx9Ob/5ln6mTmYA==", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36", + "web3-providers-http": "1.0.0-beta.36", + "web3-providers-ipc": "1.0.0-beta.36", + "web3-providers-ws": "1.0.0-beta.36" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.36.tgz", + "integrity": "sha512-/evyLQ8CMEYXC5aUCodDpmEnmGVYQxaIjiEIfA/85f9ifHkfzP1aOwCAjcsLsJWnwrWDagxSpjCYrDtnNabdEw==", + "requires": { + "eventemitter3": "1.1.1", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.36.tgz", + "integrity": "sha512-fBfW+7hvA0rxEMV45fO7JU+0R32ayT7aRwG9Cl6NW2/QvhFeME2qVbMIWw0q5MryPZGIN8A6366hKNuWvVidDg==", + "requires": { + "ethers": "4.0.0-beta.1", + "underscore": "1.8.3", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.36.tgz", + "integrity": "sha512-cywqcIrUsCW4fyqsHdOb24OCC8AnBol8kNiptI+IHRylyCjTNgr53bUbjrXWjmEnear90rO0QhAVjLB1a4iEbQ==", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.36", + "web3-core-helpers": "1.0.0-beta.36", + "web3-core-method": "1.0.0-beta.36", + "web3-core-promievent": "1.0.0-beta.36", + "web3-core-subscriptions": "1.0.0-beta.36", + "web3-eth-abi": "1.0.0-beta.36", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.36.tgz", + "integrity": "sha512-b5AEDjjhOLR4q47Hbzf65zYE+7U7JgCgrUb13RU4HMIGoMb1q4DXaJw1UH8VVHCZulevl2QBjpCyrntecMqqCQ==", + "requires": { + "bn.js": "4.11.6", + "web3-utils": "1.0.0-beta.36" + } + }, + "web3-providers-http": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.36.tgz", + "integrity": "sha512-KLSqMS59nRdpet9B0B64MKgtM3n9wAHTcAHJ03hv79avQNTjHxtjZm0ttcjcFUPpWDgTCtcYCa7tqaYo9Pbeog==", + "requires": { + "web3-core-helpers": "1.0.0-beta.36", + "xhr2-cookies": "1.1.0" + } + }, + "web3-providers-ipc": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.36.tgz", + "integrity": "sha512-iEUrmdd2CzoWgp+75/ydom/1IaoLw95qkAzsgwjjZp1waDncHP/cvVGX74+fbUx4hRaPdchyzxCQfNpgLDmNjQ==", + "requires": { + "oboe": "2.1.3", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36" + } + }, + "web3-providers-ws": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.36.tgz", + "integrity": "sha512-wAnENuZx75T5ZSrT2De2LOaUuPf2yRjq1VfcbD7+Zd79F3DZZLBJcPyCNVQ1U0fAXt0wfgCKl7sVw5pffqR9Bw==", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.36", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + } + }, + "web3-utils": { + "version": "1.0.0-beta.36", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.36.tgz", + "integrity": "sha512-7ri74lG5fS2Th0fhYvTtiEHMB1Pmf2p7dQx1COQ3OHNI/CHNEMjzoNMEbBU6FAENrywfoFur40K4m0AOmEUq5A==", + "requires": { + "bn.js": "4.11.6", + "eth-lib": "0.1.27", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "underscore": "1.8.3", + "utf8": "2.1.1" + } + } + } + }, "web3-eth-iban": { "version": "1.0.0-beta.35", "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.35.tgz", @@ -9354,6 +9875,26 @@ "underscore": "1.8.3", "web3-core-helpers": "1.0.0-beta.35", "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + }, + "dependencies": { + "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" + } + }, + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "from": "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible", + "requires": { + "debug": "^2.2.0", + "nan": "^2.3.3", + "typedarray-to-buffer": "^3.1.2", + "yaeti": "^0.0.6" + } + } } }, "web3-shh": { @@ -9835,8 +10376,7 @@ "xmlhttprequest": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "dev": true + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" }, "xregexp": { "version": "4.0.0", diff --git a/package.json b/package.json index 54d20c3..7e13185 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "build:dev": "cross-env NODE_ENV=development webpack --mode development --display-error-details --progress --color", "build:prod": "npm run clean && cross-env NODE_ENV=production webpack --mode production --progress --color", "prepare": "# npm run lint && npm run build:dev", - "test": "source .env; ./node_modules/ts-mocha/bin/ts-mocha --timeout 60000 --paths -p ./tsconfig.json ./test/*.spec.ts ./test/**/*.spec.ts", + "test": "source .env; ./node_modules/ts-mocha/bin/ts-mocha --timeout 180000 --paths -p ./tsconfig.json ./test/*.spec.ts ./test/**/*.spec.ts", "clean": "rm -rf dist" }, "devDependencies": { @@ -35,6 +35,7 @@ "@types/chai-as-promised": "7.1.0", "@types/expect": "^1.20.3", "@types/mocha": "^5.2.5", + "@types/web3": "^1.0.12", "awesome-typescript-loader": "5.2.1", "babel-loader": "8.0.2", "babel-plugin-transform-es2015-modules-simple-commonjs": "^0.3.0", @@ -61,6 +62,7 @@ "webpack-node-externals": "1.7.2" }, "dependencies": { + "@types/bn.js": "^4.11.3", "@types/bs58": "3.0.30", "@types/detect-node": "^2.0.0", "@types/node-fetch": "2.1.2", @@ -78,7 +80,7 @@ "node-persist": "^3.0.1", "node-rsa": "1.0.1", "truffle-contract": "4.0.0-next.0", - "web3": "1.0.0-beta.35", + "web3": "1.0.0-beta.36", "web3-provider-engine": "^14.1.0" } } diff --git a/src/contracts/bindings/darknode_registry.ts b/src/contracts/bindings/darknode_registry.ts index 54ce6e9..bc1d599 100644 --- a/src/contracts/bindings/darknode_registry.ts +++ b/src/contracts/bindings/darknode_registry.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, Provider, TransactionReceipt, Tx } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface DarknodeRegistryContract { numDarknodesNextEpoch(options?: Tx): Promise; diff --git a/src/contracts/bindings/erc20.ts b/src/contracts/bindings/erc20.ts index 64e82cb..07aff0a 100644 --- a/src/contracts/bindings/erc20.ts +++ b/src/contracts/bindings/erc20.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, Provider, TransactionReceipt, Tx } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface ERC20Contract { totalSupply(options?: Tx): Promise; diff --git a/src/contracts/bindings/orderbook.ts b/src/contracts/bindings/orderbook.ts index 2ed5f63..b9b9600 100644 --- a/src/contracts/bindings/orderbook.ts +++ b/src/contracts/bindings/orderbook.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, Provider, TransactionReceipt, Tx } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface OrderbookContract { renounceOwnership(options?: Tx): PromiEvent; diff --git a/src/contracts/bindings/ren_ex_balances.ts b/src/contracts/bindings/ren_ex_balances.ts index 10f51ca..98333fb 100644 --- a/src/contracts/bindings/ren_ex_balances.ts +++ b/src/contracts/bindings/ren_ex_balances.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, Provider, TransactionReceipt, Tx } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface RenExBalancesContract { brokerVerifierContract(options?: Tx): Promise; diff --git a/src/contracts/bindings/ren_ex_settlement.ts b/src/contracts/bindings/ren_ex_settlement.ts index d0d115d..b64fed3 100644 --- a/src/contracts/bindings/ren_ex_settlement.ts +++ b/src/contracts/bindings/ren_ex_settlement.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, Provider, TransactionReceipt, Tx } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface RenExSettlementContract { orderStatus(index_0: string, options?: Tx): Promise; diff --git a/src/contracts/bindings/ren_ex_tokens.ts b/src/contracts/bindings/ren_ex_tokens.ts index 7d1f7e6..423d075 100644 --- a/src/contracts/bindings/ren_ex_tokens.ts +++ b/src/contracts/bindings/ren_ex_tokens.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, Provider, TransactionReceipt, Tx } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface RenExTokensContract { renounceOwnership(options?: Tx): PromiEvent; diff --git a/src/contracts/bindings/wyre.ts b/src/contracts/bindings/wyre.ts index 15cd280..6c618e0 100644 --- a/src/contracts/bindings/wyre.ts +++ b/src/contracts/bindings/wyre.ts @@ -1,11 +1,13 @@ // tslint:disable -import { BN } from "bn.js"; -import { Log, PromiEvent, TransactionReceipt, Tx, Provider } from "web3/types"; +import { Tx } from "web3/eth/types"; +import { Provider } from "web3/providers"; +import PromiEvent from "web3/promiEvent"; +import { TransactionReceipt, EventLog } from "web3/types"; -export interface Transaction { receipt: TransactionReceipt; tx: string; logs: Log[]; } +interface Transaction { receipt: TransactionReceipt; tx: string; logs: EventLog[]; } -type BigNumber = string | number | BN; +type BigNumber = string; export interface WyreContract { approve(_to: string, _tokenId: BigNumber, options?: Tx): PromiEvent; diff --git a/src/contracts/contracts.ts b/src/contracts/contracts.ts index 129796d..d08bfe1 100644 --- a/src/contracts/contracts.ts +++ b/src/contracts/contracts.ts @@ -1,6 +1,6 @@ const contract = require("./truffle-contract/index.js"); -import { Provider } from "web3/types"; +import { Provider } from "web3/providers"; // Bindings import { DarknodeRegistryArtifact } from "./bindings/darknode_registry"; diff --git a/src/declarations/bignumber.d.ts b/src/declarations/bignumber.d.ts index 27964a1..06ca036 100644 --- a/src/declarations/bignumber.d.ts +++ b/src/declarations/bignumber.d.ts @@ -1,5 +1,5 @@ import * as BigNumberLib from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; /** * The existing typings does not let you convert BN into BigNumber. diff --git a/src/declarations/bn.d.ts b/src/declarations/bn.d.ts deleted file mode 100644 index e4f82f4..0000000 --- a/src/declarations/bn.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* - * These types are based on [1] from @ukstv and [2] from @MicahZoltu. - * If anything is wrong with these types, feel free to complain to @vsund. - * - * [1] https://github.com/machinomy/types-bn - * [2] https://github.com/indutny/bn.js/pull/179 - */ - -declare module "bn.js" { - - export type Endianness = "le" | "be"; - - // Fix web3 types expecting BigNumber export - export type BigNumber = BN; - - export class BN { - public static isBN(b: any): b is BN; - public static min(left: BN, right: BN): BN; - public static max(left: BN, right: BN): BN; - - constructor(input: BN | number | string | number[] | Buffer, base?: number | "hex", endian?: Endianness); - - public clone(): BN; - public copy(dest: BN): void; - public inspect(): string; - public toString(base?: number | "hex", length?: number): string; - public toNumber(): number; - public toJSON(): string; - public toArray(endian?: Endianness, length?: number): number[]; - public toArrayLike(arrayLike: { new(params: any): B }, endian?: Endianness, length?: number): B; - public toBuffer(endian?: Endianness, length?: number): Buffer; - public bitLength(): number; - public zeroBits(): number; - public byteLength(): number; - public isNeg(): boolean; - public isEven(): boolean; - public isOdd(): boolean; - public isZero(): boolean; - public cmp(b: BN): number; - public lt(b: BN): boolean; - public lte(b: BN): boolean; - public gt(b: BN): boolean; - public gte(b: BN): boolean; - public eq(b: BN): boolean; - - public neg(): BN; - public abs(): BN; - public add(b: BN): BN; - public sub(b: BN): BN; - public mul(b: BN): BN; - public sqr(): BN; - public pow(b: BN): BN; - public div(b: BN): BN; - public mod(b: BN): BN; - public divRound(b: BN): BN; - - public or(b: BN): BN; - public and(b: BN): BN; - public xor(b: BN): BN; - public setn(b: number): BN; - public shln(b: number): BN; - public shrn(b: number): BN; - public testn(b: number): boolean; - public maskn(b: number): BN; - public bincn(b: number): BN; - public notn(w: number): BN; - - public gcd(b: BN): BN; - public egcd(b: BN): { a: BN; b: BN; gcd: BN }; - public invm(b: BN): BN; - } - -} diff --git a/src/index.ts b/src/index.ts index cf259b0..05d45c9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,10 @@ import BigNumber from "bignumber.js"; import Web3 from "web3"; -import { BN } from "bn.js"; +import BN from "bn.js"; +import PromiEvent from "web3/promiEvent"; -import { PromiEvent, Provider } from "web3/types"; +import { Provider } from "web3/providers"; import LocalStorage from "./storage/localStorage"; diff --git a/src/lib/balances.ts b/src/lib/balances.ts index df9b6d8..9d7e3d9 100644 --- a/src/lib/balances.ts +++ b/src/lib/balances.ts @@ -1,5 +1,5 @@ import BigNumber from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; import { ErrNumericalPrecision } from "./errors"; // import { Token, TokenDetails } from "./market"; diff --git a/src/lib/ingress.ts b/src/lib/ingress.ts index b09ae8f..cd5c37b 100644 --- a/src/lib/ingress.ts +++ b/src/lib/ingress.ts @@ -6,7 +6,7 @@ const NodeRSA = require("node-rsa") as { new(): NodeRSAType }; import Web3 from "web3"; -import { BN } from "bn.js"; +import BN from "bn.js"; import { List, Map } from "immutable"; import * as shamir from "./shamir"; @@ -236,10 +236,10 @@ export async function requestWithdrawalSignature(ingressURL: string, address: st return new EncodedData(resp.data.signature, Encodings.BASE64); } -async function ordersBatch(orderbook: OrderbookContract, offset: number, limit: number): Promise> { +async function ordersBatch(web3: Web3, orderbook: OrderbookContract, offset: number, limit: number): Promise> { let orders; try { - orders = await orderbook.getOrders(offset, limit); + orders = await orderbook.getOrders(web3.utils.toHex(offset), web3.utils.toHex(limit)); } catch (error) { console.error(`Failed to get call getOrders in ordersBatch`); throw error; @@ -256,7 +256,7 @@ async function ordersBatch(orderbook: OrderbookContract, offset: number, limit: return ordersList; } -export async function getOrders(orderbook: OrderbookContract, startIn?: number, limitIn?: number): Promise> { +export async function getOrders(web3: Web3, orderbook: OrderbookContract, startIn?: number, limitIn?: number): Promise> { let orderCount; try { orderCount = new BN(await orderbook.ordersCount()).toNumber(); @@ -288,7 +288,7 @@ export async function getOrders(orderbook: OrderbookContract, startIn?: number, batchLimit = Math.min(batchLimit, stop - start); // Retrieve batch of orders and increment start - const batch = await ordersBatch(orderbook, start, batchLimit); + const batch = await ordersBatch(web3, orderbook, start, batchLimit); ordersList = ordersList.concat(batch).toList(); start += batchLimit; } @@ -496,8 +496,8 @@ export function encryptForDarknode(darknodeKey: NodeRSAType | null, share: shami * When the {start} value is not the NULL address, it is always returned as the * first entry so it should not be re-added to the list of all darknodes. */ -async function getAllDarknodes(darknodeRegistryContract: DarknodeRegistryContract): Promise { - const batchSize = 10; +async function getAllDarknodes(web3: Web3, darknodeRegistryContract: DarknodeRegistryContract): Promise { + const batchSize = web3.utils.toHex(10); const allDarknodes = []; let lastDarknode = NULL; @@ -514,7 +514,7 @@ async function getAllDarknodes(darknodeRegistryContract: DarknodeRegistryContrac * Calculate pod arrangement based on current epoch */ async function getPods(web3: Web3, darknodeRegistryContract: DarknodeRegistryContract, simpleConsole: SimpleConsole): Promise> { - const darknodes = await getAllDarknodes(darknodeRegistryContract); + const darknodes = await getAllDarknodes(web3, darknodeRegistryContract); const minimumPodSize = new BN(await darknodeRegistryContract.minimumPodSize()).toNumber(); simpleConsole.log(`Using minimum pod size ${minimumPodSize}`); const epoch = await darknodeRegistryContract.currentEpoch(); diff --git a/src/lib/order.ts b/src/lib/order.ts index 3cb18ce..e81dd94 100644 --- a/src/lib/order.ts +++ b/src/lib/order.ts @@ -1,5 +1,5 @@ import BigNumber from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; import { OrderStatus } from "../index"; import { ErrUnknownOrderStatus } from "./errors"; diff --git a/src/lib/shamir.ts b/src/lib/shamir.ts index 95a14b1..f72d605 100644 --- a/src/lib/shamir.ts +++ b/src/lib/shamir.ts @@ -1,4 +1,4 @@ -import { BN } from "bn.js"; +import BN from "bn.js"; import crypto from "crypto"; import { List } from "immutable"; diff --git a/src/lib/tokens.ts b/src/lib/tokens.ts index de3fea4..bcad447 100644 --- a/src/lib/tokens.ts +++ b/src/lib/tokens.ts @@ -1,7 +1,7 @@ import RenExSDK from "../index"; import { BigNumber } from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; import { Token, TokenCode, TokenDetails } from "../types"; export function toSmallestUnit(amount: BigNumber, tokenDetails: TokenDetails): BigNumber { diff --git a/src/methods/balanceActionMethods.ts b/src/methods/balanceActionMethods.ts index 51ea94a..39ec0ae 100644 --- a/src/methods/balanceActionMethods.ts +++ b/src/methods/balanceActionMethods.ts @@ -1,7 +1,7 @@ import BigNumber from "bignumber.js"; -import { BN } from "bn.js"; -import { PromiEvent } from "web3/types"; +import BN from "bn.js"; +import PromiEvent from "web3/promiEvent"; import RenExSDK from "../index"; import { BalanceAction, BalanceActionType, NumberInput, Token, TokenCode, TokenDetails, Transaction, TransactionStatus } from "../types"; @@ -96,7 +96,7 @@ export const deposit = async ( const { txHash, promiEvent } = await onTxHash(sdk._contracts.renExBalances.deposit( tokenDetails.address, - valueBN, + sdk.getWeb3().utils.toHex(valueBN), { value: valueBN.toString(), from: address, gasPrice }, )); @@ -131,12 +131,14 @@ export const deposit = async ( // if there are any pending deposits for the same token const allowance = new BN(await tokenContract.allowance(address, sdk._contracts.renExBalances.address, { from: address, gasPrice })); if (allowance.lt(valueBN)) { - await onTxHash(tokenContract.approve(sdk._contracts.renExBalances.address, valueBN, { from: address, gasPrice })); + await onTxHash(tokenContract.approve(sdk._contracts.renExBalances.address, + sdk.getWeb3().utils.toHex(valueBN), + { from: address, gasPrice })); } const { txHash, promiEvent } = await onTxHash(sdk._contracts.renExBalances.deposit( tokenDetails.address, - valueBN, + sdk.getWeb3().utils.toHex(valueBN), { // Manually set gas limit since gas estimation won't work // if the ethereum node hasn't seen the previous transaction @@ -226,7 +228,7 @@ export const withdraw = async ( const { txHash, promiEvent } = await onTxHash(sdk._contracts.renExBalances.withdraw( tokenDetails.address, - valueBN, + sdk.getWeb3().utils.toHex(valueBN), signature.toHex(), { from: address, gasPrice, /* nonce: balanceAction.nonce */ }, )); diff --git a/src/methods/generalMethods.ts b/src/methods/generalMethods.ts index 731d48d..734df3b 100644 --- a/src/methods/generalMethods.ts +++ b/src/methods/generalMethods.ts @@ -28,7 +28,7 @@ export const transfer = async (sdk: RenExSDK, addr: string, token: TokenCode, va tokenContract = new (withProvider(sdk.getWeb3().currentProvider, ERC20))(tokenDetails.address); sdk._contracts.erc20.set(token, tokenContract); } - await tokenContract.transfer(addr, value); + await tokenContract.transfer(addr, sdk.getWeb3().utils.toHex(value)); } }; diff --git a/src/methods/orderbookMethods.ts b/src/methods/orderbookMethods.ts index 3ca6483..475cee7 100644 --- a/src/methods/orderbookMethods.ts +++ b/src/methods/orderbookMethods.ts @@ -1,7 +1,7 @@ import { BigNumber } from "bignumber.js"; -import { BN } from "bn.js"; -import { PromiEvent } from "web3/types"; +import BN from "bn.js"; +import PromiEvent from "web3/promiEvent"; import * as ingress from "../lib/ingress"; @@ -235,7 +235,7 @@ export const openOrder = async ( let txHash: string; let promiEvent; try { - ({ txHash, promiEvent } = await onTxHash(sdk._contracts.orderbook.openOrder(1, signature.toString(), orderID.toHex(), { from: sdk.getAddress(), gasPrice }))); + ({ txHash, promiEvent } = await onTxHash(sdk._contracts.orderbook.openOrder(sdk.getWeb3().utils.toHex(1), signature.toString(), orderID.toHex(), { from: sdk.getAddress(), gasPrice }))); } catch (err) { simpleConsole.error(err.message || err); throw err; @@ -288,7 +288,7 @@ export const getOrders = async ( throw new Error(ErrUnsupportedFilterStatus); } - let orders = await ingress.getOrders(sdk._contracts.orderbook, filter.start, filter.limit); + let orders = await ingress.getOrders(sdk.getWeb3(), sdk._contracts.orderbook, filter.start, filter.limit); if (filter.status) { orders = orders.filter((order: [string, OrderStatus, string]) => order[1] === filter.status).toList(); diff --git a/src/methods/settlementMethods.ts b/src/methods/settlementMethods.ts index db1b8cf..a89caab 100644 --- a/src/methods/settlementMethods.ts +++ b/src/methods/settlementMethods.ts @@ -1,5 +1,5 @@ import BigNumber from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; import RenExSDK from "../index"; diff --git a/src/storage/serializers.ts b/src/storage/serializers.ts index aa66460..9a6c869 100644 --- a/src/storage/serializers.ts +++ b/src/storage/serializers.ts @@ -1,5 +1,5 @@ import BigNumber from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; import { BalanceAction, TraderOrder } from "../types"; diff --git a/src/types.ts b/src/types.ts index 2371ba4..6e53e10 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,6 +1,6 @@ import BigNumber from "bignumber.js"; -import { BN } from "bn.js"; +import BN from "bn.js"; import { StorageProvider } from "./storage/interface"; export { NetworkData } from "./lib/network"; diff --git a/test/index.spec.ts b/test/index.spec.ts index 8e7b193..888e5a3 100644 --- a/test/index.spec.ts +++ b/test/index.spec.ts @@ -4,7 +4,7 @@ import HDWalletProvider from "truffle-hdwallet-provider"; import Web3 from "web3"; import NonceSubprovider from "web3-provider-engine/subproviders/nonce-tracker"; -import RenExSDK, { BalanceDetails, NetworkData, NumberInput, TokenCode, TransactionStatus } from "../src/index"; +import RenExSDK, { BalanceDetails, NetworkData, NumberInput, OrderStatus, TokenCode, TransactionStatus } from "../src/index"; import { networks } from "../src/lib/network"; const MNEMONIC = process.env.MNEMONIC; @@ -34,6 +34,7 @@ describe("SDK methods", () => { sdk = new RenExSDK(provider, { network: "testnet", storageProvider: "none", + autoNormalizeOrders: true, }); web3 = new Web3(provider); @@ -53,8 +54,9 @@ describe("SDK methods", () => { it("should fetch balances", async () => { const balances = await sdk.fetchBalances(["ETH", "REN"]); - expectPositiveBalance(balances, "ETH"); - expectPositiveBalance(balances, "REN"); + const ethBalances = await expectPositiveBalance(balances, "ETH"); + console.log(`${sdk.getAddress()} ETH Balance: ${JSON.stringify(ethBalances)}`); + await expectPositiveBalance(balances, "REN"); }); it("should fetch supported tokens", async () => { @@ -93,6 +95,25 @@ describe("SDK methods", () => { }); }); + describe("SDK order methods", async () => { + let orderID; + before(async () => { + await expectTokenDeposit(sdk, "ETH", 1.1); + }); + + after(async () => { + await expectTokenWithdraw(sdk, "ETH", 1.1); + }); + + it("should successfully open an order", async () => { + orderID = await expectOpenOrder(sdk); + }); + + it("should successfully cancel an order", async () => { + await expectCancelOrder(sdk, orderID); + }); + }); + }); // tslint:disable-next-line:no-any @@ -107,6 +128,32 @@ async function awaitPromiseResponse(prom: () => Promise, expected: any): Pr } } +async function expectCancelOrder(sdk: RenExSDK, orderID: string): Promise { + await sdk.cancelOrder(orderID); + await awaitPromiseResponse(() => { + return sdk.fetchOrderStatus(orderID); + }, OrderStatus.CANCELED); + const orderStatus = await sdk.fetchOrderStatus(orderID); + orderStatus.should.be.equal(OrderStatus.CANCELED); + return orderID; +} + +async function expectOpenOrder(sdk: RenExSDK): Promise { + const orderResponse = await sdk.openOrder({ + symbol: "REN/ETH", + side: "buy", // buying REN for ETH + price: 0.0001395678, // ETH for 1 REN + volume: 7234, // REN + }); + const orderID = orderResponse.traderOrder.id; + await awaitPromiseResponse(() => { + return sdk.fetchOrderStatus(orderID); + }, OrderStatus.OPEN); + const orderStatus = await sdk.fetchOrderStatus(orderID); + orderStatus.should.be.equal(OrderStatus.OPEN); + return orderID; +} + async function expectTokenDeposit(sdk: RenExSDK, token: TokenCode, amount: NumberInput): Promise { const initialBalance = await expectFetchTokenBalance(sdk, token); const depositResponse = await sdk.deposit(amount, token); @@ -137,7 +184,7 @@ function sleep(ms: number): Promise { return new Promise(resolve => setTimeout(resolve, ms)); } -async function expectPositiveBalance(balances: Map, token: TokenCode): Promise { +async function expectPositiveBalance(balances: Map, token: TokenCode): Promise { const bal = balances.get(token); expect(bal).to.not.be.undefined; if (!bal) { @@ -149,4 +196,5 @@ async function expectPositiveBalance(balances: Map, t bal.used.gte(new BigNumber(0)).should.be.true; expect(bal.nondeposited).to.not.be.null; bal.nondeposited.gte(new BigNumber(0)).should.be.true; + return bal; }