Skip to content

Commit 7639f68

Browse files
authored
refactor: split script purpose to ScriptPurpose and ScriptInfo (#1187)
Fixes #1185 Signed-off-by: Aurora Gaffney <[email protected]>
1 parent e8efb0d commit 7639f68

File tree

3 files changed

+132
-75
lines changed

3 files changed

+132
-75
lines changed

ledger/common/script/context.go

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ func (s ScriptContextV1V2) ToPlutusData() data.PlutusData {
4141
}
4242

4343
type ScriptContextV3 struct {
44-
TxInfo TxInfo
45-
Redeemer Redeemer
46-
Purpose ScriptInfo
44+
TxInfo TxInfo
45+
Redeemer Redeemer
46+
ScriptInfo ScriptInfo
4747
}
4848

4949
func (ScriptContextV3) isScriptContext() {}
@@ -53,19 +53,19 @@ func (s ScriptContextV3) ToPlutusData() data.PlutusData {
5353
0,
5454
s.TxInfo.ToPlutusData(),
5555
s.Redeemer.ToPlutusData(),
56-
s.Purpose.ToPlutusData(),
56+
s.ScriptInfo.ToPlutusData(),
5757
)
5858
}
5959

6060
func NewScriptContextV3(
6161
txInfo TxInfo,
6262
redeemer Redeemer,
63-
purpose ScriptInfo,
63+
purpose ScriptPurpose,
6464
) ScriptContext {
6565
return ScriptContextV3{
66-
TxInfo: txInfo,
67-
Redeemer: redeemer,
68-
Purpose: purpose,
66+
TxInfo: txInfo,
67+
Redeemer: redeemer,
68+
ScriptInfo: purpose.ToScriptInfo(),
6969
}
7070
}
7171

@@ -84,7 +84,7 @@ type TxInfoV1 struct {
8484
ValidRange TimeRange
8585
Signatories []lcommon.Blake2b224
8686
Data KeyValuePairs[lcommon.Blake2b256, data.PlutusData]
87-
Redeemers KeyValuePairs[ScriptInfo, Redeemer]
87+
Redeemers KeyValuePairs[ScriptPurpose, Redeemer]
8888
Id lcommon.Blake2b256
8989
}
9090

@@ -105,7 +105,7 @@ type TxInfoV2 struct {
105105
Withdrawals KeyValuePairs[*lcommon.Address, Coin]
106106
ValidRange TimeRange
107107
Signatories []lcommon.Blake2b224
108-
Redeemers KeyValuePairs[ScriptInfo, Redeemer]
108+
Redeemers KeyValuePairs[ScriptPurpose, Redeemer]
109109
Data KeyValuePairs[lcommon.Blake2b256, data.PlutusData]
110110
Id lcommon.Blake2b256
111111
}
@@ -127,7 +127,7 @@ type TxInfoV3 struct {
127127
Withdrawals KeyValuePairs[*lcommon.Address, uint64]
128128
ValidRange TimeRange
129129
Signatories []lcommon.Blake2b224
130-
Redeemers KeyValuePairs[ScriptInfo, Redeemer]
130+
Redeemers KeyValuePairs[ScriptPurpose, Redeemer]
131131
Data KeyValuePairs[lcommon.Blake2b256, data.PlutusData]
132132
Id lcommon.Blake2b256
133133
Votes KeyValuePairs[*lcommon.Voter, KeyValuePairs[*lcommon.GovActionId, lcommon.VotingProcedure]]
@@ -139,13 +139,6 @@ type TxInfoV3 struct {
139139
func (TxInfoV3) isTxInfo() {}
140140

141141
func (t TxInfoV3) ToPlutusData() data.PlutusData {
142-
tmpRedeemers := make(KeyValuePairs[ScriptInfo, Redeemer], len(t.Redeemers))
143-
for i, pair := range t.Redeemers {
144-
tmpRedeemers[i] = KeyValuePair[ScriptInfo, Redeemer]{
145-
Key: scriptPurposeStripDatum(pair.Key),
146-
Value: pair.Value,
147-
}
148-
}
149142
return data.NewConstr(
150143
0,
151144
toPlutusData(t.Inputs),
@@ -157,7 +150,7 @@ func (t TxInfoV3) ToPlutusData() data.PlutusData {
157150
toPlutusData(t.Withdrawals),
158151
t.ValidRange.ToPlutusData(),
159152
toPlutusData(t.Signatories),
160-
tmpRedeemers.ToPlutusData(),
153+
t.Redeemers.ToPlutusData(),
161154
t.Data.ToPlutusData(),
162155
data.NewByteString(t.Id.Bytes()),
163156
t.Votes.ToPlutusData(),
@@ -417,16 +410,16 @@ func dataInfo(
417410
func redeemersInfo(
418411
witnessSet lcommon.TransactionWitnessSet,
419412
toScriptPurpose toScriptPurposeFunc,
420-
) KeyValuePairs[ScriptInfo, Redeemer] {
421-
var ret KeyValuePairs[ScriptInfo, Redeemer]
413+
) KeyValuePairs[ScriptPurpose, Redeemer] {
414+
var ret KeyValuePairs[ScriptPurpose, Redeemer]
422415
redeemers := witnessSet.Redeemers()
423416
redeemerKeys := sortedRedeemerKeys(redeemers)
424417
for _, key := range redeemerKeys {
425418
redeemerValue := redeemers.Value(uint(key.Index), key.Tag)
426419
purpose := toScriptPurpose(key)
427420
ret = append(
428421
ret,
429-
KeyValuePair[ScriptInfo, Redeemer]{
422+
KeyValuePair[ScriptPurpose, Redeemer]{
430423
Key: purpose,
431424
Value: Redeemer{
432425
Tag: key.Tag,

ledger/common/script/context_test.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,15 @@ var scriptContextV3TestDefs = []struct {
265265
redeemerIndex: 0,
266266
expectedCbor: "d8799fd8799f9fd8799fd8799f5820000000000000000000000000000000000000000000000000000000000000000000ffd8799fd8799fd8799f581c00000000000000000000000000000000000000000000000000000000ffd87a80ffa140a1401a000f4240d87980d87a80ffffff8080182aa080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87e9f00d8799f1a001e8480d87a9f581c00000000000000000000000000000000000000000000000000000000ffd8799fd87a80b81d00182c011a00025ef5021a00016000031940000419044c051a001e8480061a1dcd65000712081901f4099f030aff0a9f031903e8ff0b9f0105ff10190154111910d6139f9f1902411903e8ff9f1902d11a000f4240ffff149f1a00d59f801b00000002540be400ff159f1a03b20b801b00000004a817c800ff1619138817189618180318199f9f18331864ff9f0d1819ff9f18351864ff9f181b1832ff9f0b14ffff181a9f9f18431864ff9f18431864ff9f0305ff9f0304ff9f0305ff9f18431864ff9f18431864ff9f18431864ff9f0304ff9f18431864ffff181b07181c1892181d06181e1b000000174876e800181f1a1dcd650018201418219f0f01ffd8799f581c9b24324046544393443e1fb35c8b72c3c39e18a516a95df5f6654101ffffffffd87980a05820a88a9bf8af51ea738bf212fe204e5ef2fd05312c995dad1ec194dcdc5aa07737a09fd8799f1a001e8480d87a9f581c00000000000000000000000000000000000000000000000000000000ffd8799fd87a80b81d00182c011a00025ef5021a00016000031940000419044c051a001e8480061a1dcd65000712081901f4099f030aff0a9f031903e8ff0b9f0105ff10190154111910d6139f9f1902411903e8ff9f1902d11a000f4240ffff149f1a00d59f801b00000002540be400ff159f1a03b20b801b00000004a817c800ff1619138817189618180318199f9f18331864ff9f0d1819ff9f18351864ff9f181b1832ff9f0b14ffff181a9f9f18431864ff9f18431864ff9f0305ff9f0304ff9f0305ff9f18431864ff9f18431864ff9f18431864ff9f0304ff9f18431864ffff181b07181c1892181d06181e1b000000174876e800181f1a1dcd650018201418219f0f01ffd8799f581c9b24324046544393443e1fb35c8b72c3c39e18a516a95df5f6654101ffffffffd87a80d87a80ffd87980d87e9f00d8799f1a001e8480d87a9f581c00000000000000000000000000000000000000000000000000000000ffd8799fd87a80b81d00182c011a00025ef5021a00016000031940000419044c051a001e8480061a1dcd65000712081901f4099f030aff0a9f031903e8ff0b9f0105ff10190154111910d6139f9f1902411903e8ff9f1902d11a000f4240ffff149f1a00d59f801b00000002540be400ff159f1a03b20b801b00000004a817c800ff1619138817189618180318199f9f18331864ff9f0d1819ff9f18351864ff9f181b1832ff9f0b14ffff181a9f9f18431864ff9f18431864ff9f0305ff9f0304ff9f0305ff9f18431864ff9f18431864ff9f18431864ff9f0304ff9f18431864ffff181b07181c1892181d06181e1b000000174876e800181f1a1dcd650018201418219f0f01ffd8799f581c9b24324046544393443e1fb35c8b72c3c39e18a516a95df5f6654101ffffffffff",
267267
},
268+
{
269+
name: "SpendNoDatum",
270+
txHex: "84a800d9010281825820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb3000dd9010281825820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb30112d9010281825820796c9a7ddf7d282425cfc04502cbf6afeaa4ba84d7ac57b898af5d11971a904f00018182581d60f403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8d1a004990371082581d60f403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8d1b0000000252d15b28111a0004188e021a0002bb090b58207b8920e8bdd120024a862d4b3f04abbb45553b63eaf2d44110d704c1bb3b970fa200d90102818258209fb8feba96ebf9daf366bbd8267af4ac90700e7293e8a28980318c8b15ec22305840bf637c3a878b101045885d6b3c339dc90c06d50aedda8b4e6518409ae1f1a3b1c549cfc87b73b4af7daf9024d1402ef05a5d3db170542bc3a2824a997a82550a05a182000082d8799f182aff8219286f1a002cc0b1f5f6",
271+
inputsHex: "82825820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300825820796c9a7ddf7d282425cfc04502cbf6afeaa4ba84d7ac57b898af5d11971a904f00",
272+
outputsHex: "8282581d703f919a6912708379420f321462ffd069b9ca06dabd8748c0015dc5df1a004c4b40a300581d60f403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8d011a00e4e1c003d818585d820358595857010100323232323225333002323232323253330073370e900118041baa00113232324a26018601a004601600260126ea800458c024c028008c020004c020008c018004c010dd50008a4c26cacae6955ceaab9e5742ae89",
273+
redeemerTag: lcommon.RedeemerTagSpend,
274+
redeemerIndex: 0,
275+
expectedCbor: "d8799fd8799f9fd8799fd8799f5820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300ffd8799fd8799fd87a9f581c3f919a6912708379420f321462ffd069b9ca06dabd8748c0015dc5dfffd87a80ffa140a1401a004c4b40d87980d87a80ffffff9fd8799fd8799f5820796c9a7ddf7d282425cfc04502cbf6afeaa4ba84d7ac57b898af5d11971a904f00ffd8799fd8799fd8799f581cf403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8dffd87a80ffa140a1401a00e4e1c0d87980d8799f581c3f919a6912708379420f321462ffd069b9ca06dabd8748c0015dc5dfffffffff9fd8799fd8799fd8799f581cf403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8dffd87a80ffa140a1401a00499037d87980d87a80ffff1a0002bb09a080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87a9fd8799f5820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300ffffd8799f182affa05820b7532002df0695ced267eddd58445c66a04c8ddec485adabfca3eb90f5136d8ca080d87a80d87a80ffd8799f182affd87a9fd8799f5820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300ffd87a80ffff",
276+
},
268277
}
269278

270279
func TestScriptContextV3(t *testing.T) {
@@ -283,7 +292,7 @@ func TestScriptContextV3(t *testing.T) {
283292
}
284293

285294
// Extract purpose and redeemer from TxInfo
286-
var purpose ScriptInfo
295+
var purpose ScriptPurpose
287296
var redeemer Redeemer
288297
for _, redeemerPair := range txInfo.(TxInfoV3).Redeemers {
289298
if redeemerPair.Value.Tag == testDef.redeemerTag &&

0 commit comments

Comments
 (0)