ACS0 - Contract Deployment Standard¶
ACS0 is used to manage the deployment and update of contracts.
Interface¶
The contract inherited from ACS0 need implement the following interfaces:
Methods¶
Method Name | Request Type | Response Type | Description |
---|---|---|---|
DeploySystemSmartContract | acs0.SystemContractDeploymentInput | aelf.Address | Deploy a system smart contract on chain and return the address of the system contract deployed. |
DeploySmartContract | acs0.ContractDeploymentInput | aelf.Address | Deploy a smart contract on chain and return the address of the contract deployed. |
UpdateSmartContract | acs0.ContractUpdateInput | aelf.Address | Update a smart contract on chain. |
ProposeNewContract | acs0.ContractDeploymentInput | aelf.Hash | Create a proposal to deploy a new contract and returns the id of the proposed contract. |
ProposeContractCodeCheck | acs0.ContractCodeCheckInput | aelf.Hash | Create a proposal to check the code of a contract and return the id of the proposed contract. |
ProposeUpdateContract | acs0.ContractUpdateInput | aelf.Hash | Create a proposal to update the specified contract and return the id of the proposed contract. |
ReleaseApprovedContract | acs0.ReleaseContractInput | google.protobuf.Empty | Release the contract proposal which has been approved. |
ReleaseCodeCheckedContract | acs0.ReleaseContractInput | google.protobuf.Empty | Release the proposal which has passed the code check. |
ValidateSystemContractAddress | acs0.ValidateSystemContractAddressInput | google.protobuf.Empty | Validate whether the input system contract exists. |
SetContractProposerRequiredState | google.protobuf.BoolValue | google.protobuf.Empty | Set authority of contract deployment. |
CurrentContractSerialNumber | google.protobuf.Empty | google.protobuf.Int64Value | Get the current serial number of genesis contract (corresponds to the serial number that will be given to the next deployed contract). |
GetContractInfo | aelf.Address | acs0.ContractInfo | Get detailed information about the specified contract. |
GetContractAuthor | aelf.Address | aelf.Address | Get author of the specified contract. |
GetContractHash | aelf.Address | aelf.Hash | Get the code hash of the contract about the specified address. |
GetContractAddressByName | aelf.Hash | aelf.Address | Get the address of a system contract by its name. |
GetSmartContractRegistrationByAddress | aelf.Address | aelf.SmartContractRegistration | Get the registration of a smart contract by its address. |
GetSmartContractRegistrationByCodeHash | aelf.Hash | aelf.SmartContractRegistration | Get the registration of a smart contract by code hash. |
DeployUserSmartContract | acs0.ContractDeploymentInput | acs0.DeployUserSmartContractOutput | Deploy a user smart contract on chain and return the hash of the contract code. |
UpdateUserSmartContract | acs0.ContractUpdateInput | google.protobuf.Empty | Update a user smart contract on chain. |
ReleaseApprovedUserSmartContract | acs0.ReleaseContractInput | google.protobuf.Empty | Release the proposal which has passed the code check. |
PerformDeployUserSmartContract | acs0.ContractDeploymentInput | aelf.Address | Perform user contract deployment. |
PerformUpdateUserSmartContract | acs0.ContractUpdateInput | google.protobuf.Empty | Perform user contract update. |
SetContractAuthor | acs0.SetContractAuthorInput | google.protobuf.Empty | Set author of the specified contract. |
Types¶
acs0.AuthorUpdated¶
Field | Type | Description | Label |
---|---|---|---|
address | aelf.address | The byte array of the contract code. | |
old_author | aelf.address | The category of contract code(0: C#). | |
CrossChainCreateToken | aelf.address | Indicates if the contract is the system contract. |
acs0.CodeCheckRequired¶
Field | Type | Description | Label |
---|---|---|---|
code | bytes | The byte array of the contract code. | |
proposed_contract_input_hash | aelf.Hash | The id of the proposed contract. | |
category | sint32 | The category of contract code(0: C#). | |
is_system_contract | bool | Indicates if the contract is the system contract. | |
is_user_contract | bool | Indicates if the contract is the user contract. |
acs0.CodeUpdated¶
Field | Type | Description | Label |
---|---|---|---|
address | aelf.Address | The address of the updated contract. | |
old_code_hash | aelf.Hash | The byte array of the old contract code. | |
new_code_hash | aelf.Hash | The byte array of the new contract code. | |
version | int32 | The version of the current contract. |
acs0.ContractCodeCheckInput¶
Field | Type | Description | Label |
---|---|---|---|
contract_input | bytes | The byte array of the contract code to be checked. | |
is_contract_deployment | bool | Whether the input contract is to be deployed or updated. | |
code_check_release_method | string | Method to call after code check complete(DeploySmartContract or UpdateSmartContract). | |
proposed_contract_input_hash | aelf.Hash | The id of the proposed contract. | |
category | sint32 | The category of contract code(0: C#). | |
is_system_contract | bool | Indicates if the contract is the system contract. |
acs0.ContractDeployed¶
Field | Type | Description | Label |
---|---|---|---|
author | aelf.Address | The author of the contract, this is the person who deployed the contract. | |
code_hash | aelf.Hash | The hash of the contract code. | |
address | aelf.Address | The address of the contract. | |
version | int32 | The version of the current contract. | |
Name | aelf.Hash | The name of the contract. It has to be unique. | |
contract_version | string | The version of the current contract. |
acs0.DeployUserSmartContractOutput¶
Field | Type | Description | Label |
---|---|---|---|
code_hash | aelf.Hash | The deployed or updated contract code hash. |
acs0.ContractInfo¶
Field | Type | Description | Label |
---|---|---|---|
serial_number | int64 | The serial number of the contract. | |
author | aelf.Address | The author of the contract, this is the person who deployed the contract. | |
category | sint32 | The category of contract code(0: C#). | |
code_hash | aelf.Hash | The hash of the contract code. | |
is_system_contract | bool | Whether it is a system contract. | |
version | int32 | The version of the current contract. | |
contract_version | string | The version of the current contract. | |
is_user_contract | bool | Indicates if the contract is the user contract. |
acs0.ContractProposed¶
Field | Type | Description | Label |
---|---|---|---|
proposed_contract_input_hash | aelf.Hash | The id of the proposed contract. |
acs0.ContractUpdateInput¶
Field | Type | Description | Label |
---|---|---|---|
address | aelf.Address | The contract address that needs to be updated. | |
code | bytes | The byte array of the new contract code. |
acs0.SetContractAuthorInput¶
Field | Type | Description | Label |
---|---|---|---|
contract_address | aelf.Address | The author’s contract address needs to be updated. | |
new_author | aelf.Address | The new contract author. |
acs0.ReleaseContractInput¶
Field | Type | Description | Label |
---|---|---|---|
proposal_id | aelf.Hash | The hash of the proposal. | |
proposed_contract_input_hash | aelf.Hash | The id of the proposed contract. |
acs0.SystemContractDeploymentInput¶
Field | Type | Description | Label |
---|---|---|---|
category | sint32 | The category of contract code(0: C#). | |
code | bytes | The byte array of the contract code. | |
name | aelf.Hash | The name of the contract. It has to be unique. | |
transaction_method_call_list | SystemContractDeploymentInput.SystemTransactionMethodCallList | An initial list of transactions for the system contract, which is executed in sequence when the contract is deployed. |
acs0.SystemContractDeploymentInput.SystemTransactionMethodCall¶
Field | Type | Description | Label |
---|---|---|---|
method_name | string | The method name of system transaction. | |
params | bytes | The params of system transaction method. |
acs0.SystemContractDeploymentInput.SystemTransactionMethodCallList¶
Field | Type | Description | Label |
---|---|---|---|
value | SystemContractDeploymentInput.SystemTransactionMethodCall | The list of system transactions. | repeated |
acs0.ValidateSystemContractAddressInput¶
Field | Type | Description | Label |
---|---|---|---|
system_contract_hash_name | aelf.Hash | The name hash of the contract. | |
address | aelf.Address | The address of the contract. |
aelf.BinaryMerkleTree¶
Field | Type | Description | Label |
---|---|---|---|
nodes | Hash | The leaf nodes. | repeated |
root | Hash | The root node hash. | |
leaf_count | int32 | The count of leaf node. |
aelf.LogEvent¶
Field | Type | Description | Label |
---|---|---|---|
address | Address | The contract address. | |
name | string | The name of the log event. | |
indexed | bytes | The indexed data, used to calculate bloom. | repeated |
non_indexed | bytes | The non indexed data. |
aelf.MerklePath¶
Field | Type | Description | Label |
---|---|---|---|
merkle_path_nodes | MerklePathNode | The merkle path nodes. | repeated |
aelf.MerklePathNode¶
Field | Type | Description | Label |
---|---|---|---|
hash | Hash | The node hash. | |
is_left_child_node | bool | Whether it is a left child node. |
aelf.ScopedStatePath¶
Field | Type | Description | Label |
---|---|---|---|
address | Address | The scope address, which will be the contract address. | |
path | StatePath | The path of contract state. |
aelf.SmartContractRegistration¶
Field | Type | Description | Label |
---|---|---|---|
category | sint32 | The category of contract code(0: C#). | |
code | bytes | The byte array of the contract code. | |
code_hash | Hash | The hash of the contract code. | |
is_system_contract | bool | Whether it is a system contract. | |
version | int32 | The version of the current contract. |
aelf.StatePath¶
Field | Type | Description | Label |
---|---|---|---|
parts | string | The partial path of the state path. | repeated |
aelf.Transaction¶
Field | Type | Description | Label |
---|---|---|---|
from | Address | The address of the sender of the transaction. | |
to | Address | The address of the contract when calling a contract. | |
ref_block_number | int64 | The height of the referenced block hash. | |
ref_block_prefix | bytes | The first four bytes of the referenced block hash. | |
method_name | string | The name of a method in the smart contract at the To address. | |
params | bytes | The parameters to pass to the smart contract method. | |
signature | bytes | When signing a transaction it��s actually a subset of the fields: from/to and the target method as well as the parameter that were given. It also contains the reference block number and prefix. |
aelf.TransactionExecutingStateSet¶
Field | Type | Description | Label |
---|---|---|---|
writes | TransactionExecutingStateSet.WritesEntry | The changed states. | repeated |
reads | TransactionExecutingStateSet.ReadsEntry | The read states. | repeated |
deletes | TransactionExecutingStateSet.DeletesEntry | The deleted states. | repeated |
aelf.TransactionResult¶
Field | Type | Description | Label |
---|---|---|---|
transaction_id | Hash | The transaction id. | |
status | TransactionResultStatus | The transaction result status. | |
logs | LogEvent | The log events. | repeated |
bloom | bytes | Bloom filter for transaction logs. A transaction log event can be defined in the contract and stored in the bloom filter after the transaction is executed. Through this filter, we can quickly search for and determine whether a log exists in the transaction result. | |
return_value | bytes | The return value of the transaction execution. | |
block_number | int64 | The height of the block hat packages the transaction. | |
block_hash | Hash | The hash of the block hat packages the transaction. | |
error | string | Failed execution error message. |
aelf.TransactionResultStatus¶
Name | Number | Description |
---|---|---|
NOT_EXISTED | 0 | The execution result of the transaction does not exist. |
PENDING | 1 | The transaction is in the transaction pool waiting to be packaged. |
FAILED | 2 | Transaction execution failed. |
MINED | 3 | The transaction was successfully executed and successfully packaged into a block. |
CONFLICT | 4 | When executed in parallel, there are conflicts with other transactions. |
PENDING_VALIDATION | 5 | The transaction is waiting for validation. |
NODE_VALIDATION_FAILED | 6 | Transaction validation failed. |
Example¶
ACS0 declares methods for the scenes about contract deployment and update. AElf provides the implementation for ACS0, Genesis Contract
.
You can refer to the implementation of the Genesis contract api.