From 21d07b1d146ae82907abbb41ff223bc9a481d057 Mon Sep 17 00:00:00 2001 From: Iris Date: Wed, 1 May 2024 17:30:10 +0200 Subject: [PATCH] ref: remove fallback calls --- .../core/__test__/profile_mainnet.test.ts | 1 - .../core/__test__/resolve_sepolia.test.ts | 27 ++++ .../core/src/starknetIdNavigator/default.ts | 32 +---- .../core/src/starknetIdNavigator/internal.ts | 129 ++++++------------ 4 files changed, 77 insertions(+), 112 deletions(-) create mode 100644 packages/core/__test__/resolve_sepolia.test.ts diff --git a/packages/core/__test__/profile_mainnet.test.ts b/packages/core/__test__/profile_mainnet.test.ts index eec9728..09cfe47 100644 --- a/packages/core/__test__/profile_mainnet.test.ts +++ b/packages/core/__test__/profile_mainnet.test.ts @@ -178,7 +178,6 @@ describe("test starknetid.js sdk on mainnet", () => { "0x0097095403155fcbFA72AA53270D6eDd0DCC830bBb9264455517DF3e508633E5", // nothing "0x007b275f7524f39b99a51c7134bc44204fedc5dd1e982e920eb2047c6c2a71f0", // everai pfp ]); - console.log("profiles", profiles); const expectedProfiles = [ { name: "iris.stark" }, { name: "rmz.stark" }, diff --git a/packages/core/__test__/resolve_sepolia.test.ts b/packages/core/__test__/resolve_sepolia.test.ts new file mode 100644 index 0000000..8790127 --- /dev/null +++ b/packages/core/__test__/resolve_sepolia.test.ts @@ -0,0 +1,27 @@ +import { Account, Provider, constants } from "starknet"; +import { StarknetIdNavigator } from "../src"; + +describe("test starknetid.js sdk on sepolia", () => { + jest.setTimeout(90000000); + const provider = new Provider({ + rpc: { + nodeUrl: "https://sepolia.rpc.starknet.id", + }, + }); + + describe("Test offchain resolving demo", () => { + test("iris.notion.stark resolve to the right address", async () => { + const starknetIdNavigator = new StarknetIdNavigator( + provider, + constants.StarknetChainId.SN_SEPOLIA, + ); + expect(starknetIdNavigator).toBeInstanceOf(StarknetIdNavigator); + const address = await starknetIdNavigator.getAddressFromStarkName( + "iris.notion.stark", + ); + expect(address).toBe( + "0x220756d68c9b120fcfc539510fc474359bea9f8bc73e8af3a23a8276d571faf", + ); + }); + }); +}); diff --git a/packages/core/src/starknetIdNavigator/default.ts b/packages/core/src/starknetIdNavigator/default.ts index 628b9f5..353194f 100644 --- a/packages/core/src/starknetIdNavigator/default.ts +++ b/packages/core/src/starknetIdNavigator/default.ts @@ -24,7 +24,6 @@ import { import { StarknetIdNavigatorInterface } from "./interface"; import { StarkProfile, StarknetIdContracts } from "../types"; import { - executeMulticallWithFallback, extractArrayFromErrorMessage, fetchImageUrl, getProfileDataCalldata, @@ -160,17 +159,8 @@ export class StarknetIdNavigator implements StarknetIdNavigatorInterface { ); try { - let { initialCalldata, fallbackCalldata } = getStarknamesCalldata( - addresses, - namingContract, - ); - - const data = await executeMulticallWithFallback( - contract, - "aggregate", - initialCalldata, - fallbackCalldata, - ); + let calldata = getStarknamesCalldata(addresses, namingContract); + const data = await contract.call("aggregate", [calldata]); let result: string[] = []; if (Array.isArray(data)) { @@ -492,7 +482,7 @@ export class StarknetIdNavigator implements StarknetIdNavigatorInterface { ); try { - const { initialCalldata, fallbackCalldata } = getProfileDataCalldata( + const calldata = getProfileDataCalldata( address, namingContract, identityContract, @@ -500,12 +490,7 @@ export class StarknetIdNavigator implements StarknetIdNavigatorInterface { pfpVerifierContract, popVerifierContract, ); - const data = await executeMulticallWithFallback( - multicallContract, - "aggregate", - initialCalldata, - fallbackCalldata, - ); + const data = await multicallContract.call("aggregate", [calldata]); if (Array.isArray(data)) { const name = decodeDomain(data[0].slice(1)); @@ -584,7 +569,7 @@ export class StarknetIdNavigator implements StarknetIdNavigatorInterface { try { const nbInstructions = 5; - const { initialCalldata, fallbackCalldata } = getStarkProfilesCalldata( + const calldata = getStarkProfilesCalldata( addresses, namingContract, identityContract, @@ -593,12 +578,7 @@ export class StarknetIdNavigator implements StarknetIdNavigatorInterface { blobbertContract, ); - const data = await executeMulticallWithFallback( - multicallContract, - "aggregate", - initialCalldata, - fallbackCalldata, - ); + const data = await multicallContract.call("aggregate", [calldata]); if (Array.isArray(data)) { let results: StarkProfile[] = []; diff --git a/packages/core/src/starknetIdNavigator/internal.ts b/packages/core/src/starknetIdNavigator/internal.ts index 1a779dc..abde150 100644 --- a/packages/core/src/starknetIdNavigator/internal.ts +++ b/packages/core/src/starknetIdNavigator/internal.ts @@ -79,24 +79,24 @@ export const notEqual = (call: number, pos: number, value: number) => { }); }; -export const executeMulticallWithFallback = async ( - contract: Contract, - functionName: string, - initialCalldata: RawArgsArray, - fallbackCalldata: RawArgsArray, -) => { - try { - // Attempt the initial call - return await contract.call(functionName, [initialCalldata]); - } catch (initialError) { - // If the initial call fails, try with the fallback calldata - try { - return await contract.call(functionName, [fallbackCalldata]); - } catch (fallbackError) { - throw fallbackError; // Re-throw to handle outside - } - } -}; +// export const executeMulticallWithFallback = async ( +// contract: Contract, +// functionName: string, +// initialCalldata: RawArgsArray, +// fallbackCalldata: RawArgsArray, +// ) => { +// try { +// // Attempt the initial call +// return await contract.call(functionName, [initialCalldata]); +// } catch (initialError) { +// // If the initial call fails, try with the fallback calldata +// try { +// return await contract.call(functionName, [fallbackCalldata]); +// } catch (fallbackError) { +// throw fallbackError; // Re-throw to handle outside +// } +// } +// }; // // composable multicall calldata @@ -105,29 +105,19 @@ export const executeMulticallWithFallback = async ( export const getStarknamesCalldata = ( addresses: string[], namingContract: string, -): { - initialCalldata: RawArgsArray; - fallbackCalldata: RawArgsArray; -} => { - let initialCalldata: RawArgsArray = []; - let fallbackCalldata: RawArgsArray = []; +): RawArgsArray => { + let calldata: RawArgsArray = []; + addresses.forEach((address) => { - initialCalldata.push({ + calldata.push({ execution: staticExecution(), to: hardcoded(namingContract), selector: hardcoded(hash.getSelectorFromName("address_to_domain")), calldata: [hardcoded(address), hardcoded("0")], }); - - fallbackCalldata.push({ - execution: staticExecution(), - to: hardcoded(namingContract), - selector: hardcoded(hash.getSelectorFromName("address_to_domain")), - calldata: [hardcoded(address)], - }); }); - return { initialCalldata, fallbackCalldata }; + return calldata; }; export const getStarkProfilesCalldata = ( @@ -137,32 +127,19 @@ export const getStarkProfilesCalldata = ( pfpVerifierContract: string, utilsMulticallContract: string, blobbertContract: string, -): { - initialCalldata: RawArgsArray; - fallbackCalldata: RawArgsArray; -} => { +): RawArgsArray => { let calldata: RawArgsArray = []; let uriCalldata: RawArgsArray = []; - let fallback: RawArgsArray = []; const nbInstructions = 5; addresses.forEach((address, index) => { - // We will first try to pass a hint - calldata.push({ - execution: staticExecution(), - to: hardcoded(namingContract), - selector: hardcoded(hash.getSelectorFromName("address_to_domain")), - calldata: [hardcoded(address), hardcoded("0")], - }); - // if it fails we will fallback to not passing it - fallback.push({ - execution: staticExecution(), - to: hardcoded(namingContract), - selector: hardcoded(hash.getSelectorFromName("address_to_domain")), - calldata: [hardcoded(address)], - }); - - const calls = [ + calldata.push( + { + execution: staticExecution(), + to: hardcoded(namingContract), + selector: hardcoded(hash.getSelectorFromName("address_to_domain")), + calldata: [hardcoded(address), hardcoded("0")], + }, { execution: staticExecution(), to: hardcoded(namingContract), @@ -203,9 +180,7 @@ export const getStarkProfilesCalldata = ( hardcoded(blobbertContract), ], }, - ]; - calldata.push(...calls); - fallback.push(...calls); + ); // we only fetch the uri if the nft_pp_contract is not 0 and is not the blobbert contract // we will handle blobbert token uris offchain @@ -220,10 +195,7 @@ export const getStarkProfilesCalldata = ( }); }); - return { - initialCalldata: [...calldata, ...uriCalldata], - fallbackCalldata: [...fallback, ...uriCalldata], - }; + return [...calldata, ...uriCalldata]; }; export const getProfileDataCalldata = ( @@ -233,27 +205,16 @@ export const getProfileDataCalldata = ( verifierContract: string, pfpVerifierContract: string, popVerifierContract: string, -): { - initialCalldata: RawArgsArray; - fallbackCalldata: RawArgsArray; -} => { - let initialCalldata: RawArgsArray = []; - let fallbackCalldata: RawArgsArray = []; - - initialCalldata.push({ - execution: staticExecution(), - to: hardcoded(namingContract), - selector: hardcoded(hash.getSelectorFromName("address_to_domain")), - calldata: [hardcoded(address), hardcoded("0")], - }); - fallbackCalldata.push({ - execution: staticExecution(), - to: hardcoded(namingContract), - selector: hardcoded(hash.getSelectorFromName("address_to_domain")), - calldata: [hardcoded(address)], - }); +): RawArgsArray => { + let calldata: RawArgsArray = []; - const calls = [ + calldata.push( + { + execution: staticExecution(), + to: hardcoded(namingContract), + selector: hardcoded(hash.getSelectorFromName("address_to_domain")), + calldata: [hardcoded(address), hardcoded("0")], + }, { execution: staticExecution(), to: hardcoded(namingContract), @@ -336,11 +297,9 @@ export const getProfileDataCalldata = ( selector: hardcoded(hash.getSelectorFromName("tokenURI")), calldata: [reference(7, 1), reference(7, 2)], }, - ]; - initialCalldata.push(...calls); - fallbackCalldata.push(...calls); + ); - return { initialCalldata, fallbackCalldata }; + return calldata; }; //