@@ -178,17 +178,29 @@ func (k Keeper) create(ctx context.Context, creator sdk.AccAddress, wasmCode []b
178
178
}
179
179
180
180
gasLeft := k .runtimeGasForContract (sdkCtx )
181
- checksum , gasUsed , err := k .wasmVM .StoreCode (wasmCode , gasLeft )
181
+ var gasUsed uint64
182
+ isSimulation := sdkCtx .ExecMode () == sdk .ExecModeSimulate
183
+ if isSimulation {
184
+ // only simulate storing the code, no files are written
185
+ checksum , gasUsed , err = k .wasmVM .SimulateStoreCode (wasmCode , gasLeft )
186
+ } else {
187
+ checksum , gasUsed , err = k .wasmVM .StoreCode (wasmCode , gasLeft )
188
+ }
182
189
k .consumeRuntimeGas (sdkCtx , gasUsed )
183
190
if err != nil {
184
191
return 0 , checksum , errorsmod .Wrap (types .ErrCreateFailed , err .Error ())
185
192
}
186
- report , err := k .wasmVM .AnalyzeCode (checksum )
187
- if err != nil {
188
- return 0 , checksum , errorsmod .Wrap (types .ErrCreateFailed , err .Error ())
193
+ // simulation gets default value for capabilities
194
+ var requiredCapabilities string
195
+ if ! isSimulation {
196
+ report , err := k .wasmVM .AnalyzeCode (checksum )
197
+ if err != nil {
198
+ return 0 , checksum , errorsmod .Wrap (types .ErrCreateFailed , err .Error ())
199
+ }
200
+ requiredCapabilities = report .RequiredCapabilities
189
201
}
190
202
codeID = k .mustAutoIncrementID (sdkCtx , types .KeySequenceCodeID )
191
- k .Logger (sdkCtx ).Debug ("storing new contract" , "capabilities" , report . RequiredCapabilities , "code_id" , codeID )
203
+ k .Logger (sdkCtx ).Debug ("storing new contract" , "capabilities" , requiredCapabilities , "code_id" , codeID )
192
204
codeInfo := types .NewCodeInfo (checksum , creator , * instantiateAccess )
193
205
k .mustStoreCodeInfo (sdkCtx , codeID , codeInfo )
194
206
@@ -197,7 +209,7 @@ func (k Keeper) create(ctx context.Context, creator sdk.AccAddress, wasmCode []b
197
209
sdk .NewAttribute (types .AttributeKeyChecksum , hex .EncodeToString (checksum )),
198
210
sdk .NewAttribute (types .AttributeKeyCodeID , strconv .FormatUint (codeID , 10 )), // last element to be compatible with scripts
199
211
)
200
- for _ , f := range strings .Split (report . RequiredCapabilities , "," ) {
212
+ for _ , f := range strings .Split (requiredCapabilities , "," ) {
201
213
evt .AppendAttributes (sdk .NewAttribute (types .AttributeKeyRequiredCapability , strings .TrimSpace (f )))
202
214
}
203
215
sdkCtx .EventManager ().EmitEvent (evt )
0 commit comments