Skip to content

Rust codegen Phantom handling bug #237

Open
@bladyjoker

Description

@bladyjoker

Phantom handling in Rust codegen is not correct I believe

collectPhantomTyArgs :: PC.TyDefs -> PC.ModuleName -> PC.TyName -> [PC.Ty] -> [PC.TyArg] -> [PC.TyArg]

record CreateScriptsRequest a = {
  scripts : Map ScriptHash (ScriptDatum a)
  }
derive Eq (CreateScriptsRequest a)
derive Json (CreateScriptsRequest a)

record ScriptDatum a = {
  scriptType : a,
  -- ^ Protocol specific script type stored in this UTxO
  redeemer : AssetClass
  -- ^ Wallet containing `$redeemer` must sign the 'delete-script' transaction as an authorization method
}
derive Eq (ScriptDatum a)
derive PlutusData (ScriptDatum a)
derive Json (ScriptDatum a)

creates a

#[derive(std::fmt::Debug, std::clone::Clone)]
pub struct CreateScriptsRequest<A>{pub scripts: lbf_prelude::prelude::Map<lbf_plutus::plutus::v1::ScriptHash
                                  ,crate::cardano::extra::scriptstorage::validation::ScriptDatum<A>>,
                                  phantom_A: std::marker::PhantomData<A>}

#[derive(std::fmt::Debug, std::clone::Clone)]
pub struct ScriptDatum<A>{pub script_type: A,
                         pub redeemer: lbf_plutus::plutus::v1::AssetClass}

There's 2 problems here.

  1. There's no actual phantom types in the original LB type def
  2. Even if there was, we have a problem when phantom values are not made pub in Rust

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions