damm-sdk 1.4.0 → 1.4.11

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.
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Minimal ERC-4626 ABI for Fluid Lite iETHv2 vault.
3
+ * Only includes deposit, withdraw, and redeem functions.
4
+ */
5
+ declare const _default: readonly [{
6
+ readonly inputs: readonly [{
7
+ readonly internalType: "uint256";
8
+ readonly name: "assets";
9
+ readonly type: "uint256";
10
+ }, {
11
+ readonly internalType: "address";
12
+ readonly name: "receiver";
13
+ readonly type: "address";
14
+ }];
15
+ readonly name: "deposit";
16
+ readonly outputs: readonly [{
17
+ readonly internalType: "uint256";
18
+ readonly name: "shares";
19
+ readonly type: "uint256";
20
+ }];
21
+ readonly stateMutability: "nonpayable";
22
+ readonly type: "function";
23
+ }, {
24
+ readonly inputs: readonly [{
25
+ readonly internalType: "uint256";
26
+ readonly name: "assets";
27
+ readonly type: "uint256";
28
+ }, {
29
+ readonly internalType: "address";
30
+ readonly name: "receiver";
31
+ readonly type: "address";
32
+ }, {
33
+ readonly internalType: "address";
34
+ readonly name: "owner";
35
+ readonly type: "address";
36
+ }];
37
+ readonly name: "withdraw";
38
+ readonly outputs: readonly [{
39
+ readonly internalType: "uint256";
40
+ readonly name: "shares";
41
+ readonly type: "uint256";
42
+ }];
43
+ readonly stateMutability: "nonpayable";
44
+ readonly type: "function";
45
+ }, {
46
+ readonly inputs: readonly [{
47
+ readonly internalType: "uint256";
48
+ readonly name: "shares";
49
+ readonly type: "uint256";
50
+ }, {
51
+ readonly internalType: "address";
52
+ readonly name: "receiver";
53
+ readonly type: "address";
54
+ }, {
55
+ readonly internalType: "address";
56
+ readonly name: "owner";
57
+ readonly type: "address";
58
+ }];
59
+ readonly name: "redeem";
60
+ readonly outputs: readonly [{
61
+ readonly internalType: "uint256";
62
+ readonly name: "assets";
63
+ readonly type: "uint256";
64
+ }];
65
+ readonly stateMutability: "nonpayable";
66
+ readonly type: "function";
67
+ }];
68
+ export default _default;
69
+ //# sourceMappingURL=fluid-lite.abi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid-lite.abi.d.ts","sourceRoot":"","sources":["../../../src/integrations/fluidLite/fluid-lite.abi.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAiCW"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Fluid Lite iETHv2 vault encoder.
3
+ *
4
+ * ERC-4626 compliant vault for stETH on mainnet.
5
+ * deposit(assets, receiver) — deposit stETH, receive vault shares.
6
+ * redeem(shares, receiver, owner) — redeem shares for stETH.
7
+ * withdraw(assets, receiver, owner) — withdraw exact stETH amount.
8
+ *
9
+ * Receiver and owner must always be the Safe address (avatar).
10
+ */
11
+ import type { Address } from "viem";
12
+ import type { HexString, Unwrapable, Call } from "../../types";
13
+ export type DepositFluidLiteArgs = Readonly<{
14
+ assets: bigint;
15
+ receiver: Address;
16
+ }>;
17
+ export declare const DepositFluidLiteCalldata: ({ assets, receiver }: DepositFluidLiteArgs) => HexString;
18
+ export declare const depositFluidLiteTrx: ({ args, vault, }: {
19
+ args: DepositFluidLiteArgs;
20
+ vault: Address;
21
+ }) => Unwrapable<Call>;
22
+ export type RedeemFluidLiteArgs = Readonly<{
23
+ shares: bigint;
24
+ receiver: Address;
25
+ owner: Address;
26
+ }>;
27
+ export declare const RedeemFluidLiteCalldata: ({ shares, receiver, owner }: RedeemFluidLiteArgs) => HexString;
28
+ export declare const redeemFluidLiteTrx: ({ args, vault, }: {
29
+ args: RedeemFluidLiteArgs;
30
+ vault: Address;
31
+ }) => Unwrapable<Call>;
32
+ export type WithdrawFluidLiteArgs = Readonly<{
33
+ assets: bigint;
34
+ receiver: Address;
35
+ owner: Address;
36
+ }>;
37
+ export declare const WithdrawFluidLiteCalldata: ({ assets, receiver, owner }: WithdrawFluidLiteArgs) => HexString;
38
+ export declare const withdrawFluidLiteTrx: ({ args, vault, }: {
39
+ args: WithdrawFluidLiteArgs;
40
+ vault: Address;
41
+ }) => Unwrapable<Call>;
42
+ //# sourceMappingURL=fluid-lite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fluid-lite.d.ts","sourceRoot":"","sources":["../../../src/integrations/fluidLite/fluid-lite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAS/D,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAEH,eAAO,MAAM,wBAAwB,yBAA0B,oBAAoB,KAAG,SAErF,CAAC;AAEF,eAAO,MAAM,mBAAmB;UAItB,oBAAoB;WACnB,OAAO;MACd,WAAW,IAAI,CAOlB,CAAC;AAMF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH,eAAO,MAAM,uBAAuB,gCAAiC,mBAAmB,KAAG,SAE1F,CAAC;AAEF,eAAO,MAAM,kBAAkB;UAIrB,mBAAmB;WAClB,OAAO;MACd,WAAW,IAAI,CAOlB,CAAC;AAMF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH,eAAO,MAAM,yBAAyB,gCAAiC,qBAAqB,KAAG,SAE9F,CAAC;AAEF,eAAO,MAAM,oBAAoB;UAIvB,qBAAqB;WACpB,OAAO;MACd,WAAW,IAAI,CAOlB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as FluidLiteAbi } from "./fluid-lite.abi";
2
+ export * from "./fluid-lite";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/fluidLite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3D,cAAc,cAAc,CAAC"}
@@ -12,11 +12,27 @@ export type SerializedGnosisMulticallPayload = readonly HexString[];
12
12
  export declare class MultisendBuilder {
13
13
  private readonly payload;
14
14
  private readonly multisendAddress;
15
+ private readonly defaultOperation;
15
16
  private readonly value?;
16
17
  private constructor();
17
18
  addSubcall(call: ExternalCall<Operation>): MultisendBuilder;
18
19
  setValue(value: bigint): MultisendBuilder;
19
20
  build(config?: MultisendConfig): Unwrapable<ExternalCall<Operation>>;
21
+ /**
22
+ * Create a MultisendBuilder using the standard MultiSend contract.
23
+ * The outer call defaults to DELEGATECALL (operation=1).
24
+ * Use this for most cases — subcalls execute in the caller's context.
25
+ */
20
26
  static new(chainId: number, version?: "v1_4_1" | "v1_3_0"): MultisendBuilder;
27
+ /**
28
+ * Create a MultisendBuilder using the MultiSendCallOnly contract.
29
+ * The outer call defaults to CALL (operation=0).
30
+ * Use this when DELEGATECALL is not needed or not available (e.g., Safe proposals
31
+ * where the Safe itself is the caller and subcalls are all CALLs).
32
+ *
33
+ * IMPORTANT: MultiSendCallOnly only supports CALL subcalls (operation=0).
34
+ * DELEGATECALL subcalls will revert.
35
+ */
36
+ static newCallOnly(chainId: number, version?: "v1_4_1" | "v1_3_0"): MultisendBuilder;
21
37
  }
22
38
  //# sourceMappingURL=gnosis.multisend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gnosis.multisend.d.ts","sourceRoot":"","sources":["../../../src/integrations/gnosis/gnosis.multisend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAc,MAAM,aAAa,CAAC;AAK7G,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAE3F,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,aAAa,SAAU,cAAc,KAAG,SAKpD,CAAC;AAMF,MAAM,MAAM,sBAAsB,GAAG,SAAS,cAAc,EAAE,CAAC;AAE/D,MAAM,MAAM,gCAAgC,GAAG,SAAS,SAAS,EAAE,CAAC;AAgBpE,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAEhC,OAAO;IAMA,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,gBAAgB;IAS3D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;IAIzC,KAAK,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;WAY7D,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,QAAQ,GAAG,QAAmB,GAAG,gBAAgB;CAGhG"}
1
+ {"version":3,"file":"gnosis.multisend.d.ts","sourceRoot":"","sources":["../../../src/integrations/gnosis/gnosis.multisend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAc,MAAM,aAAa,CAAC;AAK7G,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC,CAAC;AAE3F,MAAM,MAAM,eAAe,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,aAAa,SAAU,cAAc,KAAG,SAKpD,CAAC;AAMF,MAAM,MAAM,sBAAsB,GAAG,SAAS,cAAc,EAAE,CAAC;AAE/D,MAAM,MAAM,gCAAgC,GAAG,SAAS,SAAS,EAAE,CAAC;AAgBpE,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAS;IAEhC,OAAO;IAYA,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,gBAAgB;IAc3D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB;IAIzC,KAAK,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAY3E;;;;OAIG;WACW,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,QAAQ,GAAG,QAAmB,GAAG,gBAAgB;IAO7F;;;;;;;;OAQG;WACW,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,QAAQ,GAAG,QAAmB,GAAG,gBAAgB;CAMxG"}
@@ -19,6 +19,7 @@ export * from "./iporFusion";
19
19
  export * from "./originArm";
20
20
  export * from "./syrup";
21
21
  export * from "./gearbox";
22
+ export * from "./fluidLite";
22
23
  export * from "./weth";
23
24
  export * from "./pendle";
24
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "./dist/index.cjs",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
7
- "version": "1.4.0",
7
+ "version": "1.4.11",
8
8
  "files": [
9
9
  "dist",
10
10
  "src",
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Minimal ERC-4626 ABI for Fluid Lite iETHv2 vault.
3
+ * Only includes deposit, withdraw, and redeem functions.
4
+ */
5
+ export default [
6
+ {
7
+ inputs: [
8
+ { internalType: "uint256", name: "assets", type: "uint256" },
9
+ { internalType: "address", name: "receiver", type: "address" },
10
+ ],
11
+ name: "deposit",
12
+ outputs: [{ internalType: "uint256", name: "shares", type: "uint256" }],
13
+ stateMutability: "nonpayable",
14
+ type: "function",
15
+ },
16
+ {
17
+ inputs: [
18
+ { internalType: "uint256", name: "assets", type: "uint256" },
19
+ { internalType: "address", name: "receiver", type: "address" },
20
+ { internalType: "address", name: "owner", type: "address" },
21
+ ],
22
+ name: "withdraw",
23
+ outputs: [{ internalType: "uint256", name: "shares", type: "uint256" }],
24
+ stateMutability: "nonpayable",
25
+ type: "function",
26
+ },
27
+ {
28
+ inputs: [
29
+ { internalType: "uint256", name: "shares", type: "uint256" },
30
+ { internalType: "address", name: "receiver", type: "address" },
31
+ { internalType: "address", name: "owner", type: "address" },
32
+ ],
33
+ name: "redeem",
34
+ outputs: [{ internalType: "uint256", name: "assets", type: "uint256" }],
35
+ stateMutability: "nonpayable",
36
+ type: "function",
37
+ },
38
+ ] as const;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Fluid Lite iETHv2 vault encoder.
3
+ *
4
+ * ERC-4626 compliant vault for stETH on mainnet.
5
+ * deposit(assets, receiver) — deposit stETH, receive vault shares.
6
+ * redeem(shares, receiver, owner) — redeem shares for stETH.
7
+ * withdraw(assets, receiver, owner) — withdraw exact stETH amount.
8
+ *
9
+ * Receiver and owner must always be the Safe address (avatar).
10
+ */
11
+
12
+ import { ethers } from "ethers";
13
+ import FluidLiteAbi from "./fluid-lite.abi";
14
+ import type { Address } from "viem";
15
+ import type { HexString, Unwrapable, Call } from "../../types";
16
+ import { createCall } from "../../types";
17
+
18
+ const fluidLiteInterface = new ethers.utils.Interface(FluidLiteAbi);
19
+
20
+ // ============================================================================
21
+ // Deposit (ERC4626)
22
+ // ============================================================================
23
+
24
+ export type DepositFluidLiteArgs = Readonly<{
25
+ assets: bigint;
26
+ receiver: Address;
27
+ }>;
28
+
29
+ export const DepositFluidLiteCalldata = ({ assets, receiver }: DepositFluidLiteArgs): HexString => {
30
+ return fluidLiteInterface.encodeFunctionData("deposit", [assets, receiver]) as HexString;
31
+ };
32
+
33
+ export const depositFluidLiteTrx = ({
34
+ args,
35
+ vault,
36
+ }: {
37
+ args: DepositFluidLiteArgs;
38
+ vault: Address;
39
+ }): Unwrapable<Call> => {
40
+ return createCall({
41
+ operation: 0,
42
+ to: vault,
43
+ value: 0n,
44
+ data: DepositFluidLiteCalldata(args),
45
+ });
46
+ };
47
+
48
+ // ============================================================================
49
+ // Redeem (ERC4626) - Shares-based withdrawal
50
+ // ============================================================================
51
+
52
+ export type RedeemFluidLiteArgs = Readonly<{
53
+ shares: bigint;
54
+ receiver: Address;
55
+ owner: Address;
56
+ }>;
57
+
58
+ export const RedeemFluidLiteCalldata = ({ shares, receiver, owner }: RedeemFluidLiteArgs): HexString => {
59
+ return fluidLiteInterface.encodeFunctionData("redeem", [shares, receiver, owner]) as HexString;
60
+ };
61
+
62
+ export const redeemFluidLiteTrx = ({
63
+ args,
64
+ vault,
65
+ }: {
66
+ args: RedeemFluidLiteArgs;
67
+ vault: Address;
68
+ }): Unwrapable<Call> => {
69
+ return createCall({
70
+ operation: 0,
71
+ to: vault,
72
+ value: 0n,
73
+ data: RedeemFluidLiteCalldata(args),
74
+ });
75
+ };
76
+
77
+ // ============================================================================
78
+ // Withdraw (ERC4626) - Assets-based withdrawal
79
+ // ============================================================================
80
+
81
+ export type WithdrawFluidLiteArgs = Readonly<{
82
+ assets: bigint;
83
+ receiver: Address;
84
+ owner: Address;
85
+ }>;
86
+
87
+ export const WithdrawFluidLiteCalldata = ({ assets, receiver, owner }: WithdrawFluidLiteArgs): HexString => {
88
+ return fluidLiteInterface.encodeFunctionData("withdraw", [assets, receiver, owner]) as HexString;
89
+ };
90
+
91
+ export const withdrawFluidLiteTrx = ({
92
+ args,
93
+ vault,
94
+ }: {
95
+ args: WithdrawFluidLiteArgs;
96
+ vault: Address;
97
+ }): Unwrapable<Call> => {
98
+ return createCall({
99
+ operation: 0,
100
+ to: vault,
101
+ value: 0n,
102
+ data: WithdrawFluidLiteCalldata(args),
103
+ });
104
+ };
@@ -0,0 +1,2 @@
1
+ export { default as FluidLiteAbi } from "./fluid-lite.abi";
2
+ export * from "./fluid-lite";
@@ -43,11 +43,18 @@ const pack = (payload: GnosisMulticallPayload): HexString => {
43
43
  export class MultisendBuilder {
44
44
  private readonly payload: GnosisMulticallPayload;
45
45
  private readonly multisendAddress: Address;
46
+ private readonly defaultOperation: Operation;
46
47
  private readonly value?: bigint;
47
48
 
48
- private constructor(multisendAddress: Address, payload?: GnosisMulticallPayload, value?: bigint) {
49
+ private constructor(
50
+ multisendAddress: Address,
51
+ defaultOperation: Operation,
52
+ payload?: GnosisMulticallPayload,
53
+ value?: bigint,
54
+ ) {
49
55
  this.payload = payload || [];
50
56
  this.multisendAddress = multisendAddress;
57
+ this.defaultOperation = defaultOperation;
51
58
  this.value = value;
52
59
  }
53
60
 
@@ -57,11 +64,16 @@ export class MultisendBuilder {
57
64
  dataLength: numberToHex(call.data.slice(2).length / 2, { size: 32 }),
58
65
  };
59
66
 
60
- return new MultisendBuilder(this.multisendAddress, add(callWithLength, this.payload), this.value);
67
+ return new MultisendBuilder(
68
+ this.multisendAddress,
69
+ this.defaultOperation,
70
+ add(callWithLength, this.payload),
71
+ this.value,
72
+ );
61
73
  }
62
74
 
63
75
  public setValue(value: bigint): MultisendBuilder {
64
- return new MultisendBuilder(this.multisendAddress, this.payload, value);
76
+ return new MultisendBuilder(this.multisendAddress, this.defaultOperation, this.payload, value);
65
77
  }
66
78
 
67
79
  public build(config?: MultisendConfig): Unwrapable<ExternalCall<Operation>> {
@@ -71,12 +83,36 @@ export class MultisendBuilder {
71
83
  return createCall({
72
84
  to: this.multisendAddress,
73
85
  value: config?.value || this.value || 0n,
74
- operation: config?.operation || (1 as Operation),
86
+ operation: config?.operation || (this.defaultOperation as Operation),
75
87
  data,
76
88
  });
77
89
  }
78
90
 
91
+ /**
92
+ * Create a MultisendBuilder using the standard MultiSend contract.
93
+ * The outer call defaults to DELEGATECALL (operation=1).
94
+ * Use this for most cases — subcalls execute in the caller's context.
95
+ */
79
96
  public static new(chainId: number, version: "v1_4_1" | "v1_3_0" = "v1_4_1"): MultisendBuilder {
80
- return new MultisendBuilder(getAddressOrThrow(chainId, `gnosisSafe.${version}.multisend`) as Address);
97
+ return new MultisendBuilder(
98
+ getAddressOrThrow(chainId, `gnosisSafe.${version}.multisend`) as Address,
99
+ 1 as Operation,
100
+ );
101
+ }
102
+
103
+ /**
104
+ * Create a MultisendBuilder using the MultiSendCallOnly contract.
105
+ * The outer call defaults to CALL (operation=0).
106
+ * Use this when DELEGATECALL is not needed or not available (e.g., Safe proposals
107
+ * where the Safe itself is the caller and subcalls are all CALLs).
108
+ *
109
+ * IMPORTANT: MultiSendCallOnly only supports CALL subcalls (operation=0).
110
+ * DELEGATECALL subcalls will revert.
111
+ */
112
+ public static newCallOnly(chainId: number, version: "v1_4_1" | "v1_3_0" = "v1_4_1"): MultisendBuilder {
113
+ return new MultisendBuilder(
114
+ getAddressOrThrow(chainId, `gnosisSafe.${version}.multisendCallOnly`) as Address,
115
+ 0 as Operation,
116
+ );
81
117
  }
82
118
  }
@@ -19,5 +19,6 @@ export * from "./iporFusion";
19
19
  export * from "./originArm";
20
20
  export * from "./syrup";
21
21
  export * from "./gearbox";
22
+ export * from "./fluidLite";
22
23
  export * from "./weth";
23
24
  export * from "./pendle";
@@ -40,6 +40,7 @@
40
40
  "v1_4_1": {
41
41
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
42
42
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
43
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
43
44
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
44
45
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
45
46
  }
@@ -134,6 +135,7 @@
134
135
  "v1_4_1": {
135
136
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
136
137
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
138
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
137
139
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
138
140
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
139
141
  }
@@ -222,6 +224,7 @@
222
224
  "v1_4_1": {
223
225
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
224
226
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
227
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
225
228
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
226
229
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
227
230
  }
@@ -292,6 +295,7 @@
292
295
  "v1_4_1": {
293
296
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
294
297
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
298
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
295
299
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
296
300
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
297
301
  }
@@ -357,6 +361,7 @@
357
361
  "v1_4_1": {
358
362
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
359
363
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
364
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
360
365
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
361
366
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
362
367
  }
@@ -456,6 +461,7 @@
456
461
  "v1_4_1": {
457
462
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
458
463
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
464
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
459
465
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
460
466
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
461
467
  }
@@ -502,7 +508,8 @@
502
508
  "cvx": "0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B",
503
509
  "crv": "0xD533a949740bb3306d119CC777fa900bA034cd52",
504
510
  "ausd": "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
505
- "pendle": "0x808507121B80c02388FAd14726482e061B8da827"
511
+ "pendle": "0x808507121B80c02388FAd14726482e061B8da827",
512
+ "usdg": "0xe343167631d89B6Ffc58B88d6b7fB0228795491D"
506
513
  },
507
514
  "morpho": {
508
515
  "morphoBlue": "0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb",
@@ -585,6 +592,11 @@
585
592
  },
586
593
  "iporFusion": {
587
594
  "vault": "0x604117f0c94561231060f56cd2ddd16245d434c5"
595
+ },
596
+ "pendle": {
597
+ "routerV4": "0x888888888889758f76e7103c6cbf23abbf58f946",
598
+ "routerV4ActionMisc": "0x373Dba2055Ad40cb4815148bC47cd1DC16e92E44",
599
+ "merkleDistributor": "0x33305665f69b4642d1275f4ce81c23651674d21c"
588
600
  }
589
601
  },
590
602
  "unichain": {
@@ -619,6 +631,7 @@
619
631
  "v1_4_1": {
620
632
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
621
633
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
634
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
622
635
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
623
636
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
624
637
  }
@@ -660,6 +673,7 @@
660
673
  "v1_4_1": {
661
674
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
662
675
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
676
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
663
677
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
664
678
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
665
679
  }
@@ -676,10 +690,15 @@
676
690
  "tokens": {
677
691
  "ausd": "0x00000000eFE302BEAA2b3e6e1b18d08D69a9012a",
678
692
  "usdc": "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9",
679
- "usdt": "0x201eba5cc46d216ce6dc03f6a759e8e766e956ae",
693
+ "usdt0": "0x779ded0c9e1022225f8e0630b35a9b54be713736",
680
694
  "usde": "0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34",
681
695
  "cmeth": "0xe6829d9a7ee3040e1276fa75293bde931859e8fa"
682
696
  },
697
+ "OFTAdapters": {
698
+ "0x779ded0c9e1022225f8e0630b35a9b54be713736": "0xcb768e263fb1c62214e7cab4aa8d036d76dc59cc",
699
+ "0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34": "0x5d3a1ff2b6bab83b63cd9ad0787074081a52ef34"
700
+ },
701
+ "multicall3": "0xcA11bde05977b3631167028862bE2a173976CA11",
683
702
  "lagoonV0_4": {
684
703
  "factory": "0x57D969B556C6AebB3Ac8f54c98CF3a3f921d5659",
685
704
  "registry": "0x47A144e67834408716cB40Fa87fc886D63362ddC",
@@ -741,6 +760,7 @@
741
760
  "v1_4_1": {
742
761
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
743
762
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
763
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
744
764
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
745
765
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
746
766
  }
@@ -781,6 +801,7 @@
781
801
  "v1_4_1": {
782
802
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
783
803
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
804
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
784
805
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
785
806
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
786
807
  }
@@ -820,6 +841,7 @@
820
841
  "v1_4_1": {
821
842
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
822
843
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
844
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
823
845
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
824
846
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
825
847
  }
@@ -878,6 +900,7 @@
878
900
  "v1_4_1": {
879
901
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
880
902
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
903
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
881
904
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
882
905
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
883
906
  }
@@ -909,6 +932,7 @@
909
932
  "v1_4_1": {
910
933
  "safeL1Singleton": "0x41675C099F32341bf84BFc5382aF534df5C7461a",
911
934
  "multisend": "0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526",
935
+ "multisendCallOnly": "0x9641d764fc13c8B624c04430C7356C1C7C8102e2",
912
936
  "safeL2Singleton": "0x29fcB43b46531BcA003ddC8FCB67FFE91900C762",
913
937
  "proxyFactory": "0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67"
914
938
  }
@@ -933,7 +957,7 @@
933
957
  },
934
958
  "wrappedNativeToken": "0x6100E367285b01F48D07953803A2d8dCA5D19873",
935
959
  "iporFusion": {
936
- "vault": "0x0a71624ab3e8101f78d95dfc81e0f1f31128ed7a"
960
+ "vault": "0x0A71624ab3E8101f78D95DFc81E0F1f31128Ed7A"
937
961
  }
938
962
  }
939
963
  }