I'm thinking about making a parameterised contract between two users. User A can be anyone i.e. any customer, But User B should always be the company. I want to make it so that the validator only validates if the Company signs the contract. How do I do this?

Also, How would both signatures be sent to the contract, without making it easy for somebody to fake the signature of the company?

1 Answer 1


So, at a high level, you can't make any restrictions on who can create a script, or submit datums to a script address. You can only put restrictions on who can "spend" datum utxos at the script address.

So, one solution is you specify a token that needs to be attached to the datum for it to be spent. That token's minting policy requires the minter to be User B.

User B can create an active instance of the script by submitting a datum attached to the token only she can create. This would essentially be the same as signing the contract, as User B would need to sign the tx that created that token.

The script will only allow User A and User B to spend that datum and make state changes if the "signing" token exists on the UTxO.

  • 2
    Note: You'd probably want to take care that the "signing" token can never be sent to a wallet, only to the script address. Otherwise it's essentially a blank check. Commented Jun 7, 2022 at 17:47
  • 1
    I don't think there is one correct answer. But you can't modify scripts ever. Script addresses are the hash of the code the validates it. So, if you modify the script, it will change the address. That doesn't mean you can't make your SC upgradable. The upgrades will just cause it to use new scripts. Well designed SCs could be backwards compatible if participants want to interact with old scripts. A script isn't the same thing as a SC. Multiple SCs can use the same script, and SCs can use many scripts and minting policies. Commented Jun 8, 2022 at 22:32
  • 1
    All datums are attached to a UTxO. And UTxOs have a Value field that can include multiple native tokens. Commented Jun 10, 2022 at 16:39
  • 1
    Haha. Thanks. Don't worry about it. I can't tell you how to build your app, but here's an example of off-chain code combining multiple tokens into a single value: github.com/input-output-hk/plutus-apps/blob/… Commented Jun 12, 2022 at 3:31
  • 1
    Thanks man that's perfect.
    – KryptoKing
    Commented Jun 12, 2022 at 14:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.