Publishing a smart contract
Making a smart contract public
Contracts will initially only be accessible by the contract developers, a special role that anyone can opt-in to.
Once the contracts have been deployed and tested, they can be made public by paying a small amount of ACA in order for them to become publicly accessible.
Trying to interact with an unpublished contract with an account that does not have the developer role will receive an Error: -32603
with the message: "Internal JSON-RPC error."
Only the contract's maintainer can publish it, no one else.
Publish a contract
We can publish a contract either with substrate account or evm account.
with substrate account
The example below uses Mandala as example. For other networks, you will need to switch to different Polkadot App.
First make sure the substrate account is bound to the maintainer of the contract to be published, then we can publish the contract:
Under the Submission tab of Polkadot App, select evm from the extrinsic dropdown menu
Select publishContract(contract) from the method/action dropdown
Fill in the contract address
Click Submit Transaction
with evm account
A simple example can be found here
Verify that the smart contract has been published successfully
Polkadot App can be used to verify whether or not the smart contract is published. This can be done using the Chain state viewer:
Using the Storage tab, select the evm from the select state query dropdown
Select accounts(H160) from the method/action dropdown
Fill in the contract address
Click Submit transaction
The published
value of the response indicates whether the smart contract is published or not.
Child smart contracts
In case your smart contract has a contract factory function, the child smart contracts inherit the publication status of the parent smart contract.
This means that the child smart contracts created using a published smart contract's contract factory are already published and don't need to be published manually.
Keep in mind that the maintainer of a child smart contract is the parent smart contract and not the caller of the transaction that triggered its creation. In case the maintainer role of the smart contract needs to be transferred from the parent smart contract to the caller, the transfer should be implemented in the same call as the creation of the child smart contract. You can do so using the EVM predeployed smart contract.
Last updated