Skip to content

Commit

Permalink
feat(bundler3)!: replace encoders
Browse files Browse the repository at this point in the history
BREAKING CHANGE: Bundler encoding functions now take the chainId as the first argument.
This change is necessary to support the new bundler3 contract.
  • Loading branch information
Rubilmax committed Feb 5, 2025
1 parent f64894b commit 96f9ce6
Show file tree
Hide file tree
Showing 50 changed files with 2,755 additions and 1,189 deletions.
15 changes: 12 additions & 3 deletions packages/blue-sdk-ethers/src/fetch/Holding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import {
permissionedBackedTokens,
permissionedWrapperTokens,
} from "@morpho-org/blue-sdk";
import { fromEntries } from "@morpho-org/morpho-ts";
import { fromEntries, getValue } from "@morpho-org/morpho-ts";
import type { FetchOptions } from "../types";

export async function fetchHolding(
Expand Down Expand Up @@ -72,7 +72,11 @@ export async function fetchHolding(
async (label) =>
[
label,
await erc20.allowance(user, chainAddresses[label], overrides),
await erc20.allowance(
user,
getValue(chainAddresses, label),
overrides,
),
] as const,
),
),
Expand All @@ -82,7 +86,12 @@ export async function fetchHolding(
[
label,
await permit2
.allowance(user, token, chainAddresses[label], overrides)
.allowance(
user,
token,
getValue(chainAddresses, label),
overrides,
)
.then(({ amount, nonce, expiration }) => ({
amount,
expiration,
Expand Down
7 changes: 5 additions & 2 deletions packages/blue-sdk-ethers/src/fetch/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,14 @@ export async function fetchUser(
chainId ?? (await runner.provider.getNetwork()).chainId,
);

const { morpho, bundler } = getChainAddresses(chainId);
const {
morpho,
bundler3: { generalAdapter1 },
} = getChainAddresses(chainId);
const blue = MorphoBlue__factory.connect(morpho, runner);

const [isBundlerAuthorized, morphoNonce] = await Promise.all([
blue.isAuthorized(address, bundler, overrides),
blue.isAuthorized(address, generalAdapter1, overrides),
blue.nonce(address, overrides),
]);

Expand Down
17 changes: 11 additions & 6 deletions packages/blue-sdk-ethers/test/e2e/Holding.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,13 @@ import { maxUint256 } from "viem";
import { Holding } from "../../src/augment/Holding";
import { permit2Abi } from "./abis";

const { morpho, bundler, permit2, wNative, wbC3M } =
addresses[ChainId.EthMainnet];
const {
morpho,
bundler3: { generalAdapter1 },
permit2,
wNative,
wbC3M,
} = addresses[ChainId.EthMainnet];

describe("augment/Holding", async () => {
test("should fetch user WETH data ", async ({ client, wallet }) => {
Expand Down Expand Up @@ -50,7 +55,7 @@ describe("augment/Holding", async () => {
});
await client.approve({
address: wNative,
args: [bundler, expectedData.erc20Allowances.bundler],
args: [generalAdapter1, expectedData.erc20Allowances.bundler],
});
await client.approve({
address: wNative,
Expand All @@ -73,7 +78,7 @@ describe("augment/Holding", async () => {
functionName: "approve",
args: [
wNative,
bundler,
generalAdapter1,
expectedData.permit2Allowances.bundler.amount,
Number(expectedData.permit2Allowances.bundler.expiration),
],
Expand Down Expand Up @@ -152,7 +157,7 @@ describe("augment/Holding", async () => {
});
await client.approve({
address: wbC3M,
args: [bundler, expectedData.erc20Allowances.bundler],
args: [generalAdapter1, expectedData.erc20Allowances.bundler],
});
await client.approve({
address: wbC3M,
Expand All @@ -175,7 +180,7 @@ describe("augment/Holding", async () => {
functionName: "approve",
args: [
wbC3M,
bundler,
generalAdapter1,
expectedData.permit2Allowances.bundler.amount,
Number(expectedData.permit2Allowances.bundler.expiration),
],
Expand Down
7 changes: 5 additions & 2 deletions packages/blue-sdk-ethers/test/e2e/User.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@ import { ChainId, addresses } from "@morpho-org/blue-sdk";
import { User } from "../../src/augment/User";
import { blueAbi } from "./abis";

const { morpho, bundler } = addresses[ChainId.EthMainnet];
const {
morpho,
bundler3: { generalAdapter1 },
} = addresses[ChainId.EthMainnet];

describe("augment/User", () => {
test("should fetch user data", async ({ client, wallet }) => {
await client.writeContract({
address: morpho,
abi: blueAbi,
functionName: "setAuthorization",
args: [bundler, true],
args: [generalAdapter1, true],
});

const expectedData = new User({
Expand Down
11 changes: 6 additions & 5 deletions packages/blue-sdk-viem/contracts/GetHolding.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ import {IERC20Permissioned} from "./interfaces/IERC20Permissioned.sol";
struct ERC20Allowances {
uint256 morpho;
uint256 permit2;
uint256 bundler;
uint256 generalAdapter1;
}

struct Permit2Allowances {
Permit2Allowance morpho;
Permit2Allowance bundler;
Permit2Allowance bundler3;
}

enum OptionalBoolean {
Expand All @@ -39,19 +39,20 @@ contract GetHolding {
address account,
address morpho,
IPermit2 permit2,
address bundler,
address bundler3,
address generalAdapter1,
bool isWrappedBackedToken,
bool isErc20Permissioned
) external view returns (HoldingResponse memory res) {
res.balance = token.balanceOf(account);
res.erc20Allowances = ERC20Allowances({
morpho: token.allowance(account, morpho),
permit2: token.allowance(account, address(permit2)),
bundler: token.allowance(account, bundler)
generalAdapter1: token.allowance(account, generalAdapter1)
});
res.permit2Allowances = Permit2Allowances({
morpho: permit2.allowance(account, address(token), morpho),
bundler: permit2.allowance(account, address(token), bundler)
bundler3: permit2.allowance(account, address(token), bundler3)
});

try token.nonces(account) returns (uint256 nonce) {
Expand Down
35 changes: 26 additions & 9 deletions packages/blue-sdk-viem/src/fetch/Holding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
import { type Address, type Client, erc20Abi, maxUint256 } from "viem";
import { getBalance, getChainId, readContract } from "viem/actions";

import { fromEntries } from "@morpho-org/morpho-ts";
import { fromEntries, getValue } from "@morpho-org/morpho-ts";
import {
erc2612Abi,
permissionedErc20WrapperAbi,
Expand Down Expand Up @@ -60,12 +60,22 @@ export async function fetchHolding(
});

if (deployless) {
const { morpho, permit2, bundler } = addresses[parameters.chainId];
const {
morpho,
permit2,
bundler3: { bundler3, generalAdapter1 },
} = addresses[parameters.chainId];
try {
const {
balance,
erc20Allowances,
permit2Allowances,
erc20Allowances: {
generalAdapter1: generalAdapter1Erc20Allowance,
...erc20Allowances
},
permit2Allowances: {
bundler3: bundler3Permit2Allowance,
...permit2Allowances
},
isErc2612,
erc2612Nonce,
canTransfer,
Expand All @@ -79,7 +89,8 @@ export async function fetchHolding(
user,
morpho,
permit2,
bundler,
bundler3,
generalAdapter1,
permissionedBackedTokens[parameters.chainId].has(token),
permissionedWrapperTokens[parameters.chainId].has(token),
],
Expand All @@ -88,8 +99,14 @@ export async function fetchHolding(
return new Holding({
user,
token,
erc20Allowances,
permit2Allowances,
erc20Allowances: {
"bundler3.generalAdapter1": generalAdapter1Erc20Allowance,
...erc20Allowances,
},
permit2Allowances: {
"bundler3.bundler3": bundler3Permit2Allowance,
...permit2Allowances,
},
erc2612Nonce: isErc2612 ? erc2612Nonce : undefined,
balance,
canTransfer: optionalBoolean[canTransfer],
Expand Down Expand Up @@ -126,7 +143,7 @@ export async function fetchHolding(
abi: erc20Abi,
address: token,
functionName: "allowance",
args: [user, chainAddresses[label]],
args: [user, getValue(chainAddresses, label)],
}),
] as const,
),
Expand All @@ -141,7 +158,7 @@ export async function fetchHolding(
abi: permit2Abi,
address: chainAddresses.permit2,
functionName: "allowance",
args: [user, token, chainAddresses[label]],
args: [user, token, getValue(chainAddresses, label)],
}).then(([amount, expiration, nonce]) => ({
amount,
expiration: BigInt(expiration),
Expand Down
7 changes: 5 additions & 2 deletions packages/blue-sdk-viem/src/fetch/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,18 @@ export async function fetchUser(
parameters.chainId ?? (await getChainId(client)),
);

const { morpho, bundler } = addresses[parameters.chainId];
const {
morpho,
bundler3: { generalAdapter1 },
} = addresses[parameters.chainId];

const [isBundlerAuthorized, morphoNonce] = await Promise.all([
readContract(client, {
...parameters,
address: morpho,
abi: blueAbi,
functionName: "isAuthorized",
args: [address, bundler],
args: [address, generalAdapter1],
}),
readContract(client, {
...parameters,
Expand Down
13 changes: 9 additions & 4 deletions packages/blue-sdk-viem/src/queries/GetHolding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@ export const abi = [
name: "permit2",
type: "address",
},
{ internalType: "address", name: "bundler", type: "address" },
{ internalType: "address", name: "bundler3", type: "address" },
{
internalType: "address",
name: "generalAdapter1",
type: "address",
},
{
internalType: "bool",
name: "isWrappedBackedToken",
Expand Down Expand Up @@ -44,7 +49,7 @@ export const abi = [
},
{
internalType: "uint256",
name: "bundler",
name: "generalAdapter1",
type: "uint256",
},
],
Expand Down Expand Up @@ -95,7 +100,7 @@ export const abi = [
},
],
internalType: "struct Permit2Allowance",
name: "bundler",
name: "bundler3",
type: "tuple",
},
],
Expand Down Expand Up @@ -126,4 +131,4 @@ export const abi = [
] as const;

export const code =
"0x60808060405234601557610847908161001a8239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c634755ff3e14610025575f80fd5b346105285760e0366003190112610528576004356001600160a01b03811690819003610528576024356001600160a01b0381169182820361052857604435926001600160a01b0384168403610528576064356001600160a01b038116939084900361052857608435926001600160a01b03841684036105285760a4359081151582036105285760c4359182151583036105285760c0890189811067ffffffffffffffff8211176106fc576040525f895260208901926100e261076a565b845260408a01946040516100f581610710565b6100fd61076a565b815261010761076a565b6020820152865260608b01975f895260808c01995f8b5260a08d019b5f8d526040516370a0823160e01b81528a60048201526020816024818b5afa9081156105ef578f905f926106c8575b5052604051636eb1769f60e11b81526001600160a01b03858116600483015282166024820152906020826044818b5afa9182156105ef575f92610694575b50604051636eb1769f60e11b81526001600160a01b038681166004830152841660248201526020816044818c5afa9081156105ef575f91610662575b50604051636eb1769f60e11b81526001600160a01b03878116600483015286166024820152906020826044818d5afa9182156105ef575f92610626575b50926060929161026a94604051926102208461072c565b83526020830152604080830191909152908b525163927da10560e01b81526001600160a01b038088166004830152808b166024830152909116604482015291829081906064820190565b0381855afa9384156105ef5787915f956105fa575b5060405163927da10560e01b81526001600160a01b0391821660048201529181166024830152909216604483015260609082908180606481015b03915afa9081156105ef575f916105c0575b50604051916102d983610710565b825260208201528552604051623f675f60e91b8152866004820152602081602481875afa5f918161058c575b50610580575b50604051624b894760e91b815260048101879052602081602481875afa5f918161055f575b5061053e5750156105345761034760015b89610805565b61041a575b506103df9250906040602092815198518952518051848a015283810151828a015201516060880152516103a960808801825165ffffffffffff6040809260018060a01b038151168552826020820151166020860152015116910152565b015180516001600160a01b031660e0870152602081015165ffffffffffff90811661010088015260409091015116610120860152565b5115156101408401525161016083015251906003821015610406576101a091610180820152f35b634e487b7160e01b5f52602160045260245ffd5b60206004915f89526040519283809263650369bf60e01b82525afa935f91856104e6575b5091604091602094936103df9661045a575b505091925061034c565b8351633af32abf60e01b81526004810191909152908590829060249082906001600160a01b03165afa5f91816104b7575b50610497575b80610450565b156104ad576104a7600289610805565b5f610491565b6104a76001610341565b6104d8919250863d88116104df575b6104d08183610748565b8101906107ed565b905f61048b565b503d6104c6565b90939291506020813d60201161052c575b8161050460209383610748565b810103126105285751906001600160a01b03821682036105285791926103df61043e565b5f80fd5b3d91506104f7565b6103476002610341565b15905061055557610550600289610805565b610347565b6105506001610341565b61057991925060203d6020116104df576104d08183610748565b905f610330565b6001885288525f61030b565b9091506020813d6020116105b8575b816105a860209383610748565b810103126105285751905f610305565b3d915061059b565b6105e2915060603d6060116105e8575b6105da8183610748565b81019061079b565b5f6102cb565b503d6105d0565b6040513d5f823e3d90fd5b6060939195509161061b6102b99593853d87116105e8576105da8183610748565b95919350919361027f565b929150926020833d60201161065a575b8161064360209383610748565b81010312610528579151919290919061026a610209565b3d9150610636565b90506020813d60201161068c575b8161067d60209383610748565b8101031261052857515f6101cc565b3d9150610670565b9091506020813d6020116106c0575b816106b060209383610748565b810103126105285751905f610190565b3d91506106a3565b9150506020813d6020116106f4575b816106e460209383610748565b8101031261052857518e5f610152565b3d91506106d7565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff8211176106fc57604052565b6060810190811067ffffffffffffffff8211176106fc57604052565b90601f8019910116810190811067ffffffffffffffff8211176106fc57604052565b604051906107778261072c565b5f6040838281528260208201520152565b519065ffffffffffff8216820361052857565b9081606091031261052857604051906107b38261072c565b80516001600160a01b0381168103610528576107e59160409184526107da60208201610788565b602085015201610788565b604082015290565b90816020910312610528575180151581036105285790565b6003821015610406575256fea2646970667358221220c9a20e72aef67c86c81a88085f9ef9c0efb04022f03ae699731b970b15912ca564736f6c634300081b0033";
"0x608080604052346015576108bc908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c6308e7fcc114610024575f80fd5b3461059857610100366003190112610598576004356001600160a01b0381168103610598576024356001600160a01b038116810361059857604435906001600160a01b0382168203610598576064356001600160a01b038116810361059857608435936001600160a01b03851685036105985760a4356001600160a01b03811681036105985760c4359081151582036105985760e435908115158203610598576101406040525f60805260a0976100d96107df565b895260405160c096906100eb81610785565b6100f36107df565b81526100fd6107df565b602082015287526060608001985f8a525f60808001525f60a060800152604051936370a0823160e01b855260018060a01b038a16600486015260208560248160018060a01b038c165afa8015610663575f9061073d575b608052604051636eb1769f60e11b81526001600160a01b03808c16600483015283166024820152945060208580604481015b03816001600160a01b038c165afa948515610663575f95610707575b50604051636eb1769f60e11b81526001600160a01b03808c166004830152841660248201529060208280604481015b03816001600160a01b038d165afa918215610663575f926106d2575b50604051636eb1769f60e11b81526001600160a01b03808d166004830152909116602482015290602082806044810103816001600160a01b038d165afa918215610663575f92610696575b509460609291610299966040519261024f846107a1565b83526020830152604080830191909152908d525163927da10560e01b81526001600160a01b038b811660048301528981166024830152909116604482015293849081906064820190565b03816001600160a01b0385165afa928315610663575f9361066e575b5060405163927da10560e01b81526001600160a01b03808a1660048301528781166024830152909216604483015260609082908180606481015b03916001600160a01b03165afa908115610663575f91610634575b506040519161031883610785565b825260208201528452604051623f675f60e91b815260018060a01b038616600482015260208160248160018060a01b0388165afa5f9181610600575b506105f2575b50604051624b894760e91b81526001600160a01b0386811660048301526020908290602490829088165afa5f91816105d1575b506105ae5750156105a4576103a660015b61012061087a565b610480575b5061043f915060209060408051956080518752518051848801528381015182880152015160608601525161040960808601825165ffffffffffff6040809260018060a01b038151168552826020820151166020860152015116910152565b015180516001600160a01b031660e0850152602081015165ffffffffffff90811661010086015260409091015116610120840152565b511515610140820152610100516101608201526101205190600382101561046c576101a091610180820152f35b634e487b7160e01b5f52602160045260245ffd5b5f6101205260405163650369bf60e01b815290602090829060049082906001600160a01b03165afa5f9181610556575b509061043f93602093926104c7575b5050906103ab565b604051633af32abf60e01b81526001600160a01b03918216600482015291849183916024918391165afa5f9181610527575b50610505575b806104bf565b1561051d57610517600261012061087a565b5f6104ff565b610517600161039e565b610548919250843d861161054f575b61054081836107bd565b810190610862565b905f6104f9565b503d610536565b909291506020813d60201161059c575b81610573602093836107bd565b810103126105985751916001600160a01b03831683036105985790919061043f6104b0565b5f80fd5b3d9150610566565b6103a6600261039e565b1590506105c7576105c2600261012061087a565b6103a6565b6105c2600161039e565b6105eb91925060203d60201161054f5761054081836107bd565b905f61038d565b60018752610100525f61035a565b9091506020813d60201161062c575b8161061c602093836107bd565b810103126105985751905f610354565b3d915061060f565b610656915060603d60601161065c575b61064e81836107bd565b810190610810565b5f61030a565b503d610644565b6040513d5f823e3d90fd5b60609193509161068d6102ef93833d851161065c5761064e81836107bd565b939150916102b5565b929150946020833d6020116106ca575b816106b3602093836107bd565b810103126105985791519194909190610299610238565b3d91506106a6565b91506020823d6020116106ff575b816106ed602093836107bd565b810103126105985790519060206101ed565b3d91506106e0565b9094506020813d602011610735575b81610723602093836107bd565b810103126105985751936101d16101a2565b3d9150610716565b506020853d602011610769575b81610757602093836107bd565b81010312610598576101869451610154565b3d915061074a565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761077157604052565b6060810190811067ffffffffffffffff82111761077157604052565b90601f8019910116810190811067ffffffffffffffff82111761077157604052565b604051906107ec826107a1565b5f6040838281528260208201520152565b519065ffffffffffff8216820361059857565b908160609103126105985760405190610828826107a1565b80516001600160a01b03811681036105985761085a91604091845261084f602082016107fd565b6020850152016107fd565b604082015290565b90816020910312610598575180151581036105985790565b600382101561046c575256fea2646970667358221220ebc7facce8af0d359e8c5b4110f378a0d03f8bba5c82ac4a13adb46b1b2f0e1d64736f6c634300081b0033";
Loading

0 comments on commit 96f9ce6

Please sign in to comment.