diff --git a/packages/grid_client/scripts/extraFees.ts b/packages/grid_client/scripts/extraFees.ts new file mode 100644 index 0000000000..87a12284d1 --- /dev/null +++ b/packages/grid_client/scripts/extraFees.ts @@ -0,0 +1,26 @@ +import { getClient } from "./client_loader"; +import { log } from "./utils"; + +async function main() { + const grid3 = await getClient(); + + const node = { nodeId: 73 }; + + const extraFees = await grid3.contracts.setDedicatedNodeExtraFee({ ...node, extraFee: 5 }); + + console.log(extraFees); + + grid3.contracts + .getDedicatedNodeExtraFee(node) + .then(res => { + log(res); + }) + .catch(err => { + throw err; + }) + .finally(() => { + grid3.disconnect(); + }); +} + +main(); diff --git a/packages/grid_client/src/modules/contracts.ts b/packages/grid_client/src/modules/contracts.ts index aa7e000d1e..1c9cfa65f3 100644 --- a/packages/grid_client/src/modules/contracts.ts +++ b/packages/grid_client/src/modules/contracts.ts @@ -18,6 +18,7 @@ import { ContractsByTwinId, ContractState, CreateServiceContractModel, + GetDedicatedNodePriceModel, GetServiceContractModel, NameContractCreateModel, NameContractGetModel, @@ -27,6 +28,7 @@ import { ServiceContractApproveModel, ServiceContractBillModel, ServiceContractCancelModel, + SetDedicatedNodeExtraFeesModel, SetServiceContractFeesModel, SetServiceContractMetadataModel, } from "./models"; @@ -93,6 +95,12 @@ class Contracts { return this.client.contracts.getContractIdByName(options); } + @expose + @validateInput + async getDedicatedNodeExtraFee(options: GetDedicatedNodePriceModel) { + return this.client.contracts.getDedicatedNodeExtraFee(options); + } + @expose @validateInput async activeRentContractForNode(options: RentContractGetModel) { @@ -181,6 +189,7 @@ class Contracts { async setMetadataServiceContract(options: SetServiceContractMetadataModel) { return (await this.client.contracts.setServiceMetadata(options)).apply(); } + @expose @validateInput async getServiceContract(options: GetServiceContractModel) { @@ -212,6 +221,13 @@ class Contracts { return contracts; } + @expose + @validateInput + @checkBalance + async setDedicatedNodeExtraFee(options: SetDedicatedNodeExtraFeesModel) { + return (await this.client.contracts.setDedicatedNodeExtraFee(options)).apply(); + } + /** * Get contract consumption per hour in TFT. * diff --git a/packages/grid_client/src/modules/models.ts b/packages/grid_client/src/modules/models.ts index da35dead12..31fe7fe1b5 100644 --- a/packages/grid_client/src/modules/models.ts +++ b/packages/grid_client/src/modules/models.ts @@ -605,6 +605,15 @@ class NetworkGetModel { @Expose() @IsString() @IsNotEmpty() @IsAlphanumeric() @MaxLength(NameLength) name: string; } +class SetDedicatedNodeExtraFeesModel { + @Expose() @IsInt() @IsNotEmpty() @Min(1) nodeId: number; + @Expose() @IsInt() @IsNotEmpty() @Min(1) extraFee: number; +} + +class GetDedicatedNodePriceModel { + @Expose() @IsInt() @IsNotEmpty() @Min(1) nodeId: number; +} + export { AlgorandAccountCreateModel, AlgorandAccountInitModel, @@ -720,4 +729,6 @@ export { GetServiceContractModel, NetworkGetModel, NodeGetModel, + SetDedicatedNodeExtraFeesModel, + GetDedicatedNodePriceModel, }; diff --git a/packages/tfchain_client/src/contracts.ts b/packages/tfchain_client/src/contracts.ts index e7c16f721c..5f3188bac5 100644 --- a/packages/tfchain_client/src/contracts.ts +++ b/packages/tfchain_client/src/contracts.ts @@ -146,6 +146,12 @@ class QueryContracts { const res = await this.client.api.query.smartContractModule.serviceContracts(options.serviceId); return res.toPrimitive() as unknown as ServiceContract; } + + @checkConnection + async getDedicatedNodeExtraFee(options: GetDedicatedNodePriceOptions): Promise { + const res = await this.client.api.query.smartContractModule.dedicatedNodesExtraFee(options.nodeId); + return res.toPrimitive() as number; + } } export interface CreateNodeOptions { @@ -188,6 +194,14 @@ export interface SetServiceFeesOptions { baseFee: number; variableFee: number; } +export interface SetDedicatedNodeExtraFeesOptions { + nodeId: number; + extraFee: number; +} + +export interface GetDedicatedNodePriceOptions { + nodeId: number; +} export interface SetServiceMetadataOptions { serviceId: number; @@ -308,6 +322,12 @@ class Contracts extends QueryContracts { return this.client.patchExtrinsic(extrinsic); } + @checkConnection + async setDedicatedNodeExtraFee(options: SetDedicatedNodeExtraFeesOptions) { + const extrinsic = this.client.api.tx.smartContractModule.setDedicatedNodeExtraFee(options.nodeId, options.extraFee); + return this.client.patchExtrinsic(extrinsic); + } + @checkConnection async setServiceMetadata(options: SetServiceMetadataOptions) { const extrinsic = await this.client.api.tx.smartContractModule.serviceContractSetMetadata(