viem 2.56.6 → 2.56.7
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/CHANGELOG.md +14 -0
- package/_cjs/chains/definitions/eCanna.js +23 -0
- package/_cjs/chains/definitions/eCanna.js.map +1 -0
- package/_cjs/chains/definitions/eCannaTestnet.js +24 -0
- package/_cjs/chains/definitions/eCannaTestnet.js.map +1 -0
- package/_cjs/chains/definitions/robinhood.js +5 -1
- package/_cjs/chains/definitions/robinhood.js.map +1 -1
- package/_cjs/chains/definitions/zagros.js +33 -0
- package/_cjs/chains/definitions/zagros.js.map +1 -0
- package/_cjs/chains/index.js +18 -12
- package/_cjs/chains/index.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/tempo/Account.js +21 -30
- package/_cjs/tempo/Account.js.map +1 -1
- package/_cjs/tempo/Addresses.js +2 -1
- package/_cjs/tempo/Addresses.js.map +1 -1
- package/_cjs/tempo/Multisig.js +14 -107
- package/_cjs/tempo/Multisig.js.map +1 -1
- package/_cjs/tempo/Transaction.js +5 -2
- package/_cjs/tempo/Transaction.js.map +1 -1
- package/_cjs/tempo/actions/accessKey.js +2 -1
- package/_cjs/tempo/actions/accessKey.js.map +1 -1
- package/_cjs/tempo/chainConfig.js +3 -31
- package/_cjs/tempo/chainConfig.js.map +1 -1
- package/_cjs/tempo/multisig/Config.js +8 -4
- package/_cjs/tempo/multisig/Config.js.map +1 -1
- package/_cjs/tempo/multisig/Signature.js +11 -0
- package/_cjs/tempo/multisig/Signature.js.map +1 -0
- package/_cjs/tokens/definitions/cirbtc.js +1 -0
- package/_cjs/tokens/definitions/cirbtc.js.map +1 -1
- package/_cjs/tokens/definitions/eurc.js +1 -0
- package/_cjs/tokens/definitions/eurc.js.map +1 -1
- package/_esm/chains/definitions/eCanna.js +20 -0
- package/_esm/chains/definitions/eCanna.js.map +1 -0
- package/_esm/chains/definitions/eCannaTestnet.js +21 -0
- package/_esm/chains/definitions/eCannaTestnet.js.map +1 -0
- package/_esm/chains/definitions/robinhood.js +5 -1
- package/_esm/chains/definitions/robinhood.js.map +1 -1
- package/_esm/chains/definitions/zagros.js +30 -0
- package/_esm/chains/definitions/zagros.js.map +1 -0
- package/_esm/chains/index.js +3 -0
- package/_esm/chains/index.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/tempo/Account.js +21 -30
- package/_esm/tempo/Account.js.map +1 -1
- package/_esm/tempo/Addresses.js +2 -0
- package/_esm/tempo/Addresses.js.map +1 -1
- package/_esm/tempo/Multisig.js +15 -111
- package/_esm/tempo/Multisig.js.map +1 -1
- package/_esm/tempo/Transaction.js +5 -2
- package/_esm/tempo/Transaction.js.map +1 -1
- package/_esm/tempo/actions/accessKey.js +2 -1
- package/_esm/tempo/actions/accessKey.js.map +1 -1
- package/_esm/tempo/chainConfig.js +3 -31
- package/_esm/tempo/chainConfig.js.map +1 -1
- package/_esm/tempo/multisig/Config.js +10 -5
- package/_esm/tempo/multisig/Config.js.map +1 -1
- package/_esm/tempo/multisig/Signature.js +9 -0
- package/_esm/tempo/multisig/Signature.js.map +1 -0
- package/_esm/tokens/definitions/cirbtc.js +1 -0
- package/_esm/tokens/definitions/cirbtc.js.map +1 -1
- package/_esm/tokens/definitions/eurc.js +1 -0
- package/_esm/tokens/definitions/eurc.js.map +1 -1
- package/_types/chains/definitions/eCanna.d.ts +51 -0
- package/_types/chains/definitions/eCanna.d.ts.map +1 -0
- package/_types/chains/definitions/eCannaTestnet.d.ts +51 -0
- package/_types/chains/definitions/eCannaTestnet.d.ts.map +1 -0
- package/_types/chains/definitions/robinhood.d.ts +2 -1
- package/_types/chains/definitions/robinhood.d.ts.map +1 -1
- package/_types/chains/definitions/tempo.d.ts +2 -4
- package/_types/chains/definitions/tempo.d.ts.map +1 -1
- package/_types/chains/definitions/tempoDevnet.d.ts +2 -4
- package/_types/chains/definitions/tempoDevnet.d.ts.map +1 -1
- package/_types/chains/definitions/tempoLocalnet.d.ts +2 -4
- package/_types/chains/definitions/tempoLocalnet.d.ts.map +1 -1
- package/_types/chains/definitions/tempoModerato.d.ts +2 -4
- package/_types/chains/definitions/tempoModerato.d.ts.map +1 -1
- package/_types/chains/definitions/zagros.d.ts +50 -0
- package/_types/chains/definitions/zagros.d.ts.map +1 -0
- package/_types/chains/index.d.ts +3 -0
- package/_types/chains/index.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/tempo/Account.d.ts +9 -3
- package/_types/tempo/Account.d.ts.map +1 -1
- package/_types/tempo/Addresses.d.ts +2 -0
- package/_types/tempo/Addresses.d.ts.map +1 -1
- package/_types/tempo/Multisig.d.ts.map +1 -1
- package/_types/tempo/Transaction.d.ts +16 -7
- package/_types/tempo/Transaction.d.ts.map +1 -1
- package/_types/tempo/actions/accessKey.d.ts +2 -2
- package/_types/tempo/actions/accessKey.d.ts.map +1 -1
- package/_types/tempo/chainConfig.d.ts +1 -3
- package/_types/tempo/chainConfig.d.ts.map +1 -1
- package/_types/tempo/multisig/Config.d.ts.map +1 -1
- package/_types/tempo/multisig/Signature.d.ts +4 -0
- package/_types/tempo/multisig/Signature.d.ts.map +1 -0
- package/_types/tokens/definitions/cirbtc.d.ts +1 -0
- package/_types/tokens/definitions/cirbtc.d.ts.map +1 -1
- package/_types/tokens/definitions/eurc.d.ts +1 -0
- package/_types/tokens/definitions/eurc.d.ts.map +1 -1
- package/_types/tokens/sets.d.ts +2 -0
- package/_types/tokens/sets.d.ts.map +1 -1
- package/chains/definitions/eCanna.ts +20 -0
- package/chains/definitions/eCannaTestnet.ts +21 -0
- package/chains/definitions/robinhood.ts +5 -1
- package/chains/definitions/zagros.ts +30 -0
- package/chains/index.ts +3 -0
- package/errors/version.ts +1 -1
- package/package.json +2 -2
- package/tempo/Account.ts +32 -43
- package/tempo/Addresses.ts +3 -0
- package/tempo/Multisig.ts +19 -132
- package/tempo/Transaction.ts +24 -9
- package/tempo/actions/accessKey.ts +4 -3
- package/tempo/chainConfig.ts +3 -42
- package/tempo/multisig/Config.ts +15 -5
- package/tempo/multisig/Signature.ts +11 -0
- package/tokens/definitions/cirbtc.ts +1 -0
- package/tokens/definitions/eurc.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../tempo/multisig/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,KAAK,GAAG,MAAM,QAAQ,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../../tempo/multisig/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,YAAY,CAAA;AAErC,OAAO,KAAK,KAAK,GAAG,MAAM,QAAQ,CAAA;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,KAAK,KAAK,MAAM,aAAa,CAAA;AAQzC,sCAAsC;AACtC,wBAAsB,IAAI,CACxB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,IAAI,CAAC,OAAO,GACpB,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAOvC;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,mCAAmC;IACnC,KAAY,OAAO,GAAG;QACpB,gCAAgC;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;QACxB,0CAA0C;QAC1C,UAAU,EAAE,GAAG,CAAC,GAAG,CAAA;KACpB,CAAA;CACF;AAED,0CAA0C;AAC1C,wBAAsB,KAAK,CACzB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,GACrB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,oCAAoC;IACpC,KAAY,OAAO,GAAG;QACpB,gCAAgC;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAA;QACxB,yCAAyC;QACzC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAA;QACnB,uBAAuB;QACvB,MAAM,EAAE,cAAc,CAAC,MAAM,CAAA;KAC9B,CAAA;CACF;AAyDD,uEAAuE;AACvE,qBAAa,sBAAuB,SAAQ,SAAS;IACnD,4CAA4C;gBAChC,OAAO,GAAE,sBAAsB,CAAC,OAAY;CAMzD;AAED,MAAM,CAAC,OAAO,WAAW,sBAAsB,CAAC;IAC9C,kCAAkC;IAClC,KAAY,OAAO,GAAG;QACpB,wBAAwB;QACxB,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAC5B,CAAA;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signature.d.ts","sourceRoot":"","sources":["../../../tempo/multisig/Signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5C,kDAAkD;AAClD,wBAAgB,aAAa,CAC3B,SAAS,EAAE,iBAAiB,CAAC,UAAU,GACtC,iBAAiB,CAAC,SAAS,CAK7B"}
|
|
@@ -10,6 +10,7 @@ import { defineToken } from '../defineToken.js';
|
|
|
10
10
|
export declare const cirbtc: defineToken.ReturnType<{
|
|
11
11
|
readonly addresses: {
|
|
12
12
|
readonly 1: "0x72DFB2E44f59C5AD2bAFE84314E5b99a7cd5075E";
|
|
13
|
+
readonly 5042: "0x171A4217b86A807A64eB94757Db6849fb4bDbAA0";
|
|
13
14
|
readonly 5042002: "0xf0C4a4CE82A5746AbAAd9425360Ab04fbBA432BF";
|
|
14
15
|
readonly 11155111: "0x3a3fe695F684Bf9b9e43CF43C2b895Ea5e392bB3";
|
|
15
16
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cirbtc.d.ts","sourceRoot":"","sources":["../../../tokens/definitions/cirbtc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"cirbtc.d.ts","sourceRoot":"","sources":["../../../tokens/definitions/cirbtc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;EAWjB,CAAA"}
|
|
@@ -14,6 +14,7 @@ export declare const eurc: defineToken.ReturnType<{
|
|
|
14
14
|
readonly 338: "0x31f7538adb53cF16350e6B0c89d03D91b7D12c46";
|
|
15
15
|
readonly 480: "0x1C60ba0A0eD1019e8Eb035E6daF4155A5cE2380B";
|
|
16
16
|
readonly 4801: "0xe479EcA5740Ac65d6E1823bea2f1C08Bc14e954F";
|
|
17
|
+
readonly 5042: "0xbEf5f6d51CB62b58e6A8f77868681825C6fe21c1";
|
|
17
18
|
readonly 8453: "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42";
|
|
18
19
|
readonly 43113: "0x5E44db7996c682E92a960b65AC713a54AD815c6B";
|
|
19
20
|
readonly 43114: "0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eurc.d.ts","sourceRoot":"","sources":["../../../tokens/definitions/eurc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"eurc.d.ts","sourceRoot":"","sources":["../../../tokens/definitions/eurc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;EAmBf,CAAA"}
|
package/_types/tokens/sets.d.ts
CHANGED
|
@@ -43,6 +43,7 @@ export declare const tokens: {
|
|
|
43
43
|
}>, import("./defineToken.js").defineToken.ReturnType<{
|
|
44
44
|
readonly addresses: {
|
|
45
45
|
readonly 1: "0x72DFB2E44f59C5AD2bAFE84314E5b99a7cd5075E";
|
|
46
|
+
readonly 5042: "0x171A4217b86A807A64eB94757Db6849fb4bDbAA0";
|
|
46
47
|
readonly 5042002: "0xf0C4a4CE82A5746AbAAd9425360Ab04fbBA432BF";
|
|
47
48
|
readonly 11155111: "0x3a3fe695F684Bf9b9e43CF43C2b895Ea5e392bB3";
|
|
48
49
|
};
|
|
@@ -81,6 +82,7 @@ export declare const tokens: {
|
|
|
81
82
|
readonly 338: "0x31f7538adb53cF16350e6B0c89d03D91b7D12c46";
|
|
82
83
|
readonly 480: "0x1C60ba0A0eD1019e8Eb035E6daF4155A5cE2380B";
|
|
83
84
|
readonly 4801: "0xe479EcA5740Ac65d6E1823bea2f1C08Bc14e954F";
|
|
85
|
+
readonly 5042: "0xbEf5f6d51CB62b58e6A8f77868681825C6fe21c1";
|
|
84
86
|
readonly 8453: "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42";
|
|
85
87
|
readonly 43113: "0x5E44db7996c682E92a960b65AC713a54AD815c6B";
|
|
86
88
|
readonly 43114: "0xC891EB4cbdEFf6e073e859e987815Ed1505c2ACD";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sets.d.ts","sourceRoot":"","sources":["../../tokens/sets.ts"],"names":[],"mappings":"AA2GA,6EAA6E;AAC7E,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"sets.d.ts","sourceRoot":"","sources":["../../tokens/sets.ts"],"names":[],"mappings":"AA2GA,6EAA6E;AAC7E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAA0B,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { defineChain } from '../../utils/chain/defineChain.js'
|
|
2
|
+
|
|
3
|
+
export const eCanna = /*#__PURE__*/ defineChain({
|
|
4
|
+
id: 4111,
|
|
5
|
+
name: 'E Canna Mainnet',
|
|
6
|
+
nativeCurrency: {
|
|
7
|
+
name: 'E Canna',
|
|
8
|
+
symbol: 'ECNA',
|
|
9
|
+
decimals: 18,
|
|
10
|
+
},
|
|
11
|
+
rpcUrls: {
|
|
12
|
+
default: { http: ['https://rpc.ecnascan.com'] },
|
|
13
|
+
},
|
|
14
|
+
blockExplorers: {
|
|
15
|
+
default: {
|
|
16
|
+
name: 'ECNA Scan',
|
|
17
|
+
url: 'https://explorer.ecnascan.com',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineChain } from '../../utils/chain/defineChain.js'
|
|
2
|
+
|
|
3
|
+
export const eCannaTestnet = /*#__PURE__*/ defineChain({
|
|
4
|
+
id: 4112,
|
|
5
|
+
name: 'E Canna Testnet',
|
|
6
|
+
nativeCurrency: {
|
|
7
|
+
name: 'E Canna Testnet',
|
|
8
|
+
symbol: 'tECNA',
|
|
9
|
+
decimals: 18,
|
|
10
|
+
},
|
|
11
|
+
rpcUrls: {
|
|
12
|
+
default: { http: ['https://testnetrpc.ecnascan.com'] },
|
|
13
|
+
},
|
|
14
|
+
blockExplorers: {
|
|
15
|
+
default: {
|
|
16
|
+
name: 'ECNA Scan Testnet',
|
|
17
|
+
url: 'https://testnetexplorer.ecnascan.com',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
testnet: true,
|
|
21
|
+
})
|
|
@@ -7,7 +7,11 @@ export const robinhood = /*#__PURE__*/ defineChain({
|
|
|
7
7
|
blockTime: 100,
|
|
8
8
|
rpcUrls: {
|
|
9
9
|
default: {
|
|
10
|
-
http: [
|
|
10
|
+
http: [
|
|
11
|
+
'https://rpc.mainnet.chain.robinhood.com',
|
|
12
|
+
'https://rpc.ordofi.network',
|
|
13
|
+
],
|
|
14
|
+
webSocket: ['wss://rpc.ordofi.network'],
|
|
11
15
|
},
|
|
12
16
|
},
|
|
13
17
|
blockExplorers: {
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { defineChain } from '../../utils/chain/defineChain.js'
|
|
2
|
+
|
|
3
|
+
export const zagros = /*#__PURE__*/ defineChain({
|
|
4
|
+
id: 21072026,
|
|
5
|
+
name: 'Zagros',
|
|
6
|
+
nativeCurrency: {
|
|
7
|
+
decimals: 18,
|
|
8
|
+
name: 'Zagros',
|
|
9
|
+
symbol: 'ZAGROS',
|
|
10
|
+
},
|
|
11
|
+
rpcUrls: {
|
|
12
|
+
default: {
|
|
13
|
+
http: ['https://rpc.zagros.network', 'https://rpc.zagrosnetwork.com'],
|
|
14
|
+
webSocket: ['wss://rpc.zagros.network/ws'],
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
blockExplorers: {
|
|
18
|
+
default: {
|
|
19
|
+
name: 'ZagrosRadar',
|
|
20
|
+
url: 'https://zagrosradar.com',
|
|
21
|
+
apiUrl: 'https://zagrosradar.com/api/v1',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
contracts: {
|
|
25
|
+
multicall3: {
|
|
26
|
+
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
|
|
27
|
+
blockCreated: 51,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
})
|
package/chains/index.ts
CHANGED
|
@@ -169,6 +169,8 @@ export { dreyerxMainnet } from './definitions/dreyerxMainnet.js'
|
|
|
169
169
|
export { dreyerxTestnet } from './definitions/dreyerxTestnet.js'
|
|
170
170
|
export { dustboyIoT } from './definitions/dustboyIoT.js'
|
|
171
171
|
export { dymension } from './definitions/dymension.js'
|
|
172
|
+
export { eCanna } from './definitions/eCanna.js'
|
|
173
|
+
export { eCannaTestnet } from './definitions/eCannaTestnet.js'
|
|
172
174
|
export { eden } from './definitions/eden.js'
|
|
173
175
|
export { edexa } from './definitions/edexa.js'
|
|
174
176
|
export { edexaTestnet } from './definitions/edexaTestnet.js'
|
|
@@ -738,6 +740,7 @@ export { xrSepolia } from './definitions/xrSepolia.js'
|
|
|
738
740
|
export { ynxTestnet } from './definitions/ynxTestnet.js'
|
|
739
741
|
export { yooldoVerse } from './definitions/yooldoVerse.js'
|
|
740
742
|
export { yooldoVerseTestnet } from './definitions/yooldoVerseTestnet.js'
|
|
743
|
+
export { zagros } from './definitions/zagros.js'
|
|
741
744
|
export { zenchainTestnet } from './definitions/zenchainTestnet.js'
|
|
742
745
|
export { zeniq } from './definitions/zeniq.js'
|
|
743
746
|
export { zeroNetwork } from './definitions/zeroNetwork.js'
|
package/errors/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '2.56.
|
|
1
|
+
export const version = '2.56.7'
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "viem",
|
|
3
3
|
"description": "TypeScript Interface for Ethereum",
|
|
4
|
-
"version": "2.56.
|
|
4
|
+
"version": "2.56.7",
|
|
5
5
|
"main": "./_cjs/index.js",
|
|
6
6
|
"module": "./_esm/index.js",
|
|
7
7
|
"types": "./_types/index.d.ts",
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
"@scure/bip39": "1.6.0",
|
|
230
230
|
"abitype": "1.2.3",
|
|
231
231
|
"isows": "1.0.7",
|
|
232
|
-
"ox": "0.14.
|
|
232
|
+
"ox": "0.14.45",
|
|
233
233
|
"ws": "8.21.0"
|
|
234
234
|
},
|
|
235
235
|
"license": "MIT",
|
package/tempo/Account.ts
CHANGED
|
@@ -24,7 +24,9 @@ import { keccak256 } from '../utils/hash/keccak256.js'
|
|
|
24
24
|
import { hashMessage } from '../utils/signature/hashMessage.js'
|
|
25
25
|
import { hashTypedData } from '../utils/signature/hashTypedData.js'
|
|
26
26
|
import type { SerializeTransactionFn } from '../utils/transaction/serializeTransaction.js'
|
|
27
|
+
import { nativeMultisigFactory } from './Addresses.js'
|
|
27
28
|
import type { KeyAuthorizationManager } from './KeyAuthorizationManager.js'
|
|
29
|
+
import { parseApproval } from './multisig/Signature.js'
|
|
28
30
|
import * as Transaction from './Transaction.js'
|
|
29
31
|
|
|
30
32
|
export type Account_base<source extends string = string> = RequiredBy<
|
|
@@ -284,7 +286,7 @@ export declare namespace fromSecp256k1 {
|
|
|
284
286
|
*
|
|
285
287
|
* Owners can be accounts or addresses directly, or weighted `{ owner, weight }`
|
|
286
288
|
* entries. Direct owners default to weight `1`, and `threshold` defaults to `1`.
|
|
287
|
-
* Local owner accounts are retained for signing,
|
|
289
|
+
* Local owner accounts are retained for signing, using primitive signatures.
|
|
288
290
|
* Configs containing only owner addresses require external approvals through
|
|
289
291
|
* `signatures`.
|
|
290
292
|
*
|
|
@@ -359,11 +361,13 @@ export function fromMultisig(value: fromMultisig.Parameters): MultisigAccount {
|
|
|
359
361
|
(() => {
|
|
360
362
|
if (typeof value === 'string') return value
|
|
361
363
|
if (value.address === undefined || value.address === 'infer')
|
|
362
|
-
return MultisigConfig.getAddress(config
|
|
364
|
+
return MultisigConfig.getAddress(config!, {
|
|
365
|
+
factory: nativeMultisigFactory,
|
|
366
|
+
})
|
|
363
367
|
return value.address
|
|
364
368
|
})(),
|
|
365
369
|
)
|
|
366
|
-
const ownerAccounts = (() => {
|
|
370
|
+
const ownerAccounts: LocalAccount[] = (() => {
|
|
367
371
|
if (!configInput) return []
|
|
368
372
|
return configInput.owners.flatMap((value) => {
|
|
369
373
|
const owner =
|
|
@@ -371,6 +375,12 @@ export function fromMultisig(value: fromMultisig.Parameters): MultisigAccount {
|
|
|
371
375
|
return typeof owner === 'string' ? [] : [parseAccount(owner)]
|
|
372
376
|
})
|
|
373
377
|
})()
|
|
378
|
+
if (
|
|
379
|
+
ownerAccounts.some(
|
|
380
|
+
(owner) => owner.source === 'multisig' || isAccessKeyAccount(owner),
|
|
381
|
+
)
|
|
382
|
+
)
|
|
383
|
+
throw new Error('Multisig owners must use primitive signatures.')
|
|
374
384
|
const owners =
|
|
375
385
|
config?.owners.flatMap(({ owner }) => {
|
|
376
386
|
const account = ownerAccounts.find((account) =>
|
|
@@ -403,7 +413,7 @@ export function fromMultisig(value: fromMultisig.Parameters): MultisigAccount {
|
|
|
403
413
|
throw new Error(
|
|
404
414
|
'A local owner account is required to approve a multisig transaction.',
|
|
405
415
|
)
|
|
406
|
-
if (owner.source !== 'root'
|
|
416
|
+
if (owner.source !== 'root')
|
|
407
417
|
throw new Error(
|
|
408
418
|
'A Tempo owner account is required to approve a multisig transaction.',
|
|
409
419
|
)
|
|
@@ -422,29 +432,16 @@ export function fromMultisig(value: fromMultisig.Parameters): MultisigAccount {
|
|
|
422
432
|
}
|
|
423
433
|
const payload = keccak256(await serializer(presign as never))
|
|
424
434
|
const simulation = request.multisigSimulation
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
if (!simulation)
|
|
429
|
-
throw new Error('A multisig config is required for local signing.')
|
|
430
|
-
const parentConfig = MultisigConfig.from(simulation.config)
|
|
431
|
-
const parentDigest = MultisigConfig.getSignPayload({
|
|
432
|
-
account: requestAccount,
|
|
433
|
-
config: parentConfig,
|
|
434
|
-
payload,
|
|
435
|
-
})
|
|
436
|
-
return SignatureEnvelope.serialize(
|
|
437
|
-
await signMultisig(account, {
|
|
438
|
-
payload: parentDigest,
|
|
439
|
-
}),
|
|
435
|
+
if (request.from && !Address.isEqual(request.from, address))
|
|
436
|
+
throw new Error(
|
|
437
|
+
'Multisig account does not match the transaction sender.',
|
|
440
438
|
)
|
|
441
|
-
}
|
|
442
439
|
|
|
443
440
|
const signature = await signMultisig(account, {
|
|
444
441
|
config: simulation?.config,
|
|
445
442
|
payload,
|
|
446
443
|
signatures: request.signatures?.map((signature) =>
|
|
447
|
-
|
|
444
|
+
parseApproval(signature),
|
|
448
445
|
),
|
|
449
446
|
})
|
|
450
447
|
return (await serializer(
|
|
@@ -494,9 +491,11 @@ export declare namespace fromMultisig {
|
|
|
494
491
|
/** Multisig owner account or address, optionally with an explicit weight. */
|
|
495
492
|
export type Owner =
|
|
496
493
|
| Address.Address
|
|
497
|
-
| LocalAccount
|
|
494
|
+
| (LocalAccount & { accessKeyAddress?: never; owners?: never })
|
|
498
495
|
| (Omit<MultisigConfig.Owner, 'owner'> & {
|
|
499
|
-
owner:
|
|
496
|
+
owner:
|
|
497
|
+
| Address.Address
|
|
498
|
+
| (LocalAccount & { accessKeyAddress?: never; owners?: never })
|
|
500
499
|
})
|
|
501
500
|
|
|
502
501
|
/** Parameters for {@link fromMultisig}. */
|
|
@@ -523,7 +522,7 @@ async function signMultisig(
|
|
|
523
522
|
parameters: {
|
|
524
523
|
config?: MultisigConfig.Config | undefined
|
|
525
524
|
payload: Hex.Hex
|
|
526
|
-
signatures?: readonly SignatureEnvelope.
|
|
525
|
+
signatures?: readonly SignatureEnvelope.Primitive[] | undefined
|
|
527
526
|
},
|
|
528
527
|
): Promise<SignatureEnvelope.Multisig> {
|
|
529
528
|
const { config, payload, signatures: providedSignatures = [] } = parameters
|
|
@@ -558,6 +557,7 @@ async function signMultisig(
|
|
|
558
557
|
a.owner.toLowerCase().localeCompare(b.owner.toLowerCase()),
|
|
559
558
|
)
|
|
560
559
|
for (const owner of owners) {
|
|
560
|
+
if (weight >= Number(currentConfig.threshold)) break
|
|
561
561
|
const address = owner.owner.toLowerCase() as Address.Address
|
|
562
562
|
if (signedOwners.has(address)) continue
|
|
563
563
|
const ownerAccount = account.owners.find((account) =>
|
|
@@ -565,19 +565,9 @@ async function signMultisig(
|
|
|
565
565
|
)
|
|
566
566
|
if (!ownerAccount) continue
|
|
567
567
|
|
|
568
|
-
if (
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
payload: digest,
|
|
572
|
-
}),
|
|
573
|
-
)
|
|
574
|
-
} else {
|
|
575
|
-
if (!ownerAccount.sign)
|
|
576
|
-
throw new Error('Multisig owner account cannot sign.')
|
|
577
|
-
signatures.push(
|
|
578
|
-
SignatureEnvelope.from(await ownerAccount.sign({ hash: digest })),
|
|
579
|
-
)
|
|
580
|
-
}
|
|
568
|
+
if (!ownerAccount.sign)
|
|
569
|
+
throw new Error('Multisig owner account cannot sign.')
|
|
570
|
+
signatures.push(parseApproval(await ownerAccount.sign({ hash: digest })))
|
|
581
571
|
|
|
582
572
|
signedOwners.add(address)
|
|
583
573
|
weight += Number(owner.weight)
|
|
@@ -856,9 +846,7 @@ export async function signKeyAuthorization(
|
|
|
856
846
|
await signMultisig(account, {
|
|
857
847
|
config: multisigState.config,
|
|
858
848
|
payload: hash,
|
|
859
|
-
signatures: signatures?.map((signature) =>
|
|
860
|
-
SignatureEnvelope.from(signature),
|
|
861
|
-
),
|
|
849
|
+
signatures: signatures?.map((signature) => parseApproval(signature)),
|
|
862
850
|
}),
|
|
863
851
|
)
|
|
864
852
|
}
|
|
@@ -982,16 +970,17 @@ function fromBase(parameters: fromBase.Parameters): Account_base {
|
|
|
982
970
|
// primitive signature over the multisig owner approval digest, instead of
|
|
983
971
|
// a full serialized transaction. Approvals are combined later in
|
|
984
972
|
// `sendTransaction({ signatures })`.
|
|
985
|
-
const { multisigSimulation } = transaction as {
|
|
973
|
+
const { multisigSimulation, from } = transaction as {
|
|
974
|
+
from?: Address.Address
|
|
986
975
|
multisigSimulation?: {
|
|
987
|
-
account: Address.Address
|
|
988
976
|
config: MultisigConfig.Config
|
|
989
977
|
}
|
|
990
978
|
}
|
|
991
979
|
if (multisigSimulation) {
|
|
980
|
+
if (!from) throw new Error('A multisig sender is required for signing.')
|
|
992
981
|
const config = MultisigConfig.from(multisigSimulation.config)
|
|
993
982
|
const digest = MultisigConfig.getSignPayload({
|
|
994
|
-
account:
|
|
983
|
+
account: from,
|
|
995
984
|
config,
|
|
996
985
|
payload,
|
|
997
986
|
})
|
package/tempo/Addresses.ts
CHANGED
|
@@ -14,6 +14,9 @@ export const accountRegistrar = '0x7702ac0000000000000000000000000000000000'
|
|
|
14
14
|
export const addressRegistry = '0xfdc0000000000000000000000000000000000000'
|
|
15
15
|
export const feeManager = '0xfeec000000000000000000000000000000000000'
|
|
16
16
|
export const nativeMultisig = '0xAACC000000000000000000000000000000000000'
|
|
17
|
+
/** Temporary recovery factory until the production address is finalized. */
|
|
18
|
+
export const nativeMultisigFactory =
|
|
19
|
+
'0x7171717171717171717171717171717171717171'
|
|
17
20
|
export const nonceManager = '0x4e4F4E4345000000000000000000000000000000'
|
|
18
21
|
export const pathUsd = '0x20c0000000000000000000000000000000000000'
|
|
19
22
|
export const receivePolicyGuard = '0xB10C000000000000000000000000000000000000'
|
package/tempo/Multisig.ts
CHANGED
|
@@ -140,13 +140,12 @@ export function handleRequest(
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
if (operation.status === 'pending')
|
|
143
|
-
return await toTransaction(client, operation
|
|
143
|
+
return await toTransaction(client, operation)
|
|
144
144
|
const transactionHash = await getSubmittedTransactionHash(
|
|
145
145
|
parameters.store,
|
|
146
146
|
operation,
|
|
147
147
|
)
|
|
148
|
-
if (!transactionHash)
|
|
149
|
-
return await toTransaction(client, operation, parameters.store)
|
|
148
|
+
if (!transactionHash) return await toTransaction(client, operation)
|
|
150
149
|
const transaction = await next(
|
|
151
150
|
{
|
|
152
151
|
...request,
|
|
@@ -155,7 +154,7 @@ export function handleRequest(
|
|
|
155
154
|
requestOptions,
|
|
156
155
|
)
|
|
157
156
|
if (!transaction || typeof transaction !== 'object')
|
|
158
|
-
return await toTransaction(client, operation
|
|
157
|
+
return await toTransaction(client, operation)
|
|
159
158
|
const success =
|
|
160
159
|
operation.status === 'submitting'
|
|
161
160
|
? await completeSubmission(
|
|
@@ -306,23 +305,16 @@ async function submit(options: submit.Options) {
|
|
|
306
305
|
const existingApprovals = existing
|
|
307
306
|
? await selectApprovals({
|
|
308
307
|
account: signature.account,
|
|
309
|
-
client: options.client,
|
|
310
308
|
config,
|
|
311
|
-
discardInvalidNested: true,
|
|
312
309
|
hash: operationHash,
|
|
313
310
|
approvals: existing.approvals,
|
|
314
|
-
blockNumber,
|
|
315
|
-
store: options.store,
|
|
316
311
|
})
|
|
317
312
|
: undefined
|
|
318
313
|
const approvals = await selectApprovals({
|
|
319
314
|
account: signature.account,
|
|
320
|
-
client: options.client,
|
|
321
315
|
config,
|
|
322
316
|
hash: operationHash,
|
|
323
317
|
approvals: [...(existingApprovals?.approvals ?? []), ...incoming],
|
|
324
|
-
blockNumber,
|
|
325
|
-
store: options.store,
|
|
326
318
|
})
|
|
327
319
|
return MultisigOperation.from({
|
|
328
320
|
account: signature.account,
|
|
@@ -427,12 +419,9 @@ async function submit(options: submit.Options) {
|
|
|
427
419
|
})
|
|
428
420
|
const finalApprovals = await selectApprovals({
|
|
429
421
|
account: claim.account,
|
|
430
|
-
blockNumber,
|
|
431
|
-
client: options.client,
|
|
432
422
|
config: claim.config,
|
|
433
423
|
hash: claim.hash,
|
|
434
424
|
approvals: claim.approvals,
|
|
435
|
-
store: options.store,
|
|
436
425
|
})
|
|
437
426
|
const final = MultisigOperation.serializeTransaction(claim, {
|
|
438
427
|
approvals: finalApprovals.selectedApprovals,
|
|
@@ -703,12 +692,8 @@ async function approveKeyAuthorization(
|
|
|
703
692
|
? await selectApprovals({
|
|
704
693
|
account: approval.account,
|
|
705
694
|
approvals: existing.approvals,
|
|
706
|
-
blockNumber,
|
|
707
|
-
client: options.client,
|
|
708
695
|
config: approval.config,
|
|
709
|
-
discardInvalidNested: true,
|
|
710
696
|
hash: approval.hash,
|
|
711
|
-
store: options.store,
|
|
712
697
|
})
|
|
713
698
|
: undefined
|
|
714
699
|
const approvals = await selectApprovals({
|
|
@@ -717,11 +702,8 @@ async function approveKeyAuthorization(
|
|
|
717
702
|
...(existingApprovals?.approvals ?? []),
|
|
718
703
|
...approval.approvals,
|
|
719
704
|
],
|
|
720
|
-
blockNumber,
|
|
721
|
-
client: options.client,
|
|
722
705
|
config: approval.config,
|
|
723
706
|
hash: approval.hash,
|
|
724
|
-
store: options.store,
|
|
725
707
|
})
|
|
726
708
|
if (
|
|
727
709
|
existing &&
|
|
@@ -804,16 +786,18 @@ function assertConfig(options: {
|
|
|
804
786
|
const { account, commitment, config } = options
|
|
805
787
|
if (
|
|
806
788
|
config.version === 0n &&
|
|
807
|
-
MultisigConfig.getAddress(config
|
|
789
|
+
MultisigConfig.getAddress(config, {
|
|
790
|
+
factory: Addresses.nativeMultisigFactory,
|
|
791
|
+
}).toLowerCase() !== account.toLowerCase()
|
|
808
792
|
)
|
|
809
793
|
throw new RpcResponse.InvalidParamsError({
|
|
810
794
|
message: 'Initial multisig config does not match the multisig account.',
|
|
811
795
|
})
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
796
|
+
if (config.version === 0n && Hex.toBigInt(commitment) === 0n) return
|
|
797
|
+
if (
|
|
798
|
+
commitment.toLowerCase() !==
|
|
799
|
+
MultisigConfig.getCommitment(config).toLowerCase()
|
|
800
|
+
)
|
|
817
801
|
throw new RpcResponse.InvalidParamsError({
|
|
818
802
|
message: `Multisig config does not match account ${account}.`,
|
|
819
803
|
})
|
|
@@ -904,82 +888,12 @@ declare namespace cacheNextConfigs {
|
|
|
904
888
|
}
|
|
905
889
|
}
|
|
906
890
|
|
|
907
|
-
/**
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
let validationCount = 0
|
|
912
|
-
const select = async (approvals: readonly SignatureEnvelope.Serialized[]) => {
|
|
913
|
-
const result = await MultisigOperation.selectApprovals({
|
|
914
|
-
account: options.account,
|
|
915
|
-
approvals,
|
|
916
|
-
config: options.config,
|
|
917
|
-
hash: options.hash,
|
|
918
|
-
})
|
|
919
|
-
const configs = new Map<
|
|
920
|
-
string,
|
|
921
|
-
{ account: Address; config: MultisigConfig.Config }
|
|
922
|
-
>()
|
|
923
|
-
const visit = (signature: SignatureEnvelope.SignatureEnvelope) => {
|
|
924
|
-
if (signature.type !== 'multisig') return
|
|
925
|
-
const config = MultisigConfig.from(signature.config)
|
|
926
|
-
const key = signature.account.toLowerCase()
|
|
927
|
-
configs.set(key, { account: signature.account, config })
|
|
928
|
-
for (const approval of signature.signatures) visit(approval)
|
|
929
|
-
}
|
|
930
|
-
for (const approval of result.approvals)
|
|
931
|
-
visit(SignatureEnvelope.from(approval))
|
|
932
|
-
|
|
933
|
-
for (const { account, config } of configs.values()) {
|
|
934
|
-
const key = `${account.toLowerCase()}:${MultisigConfig.getCommitment(config)}`
|
|
935
|
-
const pending = (() => {
|
|
936
|
-
const existing = validation.get(key)
|
|
937
|
-
if (existing) return existing
|
|
938
|
-
validationCount++
|
|
939
|
-
if (validationCount > MultisigConfig.maxOwners)
|
|
940
|
-
throw new RpcResponse.InvalidParamsError({
|
|
941
|
-
message: 'Multisig approval validation exceeds the owner limit.',
|
|
942
|
-
})
|
|
943
|
-
const pending = validateConfig({
|
|
944
|
-
account,
|
|
945
|
-
blockNumber: options.blockNumber,
|
|
946
|
-
client: options.client,
|
|
947
|
-
config,
|
|
948
|
-
})
|
|
949
|
-
validation.set(key, pending)
|
|
950
|
-
return pending
|
|
951
|
-
})()
|
|
952
|
-
const commitment = await pending
|
|
953
|
-
await ConfigStore.write(options.store, {
|
|
954
|
-
address: account,
|
|
955
|
-
commitment,
|
|
956
|
-
config,
|
|
957
|
-
})
|
|
958
|
-
}
|
|
959
|
-
return result
|
|
960
|
-
}
|
|
891
|
+
/** Validates primitive approvals and translates invalid input into an RPC error. */
|
|
892
|
+
async function selectApprovals(
|
|
893
|
+
options: MultisigOperation.selectApprovals.Options,
|
|
894
|
+
) {
|
|
961
895
|
try {
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
const approvals: SignatureEnvelope.Serialized[] = []
|
|
965
|
-
for (const approval of options.approvals) {
|
|
966
|
-
if (SignatureEnvelope.from(approval).type !== 'multisig') {
|
|
967
|
-
approvals.push(approval)
|
|
968
|
-
continue
|
|
969
|
-
}
|
|
970
|
-
try {
|
|
971
|
-
const retained = (await select([approval])).approvals[0]
|
|
972
|
-
if (retained) approvals.push(retained)
|
|
973
|
-
} catch (error) {
|
|
974
|
-
if (
|
|
975
|
-
error instanceof MultisigOperation.InvalidApprovalError ||
|
|
976
|
-
error instanceof RpcResponse.InvalidParamsError
|
|
977
|
-
)
|
|
978
|
-
continue
|
|
979
|
-
throw error
|
|
980
|
-
}
|
|
981
|
-
}
|
|
982
|
-
return await select(approvals)
|
|
896
|
+
return await MultisigOperation.selectApprovals(options)
|
|
983
897
|
} catch (error) {
|
|
984
898
|
if (error instanceof MultisigOperation.InvalidApprovalError)
|
|
985
899
|
throw new RpcResponse.InvalidParamsError({ message: error.shortMessage })
|
|
@@ -987,20 +901,6 @@ async function selectApprovals(options: selectApprovals.Options) {
|
|
|
987
901
|
}
|
|
988
902
|
}
|
|
989
903
|
|
|
990
|
-
declare namespace selectApprovals {
|
|
991
|
-
/** Options for {@link selectApprovals}. */
|
|
992
|
-
export type Options = MultisigOperation.selectApprovals.Options & {
|
|
993
|
-
/** Block used to validate every config. */
|
|
994
|
-
blockNumber: bigint
|
|
995
|
-
/** Client used to validate nested multisig configurations. */
|
|
996
|
-
client: ReturnType<typeof createClient>
|
|
997
|
-
/** Discards stored nested approvals invalidated by a child configuration change. */
|
|
998
|
-
discardInvalidNested?: boolean | undefined
|
|
999
|
-
/** Shared multisig store. */
|
|
1000
|
-
store: Store.Store
|
|
1001
|
-
}
|
|
1002
|
-
}
|
|
1003
|
-
|
|
1004
904
|
/** Returns an existing successful operation through the requested send method. */
|
|
1005
905
|
async function submittedResult(
|
|
1006
906
|
options: submit.Options,
|
|
@@ -1186,7 +1086,6 @@ function mergeTransaction(existing: Hex.Hex | undefined, incoming: Hex.Hex) {
|
|
|
1186
1086
|
async function toTransaction(
|
|
1187
1087
|
client: ReturnType<typeof createClient>,
|
|
1188
1088
|
operation: MultisigOperation.TransactionOperation,
|
|
1189
|
-
store: Store.Store,
|
|
1190
1089
|
) {
|
|
1191
1090
|
const approvals = await (async () => {
|
|
1192
1091
|
if (operation.status !== 'pending')
|
|
@@ -1206,12 +1105,8 @@ async function toTransaction(
|
|
|
1206
1105
|
return await selectApprovals({
|
|
1207
1106
|
account: operation.account,
|
|
1208
1107
|
approvals: operation.approvals,
|
|
1209
|
-
blockNumber,
|
|
1210
|
-
client,
|
|
1211
1108
|
config: operation.config,
|
|
1212
|
-
discardInvalidNested: true,
|
|
1213
1109
|
hash: operation.hash,
|
|
1214
|
-
store,
|
|
1215
1110
|
})
|
|
1216
1111
|
})()
|
|
1217
1112
|
const current =
|
|
@@ -1224,17 +1119,9 @@ async function toTransaction(
|
|
|
1224
1119
|
weight: approvals.weight,
|
|
1225
1120
|
})
|
|
1226
1121
|
: operation
|
|
1227
|
-
const serialized = MultisigOperation.serializeTransaction(
|
|
1228
|
-
approvals
|
|
1229
|
-
|
|
1230
|
-
// Keep one stored approval in the synthetic envelope when every nested
|
|
1231
|
-
// approval became stale. The next submission replaces it before broadcast.
|
|
1232
|
-
approvals:
|
|
1233
|
-
approvals.selectedApprovals.length > 0
|
|
1234
|
-
? approvals.selectedApprovals
|
|
1235
|
-
: operation.approvals.slice(0, 1),
|
|
1236
|
-
},
|
|
1237
|
-
)
|
|
1122
|
+
const serialized = MultisigOperation.serializeTransaction(current, {
|
|
1123
|
+
approvals: approvals.selectedApprovals,
|
|
1124
|
+
})
|
|
1238
1125
|
const transaction = deserialize(serialized)
|
|
1239
1126
|
return {
|
|
1240
1127
|
...ox_Transaction.toRpc(
|