// https://github.com/RavenProject/Ravencoin/blob/master/src/rpc/rewards.cpp import { IClient } from '@/types'; import { CancelSnapshotRequest, CancelSnapshotRequestResponse, DistributeReward, DistributeRewardResponse, GetDistributeStatus, GetDistributeStatusResponse, GetSnapshotRequest, GetSnapshotRequestResponse, ListSnapshotRequests, ListSnapshotRequestsResponse, RequestSnapshot, RequestSnapshotResponse, } from './types'; /** * @class Rewards * @subcategory Methods */ export class Rewards { private _client: IClient; constructor(client: IClient) { this._client = client; } /** * Schedules a snapshot of the specified asset at the specified block height. * @param params * @param {string} params.asset_name The asset name for which the snapshot will be taken * @param {number} params.block_height The block height at which the snapshot will be take * @returns {Promise} Object - { request_status: 'Added' } */ requestSnapshot({ asset_name, block_height, }: RequestSnapshot): Promise { const data = [asset_name, block_height]; return this._client.request('requestsnapshot', data); } /** * Retrieves the specified snapshot request details. * @param params * @param {string} params.asset_name The asset name for which the snapshot will be taken * @param {number} params.block_height The block height at which the snapshot will be take * @returns {Promise} Returns the asset_name and block_height */ getSnapshotRequest({ asset_name, block_height, }: GetSnapshotRequest): Promise { const data = [asset_name, block_height]; return this._client.request('getsnapshotrequest', data); } /** * List snapshot request details. * @param params * @param {string=} params.asset_name List only requests for a specific asset (default is \"\" for ALL) * @param {number=} params.block_height List only requests for a particular block height (default is 0 for ALL) * @returns {Promise} Array of objects containing asset_name and block_height */ listSnapshotRequests({ asset_name, block_height, }: ListSnapshotRequests): Promise { const data = []; if (asset_name) { data.push(block_height); } if (block_height) { if (!asset_name) { throw new Error('missing asset_name'); } data.push(block_height ?? 0); } return this._client.request('listsnapshotrequests', data); } /** * Cancels the specified snapshot request. * @param params * @param {string} params.asset_name The asset name for which the snapshot will be taken * @param {number} params.block_height The block height at which the snapshot will be take * @returns {Promise} Returns the request status */ cancelSnapshotRequest({ asset_name, block_height, }: CancelSnapshotRequest): Promise { const data = [asset_name, block_height]; return this._client.request('cancelsnapshotrequest', data); } /** * Splits the specified amount of the distribution asset to all owners of asset_name that are not in the optional exclusion_addresses * @param params * @param {string} params.asset_name The reward will be distributed all owners of this asset * @param {number} params.snapshot_height The block height of the ownership snapshot * @param {string} params.distribution_asset_name The name of the asset that will be distributed, or RVN * @param {number} params.gross_distribution_amount The amount of the distribution asset that will be split amongst all owners * @param {string=} params.exception_addresses Ownership addresses that should be excluded * @param {string=} params.change_address If the rewards can't be fully distributed. The change will be sent to this address * @returns {Promise} */ distributeReward({ asset_name, snapshot_height, distribution_asset_name, gross_distribution_amount, exception_addresses, change_address, }: DistributeReward): Promise { const data = [ asset_name, snapshot_height, distribution_asset_name, gross_distribution_amount, ]; if (exception_addresses) { data.push(exception_addresses); } if (change_address) { if (!exception_addresses) { throw new Error('missing exception_addresses'); } data.push(change_address); } return this._client.request('distributereward', data); } /** * Give information about the status of the distribution * @param params * @param {string} parasm.asset_name The reward will be distributed all owners of this asset\n" * @param {number} parasm.snapshot_height The block height of the ownership snapshot\n" * @param {string} parasm.distribution_asset_name The name of the asset that will be distributed, or RVN\n" * @param {number} parasm.gross_distribution_amount The amount of the distribution asset that will be split amongst all owners\n" * @param {string=} parasm.exception_addresses Ownership addresses that should be excluded\n" * @returns {Promise} */ getDistributeStatus({ asset_name, snapshot_height, distribution_asset_name, gross_distribution_amount, exception_addresses, }: GetDistributeStatus): Promise { const data = [ asset_name, snapshot_height, distribution_asset_name, gross_distribution_amount, ]; if (exception_addresses) { data.push(exception_addresses); } return this._client.request('getdistributestatus', data); } }