address.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.fromHex = fromHex;
  4. exports.toHex = toHex;
  5. exports.toChecksumAddress = toChecksumAddress;
  6. exports.isChecksumAddress = isChecksumAddress;
  7. exports.fromPrivateKey = fromPrivateKey;
  8. exports.isAddress = isAddress;
  9. const code_js_1 = require("./code.js");
  10. const crypto_js_1 = require("./crypto.js");
  11. const validations_js_1 = require("./validations.js");
  12. const ethersUtils_js_1 = require("./ethersUtils.js");
  13. const constants_js_1 = require("./constants.js");
  14. function fromHex(address) {
  15. if (!(0, validations_js_1.isHex)(address))
  16. return address;
  17. return (0, crypto_js_1.getBase58CheckAddress)((0, code_js_1.hexStr2byteArray)(address.replace(/^0x/, constants_js_1.ADDRESS_PREFIX)));
  18. }
  19. function toHex(address) {
  20. if ((0, validations_js_1.isHex)(address))
  21. return address.toLowerCase().replace(/^0x/, constants_js_1.ADDRESS_PREFIX);
  22. return (0, code_js_1.byteArray2hexStr)((0, crypto_js_1.decodeBase58Address)(address)).toLowerCase();
  23. }
  24. function getChecksumAddress(address) {
  25. address = address.toLowerCase();
  26. const chars = address.substring(2).split('');
  27. const expanded = new Uint8Array(40);
  28. for (let i = 0; i < 40; i++) {
  29. expanded[i] = chars[i].charCodeAt(0);
  30. }
  31. const hashed = (0, code_js_1.hexStr2byteArray)((0, ethersUtils_js_1.keccak256)(expanded).slice(2));
  32. for (let i = 0; i < 40; i += 2) {
  33. if ((hashed[i >> 1] >> 4) >= 8) {
  34. chars[i] = chars[i].toUpperCase();
  35. }
  36. if ((hashed[i >> 1] & 0x0f) >= 8) {
  37. chars[i + 1] = chars[i + 1].toUpperCase();
  38. }
  39. }
  40. return constants_js_1.ADDRESS_PREFIX + chars.join('');
  41. }
  42. function toChecksumAddress(address) {
  43. if (!isAddress(address))
  44. throw new Error(`'${address}' is not a valid address string`);
  45. return getChecksumAddress(toHex(address));
  46. }
  47. function isChecksumAddress(address) {
  48. if (!(0, validations_js_1.isHex)(address) || address.length !== 42)
  49. return false;
  50. try {
  51. return toChecksumAddress(address) === address;
  52. }
  53. catch {
  54. return false;
  55. }
  56. }
  57. function fromPrivateKey(privateKey, strict = false) {
  58. try {
  59. return (0, crypto_js_1.pkToAddress)(privateKey, strict);
  60. }
  61. catch {
  62. return false;
  63. }
  64. }
  65. function isAddress(address) {
  66. if (!address || !(0, validations_js_1.isString)(address))
  67. return false;
  68. // Convert HEX to Base58
  69. if (address.length === 42) {
  70. try {
  71. // it throws an error if the address starts with 0x
  72. return isAddress((0, crypto_js_1.getBase58CheckAddress)((0, code_js_1.hexStr2byteArray)(address)));
  73. }
  74. catch (err) {
  75. return false;
  76. }
  77. }
  78. try {
  79. return (0, crypto_js_1.isAddressValid)(address);
  80. }
  81. catch (err) {
  82. return false;
  83. }
  84. }
  85. //# sourceMappingURL=address.js.map