Skip to content

Commit a281096

Browse files
authored
Merge pull request #272 from Anastasia-Labs/fix-witness-proof-endpoints
Fix Witness Proof Endpoints
2 parents c5ecbae + 90a451f commit a281096

3 files changed

Lines changed: 29 additions & 55 deletions

File tree

onchain/aiken/lib/midgard/user-events/witness.ak

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ use cardano/transaction.{Publish, Redeemer, ScriptPurpose}
77

88
pub type PublishRedeemer {
99
MintOrBurn { target_policy: PolicyId }
10-
RegisterToProveNotRegistered { registration_redeemer_index: Int }
11-
UnregisterToProveNotRegistered { registration_redeemer_index: Int }
10+
RegisterToProveNotRegistered { registration_certificate_index: Int }
11+
UnregisterToProveNotRegistered { registration_certificate_index: Int }
1212
}
1313

1414
/// Witness script's prefix from its single CBOR encoded applied bytearray.
1515
/// TODO: This should probably be moved to `env` with a better generation
1616
/// process.
1717
pub const witness_script_prefix: ByteArray =
18-
#"5903f201010033232323232323223225333004323232323253323300a3001300b3754004264664464646464a666022600800226464a66602c60320040082c6eb8c05c004c04cdd50050a999808980180089919299980b180c8010020b1bad3017001301337540142a66602266e1d2004001132325333016301900200416375a602e00260266ea802858c044dd5004899191919299980998030008991919299980b1804800898040010a99980b1804000899b8700248004528180b1baa0093253330153007301637540022900009bad301a3017375400264a66602a600e602c6ea80045300103d87a8000132330010013756603660306ea8008894ccc068004530103d87a8000132333222533301b337220320062a66603666e3c06400c4cdd2a40006603e6ea00092f5c02980103d87a8000133006006001375c60320026eb4c068004c078008c070004c8cc004004dd5980d180d980d980d980d980b9baa00f22533301900114c103d87a8000132333222533301a3372200e0062a66603466e3c01c00c4cdd2a40006603c6e980092f5c02980103d87a8000133006006001375c60300026eacc064004c074008c06c004dd7180c180a9baa00c153330133005001132323232323253330193010301a3754002264a666034601a60366ea80044c94ccc06ccdd78010078a99980d9806980e1baa004132325333020302300213232533301f301630203754002264a666040602460426ea800454ccc080cdd7803181298111baa001153330203370e900218109baa003132325333025302800213370e00201e2c6eb4c098004c088dd50018b0b0b1812181298109baa00116301f009301f00816375a6042002603a6ea80105858c07cc070dd50008b180f180f980d9baa0011630190023019001301b002301a301b0013300437566006602c6ea8038004dd6980c180a9baa00c1325333014300630153754010264646464a666030601e60326ea80044c94ccc064c030c068dd50008a99980c99baf301e301b375400200a2a666032601660346ea800c4c8c94ccc078c0840084cdc38040008b1bad301f001301b37540062c2c2c603a603c60346ea800458c060008c060004c068cc014dd59802180b9baa00f0023019301637540102c6eb4c060c054dd500618099baa00b230173018301830183018301830183018301830180013001001222533301233712002900008010a99980a8010a5eb7bdb1804ccc00c00cc060008cdc0000a40026e1d2002370e90001bad301000130103011001300c37540046e1d200616300d300e003300c002300b002300b0013006375400229309b2b1bae0015734aae7555cf2ab9f5740ae855d12601225820"
18+
#"59030601010033232323232323223225333004323232323253330093370e900318051baa00113233223232323253330103003001132325333015301800200416375c602c00260246ea802454ccc040c0100044c8c94ccc054c06000801058dd6980b00098091baa009153330103370e900200089919299980a980c0010020b1bad3016001301237540122c60206ea80204c8c8c8c94ccc048c0140044c8c8c94ccc054c0200044c02400854ccc054c0240044cdc3801240022940c054dd500499299980a1804180a9baa0011480004dd6980c980b1baa001325333014300830153754002298103d87a80001323300100137566034602e6ea8008894ccc064004530103d87a8000132333222533301a337220300062a66603466e3c06000c4cdd2a40006603c6ea00092f5c02980103d87a8000133006006001375c60300026eb4c064004c074008c06c004c8cc004004dd5980c980d180d180d180d180b1baa00e22533301800114c103d87a800013233322253330193372200e0062a66603266e3c01c00c4cdd2a40006603a6e980092f5c02980103d87a8000133006006001375c602e0026eacc060004c070008c068004dd7180b980a1baa00b153330123006001132323253330153375e0040142a66602a6010602c6ea80084c94ccc058c028c05cdd5001099baf001301b301837540042c6034602e6ea80085858c064c068008c060004cc00cdd61801180a1baa00c375a602e60286ea802c4c94ccc04cc01cc050dd500409919299980a9804180b1baa00113375e6034602e6ea800400858c064cc014dd61802180b1baa00e0023018301537540102c6eb4c05cc050dd500598091baa00a23016301730173017301730170013001001222533301133712002900008010a99980a0010a5eb804ccc00c00cc05c008cdc0000a40026e1d2000370e90011bad300f001300f3010001300b37540022c601a601c006601800460160046016002600c6ea800452613656375c002ae6955ceaab9e5573eae815d0aba24c1225820"
1919

2020
pub fn validate_witness_redeemer(
2121
expected_witness_script_hash: ScriptHash,

onchain/aiken/plutus.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,8 +1625,8 @@
16251625
}
16261626
}
16271627
],
1628-
"compiledCode": "5903cb0101003232323232323223225333004323232323253323300a3001300b3754004264664464646464a666022600800226464a66602c60320040082c6eb8c05c004c04cdd50050a999808980180089919299980b180c8010020b1bad3017001301337540142a66602266e1d2004001132325333016301900200416375a602e00260266ea802858c044dd5004899191919299980998030008991919299980b1804800898040010a99980b1804000899b8700248004528180b1baa0093253330153007301637540022900009bad301a3017375400264a66602a600e602c6ea8004530103d87a8000132330010013756603660306ea8008894ccc068004530103d87a8000132333222533301b337220320062a66603666e3c06400c4cdd2a40006603e6ea00092f5c02980103d87a8000133006006001375c60320026eb4c068004c078008c070004c8cc004004dd5980d180d980d980d980d980b9baa00f22533301900114c103d87a8000132333222533301a3372200e0062a66603466e3c01c00c4cdd2a40006603c6e980092f5c02980103d87a8000133006006001375c60300026eacc064004c074008c06c004dd7180c180a9baa00c153330133005001132323232323253330193010301a3754002264a666034601a60366ea80044c94ccc06ccdd78010078a99980d9806980e1baa004132325333020302300213232533301f301630203754002264a666040602460426ea800454ccc080cdd7803181298111baa001153330203370e900218109baa003132325333025302800213370e00201e2c6eb4c098004c088dd50018b0b0b1812181298109baa00116301f009301f00816375a6042002603a6ea80105858c07cc070dd50008b180f180f980d9baa0011630190023019001301b002301a301b0013300437566006602c6ea8038004dd6980c180a9baa00c1325333014300630153754010264646464a666030601e60326ea80044c94ccc064c030c068dd50008a99980c99baf301e301b375400200a2a666032601660346ea800c4c8c94ccc078c0840084cdc38040008b1bad301f001301b37540062c2c2c603a603c60346ea800458c060008c060004c068cc014dd59802180b9baa00f0023019301637540102c6eb4c060c054dd500618099baa00b230173018301830183018301830183018301830180013001001222533301233712002900008010a99980a8010a5eb7bdb1804ccc00c00cc060008cdc0000a40026e1d2002370e90001bad301000130103011001300c37540046e1d200616300d300e003300c002300b002300b0013006375400229309b2b1bae0015734aae7555cf2ab9f5740ae855d101",
1629-
"hash": "9f6c9b2d8d8db928cfd28f9598b740c75729b3e366b44748ea289853"
1628+
"compiledCode": "5902e00101003232323232323223225333004323232323253330093370e900318051baa00113233223232323253330103003001132325333015301800200416375c602c00260246ea802454ccc040c0100044c8c94ccc054c06000801058dd6980b00098091baa009153330103370e900200089919299980a980c0010020b1bad3016001301237540122c60206ea80204c8c8c8c94ccc048c0140044c8c8c94ccc054c0200044c02400854ccc054c0240044cdc3801240022940c054dd500499299980a1804180a9baa0011480004dd6980c980b1baa0013253330143008301537540022980103d87a80001323300100137566034602e6ea8008894ccc064004530103d87a8000132333222533301a337220300062a66603466e3c06000c4cdd2a40006603c6ea00092f5c02980103d87a8000133006006001375c60300026eb4c064004c074008c06c004c8cc004004dd5980c980d180d180d180d180b1baa00e22533301800114c103d87a800013233322253330193372200e0062a66603266e3c01c00c4cdd2a40006603a6e980092f5c02980103d87a8000133006006001375c602e0026eacc060004c070008c068004dd7180b980a1baa00b153330123006001132323253330153375e0040142a66602a6010602c6ea80084c94ccc058c028c05cdd5001099baf001301b301837540042c6034602e6ea80085858c064c068008c060004cc00cdd61801180a1baa00c375a602e60286ea802c4c94ccc04cc01cc050dd500409919299980a9804180b1baa00113375e6034602e6ea800400858c064cc014dd61802180b1baa00e0023018301537540102c6eb4c05cc050dd500598091baa00a23016301730173017301730170013001001222533301133712002900008010a99980a0010a5eb804ccc00c00cc05c008cdc0000a40026e1d2000370e90011bad300f001300f3010001300b37540022c601a601c006601800460160046016002600c6ea800452613656375c002ae6955ceaab9e5573eae815d0aba21",
1629+
"hash": "0e2bee18bfffe25c20b3cb5facff269482ad81b7594585d8e34df4f1"
16301630
},
16311631
{
16321632
"title": "user_events/witness.main.else",
@@ -1641,8 +1641,8 @@
16411641
}
16421642
}
16431643
],
1644-
"compiledCode": "5903cb0101003232323232323223225333004323232323253323300a3001300b3754004264664464646464a666022600800226464a66602c60320040082c6eb8c05c004c04cdd50050a999808980180089919299980b180c8010020b1bad3017001301337540142a66602266e1d2004001132325333016301900200416375a602e00260266ea802858c044dd5004899191919299980998030008991919299980b1804800898040010a99980b1804000899b8700248004528180b1baa0093253330153007301637540022900009bad301a3017375400264a66602a600e602c6ea8004530103d87a8000132330010013756603660306ea8008894ccc068004530103d87a8000132333222533301b337220320062a66603666e3c06400c4cdd2a40006603e6ea00092f5c02980103d87a8000133006006001375c60320026eb4c068004c078008c070004c8cc004004dd5980d180d980d980d980d980b9baa00f22533301900114c103d87a8000132333222533301a3372200e0062a66603466e3c01c00c4cdd2a40006603c6e980092f5c02980103d87a8000133006006001375c60300026eacc064004c074008c06c004dd7180c180a9baa00c153330133005001132323232323253330193010301a3754002264a666034601a60366ea80044c94ccc06ccdd78010078a99980d9806980e1baa004132325333020302300213232533301f301630203754002264a666040602460426ea800454ccc080cdd7803181298111baa001153330203370e900218109baa003132325333025302800213370e00201e2c6eb4c098004c088dd50018b0b0b1812181298109baa00116301f009301f00816375a6042002603a6ea80105858c07cc070dd50008b180f180f980d9baa0011630190023019001301b002301a301b0013300437566006602c6ea8038004dd6980c180a9baa00c1325333014300630153754010264646464a666030601e60326ea80044c94ccc064c030c068dd50008a99980c99baf301e301b375400200a2a666032601660346ea800c4c8c94ccc078c0840084cdc38040008b1bad301f001301b37540062c2c2c603a603c60346ea800458c060008c060004c068cc014dd59802180b9baa00f0023019301637540102c6eb4c060c054dd500618099baa00b230173018301830183018301830183018301830180013001001222533301233712002900008010a99980a8010a5eb7bdb1804ccc00c00cc060008cdc0000a40026e1d2002370e90001bad301000130103011001300c37540046e1d200616300d300e003300c002300b002300b0013006375400229309b2b1bae0015734aae7555cf2ab9f5740ae855d101",
1645-
"hash": "9f6c9b2d8d8db928cfd28f9598b740c75729b3e366b44748ea289853"
1644+
"compiledCode": "5902e00101003232323232323223225333004323232323253330093370e900318051baa00113233223232323253330103003001132325333015301800200416375c602c00260246ea802454ccc040c0100044c8c94ccc054c06000801058dd6980b00098091baa009153330103370e900200089919299980a980c0010020b1bad3016001301237540122c60206ea80204c8c8c8c94ccc048c0140044c8c8c94ccc054c0200044c02400854ccc054c0240044cdc3801240022940c054dd500499299980a1804180a9baa0011480004dd6980c980b1baa0013253330143008301537540022980103d87a80001323300100137566034602e6ea8008894ccc064004530103d87a8000132333222533301a337220300062a66603466e3c06000c4cdd2a40006603c6ea00092f5c02980103d87a8000133006006001375c60300026eb4c064004c074008c06c004c8cc004004dd5980c980d180d180d180d180b1baa00e22533301800114c103d87a800013233322253330193372200e0062a66603266e3c01c00c4cdd2a40006603a6e980092f5c02980103d87a8000133006006001375c602e0026eacc060004c070008c068004dd7180b980a1baa00b153330123006001132323253330153375e0040142a66602a6010602c6ea80084c94ccc058c028c05cdd5001099baf001301b301837540042c6034602e6ea80085858c064c068008c060004cc00cdd61801180a1baa00c375a602e60286ea802c4c94ccc04cc01cc050dd500409919299980a9804180b1baa00113375e6034602e6ea800400858c064cc014dd61802180b1baa00e0023018301537540102c6eb4c05cc050dd500598091baa00a23016301730173017301730170013001001222533301133712002900008010a99980a0010a5eb804ccc00c00cc05c008cdc0000a40026e1d2000370e90011bad300f001300f3010001300b37540022c601a601c006601800460160046016002600c6ea800452613656375c002ae6955ceaab9e5573eae815d0aba21",
1645+
"hash": "0e2bee18bfffe25c20b3cb5facff269482ad81b7594585d8e34df4f1"
16461646
}
16471647
],
16481648
"definitions": {
@@ -4250,7 +4250,7 @@
42504250
"index": 1,
42514251
"fields": [
42524252
{
4253-
"title": "registration_redeemer_index",
4253+
"title": "registration_certificate_index",
42544254
"$ref": "#/definitions/Int"
42554255
}
42564256
]
@@ -4261,7 +4261,7 @@
42614261
"index": 2,
42624262
"fields": [
42634263
{
4264-
"title": "registration_redeemer_index",
4264+
"title": "registration_certificate_index",
42654265
"$ref": "#/definitions/Int"
42664266
}
42674267
]

onchain/aiken/validators/user-events/witness.ak

Lines changed: 20 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use aiken/collection/list
22
use aiken/crypto.{Blake2b_256, Hash}
33
use cardano/assets
44
use cardano/certificate.{Certificate, RegisterCredential, UnregisterCredential}
5-
use cardano/transaction.{Publish, Transaction}
5+
use cardano/transaction.{Transaction}
66
use midgard/common/parameter_validation
77
use midgard/user_events/witness.{
88
MintOrBurn, PublishRedeemer, RegisterToProveNotRegistered,
@@ -28,62 +28,36 @@ validator main(nonce: Hash<Blake2b_256, ByteArray>) {
2828
_ -> False
2929
}
3030
}
31-
RegisterToProveNotRegistered { registration_redeemer_index } -> {
32-
// 1. The registration redeemer must be immediately followed by the
33-
// unregistration counterpart.
34-
expect [registration_pair,
35-
unregistration_pair, ..] =
36-
tx.redeemers |> list.drop(registration_redeemer_index)
31+
RegisterToProveNotRegistered { registration_certificate_index } -> {
32+
// 1. The registration certificate must be immediately followed by
33+
// the unregistration counterpart.
34+
expect [reg_cert,
35+
unreg_cert, ..] =
36+
tx.certificates |> list.drop(registration_certificate_index)
3737

38-
expect Pair(Publish {
39-
certificate: RegisterCredential { credential: reg_cred, .. } as reg_cert,
40-
..
41-
},
42-
reg_redeemer_data) = registration_pair
43-
44-
// 2. Ensure correctness of the provided redeemer index.
38+
// 2. Ensure correctness of the provided certificate index.
4539
expect reg_cert == cert
46-
expect RegisterToProveNotRegistered { .. } = reg_redeemer_data
4740

48-
expect Pair(Publish {
49-
certificate: UnregisterCredential { credential: unreg_cred, .. },
50-
..
51-
},
52-
unreg_redeemer_data) = unregistration_pair
41+
expect RegisterCredential { credential: reg_cred, .. } = reg_cert
5342

54-
// 3. The unregistration redeemer must invoke the same script.
55-
expect reg_cred == unreg_cred
43+
expect UnregisterCredential { credential: unreg_cred, .. } =
44+
unreg_cert
5645

57-
// 4. The index carried in the unregistration redeemer must match
58-
// the index from the registration redeemer.
59-
expect UnregisterToProveNotRegistered {
60-
registration_redeemer_index: index_from_unregistration,
61-
} = unreg_redeemer_data
62-
index_from_unregistration == registration_redeemer_index
46+
// 3. The unregistration certificate must be of the same script.
47+
reg_cred == unreg_cred
6348
}
64-
UnregisterToProveNotRegistered { registration_redeemer_index } -> {
49+
UnregisterToProveNotRegistered { registration_certificate_index } -> {
6550
// 1. Current certificate must be an `UnregisterCredential`.
6651
expect UnregisterCredential { credential: unreg_cred, .. } = cert
6752

68-
// 2. The provided index must point to a registration endpoint.
69-
expect [registration_pair, ..] =
70-
tx.redeemers |> list.drop(registration_redeemer_index)
71-
expect Pair(Publish {
72-
certificate: RegisterCredential { credential: reg_cred, .. },
73-
..
74-
},
75-
reg_redeemer_data) = registration_pair
53+
// 2. The provided index must point to a registration certificate.
54+
expect [reg_cert, ..] =
55+
tx.certificates |> list.drop(registration_certificate_index)
56+
expect RegisterCredential { credential: reg_cred, .. } = reg_cert
7657

77-
// 3. Credential from the registration endpoint must match the
58+
// 3. Credential from the registration certificate must match the
7859
// current credential.
79-
expect reg_cred == unreg_cred
80-
81-
// 4. Index from the registration endpoint must be equal to the
82-
// index from the current endpoint.
83-
expect RegisterToProveNotRegistered {
84-
registration_redeemer_index: index_from_registration,
85-
} = reg_redeemer_data
86-
registration_redeemer_index == index_from_registration
60+
reg_cred == unreg_cred
8761
}
8862
}
8963
},

0 commit comments

Comments
 (0)