Staking/Unstaking ASTRO-xASTRO
Overview
A user can stake their ASTRO tokens into the Staking
contract in exchange for xASTRO. by calling the enter
endpoint in the Staking contract. The enter
operation should be executed from inside the ASTRO contract.
Users can unstake their xASTRO tokens by calling leave
endpoint in the Staking contract. leave
claims the initial staked amount + accrued ASTRO since staking.
Staking ASTRO
Cw20HookMsg
To stake our ASTRO tokens, you need to execute a contract message pointing to the send
enpoint in the ASTRO token
contract.
The send operation takes in a:
contract
- Address where ASTRO tokens are being sent to (Staking contract)amount
- Amount to send/stakemsg
- Binary encoded message containing our contract call.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "100000000", _11 "msg": toBase64(_11 {_11 "enter": {}_11 }_11 )_11 }_11}
enter
Our encoded message performs a contract call to the enter
endpoint in the Staking contract.
Deposits ASTRO in the xASTRO staking contract.
No additional parameters are required.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "100000000", _11 "msg": toBase64(_11 {_11 "enter": {}_11 }_11 )_11 }_11}
Encoding our Msg
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.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "100000000", _11 "msg": toBase64(_11 {_11 "enter": {}_11 }_11 )_11 }_11}
toBase64
The code in this section is an example of an enter
message using feather.js to define our custom function and encode our message.
_18const astroAddress = 'terra167dsqkh2alurx997wmycw9ydkyu54gyswe3ygmrs4lwume3vmwks8ruqnv';_18const stakingAddress = 'terra19t8ffmz6q2rdm3rllyksd6sex6n650a4anttzzvz9mf8mqr4nkrq44cyu6';_18_18const stake = new MsgExecuteContract(_18 wallet.key.accAddress('terra'),_18 astroAddress,_18 {_18 "send": {_18 "contract": stakingAddress, _18 "amount": "100000000", _18 "msg": toBase64(_18 {_18 "enter": {}_18 }_18 )_18 }_18 }_18)
Cw20HookMsg
To stake our ASTRO tokens, you need to execute a contract message pointing to the send
enpoint in the ASTRO token
contract.
The send operation takes in a:
contract
- Address where ASTRO tokens are being sent to (Staking contract)amount
- Amount to send/stakemsg
- Binary encoded message containing our contract call.
enter
Our encoded message performs a contract call to the enter
endpoint in the Staking contract.
Deposits ASTRO in the xASTRO staking contract.
No additional parameters are required.
Encoding our Msg
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.
toBase64
The code in this section is an example of an enter
message using feather.js to define our custom function and encode our message.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "100000000", _11 "msg": toBase64(_11 {_11 "enter": {}_11 }_11 )_11 }_11}
Unstaking xASTRO
Cw20HookMsg
To unstake our xASTRO tokens, 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 withdrawn from to (Staking contract)amount
- Amount to send (unstake)msg
- Binary encoded message containing our contract call.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "50000000", _11 "msg": toBase64(_11 {_11 "leave": {}_11 }_11 )_11 }_11}
leave
Our encoded message performs a contract call to the leave
endpoint in the Staking contract.
This burns xASTRO and unstakes underlying ASTRO (initial staked amount + accrued ASTRO since staking).
No additional parameters are required.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "50000000", _11 "msg": toBase64(_11 {_11 "leave": {}_11 }_11 )_11 }_11}
Encoding our Msg
The same logic for encoding messages is used to enter and leave the staking contract. Refer to the section above for more information on this topic.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "50000000", _11 "msg": toBase64(_11 {_11 "leave": {}_11 }_11 )_11 }_11}
Cw20HookMsg
To unstake our xASTRO tokens, 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 withdrawn from to (Staking contract)amount
- Amount to send (unstake)msg
- Binary encoded message containing our contract call.
_11{_11 "send": {_11 "contract": stakingAddress, _11 "amount": "50000000", _11 "msg": toBase64(_11 {_11 "leave": {}_11 }_11 )_11 }_11}