Skip to content

Commit 46861ae

Browse files
authored
Merge branch 'Uniswap:main' into sdks/main
2 parents 882c07b + a4aee16 commit 46861ae

File tree

11 files changed

+98
-18
lines changed

11 files changed

+98
-18
lines changed

sdks/router-sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"@uniswap/swap-router-contracts": "^1.3.0",
2626
"@uniswap/v2-sdk": "^4.17.0",
2727
"@uniswap/v3-sdk": "^3.27.0",
28-
"@uniswap/v4-sdk": "^1.25.6"
28+
"@uniswap/v4-sdk": "^1.27.0"
2929
},
3030
"devDependencies": {
3131
"@types/jest": "^24.0.25",

sdks/uniswapx-sdk/abis/Reactor.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

sdks/uniswapx-sdk/abis/TokenTransferHook.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

sdks/uniswapx-sdk/src/constants.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ describe("REACTOR_ADDRESS_MAPPING", () => {
2929
"1301": Object {
3030
"Dutch": "0x0000000000000000000000000000000000000000",
3131
"Dutch_V2": "0x0000000000000000000000000000000000000000",
32-
"Hybrid": "0x000000c40Fe6C03a7A1111D0a66Ce522BDc9fC8f",
32+
"Hybrid": "0x000000000C75276D956cc35218ca8f132D877957",
3333
"Priority": "0x0000000000000000000000000000000000000000",
3434
"Relay": "0x0000000000000000000000000000000000000000",
3535
},

sdks/uniswapx-sdk/src/constants.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export const UNISWAPX_V4_ORDER_QUOTER_MAPPING: AddressMap = {
5151

5252
export const UNISWAPX_V4_TOKEN_TRANSFER_HOOK_MAPPING: AddressMap = {
5353
...constructSameAddressMap("0x0000000000000000000000000000000000000000"),
54-
1301: "0xd70467c1dA526491CFb790A2F84dfe0E10aa6D00",
54+
1301: "0xBc879Fa59f5F99eb7C3FA0F87c41457773C4adB3",
5555
};
5656

5757
export const EXCLUSIVE_FILLER_VALIDATION_MAPPING: AddressMap = {
@@ -128,7 +128,7 @@ export const REACTOR_ADDRESS_MAPPING: ReactorMapping = {
128128
[OrderType.Priority]: "0x00000006021a6Bce796be7ba509BBBA71e956e37",
129129
},
130130
1301: {
131-
[OrderType.Hybrid]: "0x000000c40Fe6C03a7A1111D0a66Ce522BDc9fC8f",
131+
[OrderType.Hybrid]: "0x000000000C75276D956cc35218ca8f132D877957",
132132
[OrderType.Dutch]: "0x0000000000000000000000000000000000000000",
133133
[OrderType.Dutch_V2]: "0x0000000000000000000000000000000000000000",
134134
[OrderType.Relay]: "0x0000000000000000000000000000000000000000",

sdks/uniswapx-sdk/src/contracts/factories/HybridAuctionResolver__factory.ts

Lines changed: 11 additions & 1 deletion
Large diffs are not rendered by default.

sdks/uniswapx-sdk/src/contracts/factories/Reactor__factory.ts

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

sdks/uniswapx-sdk/src/contracts/factories/TokenTransferHook__factory.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ const _abi = [
191191
] as const;
192192

193193
const _bytecode =
194-
"0x60c060405234801561000f575f5ffd5b50604051610a6b380380610a6b83398101604081905261002e9161005c565b6001600160a01b039182166080521660a052610094565b6001600160a01b0381168114610059575f5ffd5b50565b5f5f6040838503121561006d575f5ffd5b825161007881610045565b602084015190925061008981610045565b809150509250929050565b60805160a0516109ab6100c05f395f81816098015260e701525f81816048015261011501526109ab5ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806312261ee714610043578063ab57265014610093578063d8b61ded146100ba575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6100cd6100c83660046102fb565b6100cf565b005b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110575f5ffd5b61013b7f0000000000000000000000000000000000000000000000000000000000000000828461013f565b5050565b73ffffffffffffffffffffffffffffffffffffffff831663137c29fe6101e6610167856106ab565b6040805160a0810182525f606082018181526080830182905282526020820181905291810191909152506040805160a081018252602080840180515173ffffffffffffffffffffffffffffffffffffffff1660608085019182529151850151608085015283528451840151918301919091529251909201519082015290565b610237846101f3876106ab565b906040805180820182525f808252602091820152815180830190925273ffffffffffffffffffffffffffffffffffffffff9092168152918101518101519082015290565b610241868061079e565b6102529060408101906020016107da565b60c08701356102656101008901896107fc565b61027260a08b018b6107fc565b6040518963ffffffff1660e01b81526004016102959897969594939291906108ab565b5f604051808303815f87803b1580156102ac575f5ffd5b505af11580156102be573d5f5f3e3d5ffd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102e8575f5ffd5b50565b80356102f6816102c7565b919050565b5f5f6040838503121561030c575f5ffd5b8235610317816102c7565b9150602083013567ffffffffffffffff811115610332575f5ffd5b83016101208186031215610344575f5ffd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156103a0576103a061034f565b60405290565b6040516060810167ffffffffffffffff811182821017156103a0576103a061034f565b60405160e0810167ffffffffffffffff811182821017156103a0576103a061034f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104335761043361034f565b604052919050565b5f82601f83011261044a575f5ffd5b8135602083015f5f67ffffffffffffffff84111561046a5761046a61034f565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200161049d816103ec565b9150508281528583830111156104b1575f5ffd5b828260208301375f92810160200192909252509392505050565b5f61012082840312156104dc575f5ffd5b6104e461037c565b90506104ef826102eb565b81526104fd602083016102eb565b60208201526040828101359082015260608083013590820152610522608083016102eb565b608082015260a082013567ffffffffffffffff811115610540575f5ffd5b61054c8482850161043b565b60a08301525061055e60c083016102eb565b60c082015260e082013567ffffffffffffffff81111561057c575f5ffd5b6105888482850161043b565b60e08301525061059b61010083016102eb565b61010082015292915050565b5f606082840312156105b7575f5ffd5b6105bf6103a6565b905081356105cc816102c7565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126105f9575f5ffd5b813567ffffffffffffffff8111156106135761061361034f565b61062260208260051b016103ec565b80828252602082019150602060608402860101925085831115610643575f5ffd5b602085015b838110156106a1576060818803121561065f575f5ffd5b6106676103a6565b8135610672816102c7565b815260208281013590820152604082013561068c816102c7565b60408201528352602090920191606001610648565b5095945050505050565b5f61012082360312156106bc575f5ffd5b6106c46103c9565b823567ffffffffffffffff8111156106da575f5ffd5b6106e6368286016104cb565b8252506106f636602085016105a7565b6020820152608083013567ffffffffffffffff811115610714575f5ffd5b610720368286016105ea565b60408301525060a083013567ffffffffffffffff81111561073f575f5ffd5b61074b3682860161043b565b60608301525060c0830135608082015261076760e084016102eb565b60a082015261010083013567ffffffffffffffff811115610786575f5ffd5b6107923682860161043b565b60c08301525092915050565b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181126107d0575f5ffd5b9190910192915050565b5f602082840312156107ea575f5ffd5b81356107f5816102c7565b9392505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261082f575f5ffd5b83018035915067ffffffffffffffff821115610849575f5ffd5b60200191503681900382131561085d575f5ffd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6108d6818a51805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b60208901516040820152604089015160608201526109176080820189805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff871660c08201528560e08201526101406101008201525f61095261014083018688610864565b828103610120840152610966818587610864565b9b9a505050505050505050505056fea26469706673582212201d9fe9286013a508e94dc3d10311af439037d4bc8703407792397d43c3af49c564736f6c634300081d0033";
194+
"0x60c060405234801561000f575f5ffd5b50604051610a6b380380610a6b83398101604081905261002e9161005c565b6001600160a01b039182166080521660a052610094565b6001600160a01b0381168114610059575f5ffd5b50565b5f5f6040838503121561006d575f5ffd5b825161007881610045565b602084015190925061008981610045565b809150509250929050565b60805160a0516109ab6100c05f395f81816098015260e701525f81816048015261011501526109ab5ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806312261ee714610043578063ab57265014610093578063d8b61ded146100ba575b5f5ffd5b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006a7f000000000000000000000000000000000000000000000000000000000000000081565b6100cd6100c83660046102fb565b6100cf565b005b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610110575f5ffd5b61013b7f0000000000000000000000000000000000000000000000000000000000000000828461013f565b5050565b73ffffffffffffffffffffffffffffffffffffffff831663137c29fe6101e6610167856106ab565b6040805160a0810182525f606082018181526080830182905282526020820181905291810191909152506040805160a081018252602080840180515173ffffffffffffffffffffffffffffffffffffffff1660608085019182529151850151608085015283528451840151918301919091529251909201519082015290565b610237846101f3876106ab565b906040805180820182525f808252602091820152815180830190925273ffffffffffffffffffffffffffffffffffffffff9092168152918101518101519082015290565b610241868061079e565b6102529060408101906020016107da565b60c08701356102656101008901896107fc565b61027260a08b018b6107fc565b6040518963ffffffff1660e01b81526004016102959897969594939291906108ab565b5f604051808303815f87803b1580156102ac575f5ffd5b505af11580156102be573d5f5f3e3d5ffd5b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102e8575f5ffd5b50565b80356102f6816102c7565b919050565b5f5f6040838503121561030c575f5ffd5b8235610317816102c7565b9150602083013567ffffffffffffffff811115610332575f5ffd5b83016101208186031215610344575f5ffd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156103a0576103a061034f565b60405290565b6040516060810167ffffffffffffffff811182821017156103a0576103a061034f565b60405160e0810167ffffffffffffffff811182821017156103a0576103a061034f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156104335761043361034f565b604052919050565b5f82601f83011261044a575f5ffd5b8135602083015f5f67ffffffffffffffff84111561046a5761046a61034f565b50601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200161049d816103ec565b9150508281528583830111156104b1575f5ffd5b828260208301375f92810160200192909252509392505050565b5f61012082840312156104dc575f5ffd5b6104e461037c565b90506104ef826102eb565b81526104fd602083016102eb565b60208201526040828101359082015260608083013590820152610522608083016102eb565b608082015260a082013567ffffffffffffffff811115610540575f5ffd5b61054c8482850161043b565b60a08301525061055e60c083016102eb565b60c082015260e082013567ffffffffffffffff81111561057c575f5ffd5b6105888482850161043b565b60e08301525061059b61010083016102eb565b61010082015292915050565b5f606082840312156105b7575f5ffd5b6105bf6103a6565b905081356105cc816102c7565b81526020828101359082015260409182013591810191909152919050565b5f82601f8301126105f9575f5ffd5b813567ffffffffffffffff8111156106135761061361034f565b61062260208260051b016103ec565b80828252602082019150602060608402860101925085831115610643575f5ffd5b602085015b838110156106a1576060818803121561065f575f5ffd5b6106676103a6565b8135610672816102c7565b815260208281013590820152604082013561068c816102c7565b60408201528352602090920191606001610648565b5095945050505050565b5f61012082360312156106bc575f5ffd5b6106c46103c9565b823567ffffffffffffffff8111156106da575f5ffd5b6106e6368286016104cb565b8252506106f636602085016105a7565b6020820152608083013567ffffffffffffffff811115610714575f5ffd5b610720368286016105ea565b60408301525060a083013567ffffffffffffffff81111561073f575f5ffd5b61074b3682860161043b565b60608301525060c0830135608082015261076760e084016102eb565b60a082015261010083013567ffffffffffffffff811115610786575f5ffd5b6107923682860161043b565b60c08301525092915050565b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181126107d0575f5ffd5b9190910192915050565b5f602082840312156107ea575f5ffd5b81356107f5816102c7565b9392505050565b5f5f83357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261082f575f5ffd5b83018035915067ffffffffffffffff821115610849575f5ffd5b60200191503681900382131561085d575f5ffd5b9250929050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6108d6818a51805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b60208901516040820152604089015160608201526109176080820189805173ffffffffffffffffffffffffffffffffffffffff168252602090810151910152565b73ffffffffffffffffffffffffffffffffffffffff871660c08201528560e08201526101406101008201525f61095261014083018688610864565b828103610120840152610966818587610864565b9b9a505050505050505050505056fea2646970667358221220ac86a9fb1aa36b2fedaa0319a9bf6d136ef217d64259172d5eac989dcf75e33864736f6c634300081e0033";
195195

196196
type TokenTransferHookConstructorParams =
197197
| [signer?: Signer]

sdks/v4-sdk/src/utils/v4Planner.test.ts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,72 @@ describe('RouterPlanner', () => {
8787
'0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb8000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000'
8888
)
8989
})
90+
91+
it('encodes a v4 exactIn swap with V2.1 (includes maxHopSlippage)', async () => {
92+
const route = new Route([DAI_USDC, USDC_WETH], DAI, WETH9[1])
93+
const maxHopSlippage = [BigNumber.from('10000'), BigNumber.from('20000')]
94+
95+
planner.addAction(
96+
Actions.SWAP_EXACT_IN,
97+
[
98+
{
99+
currencyIn: DAI.address,
100+
path: encodeRouteToPath(route),
101+
maxHopSlippage: maxHopSlippage,
102+
amountIn: ONE_ETHER_BN.toString(),
103+
amountOutMinimum: 0,
104+
},
105+
],
106+
URVersion.V2_1
107+
)
108+
109+
expect(planner.actions).toEqual('0x07')
110+
111+
// Decode with V2.1 ABI to verify maxHopSlippage values
112+
const decoded = defaultAbiCoder.decode(
113+
V4_SWAP_ACTIONS_V2_1[Actions.SWAP_EXACT_IN].map((v) => v.type),
114+
planner.params[0]
115+
)
116+
117+
expect(decoded[0].currencyIn).toEqual(DAI.address)
118+
expect(decoded[0].maxHopSlippage).toHaveLength(2)
119+
expect(decoded[0].maxHopSlippage[0].toString()).toEqual('10000')
120+
expect(decoded[0].maxHopSlippage[1].toString()).toEqual('20000')
121+
expect(decoded[0].amountIn.toString()).toEqual(ONE_ETHER_BN.toString())
122+
})
123+
124+
it('encodes a v4 exactOut swap with V2.1 (includes maxHopSlippage)', async () => {
125+
const route = new Route([DAI_USDC, USDC_WETH], DAI, WETH9[1])
126+
const maxHopSlippage = [BigNumber.from('15000'), BigNumber.from('25000')]
127+
128+
planner.addAction(
129+
Actions.SWAP_EXACT_OUT,
130+
[
131+
{
132+
currencyOut: WETH9[1].address,
133+
path: encodeRouteToPath(route, true),
134+
maxHopSlippage: maxHopSlippage,
135+
amountOut: ONE_ETHER_BN.toString(),
136+
amountInMaximum: ONE_ETHER_BN.mul(2).toString(),
137+
},
138+
],
139+
URVersion.V2_1
140+
)
141+
142+
expect(planner.actions).toEqual('0x09')
143+
144+
// Decode with V2.1 ABI to verify maxHopSlippage values
145+
const decoded = defaultAbiCoder.decode(
146+
V4_SWAP_ACTIONS_V2_1[Actions.SWAP_EXACT_OUT].map((v) => v.type),
147+
planner.params[0]
148+
)
149+
150+
expect(decoded[0].currencyOut).toEqual(WETH9[1].address)
151+
expect(decoded[0].maxHopSlippage).toHaveLength(2)
152+
expect(decoded[0].maxHopSlippage[0].toString()).toEqual('15000')
153+
expect(decoded[0].maxHopSlippage[1].toString()).toEqual('25000')
154+
expect(decoded[0].amountOut.toString()).toEqual(ONE_ETHER_BN.toString())
155+
})
90156
})
91157

92158
describe('addTrade', () => {

sdks/v4-sdk/src/utils/v4Planner.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,8 +207,8 @@ export class V4Planner {
207207
this.params = []
208208
}
209209

210-
addAction(type: Actions, parameters: any[]): V4Planner {
211-
let command = createAction(type, parameters)
210+
addAction(type: Actions, parameters: any[], urVersion: URVersion = URVersion.V2_0): V4Planner {
211+
let command = createAction(type, parameters, urVersion)
212212
this.params.push(command.encodedInput)
213213
this.actions = this.actions.concat(command.action.toString(16).padStart(2, '0'))
214214
return this
@@ -324,9 +324,13 @@ type RouterAction = {
324324
encodedInput: string
325325
}
326326

327-
function createAction(action: Actions, parameters: any[]): RouterAction {
327+
function createAction(action: Actions, parameters: any[], urVersion: URVersion = URVersion.V2_0): RouterAction {
328+
// Use V2.1 ABI for swap actions if V2.1, otherwise use base ABI (V2.0)
329+
const isSwapAction = action === Actions.SWAP_EXACT_IN || action === Actions.SWAP_EXACT_OUT
330+
const abiDef =
331+
urVersion === URVersion.V2_1 && isSwapAction ? V4_SWAP_ACTIONS_V2_1[action] : V4_BASE_ACTIONS_ABI_DEFINITION[action]
328332
const encodedInput = defaultAbiCoder.encode(
329-
V4_BASE_ACTIONS_ABI_DEFINITION[action].map((v) => v.type),
333+
abiDef.map((v) => v.type),
330334
parameters
331335
)
332336
return { action, encodedInput }

0 commit comments

Comments
 (0)