Submitting a Proposal
Overview
The Assembly contract allows xASTRO holders as well as Initial Astroport Builders to post new on-chain proposals that can execute arbitrary logic, including contract parameter changes, smart contract upgrades, and treasury disbursements. For a full list of upgradeable contracts and availiable parameter changes, look here.
Upon approval, the upgrades or assignments will be autonomously executed.
Proposal Message
Cw20HookMsg
To submit a proposal, you need to execute a contract message pointing to the send enpoint in the xASTRO token contract.
The send operation takes in a:
contract- Address where xASTRO tokens are being sent to (Assemblycontract)amount- Required deposit to submit a proposal (30,000 xASTRO for mainnet)msgBinary encoded message containing our contract call.
_45{_45 "send": {_45 "contract": assemblyAddress, _45 "amount": "1000", // testnet deposit amount - mainnet = 30,000 xASTRO_45 "msg": toBase64(_45 {_45 "submit_proposal": {_45 "title": "Example proposal",_45 "description": "Example proposal",_45 "link": "https://forum.astroport.fi/",_45 "messages":_45 [_45 {_45 "wasm": {_45 "execute": {_45 "contract_addr": factoryAddress,_45 "msg": toBase64(_45 {_45 "deregister": {_45 "asset_infos": [_45 {_45 "token": {_45 "contract_addr": astroAddress_45 }_45 },_45 {_45 "token": {_45 "contract_addr": steakAddress_45 }_45 }_45 ]_45 }_45 }_45 ),_45 "funds": []_45 }_45 }_45 }_45 ],_45 "ibc_channel": "channel..."_45 }_45 }_45 )_45 }_45}
submit_proposal
Our encoded message performs a contract call to the submit_proposal endpoint in the Assembly contract.
submit_proposal takes in the following parameters:
title: Proposal titledescription: Description for the proposallink: Link to forum discussionmessages: Proposal messagesibc_channel: Governance channel
_45{_45 "send": {_45 "contract": assemblyAddress, _45 "amount": "1000", // testnet deposit amount - mainnet = 30,000 xASTRO_45 "msg": toBase64(_45 {_45 "submit_proposal": {_45 "title": "Example proposal",_45 "description": "Example proposal",_45 "link": "https://forum.astroport.fi/",_45 "messages":_45 [_45 {_45 "wasm": {_45 "execute": {_45 "contract_addr": factoryAddress,_45 "msg": toBase64(_45 {_45 "deregister": {_45 "asset_infos": [_45 {_45 "token": {_45 "contract_addr": astroAddress_45 }_45 },_45 {_45 "token": {_45 "contract_addr": steakAddress_45 }_45 }_45 ]_45 }_45 }_45 ),_45 "funds": []_45 }_45 }_45 }_45 ],_45 "ibc_channel": "channel..."_45 }_45 }_45 )_45 }_45}
msg
The msg parameter contains a WasmMsg of type Execute.
wasm -> execute requires the following parameters:
contract_addr: Address of the contract our proposal message is pointing to. For example, if you are deregistering a pool, the address would be theFactorycontract address.msg: Binary encoded message containing our contract call.funds: Any funds to send along with our transaction.
_45{_45 "send": {_45 "contract": assemblyAddress, _45 "amount": "1000", // testnet deposit amount - mainnet = 30,000 xASTRO_45 "msg": toBase64(_45 {_45 "submit_proposal": {_45 "title": "Example proposal",_45 "description": "Example proposal",_45 "link": "https://forum.astroport.fi/",_45 "messages":_45 [_45 {_45 "wasm": {_45 "execute": {_45 "contract_addr": factoryAddress,_45 "msg": toBase64(_45 {_45 "deregister": {_45 "asset_infos": [_45 {_45 "token": {_45 "contract_addr": astroAddress_45 }_45 },_45 {_45 "token": {_45 "contract_addr": steakAddress_45 }_45 }_45 ]_45 }_45 }_45 ),_45 "funds": []_45 }_45 }_45 }_45 ],_45 "ibc_channel": "channel..."_45 }_45 }_45 )_45 }_45}
Proposal Example
Our msg parameter contains our final contract call which executes autonomously upon the passage of a successful proposal.
In this example, we deregister the ASTRO-Steak token pair.
_16{_16 "deregister": {_16 "asset_infos": [_16 {_16 "token": {_16 "contract_addr": astroAddress_16 }_16 },_16 {_16 "token": {_16 "contract_addr": steakAddress_16 }_16 }_16 ]_16 }_16}
Encoding our Messages
To encode our message, there are two common options:
- An online base64 encoder
- A custom function
The code in this section uses a custom function (toBase64) to display our binary message - this function needs to be defined elsewhere to be used. The actual string representation of our message would be an encoded binary.
_3let toBase64 = (obj) => {_3 return Buffer.from(JSON.stringify(obj)).toString("base64");_3};
Cw20HookMsg
To submit a proposal, you need to execute a contract message pointing to the send enpoint in the xASTRO token contract.
The send operation takes in a:
contract- Address where xASTRO tokens are being sent to (Assemblycontract)amount- Required deposit to submit a proposal (30,000 xASTRO for mainnet)msgBinary encoded message containing our contract call.
submit_proposal
Our encoded message performs a contract call to the submit_proposal endpoint in the Assembly contract.
submit_proposal takes in the following parameters:
title: Proposal titledescription: Description for the proposallink: Link to forum discussionmessages: Proposal messagesibc_channel: Governance channel
msg
The msg parameter contains a WasmMsg of type Execute.
wasm -> execute requires the following parameters:
contract_addr: Address of the contract our proposal message is pointing to. For example, if you are deregistering a pool, the address would be theFactorycontract address.msg: Binary encoded message containing our contract call.funds: Any funds to send along with our transaction.
Proposal Example
Our msg parameter contains our final contract call which executes autonomously upon the passage of a successful proposal.
In this example, we deregister the ASTRO-Steak token pair.
Encoding our Messages
To encode our message, there are two common options:
- An online base64 encoder
- A custom function
The code in this section uses a custom function (toBase64) to display our binary message - this function needs to be defined elsewhere to be used. The actual string representation of our message would be an encoded binary.
_45{_45 "send": {_45 "contract": assemblyAddress, _45 "amount": "1000", // testnet deposit amount - mainnet = 30,000 xASTRO_45 "msg": toBase64(_45 {_45 "submit_proposal": {_45 "title": "Example proposal",_45 "description": "Example proposal",_45 "link": "https://forum.astroport.fi/",_45 "messages":_45 [_45 {_45 "wasm": {_45 "execute": {_45 "contract_addr": factoryAddress,_45 "msg": toBase64(_45 {_45 "deregister": {_45 "asset_infos": [_45 {_45 "token": {_45 "contract_addr": astroAddress_45 }_45 },_45 {_45 "token": {_45 "contract_addr": steakAddress_45 }_45 }_45 ]_45 }_45 }_45 ),_45 "funds": []_45 }_45 }_45 }_45 ],_45 "ibc_channel": "channel..."_45 }_45 }_45 )_45 }_45}