Skip to content

Rust codegen Phantom handling bug #237

@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
    No fields configured for issues without a type.

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions