Skip to content

Commit 085defd

Browse files
authored
Merge pull request #102 from oasisprotocol/lw/offer
Remove offers that don't fit template requirements and select smallest
2 parents e27e747 + fc2f67a commit 085defd

File tree

3 files changed

+55
-5
lines changed

3 files changed

+55
-5
lines changed

src/nexus/generated/api.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import GetRuntimeRoflmarketProvidersAddressInstancesIdMutator from '../replaceNe
6666
import GetRuntimeRoflmarketInstancesMutator from '../replaceNetworkWithBaseURL'
6767
import GetLayerStatsTxVolumeMutator from '../replaceNetworkWithBaseURL'
6868
import GetLayerStatsActiveAccountsMutator from '../replaceNetworkWithBaseURL'
69+
import * as oasisRT from '@oasisprotocol/client-rt'
6970
export type Layer = (typeof Layer)[keyof typeof Layer]
7071

7172
export const Layer = {
@@ -1837,7 +1838,12 @@ export type RoflMarketProviderList = List & RoflMarketProviderListAllOf
18371838
/**
18381839
* The offered resources by this offer.
18391840
*/
1840-
export type RoflMarketOfferResources = { [key: string]: unknown }
1841+
export type RoflMarketOfferResources = {
1842+
cpus: number /* manually changed */
1843+
memory: number /* manually changed */
1844+
storage: number /* manually changed */
1845+
tee: oasisRT.types.RoflmarketTeeType /* manually changed */
1846+
}
18411847

18421848
/**
18431849
* The payment configuration for this offer.

src/pages/CreateApp/BuildStep.tsx

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ type AgentStepProps = {
2525
build?: BuildFormData
2626
setAppDataForm: (data: { build: BuildFormData }) => void
2727
selectedTemplateName?: string
28+
selectedTemplateRequirements: {
29+
tee: 'tdx' | 'sgx' | undefined
30+
cpus: number | undefined
31+
memory: number | undefined
32+
storage: number | undefined
33+
}
2834
}
2935

3036
export const BuildStep: FC<AgentStepProps> = ({
@@ -33,6 +39,7 @@ export const BuildStep: FC<AgentStepProps> = ({
3339
build,
3440
setAppDataForm,
3541
selectedTemplateName,
42+
selectedTemplateRequirements,
3643
}) => {
3744
const network = useNetwork()
3845
const providersQuery = useGetRuntimeRoflmarketProviders(network, 'sapphire')
@@ -70,9 +77,40 @@ export const BuildStep: FC<AgentStepProps> = ({
7077
'sapphire',
7178
providerValue,
7279
)
73-
const offers = providersOffersQuery.data?.data.offers.filter(
74-
offer => offer.resources.tee === oasisRT.types.RoflmarketTeeType.TDX,
75-
)
80+
const offers = providersOffersQuery.data?.data.offers
81+
.filter(offer => {
82+
if (
83+
selectedTemplateRequirements.tee === 'tdx' &&
84+
offer.resources.tee !== oasisRT.types.RoflmarketTeeType.TDX
85+
)
86+
return false
87+
if (
88+
selectedTemplateRequirements.tee === 'sgx' &&
89+
offer.resources.tee !== oasisRT.types.RoflmarketTeeType.SGX
90+
)
91+
return false
92+
if (selectedTemplateRequirements.cpus && offer.resources.cpus < selectedTemplateRequirements.cpus)
93+
return false
94+
if (selectedTemplateRequirements.memory && offer.resources.memory < selectedTemplateRequirements.memory)
95+
return false
96+
if (
97+
selectedTemplateRequirements.storage &&
98+
offer.resources.storage < selectedTemplateRequirements.storage
99+
)
100+
return false
101+
return true
102+
})
103+
.sort(sortOffersByPaymentTerms)
104+
105+
useEffect(() => {
106+
form.resetField('resources') // Clear offer selection if provider changes
107+
}, [providerValue, form])
108+
109+
useEffect(() => {
110+
if (!form.getValues('resources') && offers && offers.length > 0) {
111+
form.setValue('resources', offers[0].id) // Preselect smallest offer
112+
}
113+
}, [offers, form])
76114

77115
// API terms are like 1=hour, 2=month, 3=year, but only hour is mandatory
78116
// Testnet provider provide only hourly terms
@@ -164,7 +202,7 @@ export const BuildStep: FC<AgentStepProps> = ({
164202
render={({ field, fieldState }) => (
165203
<>
166204
<RadioGroup onValueChange={field.onChange} value={field.value} className="space-y-2">
167-
{offers?.sort(sortOffersByPaymentTerms).map(offer => (
205+
{offers?.map(offer => (
168206
<BuildStepOffers
169207
key={offer.id}
170208
offer={offer}

src/pages/CreateApp/index.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,12 @@ export const Create: FC = () => {
6767
build={appData?.build}
6868
setAppDataForm={setAppDataForm}
6969
selectedTemplateName={selectedTemplate?.name}
70+
selectedTemplateRequirements={{
71+
tee: selectedTemplate?.yaml.rofl.tee as 'tdx' | 'sgx' | undefined,
72+
cpus: selectedTemplate?.yaml.rofl.resources.cpus as number | undefined,
73+
memory: selectedTemplate?.yaml.rofl.resources.memory as number | undefined,
74+
storage: selectedTemplate?.yaml.rofl.resources.storage.size as number | undefined,
75+
}}
7076
/>
7177
)}
7278
{currentStep === 4 && (

0 commit comments

Comments
 (0)