Token Holder Contract

The TokenHolder contract is essentially used for building a bouns model for distributing bonus’ to whom hold the token.

Actions

CreateScheme

rpc CreateScheme (CreateTokenHolderProfitSchemeInput) returns (google.protobuf.Empty){}

message CreateTokenHolderProfitSchemeInput {
    string symbol = 1;
    sint64 minimum_lock_minutes = 2;
    map<string, sint64> auto_distribute_threshold = 3;
}

It creates a scheme which stores relevant information about dividend in profit contract.

  • CreateTokenHolderProfitSchemeInput
    • symbol: the token that will be used for locking and distributing profits.
    • minimum lock time: minimum lock time before withdrawing.
    • automatic distribution threshold: used when registering for profits (RegisterForProfits).

AddBeneficiary

rpc AddBeneficiary (AddTokenHolderBeneficiaryInput) returns (google.protobuf.Empty){}

message AddTokenHolderBeneficiaryInput {
    aelf.Address beneficiary = 1;
    sint64 shares = 2;
}

Add a Beneficiary to a scheme.

  • AddTokenHolderBeneficiaryInput
    • beneficiary: the new beneficiary.
    • shares: the shares to attribute to this beneficiary.

RemoveBeneficiary

rpc RemoveBeneficiary (RemoveTokenHolderBeneficiaryInput) returns (google.protobuf.Empty){}

message RemoveTokenHolderBeneficiaryInput {
    aelf.Address beneficiary = 1;
    sint64 amount = 2;
}

Remove a Beneficiary from a scheme. Note: this method can be used to remove a beneficiary or update its shares.

  • RemoveTokenHolderBeneficiaryInput
    • beneficiary: the beneficiary to remove or update.
    • amount: 0 to remove the beneficiary. A positive integer, smaller than the current shares.

ContributeProfits

rpc ContributeProfits (ContributeProfitsInput) returns (google.protobuf.Empty){}

message ContributeProfitsInput {
    aelf.Address scheme_manager = 1;
    sint64 amount = 2;
    string symbol = 3;
}

Contribute some token to a scheme.

  • ContributeProfitsInput
    • scheme manager: manager of the scheme; when creating the scheme the Sender is set to manager.
    • amount: the amount of tokens to contribute.
    • symbol: the token to contribute.

DistributeProfits

rpc DistributeProfits (DistributeProfitsInput) returns (google.protobuf.Empty){}

message DistributeProfitsInput {
    aelf.Address scheme_manager = 1;
    string symbol = 2;
}

Distribute a profit plan, which means its beneficiaries are going to get the shares.

  • DistributeProfitsInput
    • scheme manager: manager of the scheme; when creating the scheme the Sender is set to manager.
    • symbol: the token to contribute.

RegisterForProfits

rpc RegisterForProfits (RegisterForProfitsInput) returns (google.protobuf.Empty){}

message RegisterForProfitsInput {
    aelf.Address scheme_manager = 1;
    sint64 amount = 2;
}
  • RegisterForProfitsInput
    • scheme manager: manager of the scheme; when creating the scheme the Sender is set to manager.
    • amount: the amount of tokens to lock (and will correspond to the amount of shares).

Withdraw

rpc Withdraw (aelf.Address) returns (google.protobuf.Empty){}

This method will withdraw the given address for the Token Holder contract, this will also unlock the previously locked tokens.

ClaimProfits

rpc ClaimProfits (ClaimProfitsInput) returns (google.protobuf.Empty){}

message ClaimProfitsInput {
    aelf.Address scheme_manager = 1;
    aelf.Address beneficiary = 2;
    string symbol = 3;
}

The sender withdraws his/her token from the scheme.

  • ClaimProfitsInput
    • scheme manager: manager of the scheme; when creating the scheme the Sender is set to manager.
    • beneficiary: the beneficiary, defaults to the Sender.
    • symbol: the symbol to claim.

View methods

GetScheme

rpc GetScheme (aelf.Address) returns (TokenHolderProfitScheme) { }

message TokenHolderProfitScheme {
    string symbol = 1;
    aelf.Hash scheme_id = 2;
    sint64 period = 3;
    sint64 minimum_lock_minutes = 4;
    map<string, sint64> auto_distribute_threshold = 5;
}

Returns a description of the scheme, wrapped in a TokenHolderProfitScheme object:

  • Returns
    • symbol: the scheme’s token.
    • scheme id: the id of the scheme.
    • period: the current period of the scheme.
    • minimum lock minutes: minimum lock time.
    • automatic distribution threshold: distribution info.