diff --git a/package.json b/package.json index ed9baba..8c0cf4b 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@material-ui/icons": "^1.1.0", "bignumber.js": "^5.0.0", "classnames": "^2.2.6", + "elliptic": "^6.4.1", "eth-ens-namehash": "^2.0.8", "formik": "^0.11.11", "install": "^0.11.0", diff --git a/test/enssubdomainregistry.js b/test/enssubdomainregistry.js index aa41535..07117c1 100644 --- a/test/enssubdomainregistry.js +++ b/test/enssubdomainregistry.js @@ -166,12 +166,13 @@ contract('ENSSubdomainRegistry', function () { let subdomain = 'bob2'; let usernameHash = namehash.hash(subdomain + '.' + domains.free.name); let contactCode = '0x04dbb31252d9bddb4e4d362c7b9c80cba74732280737af97971f42ccbdc716f3f3efb1db366880e52d09b1bfd59842e833f3004088892b7d14b9ce9e957cea9a82'; + let points = utils.generateXY(contactCode); let result = await ENSSubdomainRegistry.methods.register( web3Utils.sha3(subdomain), domains.free.namehash, registrant, - utils.zeroBytes32, - utils.zeroBytes32, + points.x, + points.y, contactCode ).send({from: registrant}); @@ -182,8 +183,8 @@ contract('ENSSubdomainRegistry', function () { result = await PublicResolver.methods.text(usernameHash, "statusAccount").call() assert.equal(result, contactCode, "Resolved contact code not set"); result = await PublicResolver.methods.pubkey(usernameHash).call() - assert.equal(result[0], utils.zeroBytes32, "Unexpected resolved pubkey[0]"); - assert.equal(result[1], utils.zeroBytes32, "Unexpected resolved pubkey[1]"); + let pubKey = utils.keyFromXY(result[0], result[1]); + assert.equal(pubKey, contactCode, "pubKey does not match contract code"); }); diff --git a/utils/testUtils.js b/utils/testUtils.js index fc6fc30..9a2efdd 100644 --- a/utils/testUtils.js +++ b/utils/testUtils.js @@ -1,3 +1,5 @@ +var EC = require('elliptic').ec; +var ec = new EC('secp256k1'); // This has been tested with the real Ethereum network and Testrpc. // Copied and edited from: https://gist.github.com/xavierlepretre/d5583222fde52ddfbc58b7cfa0d2d0a9 @@ -237,3 +239,19 @@ exports.increaseTime = async (amount) => { ) }); } + +exports.generateXY = pub => { + const stripped = pub.slice(2); + const key = ec.keyFromPublic(stripped, 'hex'); + const pubPoint = key.getPublic(); + const x = '0x' + pubPoint.getX().toString(16); + const y = '0x'+ pubPoint.getY().toString(16); + return { x, y }; +} + +exports.keyFromXY = (X, Y) => { + const x = Buffer.from(X.substring(2), 'hex'); + const y = Buffer.from(Y.substring(2), 'hex'); + const keys = ec.keyFromPublic({ x, y }, 'hex'); + return `0x${keys.getPublic().encode('hex')}`; +}