MCPcopy Create free account
hub / github.com/akash-network/provider / CalculatePrice

Method CalculatePrice

bidengine/shellscript.go:130–191  ·  view source on GitHub ↗
(ctx context.Context, r Request)

Source from the content-addressed store, hash-verified

128}
129
130func (ssp shellScriptPricing) CalculatePrice(ctx context.Context, r Request) (sdk.DecCoin, error) {
131 d := newDataForScript(r)
132
133 buf := &bytes.Buffer{}
134 if err := json.NewEncoder(buf).Encode(&d); err != nil {
135 return sdk.DecCoin{}, err
136 }
137
138 // Take 1 from the channel
139 <-ssp.processLimit
140 defer func() {
141 // Always return it when this function is complete
142 ssp.processLimit <- 0
143 }()
144
145 processCtx, cancel := context.WithTimeout(ctx, ssp.runtimeLimit)
146 defer cancel()
147 cmd := exec.CommandContext(processCtx, ssp.path) // nolint: gosec
148 cmd.Stdin = buf
149 outputBuf := &bytes.Buffer{}
150 cmd.Stdout = outputBuf
151 stderrBuf := &bytes.Buffer{}
152 cmd.Stderr = stderrBuf
153
154 denom := r.GSpec.Price().Denom
155
156 subprocEnv := os.Environ()
157 subprocEnv = append(subprocEnv, fmt.Sprintf("AKASH_OWNER=%s", r.Owner))
158 subprocEnv = append(subprocEnv, fmt.Sprintf("AKASH_DENOM=%s", denom))
159 cmd.Env = subprocEnv
160
161 err := cmd.Run()
162
163 if ctxErr := processCtx.Err(); ctxErr != nil {
164 return sdk.DecCoin{}, ctxErr
165 }
166
167 if err != nil {
168 return sdk.DecCoin{}, fmt.Errorf("%w: script failure %s", err, stderrBuf.String())
169 }
170
171 // Decode the result
172 valueStr := strings.TrimSpace(outputBuf.String())
173 if valueStr == "" {
174 return sdk.DecCoin{}, fmt.Errorf("bid script must return amount:%w%w", io.EOF, ErrBidQuantityInvalid)
175 }
176
177 price, err := sdkmath.LegacyNewDecFromStr(valueStr)
178 if err != nil {
179 return sdk.DecCoin{}, fmt.Errorf("%w%w", err, ErrBidQuantityInvalid)
180 }
181
182 if price.IsZero() {
183 return sdk.DecCoin{}, ErrBidZero
184 }
185
186 if price.IsNegative() {
187 return sdk.DecCoin{}, ErrBidQuantityInvalid

Callers

nothing calls this directly

Calls 3

newDataForScriptFunction · 0.85
RunMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected