@safe-global/protocol-kit 2.0.1-alpha.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/dist/src/Safe.d.ts +57 -7
- package/dist/src/Safe.js +218 -35
- package/dist/src/Safe.js.map +1 -1
- package/dist/src/adapters/ethers/EthersAdapter.d.ts +2 -2
- package/dist/src/adapters/ethers/EthersAdapter.js +5 -3
- package/dist/src/adapters/ethers/EthersAdapter.js.map +1 -1
- package/dist/src/adapters/web3/Web3Adapter.d.ts +2 -2
- package/dist/src/adapters/web3/Web3Adapter.js +6 -5
- package/dist/src/adapters/web3/Web3Adapter.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.js +17 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.js +9 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/utils/eip-3770/config.js +14 -1
- package/dist/src/utils/eip-3770/config.js.map +1 -1
- package/dist/src/utils/eip-712/index.d.ts +6 -9
- package/dist/src/utils/eip-712/index.js +57 -18
- package/dist/src/utils/eip-712/index.js.map +1 -1
- package/dist/src/utils/messages/SafeMessage.d.ts +10 -0
- package/dist/src/utils/messages/SafeMessage.js +20 -0
- package/dist/src/utils/messages/SafeMessage.js.map +1 -0
- package/dist/src/utils/signatures/SafeSignature.d.ts +3 -2
- package/dist/src/utils/signatures/SafeSignature.js +10 -2
- package/dist/src/utils/signatures/SafeSignature.js.map +1 -1
- package/dist/src/utils/signatures/utils.d.ts +11 -4
- package/dist/src/utils/signatures/utils.js +75 -7
- package/dist/src/utils/signatures/utils.js.map +1 -1
- package/dist/src/utils/transactions/SafeTransaction.d.ts +1 -0
- package/dist/src/utils/transactions/SafeTransaction.js +5 -10
- package/dist/src/utils/transactions/SafeTransaction.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -5
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.generateTypedData = exports.getEip712MessageTypes = exports.EIP712_DOMAIN = exports.EIP712_DOMAIN_BEFORE_V130 = void 0;
|
|
6
|
+
exports.generateTypedData = exports.hashSafeMessage = exports.hashTypedData = exports.getEip712MessageTypes = exports.getEip712TxTypes = exports.EIP712_DOMAIN = exports.EIP712_DOMAIN_BEFORE_V130 = void 0;
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
7
8
|
const satisfies_1 = __importDefault(require("semver/functions/satisfies"));
|
|
8
9
|
const EQ_OR_GT_1_3_0 = '>=1.3.0';
|
|
9
10
|
exports.EIP712_DOMAIN_BEFORE_V130 = [
|
|
@@ -23,7 +24,7 @@ exports.EIP712_DOMAIN = [
|
|
|
23
24
|
}
|
|
24
25
|
];
|
|
25
26
|
// This function returns the types structure for signing off-chain messages according to EIP-712
|
|
26
|
-
function
|
|
27
|
+
function getEip712TxTypes(safeVersion) {
|
|
27
28
|
const eip712WithChainId = (0, satisfies_1.default)(safeVersion, EQ_OR_GT_1_3_0);
|
|
28
29
|
return {
|
|
29
30
|
EIP712Domain: eip712WithChainId ? exports.EIP712_DOMAIN : exports.EIP712_DOMAIN_BEFORE_V130,
|
|
@@ -41,24 +42,62 @@ function getEip712MessageTypes(safeVersion) {
|
|
|
41
42
|
]
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
|
-
exports.
|
|
45
|
-
function
|
|
45
|
+
exports.getEip712TxTypes = getEip712TxTypes;
|
|
46
|
+
function getEip712MessageTypes(safeVersion) {
|
|
46
47
|
const eip712WithChainId = (0, satisfies_1.default)(safeVersion, EQ_OR_GT_1_3_0);
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
verifyingContract: safeAddress
|
|
51
|
-
},
|
|
52
|
-
primaryType: 'SafeTx',
|
|
53
|
-
message: {
|
|
54
|
-
...safeTransactionData,
|
|
55
|
-
value: safeTransactionData.value,
|
|
56
|
-
safeTxGas: safeTransactionData.safeTxGas,
|
|
57
|
-
baseGas: safeTransactionData.baseGas,
|
|
58
|
-
gasPrice: safeTransactionData.gasPrice,
|
|
59
|
-
nonce: safeTransactionData.nonce
|
|
60
|
-
}
|
|
48
|
+
return {
|
|
49
|
+
EIP712Domain: eip712WithChainId ? exports.EIP712_DOMAIN : exports.EIP712_DOMAIN_BEFORE_V130,
|
|
50
|
+
SafeMessage: [{ type: 'bytes', name: 'message' }]
|
|
61
51
|
};
|
|
52
|
+
}
|
|
53
|
+
exports.getEip712MessageTypes = getEip712MessageTypes;
|
|
54
|
+
const hashTypedData = (typedData) => {
|
|
55
|
+
// `ethers` doesn't require `EIP712Domain` and otherwise throws
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
57
|
+
const { EIP712Domain: _, ...types } = typedData.types;
|
|
58
|
+
return ethers_1.ethers.TypedDataEncoder.hash(typedData.domain, types, typedData.message);
|
|
59
|
+
};
|
|
60
|
+
exports.hashTypedData = hashTypedData;
|
|
61
|
+
const hashMessage = (message) => {
|
|
62
|
+
return ethers_1.ethers.hashMessage(message);
|
|
63
|
+
};
|
|
64
|
+
const hashSafeMessage = (message) => {
|
|
65
|
+
return typeof message === 'string' ? hashMessage(message) : (0, exports.hashTypedData)(message);
|
|
66
|
+
};
|
|
67
|
+
exports.hashSafeMessage = hashSafeMessage;
|
|
68
|
+
function generateTypedData({ safeAddress, safeVersion, chainId, data }) {
|
|
69
|
+
const isSafeTransactionDataType = data.hasOwnProperty('to');
|
|
70
|
+
const eip712WithChainId = (0, satisfies_1.default)(safeVersion, EQ_OR_GT_1_3_0);
|
|
71
|
+
let typedData;
|
|
72
|
+
if (isSafeTransactionDataType) {
|
|
73
|
+
const txData = data;
|
|
74
|
+
typedData = {
|
|
75
|
+
types: getEip712TxTypes(safeVersion),
|
|
76
|
+
domain: {
|
|
77
|
+
verifyingContract: safeAddress
|
|
78
|
+
},
|
|
79
|
+
primaryType: 'SafeTx',
|
|
80
|
+
message: {
|
|
81
|
+
...txData,
|
|
82
|
+
value: txData.value,
|
|
83
|
+
safeTxGas: txData.safeTxGas,
|
|
84
|
+
baseGas: txData.baseGas,
|
|
85
|
+
gasPrice: txData.gasPrice,
|
|
86
|
+
nonce: txData.nonce
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const message = data;
|
|
92
|
+
typedData = {
|
|
93
|
+
types: getEip712MessageTypes(safeVersion),
|
|
94
|
+
domain: {
|
|
95
|
+
verifyingContract: safeAddress
|
|
96
|
+
},
|
|
97
|
+
primaryType: 'SafeMessage',
|
|
98
|
+
message: { message: (0, exports.hashSafeMessage)(message) }
|
|
99
|
+
};
|
|
100
|
+
}
|
|
62
101
|
if (eip712WithChainId) {
|
|
63
102
|
typedData.domain.chainId = chainId.toString();
|
|
64
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/eip-712/index.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/utils/eip-712/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EIP712TypedData, SafeMessage, SafeSignature } from '@safe-global/safe-core-sdk-types';
|
|
2
|
+
declare class EthSafeMessage implements SafeMessage {
|
|
3
|
+
data: EIP712TypedData | string;
|
|
4
|
+
signatures: Map<string, SafeSignature>;
|
|
5
|
+
constructor(data: EIP712TypedData | string);
|
|
6
|
+
getSignature(signer: string): SafeSignature | undefined;
|
|
7
|
+
addSignature(signature: SafeSignature): void;
|
|
8
|
+
encodedSignatures(): string;
|
|
9
|
+
}
|
|
10
|
+
export default EthSafeMessage;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const signatures_1 = require("../signatures");
|
|
4
|
+
class EthSafeMessage {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
this.signatures = new Map();
|
|
7
|
+
this.data = data;
|
|
8
|
+
}
|
|
9
|
+
getSignature(signer) {
|
|
10
|
+
return this.signatures.get(signer.toLowerCase());
|
|
11
|
+
}
|
|
12
|
+
addSignature(signature) {
|
|
13
|
+
this.signatures.set(signature.signer.toLowerCase(), signature);
|
|
14
|
+
}
|
|
15
|
+
encodedSignatures() {
|
|
16
|
+
return (0, signatures_1.buildSignatureBytes)(Array.from(this.signatures.values()));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = EthSafeMessage;
|
|
20
|
+
//# sourceMappingURL=SafeMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafeMessage.js","sourceRoot":"","sources":["../../../../src/utils/messages/SafeMessage.ts"],"names":[],"mappings":";;AACA,8CAAmD;AAEnD,MAAM,cAAc;IAIlB,YAAY,IAA8B;QAF1C,eAAU,GAA+B,IAAI,GAAG,EAAE,CAAA;QAGhD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,YAAY,CAAC,SAAwB;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAA;IAChE,CAAC;IAED,iBAAiB;QACf,OAAO,IAAA,gCAAmB,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC;CACF;AAED,kBAAe,cAAc,CAAA"}
|
|
@@ -2,6 +2,7 @@ import { SafeSignature } from '@safe-global/safe-core-sdk-types';
|
|
|
2
2
|
export declare class EthSafeSignature implements SafeSignature {
|
|
3
3
|
signer: string;
|
|
4
4
|
data: string;
|
|
5
|
+
isContractSignature: boolean;
|
|
5
6
|
/**
|
|
6
7
|
* Creates an instance of a Safe signature.
|
|
7
8
|
*
|
|
@@ -9,13 +10,13 @@ export declare class EthSafeSignature implements SafeSignature {
|
|
|
9
10
|
* @param signature - The Safe signature
|
|
10
11
|
* @returns The Safe signature instance
|
|
11
12
|
*/
|
|
12
|
-
constructor(signer: string, signature: string);
|
|
13
|
+
constructor(signer: string, signature: string, isContractSignature?: boolean);
|
|
13
14
|
/**
|
|
14
15
|
* Returns the static part of the Safe signature.
|
|
15
16
|
*
|
|
16
17
|
* @returns The static part of the Safe signature
|
|
17
18
|
*/
|
|
18
|
-
staticPart(): string;
|
|
19
|
+
staticPart(dynamicOffset?: string): string;
|
|
19
20
|
/**
|
|
20
21
|
* Returns the dynamic part of the Safe signature.
|
|
21
22
|
*
|
|
@@ -9,16 +9,20 @@ class EthSafeSignature {
|
|
|
9
9
|
* @param signature - The Safe signature
|
|
10
10
|
* @returns The Safe signature instance
|
|
11
11
|
*/
|
|
12
|
-
constructor(signer, signature) {
|
|
12
|
+
constructor(signer, signature, isContractSignature = false) {
|
|
13
13
|
this.signer = signer;
|
|
14
14
|
this.data = signature;
|
|
15
|
+
this.isContractSignature = isContractSignature;
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* Returns the static part of the Safe signature.
|
|
18
19
|
*
|
|
19
20
|
* @returns The static part of the Safe signature
|
|
20
21
|
*/
|
|
21
|
-
staticPart(
|
|
22
|
+
staticPart(dynamicOffset) {
|
|
23
|
+
if (this.isContractSignature) {
|
|
24
|
+
return `${this.signer.slice(2).padStart(64, '0')}${dynamicOffset || ''}00`;
|
|
25
|
+
}
|
|
22
26
|
return this.data;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
@@ -27,6 +31,10 @@ class EthSafeSignature {
|
|
|
27
31
|
* @returns The dynamic part of the Safe signature
|
|
28
32
|
*/
|
|
29
33
|
dynamicPart() {
|
|
34
|
+
if (this.isContractSignature) {
|
|
35
|
+
const dynamicPartLength = (this.data.slice(2).length / 2).toString(16).padStart(64, '0');
|
|
36
|
+
return `${dynamicPartLength}${this.data.slice(2)}`;
|
|
37
|
+
}
|
|
30
38
|
return '';
|
|
31
39
|
}
|
|
32
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeSignature.js","sourceRoot":"","sources":["../../../../src/utils/signatures/SafeSignature.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;
|
|
1
|
+
{"version":3,"file":"SafeSignature.js","sourceRoot":"","sources":["../../../../src/utils/signatures/SafeSignature.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IAK3B;;;;;;OAMG;IACH,YAAY,MAAc,EAAE,SAAiB,EAAE,mBAAmB,GAAG,KAAK;QACxE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAA;IAChD,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,aAAsB;QAC/B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,aAAa,IAAI,EAAE,IAAI,CAAA;QAC5E,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;YACxF,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AA5CD,4CA4CC"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { EthAdapter, SafeSignature,
|
|
1
|
+
import { EthAdapter, SafeSignature, SafeEIP712Args, SafeTransactionData } from '@safe-global/safe-core-sdk-types';
|
|
2
|
+
import { SigningMethod } from '../../types';
|
|
2
3
|
export declare function generatePreValidatedSignature(ownerAddress: string): SafeSignature;
|
|
3
4
|
export declare function isTxHashSignedWithPrefix(txHash: string, signature: string, ownerAddress: string): boolean;
|
|
4
5
|
type AdjustVOverload = {
|
|
5
|
-
(signingMethod:
|
|
6
|
-
(signingMethod:
|
|
6
|
+
(signingMethod: SigningMethod.ETH_SIGN_TYPED_DATA, signature: string): string;
|
|
7
|
+
(signingMethod: SigningMethod.ETH_SIGN, signature: string, safeTxHash: string, sender: string): string;
|
|
7
8
|
};
|
|
8
9
|
export declare const adjustVInSignature: AdjustVOverload;
|
|
9
10
|
export declare function generateSignature(ethAdapter: EthAdapter, hash: string): Promise<SafeSignature>;
|
|
10
|
-
export declare function generateEIP712Signature(ethAdapter: EthAdapter,
|
|
11
|
+
export declare function generateEIP712Signature(ethAdapter: EthAdapter, safeEIP712Args: SafeEIP712Args, methodVersion?: 'v3' | 'v4'): Promise<SafeSignature>;
|
|
12
|
+
export declare const buildContractSignature: (signatures: SafeSignature[], signerSafeAddress: string) => Promise<SafeSignature>;
|
|
13
|
+
export declare const buildSignatureBytes: (signatures: SafeSignature[]) => string;
|
|
14
|
+
export declare const preimageSafeTransactionHash: (safeAddress: string, safeTx: SafeTransactionData, safeVersion: string, chainId: bigint) => string;
|
|
15
|
+
export declare const preimageSafeMessageHash: (safeAddress: string, message: string, safeVersion: string, chainId: bigint) => string;
|
|
16
|
+
export declare const calculateSafeTransactionHash: (safeAddress: string, safeTx: SafeTransactionData, safeVersion: string, chainId: bigint) => string;
|
|
17
|
+
export declare const calculateSafeMessageHash: (safeAddress: string, message: string, safeVersion: string, chainId: bigint) => string;
|
|
11
18
|
export {};
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.generateEIP712Signature = exports.generateSignature = exports.adjustVInSignature = exports.isTxHashSignedWithPrefix = exports.generatePreValidatedSignature = void 0;
|
|
6
|
+
exports.calculateSafeMessageHash = exports.calculateSafeTransactionHash = exports.preimageSafeMessageHash = exports.preimageSafeTransactionHash = exports.buildSignatureBytes = exports.buildContractSignature = exports.generateEIP712Signature = exports.generateSignature = exports.adjustVInSignature = exports.isTxHashSignedWithPrefix = exports.generatePreValidatedSignature = void 0;
|
|
7
|
+
const ethers_1 = require("ethers");
|
|
4
8
|
const ethereumjs_util_1 = require("ethereumjs-util");
|
|
9
|
+
const satisfies_1 = __importDefault(require("semver/functions/satisfies"));
|
|
5
10
|
const address_1 = require("../address");
|
|
6
11
|
const SafeSignature_1 = require("./SafeSignature");
|
|
12
|
+
const eip_712_1 = require("../eip-712");
|
|
13
|
+
const types_1 = require("../../types");
|
|
7
14
|
function generatePreValidatedSignature(ownerAddress) {
|
|
8
15
|
const signature = '0x000000000000000000000000' +
|
|
9
16
|
ownerAddress.slice(2) +
|
|
@@ -37,7 +44,7 @@ const adjustVInSignature = (signingMethod, signature, safeTxHash, signerAddress)
|
|
|
37
44
|
if (!ETHEREUM_V_VALUES.includes(signatureV)) {
|
|
38
45
|
throw new Error('Invalid signature');
|
|
39
46
|
}
|
|
40
|
-
if (signingMethod ===
|
|
47
|
+
if (signingMethod === types_1.SigningMethod.ETH_SIGN) {
|
|
41
48
|
/*
|
|
42
49
|
The Safe's expected V value for ECDSA signature is:
|
|
43
50
|
- 27 or 28
|
|
@@ -58,7 +65,7 @@ const adjustVInSignature = (signingMethod, signature, safeTxHash, signerAddress)
|
|
|
58
65
|
signatureV += 4;
|
|
59
66
|
}
|
|
60
67
|
}
|
|
61
|
-
if (signingMethod ===
|
|
68
|
+
if (signingMethod === types_1.SigningMethod.ETH_SIGN_TYPED_DATA) {
|
|
62
69
|
// Metamask with ledger returns V=0/1 here too, we need to adjust it to be ethereum's valid value (27 or 28)
|
|
63
70
|
if (signatureV < MIN_VALID_V_VALUE_FOR_SAFE_ECDSA) {
|
|
64
71
|
signatureV += MIN_VALID_V_VALUE_FOR_SAFE_ECDSA;
|
|
@@ -74,18 +81,79 @@ async function generateSignature(ethAdapter, hash) {
|
|
|
74
81
|
throw new Error('EthAdapter must be initialized with a signer to use this method');
|
|
75
82
|
}
|
|
76
83
|
let signature = await ethAdapter.signMessage(hash);
|
|
77
|
-
signature = (0, exports.adjustVInSignature)(
|
|
84
|
+
signature = (0, exports.adjustVInSignature)(types_1.SigningMethod.ETH_SIGN, signature, hash, signerAddress);
|
|
78
85
|
return new SafeSignature_1.EthSafeSignature(signerAddress, signature);
|
|
79
86
|
}
|
|
80
87
|
exports.generateSignature = generateSignature;
|
|
81
|
-
async function generateEIP712Signature(ethAdapter,
|
|
88
|
+
async function generateEIP712Signature(ethAdapter, safeEIP712Args, methodVersion) {
|
|
82
89
|
const signerAddress = await ethAdapter.getSignerAddress();
|
|
83
90
|
if (!signerAddress) {
|
|
84
91
|
throw new Error('EthAdapter must be initialized with a signer to use this method');
|
|
85
92
|
}
|
|
86
|
-
let signature = await ethAdapter.signTypedData(
|
|
87
|
-
signature = (0, exports.adjustVInSignature)(
|
|
93
|
+
let signature = await ethAdapter.signTypedData(safeEIP712Args, methodVersion);
|
|
94
|
+
signature = (0, exports.adjustVInSignature)(types_1.SigningMethod.ETH_SIGN_TYPED_DATA, signature);
|
|
88
95
|
return new SafeSignature_1.EthSafeSignature(signerAddress, signature);
|
|
89
96
|
}
|
|
90
97
|
exports.generateEIP712Signature = generateEIP712Signature;
|
|
98
|
+
const buildContractSignature = async (signatures, signerSafeAddress) => {
|
|
99
|
+
const contractSignature = new SafeSignature_1.EthSafeSignature(signerSafeAddress, (0, exports.buildSignatureBytes)(signatures), true);
|
|
100
|
+
return contractSignature;
|
|
101
|
+
};
|
|
102
|
+
exports.buildContractSignature = buildContractSignature;
|
|
103
|
+
const buildSignatureBytes = (signatures) => {
|
|
104
|
+
const SIGNATURE_LENGTH_BYTES = 65;
|
|
105
|
+
signatures.sort((left, right) => left.signer.toLowerCase().localeCompare(right.signer.toLowerCase()));
|
|
106
|
+
let signatureBytes = '0x';
|
|
107
|
+
let dynamicBytes = '';
|
|
108
|
+
for (const signature of signatures) {
|
|
109
|
+
if (signature.isContractSignature) {
|
|
110
|
+
/*
|
|
111
|
+
A contract signature has a static part of 65 bytes and the dynamic part that needs to be appended
|
|
112
|
+
at the end of signature bytes.
|
|
113
|
+
The signature format is
|
|
114
|
+
Signature type == 0
|
|
115
|
+
Constant part: 65 bytes
|
|
116
|
+
{32-bytes signature verifier}{32-bytes dynamic data position}{1-byte signature type}
|
|
117
|
+
Dynamic part (solidity bytes): 32 bytes + signature data length
|
|
118
|
+
{32-bytes signature length}{bytes signature data}
|
|
119
|
+
*/
|
|
120
|
+
const dynamicPartPosition = (signatures.length * SIGNATURE_LENGTH_BYTES +
|
|
121
|
+
dynamicBytes.length / 2)
|
|
122
|
+
.toString(16)
|
|
123
|
+
.padStart(64, '0');
|
|
124
|
+
signatureBytes += signature.staticPart(dynamicPartPosition);
|
|
125
|
+
dynamicBytes += signature.dynamicPart();
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
signatureBytes += signature.data.slice(2);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return signatureBytes + dynamicBytes;
|
|
132
|
+
};
|
|
133
|
+
exports.buildSignatureBytes = buildSignatureBytes;
|
|
134
|
+
const preimageSafeTransactionHash = (safeAddress, safeTx, safeVersion, chainId) => {
|
|
135
|
+
const safeTxTypes = (0, eip_712_1.getEip712TxTypes)(safeVersion);
|
|
136
|
+
return ethers_1.ethers.TypedDataEncoder.encode({ verifyingContract: safeAddress, chainId }, { SafeTx: safeTxTypes.SafeTx }, safeTx);
|
|
137
|
+
};
|
|
138
|
+
exports.preimageSafeTransactionHash = preimageSafeTransactionHash;
|
|
139
|
+
const preimageSafeMessageHash = (safeAddress, message, safeVersion, chainId) => {
|
|
140
|
+
const safeMessageTypes = (0, eip_712_1.getEip712MessageTypes)(safeVersion);
|
|
141
|
+
return ethers_1.ethers.TypedDataEncoder.encode({ verifyingContract: safeAddress, chainId }, { SafeMessage: safeMessageTypes.SafeMessage }, { message });
|
|
142
|
+
};
|
|
143
|
+
exports.preimageSafeMessageHash = preimageSafeMessageHash;
|
|
144
|
+
const EQ_OR_GT_1_3_0 = '>=1.3.0';
|
|
145
|
+
const calculateSafeTransactionHash = (safeAddress, safeTx, safeVersion, chainId) => {
|
|
146
|
+
const safeTxTypes = (0, eip_712_1.getEip712TxTypes)(safeVersion);
|
|
147
|
+
const domain = { verifyingContract: safeAddress };
|
|
148
|
+
if ((0, satisfies_1.default)(safeVersion, EQ_OR_GT_1_3_0)) {
|
|
149
|
+
domain.chainId = chainId;
|
|
150
|
+
}
|
|
151
|
+
return ethers_1.ethers.TypedDataEncoder.hash(domain, { SafeTx: safeTxTypes.SafeTx }, safeTx);
|
|
152
|
+
};
|
|
153
|
+
exports.calculateSafeTransactionHash = calculateSafeTransactionHash;
|
|
154
|
+
const calculateSafeMessageHash = (safeAddress, message, safeVersion, chainId) => {
|
|
155
|
+
const safeMessageTypes = (0, eip_712_1.getEip712MessageTypes)(safeVersion);
|
|
156
|
+
return ethers_1.ethers.TypedDataEncoder.hash({ verifyingContract: safeAddress, chainId }, { SafeMessage: safeMessageTypes.SafeMessage }, { message });
|
|
157
|
+
};
|
|
158
|
+
exports.calculateSafeMessageHash = calculateSafeMessageHash;
|
|
91
159
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/signatures/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/signatures/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ declare class EthSafeTransaction implements SafeTransaction {
|
|
|
3
3
|
data: SafeTransactionData;
|
|
4
4
|
signatures: Map<string, SafeSignature>;
|
|
5
5
|
constructor(data: SafeTransactionData);
|
|
6
|
+
getSignature(signer: string): SafeSignature | undefined;
|
|
6
7
|
addSignature(signature: SafeSignature): void;
|
|
7
8
|
encodedSignatures(): string;
|
|
8
9
|
}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const signatures_1 = require("../signatures");
|
|
3
4
|
class EthSafeTransaction {
|
|
4
5
|
constructor(data) {
|
|
5
6
|
this.signatures = new Map();
|
|
6
7
|
this.data = data;
|
|
7
8
|
}
|
|
9
|
+
getSignature(signer) {
|
|
10
|
+
return this.signatures.get(signer.toLowerCase());
|
|
11
|
+
}
|
|
8
12
|
addSignature(signature) {
|
|
9
13
|
this.signatures.set(signature.signer.toLowerCase(), signature);
|
|
10
14
|
}
|
|
11
15
|
encodedSignatures() {
|
|
12
|
-
|
|
13
|
-
// const baseOffset = signers.length * 65
|
|
14
|
-
let staticParts = '';
|
|
15
|
-
let dynamicParts = '';
|
|
16
|
-
signers.forEach((signerAddress) => {
|
|
17
|
-
const signature = this.signatures.get(signerAddress);
|
|
18
|
-
staticParts += signature?.staticPart( /*baseOffset + dynamicParts.length / 2*/).slice(2);
|
|
19
|
-
dynamicParts += signature?.dynamicPart();
|
|
20
|
-
});
|
|
21
|
-
return '0x' + staticParts + dynamicParts;
|
|
16
|
+
return (0, signatures_1.buildSignatureBytes)(Array.from(this.signatures.values()));
|
|
22
17
|
}
|
|
23
18
|
}
|
|
24
19
|
exports.default = EthSafeTransaction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SafeTransaction.js","sourceRoot":"","sources":["../../../../src/utils/transactions/SafeTransaction.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"SafeTransaction.js","sourceRoot":"","sources":["../../../../src/utils/transactions/SafeTransaction.ts"],"names":[],"mappings":";;AAKA,8CAAmD;AAEnD,MAAM,kBAAkB;IAItB,YAAY,IAAyB;QAFrC,eAAU,GAA+B,IAAI,GAAG,EAAE,CAAA;QAGhD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,YAAY,CAAC,SAAwB;QACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAA;IAChE,CAAC;IAED,iBAAiB;QACf,OAAO,IAAA,gCAAmB,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,CAAC;CACF;AAED,kBAAe,kBAAkB,CAAA"}
|