use Credential instead of PubKeyHash everywhere
This commit is contained in:
parent
3ea03a6665
commit
44f3ddf00d
15 changed files with 948 additions and 865 deletions
|
|
@ -90,6 +90,7 @@ import Plutarch.Lift (PLifted, PUnsafeLiftDecl)
|
|||
import PlutusLedgerApi.V1.Value (AssetClass (..))
|
||||
import PlutusLedgerApi.V1.Value qualified as Value
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
DatumHash,
|
||||
POSIXTime,
|
||||
POSIXTimeRange,
|
||||
|
|
@ -241,8 +242,8 @@ data Validity = Validity
|
|||
-- * Proposal
|
||||
|
||||
-- | Mock cosigners.
|
||||
mkCosigners :: NumStake -> [PubKeyHash]
|
||||
mkCosigners = sort . flip take pubKeyHashes
|
||||
mkCosigners :: NumStake -> [Credential]
|
||||
mkCosigners = sort . fmap PubKeyCredential . flip take pubKeyHashes
|
||||
|
||||
-- | Allocate the result tag for the effect at the given index.
|
||||
outcomeIdxToResultTag :: Index -> ResultTag
|
||||
|
|
@ -347,7 +348,7 @@ proposalRedeemer = AdvanceProposal
|
|||
-- * Stake
|
||||
|
||||
-- Mock owners of the stakes.
|
||||
mkStakeOwners :: NumStake -> [PubKeyHash]
|
||||
mkStakeOwners :: NumStake -> [Credential]
|
||||
mkStakeOwners = mkCosigners
|
||||
|
||||
-- | Create the input stake datums given the parameters.
|
||||
|
|
@ -356,7 +357,7 @@ mkStakeInputDatums ps =
|
|||
let template =
|
||||
StakeDatum
|
||||
{ stakedAmount = Tagged ps.perStakeGTs
|
||||
, owner = ""
|
||||
, owner = PubKeyCredential ""
|
||||
, delegatedTo = Nothing
|
||||
, lockedBy = []
|
||||
}
|
||||
|
|
@ -399,9 +400,9 @@ mkStakeBuilder ps =
|
|||
ps.perStakeGTs
|
||||
perStake idx i o =
|
||||
let withSig =
|
||||
if ps.transactionSignedByOwners
|
||||
then signedWith i.owner
|
||||
else mempty
|
||||
case (i.owner, ps.transactionSignedByOwners) of
|
||||
(PubKeyCredential owner, True) -> signedWith owner
|
||||
_ -> mempty
|
||||
in mconcat
|
||||
[ withSig
|
||||
, input $
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ import Plutarch.Context (
|
|||
)
|
||||
import PlutusLedgerApi.V1.Value qualified as Value
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
POSIXTimeRange,
|
||||
PubKeyHash,
|
||||
TxOutRef (..),
|
||||
|
|
@ -77,7 +78,7 @@ import Test.Util (CombinableBuilder, closedBoundedInterval, mkSpending, pubKeyHa
|
|||
|
||||
-- | Parameters for cosigning a proposal.
|
||||
data Parameters = Parameters
|
||||
{ newCosigners :: [PubKeyHash]
|
||||
{ newCosigners :: [Credential]
|
||||
-- ^ New cosigners to be added, and the owners of the generated stakes.
|
||||
, proposalStatus :: ProposalStatus
|
||||
-- ^ Current state of the proposal.
|
||||
|
|
@ -108,7 +109,7 @@ mkProposalInputDatum ps =
|
|||
{ proposalId = ProposalId 0
|
||||
, effects = effects
|
||||
, status = ps.proposalStatus
|
||||
, cosigners = [proposalCreator]
|
||||
, cosigners = [PubKeyCredential proposalCreator]
|
||||
, thresholds = def
|
||||
, votes = emptyVotesFor effects
|
||||
, timingConfig = def
|
||||
|
|
@ -128,7 +129,9 @@ mkProposalOutputDatum ps =
|
|||
|
||||
-- | Create all the input stakes given the parameters.
|
||||
mkStakeInputDatums :: Parameters -> [StakeDatum]
|
||||
mkStakeInputDatums = fmap (\pk -> StakeDatum perStakedGTs pk Nothing []) . newCosigners
|
||||
mkStakeInputDatums =
|
||||
fmap (\pk -> StakeDatum perStakedGTs pk Nothing [])
|
||||
. newCosigners
|
||||
|
||||
-- | Create a 'TxInfo' that tries to cosign a proposal with new cosigners.
|
||||
cosign :: forall b. CombinableBuilder b => Parameters -> b
|
||||
|
|
@ -172,7 +175,9 @@ cosign ps = builder
|
|||
, withValue stakeValue
|
||||
, withDatum stakeOutputDatum
|
||||
]
|
||||
, signedWith stakeDatum.owner
|
||||
, case stakeDatum.owner of
|
||||
PubKeyCredential k -> signedWith k
|
||||
_ -> mempty
|
||||
]
|
||||
)
|
||||
$ zip
|
||||
|
|
@ -239,7 +244,7 @@ mkStakeRef idx =
|
|||
|
||||
-- | Create a proposal redeemer which cosigns with the new cosginers.
|
||||
mkProposalRedeemer :: Parameters -> ProposalRedeemer
|
||||
mkProposalRedeemer (sort . newCosigners -> cs) = Cosign cs
|
||||
mkProposalRedeemer = Cosign . sort . newCosigners
|
||||
|
||||
-- | Stake redeemer for cosuming all the stakes generated in the module.
|
||||
stakeRedeemer :: StakeRedeemer
|
||||
|
|
@ -252,7 +257,7 @@ validCosignNParameters :: Int -> Parameters
|
|||
validCosignNParameters n
|
||||
| n > 0 =
|
||||
Parameters
|
||||
{ newCosigners = take n pubKeyHashes
|
||||
{ newCosigners = take n (fmap PubKeyCredential pubKeyHashes)
|
||||
, proposalStatus = Draft
|
||||
, alterOutputStakes = False
|
||||
}
|
||||
|
|
@ -266,7 +271,7 @@ validCosignNParameters n
|
|||
duplicateCosignersParameters :: Parameters
|
||||
duplicateCosignersParameters =
|
||||
Parameters
|
||||
{ newCosigners = [proposalCreator]
|
||||
{ newCosigners = [PubKeyCredential proposalCreator]
|
||||
, proposalStatus = Draft
|
||||
, alterOutputStakes = False
|
||||
}
|
||||
|
|
@ -281,7 +286,7 @@ statusNotDraftCosignNParameters n =
|
|||
map
|
||||
( \st ->
|
||||
Parameters
|
||||
{ newCosigners = take n pubKeyHashes
|
||||
{ newCosigners = take n (fmap PubKeyCredential pubKeyHashes)
|
||||
, proposalStatus = st
|
||||
, alterOutputStakes = False
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,9 +61,9 @@ import Plutarch.Context (
|
|||
)
|
||||
import PlutusLedgerApi.V1.Value qualified as Value
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
POSIXTime (POSIXTime),
|
||||
POSIXTimeRange,
|
||||
PubKeyHash,
|
||||
TxOutRef (TxOutRef),
|
||||
always,
|
||||
)
|
||||
|
|
@ -121,14 +121,14 @@ stakedGTs :: Tagged _ Integer
|
|||
stakedGTs = 5
|
||||
|
||||
-- | The owner of the stake.
|
||||
stakeOwner :: PubKeyHash
|
||||
stakeOwner = signer
|
||||
stakeOwner :: Credential
|
||||
stakeOwner = PubKeyCredential signer
|
||||
|
||||
{- | The invalid stake owner. If the 'alterOutputStakeOwner' is set to true,
|
||||
the output stake owner will be set to this.
|
||||
-}
|
||||
alteredStakeOwner :: PubKeyHash
|
||||
alteredStakeOwner = signer2
|
||||
alteredStakeOwner :: Credential
|
||||
alteredStakeOwner = PubKeyCredential signer2
|
||||
|
||||
-- | Locks the stake that the input stake already has.
|
||||
defLocks :: [ProposalLock]
|
||||
|
|
@ -247,7 +247,7 @@ mkProposalStartingTime ps =
|
|||
else ProposalStartingTime 0
|
||||
|
||||
-- | Who should be the 'owner' of the output stake.
|
||||
mkOwner :: Parameters -> PubKeyHash
|
||||
mkOwner :: Parameters -> Credential
|
||||
mkOwner ps =
|
||||
if ps.alterOutputStakeOwner
|
||||
then alteredStakeOwner
|
||||
|
|
@ -288,7 +288,9 @@ createProposal ps = builder
|
|||
|
||||
withSig =
|
||||
if ps.stakeOwnerSignsTheTransaction
|
||||
then signedWith stakeOwner
|
||||
then case stakeOwner of
|
||||
PubKeyCredential sig -> signedWith sig
|
||||
_ -> mempty
|
||||
else mempty
|
||||
|
||||
---
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ import Plutarch.Context (
|
|||
)
|
||||
import PlutusLedgerApi.V1.Value qualified as Value
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
PubKeyHash,
|
||||
TxOutRef (..),
|
||||
)
|
||||
|
|
@ -175,7 +176,7 @@ mkStakeInputDatum :: Parameters -> StakeDatum
|
|||
mkStakeInputDatum ps =
|
||||
StakeDatum
|
||||
{ stakedAmount = defStakedGTs
|
||||
, owner = defOwner
|
||||
, owner = PubKeyCredential defOwner
|
||||
, delegatedTo = Nothing
|
||||
, lockedBy = mkInputStakeLocks ps
|
||||
}
|
||||
|
|
@ -214,7 +215,7 @@ mkProposalDatumPair params pid =
|
|||
{ proposalId = pid
|
||||
, effects = emptyEffectFor votesTemplate
|
||||
, status = params.proposalStatus
|
||||
, cosigners = [defOwner]
|
||||
, cosigners = [PubKeyCredential defOwner]
|
||||
, thresholds = def
|
||||
, votes = inputVotes
|
||||
, timingConfig = def
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ import Plutarch.Context (
|
|||
)
|
||||
import PlutusLedgerApi.V1.Value qualified as Value
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
PubKeyHash,
|
||||
TxOutRef (TxOutRef),
|
||||
)
|
||||
|
|
@ -109,7 +110,7 @@ proposalInputDatum =
|
|||
, (ResultTag 1, AssocMap.empty)
|
||||
]
|
||||
, status = VotingReady
|
||||
, cosigners = [stakeOwner]
|
||||
, cosigners = [PubKeyCredential stakeOwner]
|
||||
, thresholds = def
|
||||
, votes = ProposalVotes initialVotes
|
||||
, timingConfig = def
|
||||
|
|
@ -133,10 +134,10 @@ mkStakeInputDatum :: Parameters -> StakeDatum
|
|||
mkStakeInputDatum params =
|
||||
StakeDatum
|
||||
{ stakedAmount = Tagged params.voteCount
|
||||
, owner = stakeOwner
|
||||
, owner = PubKeyCredential stakeOwner
|
||||
, delegatedTo =
|
||||
if params.voteAsDelegate
|
||||
then Just delegate
|
||||
then Just (PubKeyCredential delegate)
|
||||
else Nothing
|
||||
, lockedBy = existingLocks
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ import PlutusLedgerApi.V1.Value qualified as Value (
|
|||
singleton,
|
||||
)
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
Datum (Datum),
|
||||
ScriptContext (..),
|
||||
ScriptPurpose (Minting),
|
||||
|
|
@ -68,7 +69,7 @@ stakeCreation :: ScriptContext
|
|||
stakeCreation =
|
||||
let st = Value.assetClassValue stakeAssetClass 1 -- Stake ST
|
||||
datum :: StakeDatum
|
||||
datum = StakeDatum 424242424242 signer Nothing []
|
||||
datum = StakeDatum 424242424242 (PubKeyCredential signer) Nothing []
|
||||
|
||||
builder :: MintingBuilder
|
||||
builder =
|
||||
|
|
@ -90,7 +91,7 @@ stakeCreation =
|
|||
stakeCreationWrongDatum :: ScriptContext
|
||||
stakeCreationWrongDatum =
|
||||
let datum :: Datum
|
||||
datum = Datum (toBuiltinData $ StakeDatum 4242424242424242 signer Nothing []) -- Too much GT
|
||||
datum = Datum (toBuiltinData $ StakeDatum 4242424242424242 (PubKeyCredential signer) Nothing []) -- Too much GT
|
||||
in ScriptContext
|
||||
{ scriptContextTxInfo = stakeCreation.scriptContextTxInfo {txInfoData = AssocMap.fromList [("", datum)]}
|
||||
, scriptContextPurpose = Minting stakeSymbol
|
||||
|
|
@ -122,7 +123,7 @@ stakeDepositWithdraw :: DepositWithdrawExample -> ScriptContext
|
|||
stakeDepositWithdraw config =
|
||||
let st = Value.assetClassValue stakeAssetClass 1 -- Stake ST
|
||||
stakeBefore :: StakeDatum
|
||||
stakeBefore = StakeDatum config.startAmount signer Nothing []
|
||||
stakeBefore = StakeDatum config.startAmount (PubKeyCredential signer) Nothing []
|
||||
|
||||
stakeAfter :: StakeDatum
|
||||
stakeAfter = stakeBefore {stakedAmount = stakeBefore.stakedAmount + config.delta}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ import Plutarch.Context (
|
|||
)
|
||||
import PlutusLedgerApi.V1.Value qualified as Value
|
||||
import PlutusLedgerApi.V2 (
|
||||
Credential (PubKeyCredential),
|
||||
PubKeyHash,
|
||||
ScriptContext,
|
||||
TxOutRef (TxOutRef),
|
||||
|
|
@ -73,7 +74,7 @@ data Parameters = Parameters
|
|||
|
||||
-- | Select the correct stake redeemer based on the existence of the new delegate.
|
||||
mkStakeRedeemer :: Parameters -> StakeRedeemer
|
||||
mkStakeRedeemer (newDelegate -> d) = maybe ClearDelegate DelegateTo d
|
||||
mkStakeRedeemer = maybe ClearDelegate (DelegateTo . PubKeyCredential) . newDelegate
|
||||
|
||||
-- | The owner of the input stake.
|
||||
stakeOwner :: PubKeyHash
|
||||
|
|
@ -84,8 +85,8 @@ mkStakeInputDatum :: Parameters -> StakeDatum
|
|||
mkStakeInputDatum ps =
|
||||
StakeDatum
|
||||
{ stakedAmount = 5
|
||||
, owner = stakeOwner
|
||||
, delegatedTo = ps.existingDelegate
|
||||
, owner = PubKeyCredential stakeOwner
|
||||
, delegatedTo = PubKeyCredential <$> ps.existingDelegate
|
||||
, lockedBy = []
|
||||
}
|
||||
|
||||
|
|
@ -105,12 +106,14 @@ setDelegate ps = buildSpending' builder
|
|||
else stakeInput.stakedAmount
|
||||
in stakeInput
|
||||
{ stakedAmount = stakedAmount
|
||||
, delegatedTo = ps.newDelegate
|
||||
, delegatedTo = PubKeyCredential <$> ps.newDelegate
|
||||
}
|
||||
|
||||
signer =
|
||||
if ps.signedByOwner
|
||||
then stakeInput.owner
|
||||
then case stakeInput.owner of
|
||||
PubKeyCredential c -> c
|
||||
_ -> signer2
|
||||
else signer2
|
||||
|
||||
st = Value.assetClassValue stakeAssetClass 1 -- Stake ST
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue