Deploying Contract with BP Approval
Contracts can be deployed or updated via two methods: aelf explorer or aelf-command. Ensure npm and aelf-command are installed before starting. Follow the Deployment Environment guide if needed.
Overview
In these cases, BP approval is needed for contract updates:
- Upgrading system contracts on MainChain.
- Upgrading system contracts on exclusive dAppChains.
- Upgrading system contracts on shared dAppChains.
System contracts can only be deployed in the Genesis block. After launch, only updates are supported. This guide focuses on contract deployment on aelf Mainnet with ContractDeploymentAuthorityRequired set to true.
Deploy / Update through aelf Explorer
To deploy/update contracts on AElf Mainnet with ContractDeploymentAuthorityRequired true, create an AElf wallet and have around 100 ELF. When ContractDeploymentAuthorityRequired is false, use DeploySmartContract and UpdateSmartContract in Contract Zero.
Learn how to deploy contracts through aelf Explorer
Deploy / Update through aelf-command

Contracts Deployment/Update Procedure
Developer: ProposeNewContract / ProposeUpdateContract
Contract Deployment
- Developer initiates
ProposeNewContract. - A
ProposeContractCodeCheckproposal is created for BP code review. - If 2/3 (rounding down) + 1 BPs approve, the developer releases the approved proposal, triggering an automatic
CodeCheckproposal. If denied, deployment stops.
Contract Update
- Developer initiates
ProposeUpdateContract. - A
ProposeContractCodeCheckproposal is created for BP code review. - If 2/3 (rounding down) + 1 BPs approve, the developer releases the approved proposal, triggering an automatic
CodeCheckproposal. If denied, the update stops.
BP: Parliament.Approve
BPs approve the ProposeContractCodeCheck proposal:
- 2/3 (rounding down) + 1 votes in favor.
- No more than 10% votes against.
- No more than 10% abstentions.
- At least 80% BP participation.
Developer: ReleaseApprovedContract
If 2/3 (rounding down) + 1 BPs approve, the developer initiates ReleaseApprovedContract to release the proposal, creating a CodeCheck proposal for automatic code check.
BP: Parliament.ApproveMultiProposals (Automatic)
BPs complete the code check. If it passes, an ApproveMultiProposals transaction is initiated automatically, approving the CodeCheck proposal. If it fails, the process stops.
Developer: ReleaseCodeCheckedContract
The developer initiates ReleaseCodeCheckedContract to release the CodeCheck proposal. The DeploySmartContract or UpdateSmartContract method is executed, completing the deployment/update.