Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 15 additions & 22 deletions ledger/common/script/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ func (s ScriptContextV1V2) ToPlutusData() data.PlutusData {
}

type ScriptContextV3 struct {
TxInfo TxInfo
Redeemer Redeemer
Purpose ScriptInfo
TxInfo TxInfo
Redeemer Redeemer
ScriptInfo ScriptInfo
}

func (ScriptContextV3) isScriptContext() {}
Expand All @@ -53,19 +53,19 @@ func (s ScriptContextV3) ToPlutusData() data.PlutusData {
0,
s.TxInfo.ToPlutusData(),
s.Redeemer.ToPlutusData(),
s.Purpose.ToPlutusData(),
s.ScriptInfo.ToPlutusData(),
)
}

func NewScriptContextV3(
txInfo TxInfo,
redeemer Redeemer,
purpose ScriptInfo,
purpose ScriptPurpose,
) ScriptContext {
return ScriptContextV3{
TxInfo: txInfo,
Redeemer: redeemer,
Purpose: purpose,
TxInfo: txInfo,
Redeemer: redeemer,
ScriptInfo: purpose.ToScriptInfo(),
}
}

Expand All @@ -84,7 +84,7 @@ type TxInfoV1 struct {
ValidRange TimeRange
Signatories []lcommon.Blake2b224
Data KeyValuePairs[lcommon.Blake2b256, data.PlutusData]
Redeemers KeyValuePairs[ScriptInfo, Redeemer]
Redeemers KeyValuePairs[ScriptPurpose, Redeemer]
Id lcommon.Blake2b256
}

Expand All @@ -105,7 +105,7 @@ type TxInfoV2 struct {
Withdrawals KeyValuePairs[*lcommon.Address, Coin]
ValidRange TimeRange
Signatories []lcommon.Blake2b224
Redeemers KeyValuePairs[ScriptInfo, Redeemer]
Redeemers KeyValuePairs[ScriptPurpose, Redeemer]
Data KeyValuePairs[lcommon.Blake2b256, data.PlutusData]
Id lcommon.Blake2b256
}
Expand All @@ -127,7 +127,7 @@ type TxInfoV3 struct {
Withdrawals KeyValuePairs[*lcommon.Address, uint64]
ValidRange TimeRange
Signatories []lcommon.Blake2b224
Redeemers KeyValuePairs[ScriptInfo, Redeemer]
Redeemers KeyValuePairs[ScriptPurpose, Redeemer]
Data KeyValuePairs[lcommon.Blake2b256, data.PlutusData]
Id lcommon.Blake2b256
Votes KeyValuePairs[*lcommon.Voter, KeyValuePairs[*lcommon.GovActionId, lcommon.VotingProcedure]]
Expand All @@ -139,13 +139,6 @@ type TxInfoV3 struct {
func (TxInfoV3) isTxInfo() {}

func (t TxInfoV3) ToPlutusData() data.PlutusData {
tmpRedeemers := make(KeyValuePairs[ScriptInfo, Redeemer], len(t.Redeemers))
for i, pair := range t.Redeemers {
tmpRedeemers[i] = KeyValuePair[ScriptInfo, Redeemer]{
Key: scriptPurposeStripDatum(pair.Key),
Value: pair.Value,
}
}
return data.NewConstr(
0,
toPlutusData(t.Inputs),
Expand All @@ -157,7 +150,7 @@ func (t TxInfoV3) ToPlutusData() data.PlutusData {
toPlutusData(t.Withdrawals),
t.ValidRange.ToPlutusData(),
toPlutusData(t.Signatories),
tmpRedeemers.ToPlutusData(),
t.Redeemers.ToPlutusData(),
t.Data.ToPlutusData(),
data.NewByteString(t.Id.Bytes()),
t.Votes.ToPlutusData(),
Expand Down Expand Up @@ -417,16 +410,16 @@ func dataInfo(
func redeemersInfo(
witnessSet lcommon.TransactionWitnessSet,
toScriptPurpose toScriptPurposeFunc,
) KeyValuePairs[ScriptInfo, Redeemer] {
var ret KeyValuePairs[ScriptInfo, Redeemer]
) KeyValuePairs[ScriptPurpose, Redeemer] {
var ret KeyValuePairs[ScriptPurpose, Redeemer]
redeemers := witnessSet.Redeemers()
redeemerKeys := sortedRedeemerKeys(redeemers)
for _, key := range redeemerKeys {
redeemerValue := redeemers.Value(uint(key.Index), key.Tag)
purpose := toScriptPurpose(key)
ret = append(
ret,
KeyValuePair[ScriptInfo, Redeemer]{
KeyValuePair[ScriptPurpose, Redeemer]{
Key: purpose,
Value: Redeemer{
Tag: key.Tag,
Expand Down
11 changes: 10 additions & 1 deletion ledger/common/script/context_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,15 @@ var scriptContextV3TestDefs = []struct {
redeemerIndex: 0,
expectedCbor: "d8799fd8799f9fd8799fd8799f5820000000000000000000000000000000000000000000000000000000000000000000ffd8799fd8799fd8799f581c00000000000000000000000000000000000000000000000000000000ffd87a80ffa140a1401a000f4240d87980d87a80ffffff8080182aa080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87e9f00d8799f1a001e8480d87a9f581c00000000000000000000000000000000000000000000000000000000ffd8799fd87a80b81d00182c011a00025ef5021a00016000031940000419044c051a001e8480061a1dcd65000712081901f4099f030aff0a9f031903e8ff0b9f0105ff10190154111910d6139f9f1902411903e8ff9f1902d11a000f4240ffff149f1a00d59f801b00000002540be400ff159f1a03b20b801b00000004a817c800ff1619138817189618180318199f9f18331864ff9f0d1819ff9f18351864ff9f181b1832ff9f0b14ffff181a9f9f18431864ff9f18431864ff9f0305ff9f0304ff9f0305ff9f18431864ff9f18431864ff9f18431864ff9f0304ff9f18431864ffff181b07181c1892181d06181e1b000000174876e800181f1a1dcd650018201418219f0f01ffd8799f581c9b24324046544393443e1fb35c8b72c3c39e18a516a95df5f6654101ffffffffd87980a05820a88a9bf8af51ea738bf212fe204e5ef2fd05312c995dad1ec194dcdc5aa07737a09fd8799f1a001e8480d87a9f581c00000000000000000000000000000000000000000000000000000000ffd8799fd87a80b81d00182c011a00025ef5021a00016000031940000419044c051a001e8480061a1dcd65000712081901f4099f030aff0a9f031903e8ff0b9f0105ff10190154111910d6139f9f1902411903e8ff9f1902d11a000f4240ffff149f1a00d59f801b00000002540be400ff159f1a03b20b801b00000004a817c800ff1619138817189618180318199f9f18331864ff9f0d1819ff9f18351864ff9f181b1832ff9f0b14ffff181a9f9f18431864ff9f18431864ff9f0305ff9f0304ff9f0305ff9f18431864ff9f18431864ff9f18431864ff9f0304ff9f18431864ffff181b07181c1892181d06181e1b000000174876e800181f1a1dcd650018201418219f0f01ffd8799f581c9b24324046544393443e1fb35c8b72c3c39e18a516a95df5f6654101ffffffffd87a80d87a80ffd87980d87e9f00d8799f1a001e8480d87a9f581c00000000000000000000000000000000000000000000000000000000ffd8799fd87a80b81d00182c011a00025ef5021a00016000031940000419044c051a001e8480061a1dcd65000712081901f4099f030aff0a9f031903e8ff0b9f0105ff10190154111910d6139f9f1902411903e8ff9f1902d11a000f4240ffff149f1a00d59f801b00000002540be400ff159f1a03b20b801b00000004a817c800ff1619138817189618180318199f9f18331864ff9f0d1819ff9f18351864ff9f181b1832ff9f0b14ffff181a9f9f18431864ff9f18431864ff9f0305ff9f0304ff9f0305ff9f18431864ff9f18431864ff9f18431864ff9f0304ff9f18431864ffff181b07181c1892181d06181e1b000000174876e800181f1a1dcd650018201418219f0f01ffd8799f581c9b24324046544393443e1fb35c8b72c3c39e18a516a95df5f6654101ffffffffff",
},
{
name: "SpendNoDatum",
txHex: "84a800d9010281825820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb3000dd9010281825820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb30112d9010281825820796c9a7ddf7d282425cfc04502cbf6afeaa4ba84d7ac57b898af5d11971a904f00018182581d60f403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8d1a004990371082581d60f403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8d1b0000000252d15b28111a0004188e021a0002bb090b58207b8920e8bdd120024a862d4b3f04abbb45553b63eaf2d44110d704c1bb3b970fa200d90102818258209fb8feba96ebf9daf366bbd8267af4ac90700e7293e8a28980318c8b15ec22305840bf637c3a878b101045885d6b3c339dc90c06d50aedda8b4e6518409ae1f1a3b1c549cfc87b73b4af7daf9024d1402ef05a5d3db170542bc3a2824a997a82550a05a182000082d8799f182aff8219286f1a002cc0b1f5f6",
inputsHex: "82825820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300825820796c9a7ddf7d282425cfc04502cbf6afeaa4ba84d7ac57b898af5d11971a904f00",
outputsHex: "8282581d703f919a6912708379420f321462ffd069b9ca06dabd8748c0015dc5df1a004c4b40a300581d60f403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8d011a00e4e1c003d818585d820358595857010100323232323225333002323232323253330073370e900118041baa00113232324a26018601a004601600260126ea800458c024c028008c020004c020008c018004c010dd50008a4c26cacae6955ceaab9e5742ae89",
redeemerTag: lcommon.RedeemerTagSpend,
redeemerIndex: 0,
expectedCbor: "d8799fd8799f9fd8799fd8799f5820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300ffd8799fd8799fd87a9f581c3f919a6912708379420f321462ffd069b9ca06dabd8748c0015dc5dfffd87a80ffa140a1401a004c4b40d87980d87a80ffffff9fd8799fd8799f5820796c9a7ddf7d282425cfc04502cbf6afeaa4ba84d7ac57b898af5d11971a904f00ffd8799fd8799fd8799f581cf403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8dffd87a80ffa140a1401a00e4e1c0d87980d8799f581c3f919a6912708379420f321462ffd069b9ca06dabd8748c0015dc5dfffffffff9fd8799fd8799fd8799f581cf403040f87d20a97bb16c3cc0b49bd057850e1c1f61eaf9c6d9ebb8dffd87a80ffa140a1401a00499037d87980d87a80ffff1a0002bb09a080a0d8799fd8799fd87980d87a80ffd8799fd87b80d87a80ffff80a1d87a9fd8799f5820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300ffffd8799f182affa05820b7532002df0695ced267eddd58445c66a04c8ddec485adabfca3eb90f5136d8ca080d87a80d87a80ffd8799f182affd87a9fd8799f5820757529554ac6d89833713481e4bf1d3ac3923a2fd1367703f5c855245666cdb300ffd87a80ffff",
},
}

func TestScriptContextV3(t *testing.T) {
Expand All @@ -283,7 +292,7 @@ func TestScriptContextV3(t *testing.T) {
}

// Extract purpose and redeemer from TxInfo
var purpose ScriptInfo
var purpose ScriptPurpose
var redeemer Redeemer
for _, redeemerPair := range txInfo.(TxInfoV3).Redeemers {
if redeemerPair.Value.Tag == testDef.redeemerTag &&
Expand Down
Loading