@@ -29,6 +29,7 @@ import com.digitalasset.daml.lf.speedy.Speedy.Machine
2929import com .digitalasset .daml .lf .speedy .{Pretty , SError , SValue , TraceLog , WarningLog }
3030import com .digitalasset .daml .lf .transaction .{
3131 FatContractInstance ,
32+ FatContractInstanceImpl ,
3233 GlobalKey ,
3334 IncompleteTransaction ,
3435 Node ,
@@ -39,7 +40,6 @@ import com.digitalasset.daml.lf.transaction.{
3940import com .digitalasset .daml .lf .value .Value
4041import com .digitalasset .daml .lf .value .Value .ContractId
4142import com .daml .nonempty .NonEmpty
42-
4343import com .digitalasset .canton .logging .{LoggingContextWithTrace , NamedLoggerFactory }
4444import com .digitalasset .canton .ledger .localstore .InMemoryUserManagementStore
4545import scalaz .OneAnd
@@ -119,8 +119,24 @@ class IdeLedgerClient(
119119 private val userManagementStore =
120120 new InMemoryUserManagementStore (createAdmin = false , namedLoggerFactory)
121121
122- private [this ] def blob (contract : FatContractInstance ): Bytes =
123- Bytes .fromByteString(TransactionCoder .encodeFatContractInstance(contract).toOption.get)
122+ private [this ] def blob (contract : FatContractInstance ): Bytes = {
123+ val valueTranslator =
124+ new ValueTranslator (compiledPackages.pkgInterface, requireV1ContractIdSuffix = false )
125+ valueTranslator.translateValue(TTyCon (contract.templateId), contract.createArg) match {
126+ case Left (_) =>
127+ sys.error(" blob: translateValue failed" )
128+ case Right (sArg) =>
129+ val normalizedArg = sArg.toNormalizedValue(contract.version)
130+ val normalizedContract =
131+ contract.asInstanceOf [FatContractInstanceImpl ].copy(createArg = normalizedArg)
132+ Bytes .fromByteString(
133+ TransactionCoder
134+ .encodeFatContractInstance(normalizedContract)
135+ .toOption
136+ .get
137+ )
138+ }
139+ }
124140
125141 private [this ] def blob (create : Node .Create , createAt : Time .Timestamp ): Bytes =
126142 blob(FatContractInstance .fromCreateNode(create, createAt, Bytes .Empty ))
0 commit comments