# Remove ABI from contract deployment request and \`get\_code\` response?

**URL:** <https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308>\
**Category:** Starknet Technical Development\
**Created:** [January 6, 2022, 4:25pm UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308 "2022-01-06T16:25:18Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![xJonathanLEI](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/xjonathanlei/32/93_2.png) [@xJonathanLEI](https://community.starknet.io/u/xJonathanLEI)\
**Post date:** [January 6, 2022, 4:25pm UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308/1 "2022-01-06T16:25:18Z")

</div>

First off, I totally understand the convenience of having ABI readily available from API, and am aware of existing blockchains (e.g. EOS) that do exactly just this.

However, despite things working well under the happy case (everyone using the standard toolchain to build and deploy contracts), the `abi` returned by `get_code` cannot be relied upon:

- The `abi` under `contract_definition` is optional anyways when deploying contract
- There’s no way for sequencers to verify correctness of ABI submitted on deployment

To demonstrate the idea, I’ve deployed a contract with fake ABI here, and it’s picked up by the block explorer:

 ![fake-abi-voyager](https://europe1.discourse-cdn.com/flex005/uploads/starknet1/original/1X/3c8796a10ad84c4fd9795912f19f121d461804bc.png)

which is quite misleading.

IMO if shouldn’t even be there if it cannot be relied upon. I think the responsibility of providing ABI should be outsourced to a source verification service like Sourcify or Etherscan, which can deterministically derive ABI from source code.

What do you guys think?

---

<div class="post-metadata">

**Author:** ![bbrandtom](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/bbrandtom/32/9_2.png) [@bbrandtom](https://community.starknet.io/u/bbrandtom)\
**Post date:** [January 12, 2022, 12:42pm UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308/2 "2022-01-12T12:42:18Z")

</div>

Hi @xJonathanLEI , you are correct.

The rational initially was to allow showing something in Voyager, before contracts verification was possible. It was done as a way to make development easier at the early stages of StarkNet Alpha.

I think you are making a good point and we should consider either removing it, and/or making Voyager only shows verified contracts’ ABI.

---

<div class="post-metadata">

**Author:** ![platonov](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/platonov/32/331_2.png) [@platonov](https://community.starknet.io/u/platonov)\
**Post date:** [January 19, 2022, 10:34am UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308/3 "2022-01-19T10:34:01Z")

</div>

Standardization is driving us into a box. Centralized ABI validation can affect creativity, or am I wrong?

---

<div class="post-metadata">

**Author:** ![xJonathanLEI](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/xjonathanlei/32/93_2.png) [@xJonathanLEI](https://community.starknet.io/u/xJonathanLEI)\
**Post date:** [January 19, 2022, 10:55am UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308/4 "2022-01-19T10:55:06Z")

</div>

I don’t think this has anything to do with centralization though.

Yes I mentioned Etherscan as an example, which is indeed a centralized platform, but such a source code verification service doesn’t have to be centralized. Take [Sourcify](https://sourcify.dev/) for example.

The most important point I’m trying to make is here is the sequencer is not even _validating_ the ABI anways. It just _hosts_ whatever the deployer claims to be the ABI.

---

<div class="post-metadata">

**Author:** ![martriay](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/martriay/32/25_2.png) [@martriay](https://community.starknet.io/u/martriay)\
**Post date:** [September 29, 2022, 11:24am UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308/5 "2022-09-29T11:24:00Z")

</div>

> [@xJonathanLEI](#):
>
> The most important point I’m trying to make is here is the sequencer is not even _validating_ the ABI anways. It just _hosts_ whatever the deployer claims to be the ABI.

Any sources for this? Is there any docs or line of code where to check it, besides your experiment?

Thanks!

---

<div class="post-metadata">

**Author:** ![xJonathanLEI](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/xjonathanlei/32/93_2.png) [@xJonathanLEI](https://community.starknet.io/u/xJonathanLEI)\
**Post date:** [September 29, 2022, 2:21pm UTC](https://community.starknet.io/t/remove-abi-from-contract-deployment-request-and-get-code-response/308/6 "2022-09-29T14:21:56Z")

</div>

> [@martriay](#):
>
> Any sources for this? Is there any docs or line of code where to check it, besides your experiment?

The sequencer isn’t open source so it’s a black box to all of us. I don’t think I can refer to any code here.

However, I think it’s pretty intuitive that you cannot possibly verify the correctness of ABI without access to contract source code. Thus the sequencer cannot possibly verify it.

You can also try deploying with a fake ABI youself and you’ll see 🙂
