diff --git a/.solcover.js b/.solcover.js index 6889d83..2a1f34b 100644 --- a/.solcover.js +++ b/.solcover.js @@ -1,5 +1,5 @@ module.exports = { - skipFiles: ['_testing/'], + skipFiles: ['_testing/', 'examples/Resolvers/ERC725/ClaimHolder.sol', 'examples/Resolvers/ERC725/KeyHolder.sol'], compileCommand: 'npm run build', testCommand: 'npm run test-cover', norpc: true, diff --git a/package-lock.json b/package-lock.json index 7379c3a..3293dd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6378,14 +6378,6 @@ "mime-types": "~2.1.18" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, "uglify-js": { "version": "3.4.9", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", @@ -6862,8 +6854,27 @@ "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-core-helpers": "1.0.0-beta.36" + }, + "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#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "requires": { + "debug": "^2.2.0", + "nan": "^2.3.3", + "typedarray-to-buffer": "^3.1.2", + "yaeti": "^0.0.6" + } + } } }, "web3-shh": { @@ -6898,26 +6909,6 @@ } } }, - "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" - }, - "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" - } - } - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7038,11 +7029,6 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", diff --git a/test/examples/Resolvers/ERC1056.js b/test/examples/Resolvers/ERC1056.js index 2d661a3..2f4b1a0 100644 --- a/test/examples/Resolvers/ERC1056.js +++ b/test/examples/Resolvers/ERC1056.js @@ -66,6 +66,68 @@ contract('Testing ERC1056 Resolver', function (accounts) { }) }) + describe('initialize FAIL', async () => { + it('already initialized', async function () { + const user = users[0] + + const initializePermission = web3.utils.soliditySha3( + { t: 'bytes1', v: '0x19' }, + { t: 'bytes1', v: '0' }, + instances.EthereumDIDRegistry.address, + 0, + user.address, + 'changeOwner', + instances.ERC1056.address + ) + + const permission = await sign(initializePermission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.initialize(user.address, permission.v, permission.r, permission.s, { from: user.address }) + .then(() => assert.fail('able to initialize', 'transaction should fail')) + .catch(error => assert.include( + error.message, 'This EIN has already been initialized', 'wrong rejection reason' + )) + }) + }) + + describe('change owner', async () => { + const user = users[0] + + it('change owner', async function () { + await instances.ERC1056.changeOwner(instances.ERC1056.address, { from: user.address }) + }) + + it('change owner signed', async function () { + let nonce = await instances.ERC1056.actionNonce(user.identity) + + const permission = web3.utils.soliditySha3( + 'changeOwnerDelegated', + instances.ERC1056.address, + nonce + ) + + const signature = await sign(permission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.changeOwnerDelegated(instances.ERC1056.address, signature.v, signature.r, signature.s, user.address, { from: user.address }) + }) + + it('change owner signed FAIL', async function () { + const permission = web3.utils.soliditySha3( + 'changeOwnerDelegated', + instances.ERC1056.address, + 10000 + ) + + const signature = await sign(permission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.changeOwnerDelegated(instances.ERC1056.address, signature.v, signature.r, signature.s, user.address, { from: user.address }) + .then(() => assert.fail('able to initialize', 'transaction should fail')) + .catch(error => assert.include( + error.message, 'Function execution is incorrectly signed.', 'wrong rejection reason' + )) + }) + }) + describe('delegates normal', async () => { const user = users[0] const delegate = users[1] @@ -101,6 +163,24 @@ contract('Testing ERC1056 Resolver', function (accounts) { await instances.ERC1056.addDelegateDelegated(randomBytes, delegate.address, 100000, signature.v, signature.r, signature.s, user.address, { from: user.address }) }) + it('add delegate signed FAIL', async function () { + const permission = web3.utils.soliditySha3( + 'addDelegateDelegated', + { t: 'bytes32', v: randomBytes }, + delegate.address, + 100000, + 10000 + ) + + const signature = await sign(permission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.addDelegateDelegated(randomBytes, delegate.address, 100000, signature.v, signature.r, signature.s, user.address, { from: user.address }) + .then(() => assert.fail('able to initialize', 'transaction should fail')) + .catch(error => assert.include( + error.message, 'Function execution is incorrectly signed.', 'wrong rejection reason' + )) + }) + it('revoke delegate signed', async function () { let nonce = await instances.ERC1056.actionNonce(user.identity) @@ -117,7 +197,24 @@ contract('Testing ERC1056 Resolver', function (accounts) { nonce = await instances.ERC1056.actionNonce(user.identity) - assert.equal(nonce.valueOf(), 2) + assert.equal(nonce.valueOf(), 3) + }) + + it('revoke delegate signed FAIL', async function () { + const permission = web3.utils.soliditySha3( + 'revokeDelegateDelegated', + { t: 'bytes32', v: randomBytes }, + delegate.address, + 10000 + ) + + const signature = await sign(permission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.revokeDelegateDelegated(randomBytes, delegate.address, signature.v, signature.r, signature.s, user.address, { from: user.address }) + .then(() => assert.fail('able to initialize', 'transaction should fail')) + .catch(error => assert.include( + error.message, 'Function execution is incorrectly signed.', 'wrong rejection reason' + )) }) }) @@ -156,6 +253,24 @@ contract('Testing ERC1056 Resolver', function (accounts) { await instances.ERC1056.setAttributeDelegated(name, value, 100000, signature.v, signature.r, signature.s, user.address, { from: user.address }) }) + it('set attribute signed FAIL', async function () { + const permission = web3.utils.soliditySha3( + 'setAttributeDelegated', + { t: 'bytes32', v: name }, + { t: 'bytes', v: value }, + 100000, + 100000 + ) + + const signature = await sign(permission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.setAttributeDelegated(name, value, 100000, signature.v, signature.r, signature.s, user.address, { from: user.address }) + .then(() => assert.fail('able to initialize', 'transaction should fail')) + .catch(error => assert.include( + error.message, 'Function execution is incorrectly signed.', 'wrong rejection reason' + )) + }) + it('revoke attribute signed', async function () { let nonce = await instances.ERC1056.actionNonce(user.identity) @@ -172,7 +287,25 @@ contract('Testing ERC1056 Resolver', function (accounts) { nonce = await instances.ERC1056.actionNonce(user.identity) - assert.equal(nonce.valueOf(), 4) + assert.equal(nonce.valueOf(), 5) }) + + it('revoke attribute signed FAIL', async function () { + const permission = web3.utils.soliditySha3( + 'revokeAttributeDelegated', + { t: 'bytes32', v: name }, + { t: 'bytes', v: value }, + 10000 + ) + + const signature = await sign(permission, user.address, user.private, 'unprefixed') + + await instances.ERC1056.revokeAttributeDelegated(name, value, signature.v, signature.r, signature.s, user.address, { from: user.address }) + .then(() => assert.fail('able to initialize', 'transaction should fail')) + .catch(error => assert.include( + error.message, 'Function execution is incorrectly signed.', 'wrong rejection reason' + )) + }) + }) })