@ocap/tx-pipeline 1.18.165 → 1.19.0
Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ const get = require('lodash/get');
|
|
3
3
|
const set = require('lodash/set');
|
4
4
|
|
5
5
|
module.exports = function CreateExtractReceiverPipe({ from, to = 'receiver' }) {
|
6
|
-
return
|
6
|
+
return function ExtractReceiver(context, next) {
|
7
7
|
const keys = Array.isArray(from) ? from : [from];
|
8
8
|
for (const key of keys) {
|
9
9
|
const value = get(context, key);
|
@@ -9,7 +9,7 @@ const { fromPublicKey } = require('@ocap/wallet');
|
|
9
9
|
const { createMessage, decodeAny } = require('@ocap/message');
|
10
10
|
|
11
11
|
module.exports = function CreateVerifyMultiSigV2Pipe({ signersKey }) {
|
12
|
-
return function VerifyMultiSigV2(context, next) {
|
12
|
+
return async function VerifyMultiSigV2(context, next) {
|
13
13
|
const signers = get(context, signersKey);
|
14
14
|
if (signers.length === 0) {
|
15
15
|
return next();
|
@@ -49,19 +49,22 @@ module.exports = function CreateVerifyMultiSigV2Pipe({ signersKey }) {
|
|
49
49
|
tx.signature = '';
|
50
50
|
tx.signaturesList = signatures.map((x) => omit(x, 'signature'));
|
51
51
|
for (let i = 0; i < signatures.length; i++) {
|
52
|
-
const { signer, pk, delegator, signature } = signatures[i];
|
52
|
+
const { signer, pk, delegator, signature, extra = '' } = signatures[i];
|
53
53
|
|
54
54
|
// if delegator is empty, pk and signer shall be a pair
|
55
55
|
// if delegator is not empty, pk and delegator shall be a pair
|
56
56
|
const address = delegator || signer;
|
57
|
-
const
|
57
|
+
const type = toTypeInfo(address);
|
58
|
+
const wallet = fromPublicKey(pk, type);
|
58
59
|
|
59
60
|
const message = createMessage('Transaction', tx);
|
60
61
|
try {
|
61
|
-
|
62
|
+
// eslint-disable-next-line no-await-in-loop
|
63
|
+
if ((await wallet.verify(message.serializeBinary(), signature, true, extra)) === false) {
|
62
64
|
return next(new Error('INVALID_SIGNATURE', `Signature for ${address} is not valid`));
|
63
65
|
}
|
64
66
|
} catch (err) {
|
67
|
+
console.error(err);
|
65
68
|
return next(new Error('INVALID_SIGNATURE', `Signature for ${address} verify failed: ${err.message}`));
|
66
69
|
}
|
67
70
|
}
|
@@ -6,7 +6,7 @@ const { fromPublicKey } = require('@ocap/wallet');
|
|
6
6
|
const { createMessage, decodeAny } = require('@ocap/message');
|
7
7
|
|
8
8
|
module.exports = function CreateVerifyMultiSigPipe(numSigs = 0) {
|
9
|
-
return function VerifyMultiSig(context, next) {
|
9
|
+
return async function VerifyMultiSig(context, next) {
|
10
10
|
const tx = cloneDeep(context.tx);
|
11
11
|
const signatures = getListField(tx, 'signatures');
|
12
12
|
if (signatures.length !== numSigs) {
|
@@ -40,7 +40,8 @@ module.exports = function CreateVerifyMultiSigPipe(numSigs = 0) {
|
|
40
40
|
|
41
41
|
tx.signatures = [{ signer, pk, delegator, data: decoded }].concat(signatures);
|
42
42
|
const message = createMessage('Transaction', tx);
|
43
|
-
|
43
|
+
// eslint-disable-next-line no-await-in-loop
|
44
|
+
if ((await wallet.verify(message.serializeBinary(), signature)) === false) {
|
44
45
|
return next(new Error('INVALID_SIGNATURE', `Multi signature for ${address} is not valid`));
|
45
46
|
}
|
46
47
|
}
|
@@ -3,9 +3,10 @@ const cloneDeep = require('lodash/cloneDeep');
|
|
3
3
|
const { CustomError: Error } = require('@ocap/util/lib/error');
|
4
4
|
const { toTypeInfo, isFromPublicKey } = require('@arcblock/did');
|
5
5
|
const { fromPublicKey } = require('@ocap/wallet');
|
6
|
+
const { types } = require('@ocap/mcrypto');
|
6
7
|
const { createMessage } = require('@ocap/message');
|
7
8
|
|
8
|
-
module.exports = function VerifySignature(context, next) {
|
9
|
+
module.exports = async function VerifySignature(context, next) {
|
9
10
|
const tx = cloneDeep(context.tx);
|
10
11
|
const { signature } = tx;
|
11
12
|
|
@@ -26,12 +27,15 @@ module.exports = function VerifySignature(context, next) {
|
|
26
27
|
}
|
27
28
|
|
28
29
|
const message = createMessage('Transaction', tx);
|
29
|
-
const
|
30
|
+
const type = toTypeInfo(signer);
|
31
|
+
const wallet = fromPublicKey(pk, type);
|
32
|
+
const extra = type.role === types.RoleType.ROLE_PASSKEY ? get(context, 'extra.txExtra') : '';
|
30
33
|
try {
|
31
|
-
if (wallet.verify(message.serializeBinary(), signature) === false) {
|
34
|
+
if ((await wallet.verify(message.serializeBinary(), signature, true, extra || '')) === false) {
|
32
35
|
return next(new Error('INVALID_SIGNATURE', 'tx.signature is invalid'));
|
33
36
|
}
|
34
37
|
} catch (err) {
|
38
|
+
console.error(err);
|
35
39
|
return next(new Error('INVALID_SIGNATURE', 'tx.signature verify failed'));
|
36
40
|
}
|
37
41
|
|
@@ -93,7 +93,7 @@ function fixMigratedReceipts(receipts, statesMap) {
|
|
93
93
|
* verify that account balances are updated correctly by comparing before and after states
|
94
94
|
*/
|
95
95
|
module.exports = function CreateVerifyStateDiffPipe({ snapshotKey = 'stateSnapshot' } = {}) {
|
96
|
-
return
|
96
|
+
return function VerifyStateDiff(context, next) {
|
97
97
|
const { logger, [snapshotKey]: snapshotStates } = context;
|
98
98
|
|
99
99
|
if (!snapshotStates) {
|
package/package.json
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
"publishConfig": {
|
4
4
|
"access": "public"
|
5
5
|
},
|
6
|
-
"version": "1.
|
6
|
+
"version": "1.19.0",
|
7
7
|
"description": "Pipeline runner and common pipelines to process transactions",
|
8
8
|
"main": "lib/index.js",
|
9
9
|
"files": [
|
@@ -29,16 +29,16 @@
|
|
29
29
|
"elliptic": "6.5.3"
|
30
30
|
},
|
31
31
|
"dependencies": {
|
32
|
-
"@arcblock/did": "1.
|
33
|
-
"@arcblock/did-util": "1.
|
34
|
-
"@ocap/mcrypto": "1.
|
35
|
-
"@ocap/message": "1.
|
36
|
-
"@ocap/state": "1.
|
37
|
-
"@ocap/util": "1.
|
38
|
-
"@ocap/wallet": "1.
|
32
|
+
"@arcblock/did": "1.19.0",
|
33
|
+
"@arcblock/did-util": "1.19.0",
|
34
|
+
"@ocap/mcrypto": "1.19.0",
|
35
|
+
"@ocap/message": "1.19.0",
|
36
|
+
"@ocap/state": "1.19.0",
|
37
|
+
"@ocap/util": "1.19.0",
|
38
|
+
"@ocap/wallet": "1.19.0",
|
39
39
|
"debug": "^4.3.6",
|
40
40
|
"empty-value": "^1.0.1",
|
41
41
|
"lodash": "^4.17.21"
|
42
42
|
},
|
43
|
-
"gitHead": "
|
43
|
+
"gitHead": "1b6fac03988fb18507c8ef4c21de282762005f87"
|
44
44
|
}
|