From c91191488d88c7a3d3fa6edc471893734c8a98cc Mon Sep 17 00:00:00 2001 From: Agustincito Date: Tue, 10 Feb 2026 15:42:22 -0300 Subject: [PATCH 1/3] Add get code --- .changeset/loose-states-cover.md | 7 +++++++ packages/lib-ts/src/environment.ts | 18 +++++++++++++++++- packages/lib-ts/src/types/ByteArray.ts | 2 +- packages/lib-ts/tests/types/ByteArray.spec.ts | 6 +----- 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 .changeset/loose-states-cover.md diff --git a/.changeset/loose-states-cover.md b/.changeset/loose-states-cover.md new file mode 100644 index 00000000..9dd27af0 --- /dev/null +++ b/.changeset/loose-states-cover.md @@ -0,0 +1,7 @@ +--- +"@mimicprotocol/lib-ts": patch +"@mimicprotocol/cli": patch +"@mimicprotocol/test-ts": patch +--- + +Add getCode function to get the code of an address (Only EVM) diff --git a/packages/lib-ts/src/environment.ts b/packages/lib-ts/src/environment.ts index d20326cb..d95a9240 100644 --- a/packages/lib-ts/src/environment.ts +++ b/packages/lib-ts/src/environment.ts @@ -20,7 +20,7 @@ import { TokenPriceQueryResponse, } from './queries' import { BlockchainToken, Token, TokenAmount, USD } from './tokens' -import { Address, BigInt, ChainId, EvmDecodeParam, EvmEncodeParam, Result } from './types' +import { Address, BigInt, Bytes, ChainId, EvmDecodeParam, EvmEncodeParam, Result } from './types' export namespace environment { @external('environment', '_evmCall') @@ -219,4 +219,20 @@ export namespace environment { const decoded = BigInt.fromString(decodedResponse) return Result.ok(decoded) } + + /** + * Returns the code of the target account. + * @param chainId - Chain id to check code + * @param target - Address to get code from + * @returns The code of the target account + */ + export function getCode(chainId: ChainId, target: Address): Result { + if (chainId === ChainId.SOLANA_MAINNET) return Result.err('Solana not supported') + const data = '0x7e105ce2' + evm.encode([EvmEncodeParam.fromValue('address', target)]) + const response = evmCallQuery(Address.fromHexString(MIMIC_HELPER_ADDRESS), chainId, data) + if (response.isError) return Result.err(response.error) + const decodedResponse = evm.decode(new EvmDecodeParam('bytes', response.unwrap())) + const decoded = Bytes.fromHexString(decodedResponse) + return Result.ok(decoded) + } } diff --git a/packages/lib-ts/src/types/ByteArray.ts b/packages/lib-ts/src/types/ByteArray.ts index 9d281416..c6003fd3 100644 --- a/packages/lib-ts/src/types/ByteArray.ts +++ b/packages/lib-ts/src/types/ByteArray.ts @@ -20,7 +20,7 @@ export class ByteArray extends Uint8Array implements Serializable { * The resulting byte array is in little-endian order. */ static empty(): ByteArray { - return ByteArray.fromI32(0) + return new ByteArray(0) } /** diff --git a/packages/lib-ts/tests/types/ByteArray.spec.ts b/packages/lib-ts/tests/types/ByteArray.spec.ts index 8deec0d1..99f98ae1 100644 --- a/packages/lib-ts/tests/types/ByteArray.spec.ts +++ b/packages/lib-ts/tests/types/ByteArray.spec.ts @@ -5,11 +5,7 @@ describe('ByteArray', () => { describe('when calling the empty method', () => { it('returns a ByteArray initialized to 0', (): void => { const result = ByteArray.empty() - expect(result.length).toBe(4) - expect(result[0]).toBe(0) - expect(result[1]).toBe(0) - expect(result[2]).toBe(0) - expect(result[3]).toBe(0) + expect(result.length).toBe(0) }) }) }) From 1084c22f84c99ee74276d28dbc13667c9bfca0f9 Mon Sep 17 00:00:00 2001 From: Agustincito Date: Tue, 10 Feb 2026 15:50:07 -0300 Subject: [PATCH 2/3] Fix empty data --- packages/integration/tests/001-init-intent/expected.log | 2 +- .../tests/003-multiple-evm-call-intents/expected.log | 6 +++--- packages/integration/tests/004-three-intents/expected.log | 2 +- .../integration/tests/010-intents-with-events/expected.log | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/integration/tests/001-init-intent/expected.log b/packages/integration/tests/001-init-intent/expected.log index f5d03b35..01f6f4a1 100644 --- a/packages/integration/tests/001-init-intent/expected.log +++ b/packages/integration/tests/001-init-intent/expected.log @@ -1 +1 @@ -_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"10"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x00000000","value":"5"}]} \ No newline at end of file +_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"10"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x","value":"5"}]} \ No newline at end of file diff --git a/packages/integration/tests/003-multiple-evm-call-intents/expected.log b/packages/integration/tests/003-multiple-evm-call-intents/expected.log index be3b372a..0afb7dd2 100644 --- a/packages/integration/tests/003-multiple-evm-call-intents/expected.log +++ b/packages/integration/tests/003-multiple-evm-call-intents/expected.log @@ -1,3 +1,3 @@ -_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"10"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x00000000","value":"0"}]} -_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"9"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x00000000","value":"0"}]} -_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"8"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x00000000","value":"0"}]} \ No newline at end of file +_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"10"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x","value":"0"}]} +_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"9"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x","value":"0"}]} +_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000000","amount":"8"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000000","data":"0x","value":"0"}]} \ No newline at end of file diff --git a/packages/integration/tests/004-three-intents/expected.log b/packages/integration/tests/004-three-intents/expected.log index f26e0c37..0c78abf8 100644 --- a/packages/integration/tests/004-three-intents/expected.log +++ b/packages/integration/tests/004-three-intents/expected.log @@ -1,3 +1,3 @@ -_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","amount":"10000000"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000001","data":"0x00000000","value":"0"},{"target":"0x0000000000000000000000000000000000000001","data":"0x7b000000","value":"0"}]} +_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","amount":"10000000"}],"events":[],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000001","data":"0x","value":"0"},{"target":"0x0000000000000000000000000000000000000001","data":"0x7b000000","value":"0"}]} _swap: {"op":0,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[],"events":[],"sourceChain":1,"tokensIn":[{"token":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","amount":"100000000"}],"tokensOut":[{"token":"0x2260fac5e5542a773aa44fbcfedf7c193bc2c599","minAmount":"9500000000","recipient":"0x0000000000000000000000000000000000000001"}],"destinationChain":1} _transfer: {"op":1,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","amount":"10000000"}],"events":[],"chainId":1,"transfers":[{"token":"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48","amount":"100000000","recipient":"0x0000000000000000000000000000000000000001"}]} \ No newline at end of file diff --git a/packages/integration/tests/010-intents-with-events/expected.log b/packages/integration/tests/010-intents-with-events/expected.log index d09b3fcf..f01411dd 100644 --- a/packages/integration/tests/010-intents-with-events/expected.log +++ b/packages/integration/tests/010-intents-with-events/expected.log @@ -1 +1 @@ -_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000348","amount":"1000000000000000000"}],"events":[{"topic":"0xabcd","data":"0x64617461"},{"topic":"0xabcd","data":"0x64617461"}],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000001","data":"0x00000000","value":"0"}]} \ No newline at end of file +_evmCall: {"op":2,"settler":"0x6b175474e89094c44da98b954eedeac495271d0f","user":"0x756f45e3fa69347a9a973a725e3c98bc4db0b5a0","deadline":"1438223473","nonce":"0xabcd","maxFees":[{"token":"0x0000000000000000000000000000000000000348","amount":"1000000000000000000"}],"events":[{"topic":"0xabcd","data":"0x64617461"},{"topic":"0xabcd","data":"0x64617461"}],"chainId":1,"calls":[{"target":"0x0000000000000000000000000000000000000001","data":"0x","value":"0"}]} \ No newline at end of file From 141bf78b5f51f863efaa330057ea1f6d114c15b7 Mon Sep 17 00:00:00 2001 From: Agustincito Date: Tue, 10 Feb 2026 16:04:48 -0300 Subject: [PATCH 3/3] Add address --- packages/lib-ts/src/helpers/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lib-ts/src/helpers/constants.ts b/packages/lib-ts/src/helpers/constants.ts index af5c0b91..25072d48 100644 --- a/packages/lib-ts/src/helpers/constants.ts +++ b/packages/lib-ts/src/helpers/constants.ts @@ -14,4 +14,4 @@ export enum ListType { DenyList = 1, } -export const MIMIC_HELPER_ADDRESS = '0xb5DfCaBAef8fa7B0c73e2bFF01c6014a1f04025a' +export const MIMIC_HELPER_ADDRESS = '0x5cf82cbed1110fc2f75b3413d53abac492931804'