Lp分紅USDT合約系統開發(邏輯說明)| Lp分紅USDT合約系統原始碼示例

v_ch3nguang發表於2023-04-12

LP 分紅也 稱為 加池子分紅,就是 使用者在去中心化交易所新增 流動性之後,可以獲得一些分紅。這個分紅,可以是 USDT ,也可以是 Doge 等等。而且這種分紅,並不是簡單的流動性分紅,而是將分別的代幣直接轉到 LP 的地址。 LP 分紅模式 系統 ,可以鼓勵更多地使用者新增流動性,從而保持幣價的穩定 這種智慧合約應該如何實現 ?具體用到了哪些技術呢?今天就給大家簡單介紹一下這種L p 分紅合約 系統 開發

 

一個分紅方案,包含以下屬性:

一個虛擬地址,作為該分紅方案的總賬地址;

總股份;

尚未發放餘額(可能移除);

當前賬期期數;

子分紅方案資訊;

是否允許直接移除分紅受益人(無視其可領取期數);

分紅保留期數(過期即無法領取);

預設發放總賬上某 token 對應的全部額度;

分紅方案標識;

延遲發放期數;

延遲發放分紅所需快取上的被推遲發放總股份;

管理者。

/// <summary>

/// Create a Scheme of profit distribution.

/// At the first time, the scheme s id is unknown,it may create by transaction id and createdSchemeIds;

/// </summary>

/// <param name= input ></param>

/// <returns></returns>

public override Hash CreateScheme(CreateSchemeInput input)

{

ValidateContractState(State.TokenContract, SmartContractConstants.TokenContractSystemName);

 

if (input.ProfitReceivingDuePeriodCount == 0)

{

     // 為了避免分紅合約 State 資訊過多,設定一個過期時間。

     input.ProfitReceivingDuePeriodCount = ProfitContractConstants.DefaultProfitReceivingDuePeriodCount;

}

 

var manager = input.Manager ?? Context.Sender;

var schemeId = Context.TransactionId;

// Why? Because one transaction may create many profit items via inline transactions.

var createdSchemeIds = State.ManagingSchemeIds[manager]?.SchemeIds;

if (createdSchemeIds != null && createdSchemeIds.Contains(schemeId))

{

     // So we choose this way to avoid profit id conflicts in aforementioned situation.

     schemeId = Hash.FromTwoHashes(schemeId, createdSchemeIds.Last());

}

 

var scheme = GetNewScheme(input, schemeId, manager);

State.SchemeInfos[schemeId] = scheme;

 

var schemeIds = State.ManagingSchemeIds[scheme.Manager];

if (schemeIds == null)

{

     schemeIds = new CreatedSchemeIds

     {

         SchemeIds = {schemeId}

     };

}

else

{

     schemeIds.SchemeIds.Add(schemeId);

}

 

State.ManagingSchemeIds[scheme.Manager] = schemeIds;

 

Context.LogDebug(() => $"Created scheme {State.SchemeInfos[schemeId]}");

 

Context.Fire(new SchemeCreated

{

     SchemeId = scheme.SchemeId,

     Manager = scheme.Manager,

     IsReleaseAllBalanceEveryTimeByDefault = scheme.IsReleaseAllBalanceEveryTimeByDefault,

     ProfitReceivingDuePeriodCount = scheme.ProfitReceivingDuePeriodCount,

     VirtualAddress = scheme.VirtualAddress

});

return schemeId;

}

子分紅方案管理

用以新增和刪除子分紅方案。

rpc AddSubScheme (AddSubSchemeInput) returns (google.protobuf.Empty) {

}

rpc RemoveSubScheme (RemoveSubSchemeInput) returns (google.protobuf.Empty) {

}

 

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70028290/viewspace-2945194/,如需轉載,請註明出處,否則將追究法律責任。

相關文章