Create Incentive Program
1. Proposal to Outline the Program
You shall outline the Incentive Program as part of the listing proposal. Follow the general listing guideline here.
Read more on the Incentive Program here.
2. Deposit Rewards into Incentive Vault
The Incentive Vault is a governance-controlled account that has no private key. Once you have transferred funds into the Vault, you can then raise a proposal to distribute it via an Incentive Program. For unused funds, you can raise a proposal to transfer them out.
Incentive Vault on Acala:
23M5ttkmR6KcoUwA7NqBjLuMJFWCvobsD9Zy95MgaAECEhit
Incentive Vault on Karura:
qmmNufxeWaAVN8EJK58yYNW1HDcpSLpqGThui55eT3Dfr1a
Please feel free to reach out to us to verify this before full deposit.
3. Submit On-chain Proposal
Once you are ready for a vote, then please follow the guide below to create an on-chain proposal.
The proposer must have enough a minimum deposit of
200 ACA on Acala Network, or have a council member to submit it on behalf
100 KAR on Karura Network, or have a council member to submit it on behalf.
1) Submit preimage
This is to generate and submit the actual on-chain execution (namely preimage).
Go to Polkadot webapp, choose the network you are proposal to e.g. Acala or Karura, then navigate to Governance
- Democracy
The following is a summary of the preimage structure
A) Create an overarching batch call
B) Batch Tx #1: a scheduler call to set a starting time for Incentive Program
create a batch call for the content of the program
C) Batch Tx #1.1: set up Loyalty Bonus Ratio
D) Batch Tx #1.2: set up Reward Amount
E) Batch Tx #2: a scheduler call to set an end time for Incentive Program
create a batch call for the content of the program
F) Batch Tx #2.1: set Loyalty Bonus Ratio to 0
G) Batch Tx #2.2: set Reward Amount to 0
Below is a step by step guide to create the above preimage
A) Create an overarching batch call
Click on Submit preimage
button.
Select utility.batchAll
B) Create Batch Tx #1: a scheduler call to set a starting time for Incentive Program
Click
Add item
Select
scheduler.schedule
for the proposal to execute at a specific block.When: enter block number for the program to be executed. For example, if your token will be listed and start trading next Tuesday at block #365505, then you can schedule the Incentive Program to start at exactly the same time.
Priority: 255 (default, changing to other priority may cause proposal to be rejected for network safety reasons)
Call: select
utility.batchAll
as there will be a couple of transactions included to set up the program
C) Create Batch Tx #1.1: set up Loyalty Bonus Ratio. if a user claims the incentive reward earlier, then this part of the reward will be returned to the reward pool and shared by other liquidity providers
Click Add Item
under the utlity.batchAll
call
Select incentive.updateClaimRewardDeductionRates
Click Add Item
under the incentive.updateClaimRewardDeductionRates
call
ModuleIncentivesPoolId: select
Dex
AcalaPrimitivesCurrencyCurrencyId: select
DexShare
Token A and Token B
If the two tokens are of different types, then they must be entered in the ascending currencyType order
e.g.
Token
shall be entered as Token A,ForeignAsset
shall be entered as Token BCheck the currencyType order here
If the two tokens are of the same type, then they must be entered in the ascending tokenId order.
Token's
tokenId can be looked up hereForeignAsset
tokenId can be looked up here
If you want to list ProjectToken-aUSD, then Token A shall be aUSD, Token B shall be ProjectToken
u128 (Loyalty Bonus Ratio): 18 decimal. For example 40% as 0.4, enter
400000000000000000
D) Batch Tx #1.2: set up Reward Amount that will be distributed every 5 blocks
Click Add Item
under the utlity.batchAll
call
Select incentive.updateIncentiveRewards
Click Add Item
under the incentive.updateIncentiveRewards
call to add Incentive target pool
ModuleIncentivesPoolId: select
Dex
Dex: AcalaPrimitivesCurrencyCurrencyId: select
DexShare
Token A and Token B
If the two tokens are of different types, then they must be entered in the ascending currencyType order
e.g.
Token
shall be entered as Token A,ForeignAsset
shall be entered as Token BCheck the currencyType order here
If the two tokens are of the same type, then they must be entered in the ascending tokenId order.
Token's
tokenId can be looked up hereForeignAsset
tokenId can be looked up here
If you want to list ProjectToken-aUSD, then Token A shall be aUSD, Token B shall be ProjectToken
Click Add Item
again under the incentive.updateIncentiveRewards
call to specify reward token
AcalaPrimitivesCurrencyCurrencyId: select
ForeignAsset
(selectToken
if reward token is native Acala token)ForeignAsset
: enter ForeignAssetId for the reward tokenu128 (Reward Amount): the amount of reward token to be distributed every 5 blocks. the decimal is the same as the reward token decimal.
E) Batch Tx #2: a scheduler call to set an end time for Incentive Program
Click the Add item
under the first utility.batchAll
in Step A)
Select
scheduler.schedule
for the proposal to execute at a specific block.When: enter block number for the program to be ended. After this block number, incentive rewards will no longer be distributed. If users claim rewards after this block, they will receive all their share of the loyalty bonus.
Priority: 255 (default, changing to other priority may cause proposal to be rejected for network safety reasons)
Call: select
utility.batchAll
as there will be a couple of transactions included to end the program
F) Batch Tx #2.1: set Loyalty Bonus Ratio to 0
Click Add Item
under the utlity.batchAll
call in Step E)
Select incentive.updateClaimRewardDeductionRates
Click Add Item
under the incentive.updateClaimRewardDeductionRates
call
ModuleIncentivesPoolId: select
Dex
AcalaPrimitivesCurrencyCurrencyId: select
DexShare
Token A and Token B
Put in the same tokens in the same order as Step C)
u128 (Loyalty Bonus Ratio): enter 0
G) Batch Tx #2.2: set Reward Amount to 0
Click Add Item
under the utlity.batchAll
call in Step E)
Select incentive.updateIncentiveRewards
Click Add Item
under the incentive.updateIncentiveRewards
call to add Incentive target pool
ModuleIncentivesPoolId: select
Dex
Dex: AcalaPrimitivesCurrencyCurrencyId: select
DexShare
Token A and Token B
If the two tokens are of different types, then they must be entered in the ascending currencyType order
e.g.
Token
shall be entered as Token A,ForeignAsset
shall be entered as Token BCheck the currencyType order here
If the two tokens are of the same type, then they must be entered in the ascending tokenId order.
Token's
tokenId can be looked up hereForeignAsset
tokenId can be looked up here
If you want to list ProjectToken-aUSD, then Token A shall be aUSD, Token B shall be ProjectToken
Click Add Item
again under the incentive.updateIncentiveRewards
call to specify reward token
AcalaPrimitivesCurrencyCurrencyId: select
ForeignAsset
(selectToken
if reward token is native Acala token). Same as Step D)ForeignAsset
: Same as Step D)u128 (Reward Amount): enter 0
Verify the preimage
You can copy the encoded call data
and share it with another person to verify all the details.
The encoded call data
from the above example is
0x0302080200c193050000ff0302087805040101000103010000002876e1158d050000000000000000780304010100010301000405010000ca9a3b0000000000000000000000000200801a060000ff0302087805040101000103010000000000000000000000000000000000780304010100010301000405010000000000000000000000000000000000
Paste it into Polkadot webapp - Developer
- Decode
to see execution steps.
Copy the preimage hash and submit the preimage.
2) Submit the Proposal
On the Governance - Democracy
page, click on the Submit Proposal
button, and paste the preimage hash there.
Click the Submit proposal
button, and now your Referendum Proposal is online.
3) Second a Proposal
At any given time, there may be multiple proposals created. Only the most seconded (voted or supported) proposal will be tabled in for the next Referenda vote. Acala and Karura follows the same process as the Polkadot governance framework with respective set of parameters, read more on Polkadot governance process here.
Create All-in-One Proposal
You can also create a proposal that contains both listing and an Incentive Program.
Note: if the Bootstrap did not meet the liquidity requirement, it will not open on the specified block number e.g. #356660. If your incentive program is configured to start on #356660, since no LP tokens are distributed, no rewards will be distributed either.
1) Submit preimage
This is to generate and submit the actual on-chain execution (namely preimage).
Go to Polkadot webapp, choose the network you are proposal to e.g. Acala or Karura, then navigate to Governance
- Democracy
The following is a summary of the preimage structure
A) Create an overarching batch call
B) Batch Tx #1: a scheduler call to list token with Bootstrap Program
C) Batch Tx #2: a scheduler call to set a starting time for Incentive Program
create a batch call for the content of the program
C1) Batch Tx #2.1: set up Loyalty Bonus Ratio
C2) Batch Tx #2.2: set up Reward Amount
D) Batch Tx #3: a scheduler call to set an end time for Incentive Program
create a batch call for the content of the program
D1) Batch Tx #3.1: set Loyalty Bonus Ratio to 0
D2) Batch Tx #3.2: set Reward Amount to 0
The encoded call data
from the above example is as follows
0x03020c02009a70050000ff5b060001050100070010a5d4e8070010a5d4e813000064a7b3b6e00d130000c84e676dc11b02f915000200407e050000ff0302087805040101000103010000a0db215d000000000000000000000078030401010001030100040501000010a5d4e800000000000000000000000200801a060000ff0302087805040101000103010000000000000000000000000000000000780304010100010301000405010000000000000000000000000000000000
Paste it into Polkadot webapp - Developer
- Decode
to see execution steps.
2) Submit a Proposal
Click the Submit proposal
button to submit the preimage call hash.
Last updated