Skip to content

Commit

Permalink
minor reformating before and after program
Browse files Browse the repository at this point in the history
  • Loading branch information
ahangsu committed Aug 14, 2023
1 parent 42cfeee commit 6ce75f3
Showing 1 changed file with 44 additions and 42 deletions.
86 changes: 44 additions & 42 deletions ledger/simulation/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -402,71 +402,73 @@ func (tracer *evalTracer) AfterOpcode(cx *logic.EvalContext, evalError error) {
func (tracer *evalTracer) BeforeProgram(cx *logic.EvalContext) {
groupIndex := cx.GroupIndex()

// Before Program, activated for logic sig, happens before txn group execution
// we should create trace object for this txn result
if cx.RunMode() == logic.ModeSig {
switch cx.RunMode() {
case logic.ModeSig:
// Before Program, activated for logic sig, happens before txn group execution
// we should create trace object for this txn result
if tracer.result.ReturnTrace() {
tracer.result.TxnGroups[0].Txns[groupIndex].Trace = &TransactionTrace{}
traceRef := tracer.result.TxnGroups[0].Txns[groupIndex].Trace
traceRef.programTraceRef = &traceRef.LogicSigTrace
}
}

if cx.RunMode() == logic.ModeApp && tracer.result.ReturnInitialState() {
programBytes := cx.GetProgram()
programHash := crypto.Hash(programBytes)
tracer.result.InitialState.ProgramBytes[string(programBytes)] = struct{}{}
case logic.ModeApp:
if tracer.result.ReturnInitialState() {
programBytes := cx.GetProgram()
programHash := crypto.Hash(programBytes)
tracer.result.InitialState.ProgramBytes[string(programBytes)] = struct{}{}

var txnInitialState *TxnInitialState

if len(tracer.txnInitialStateStack) == 0 {
tracer.result.TxnGroups[0].Txns[groupIndex].InitialState = &TxnInitialState{}
txnInitialState = tracer.result.TxnGroups[0].Txns[groupIndex].InitialState
} else {
lastInitialState := tracer.txnInitialStateStack[len(tracer.txnInitialStateStack)-1]
lastInitialState.InnerTxnInitialStates = append(lastInitialState.InnerTxnInitialStates, TxnInitialState{})
txnInitialState = &lastInitialState.InnerTxnInitialStates[len(lastInitialState.InnerTxnInitialStates)-1]
}

var txnInitialState *TxnInitialState
txnInitialState.ProgramHash = programHash[:]

if len(tracer.txnInitialStateStack) == 0 {
tracer.result.TxnGroups[0].Txns[groupIndex].InitialState = &TxnInitialState{}
txnInitialState = tracer.result.TxnGroups[0].Txns[groupIndex].InitialState
} else {
lastInitialState := tracer.txnInitialStateStack[len(tracer.txnInitialStateStack)-1]
lastInitialState.InnerTxnInitialStates = append(lastInitialState.InnerTxnInitialStates, TxnInitialState{})
txnInitialState = &lastInitialState.InnerTxnInitialStates[len(lastInitialState.InnerTxnInitialStates)-1]
tracer.txnInitialStateStack = append(tracer.txnInitialStateStack, txnInitialState)
}

txnInitialState.ProgramHash = programHash[:]

tracer.txnInitialStateStack = append(tracer.txnInitialStateStack, txnInitialState)
}

if cx.RunMode() == logic.ModeApp && tracer.unnamedResourcePolicy != nil {
globalSharing := false
for iter := cx; iter != nil; iter = iter.GetCaller() {
if iter.ProgramVersion() >= 9 {
// If some caller in the app callstack allows global sharing, global resources can
// be accessed here. Otherwise the top-level txn must declare all resources locally.
globalSharing = true
break
if tracer.unnamedResourcePolicy != nil {
globalSharing := false
for iter := cx; iter != nil; iter = iter.GetCaller() {
if iter.ProgramVersion() >= 9 {
// If some caller in the app callstack allows global sharing, global resources can
// be accessed here. Otherwise the top-level txn must declare all resources locally.
globalSharing = true
break
}
}
tracer.unnamedResourcePolicy.globalSharing = globalSharing
tracer.unnamedResourcePolicy.programVersion = cx.ProgramVersion()
if tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget == nil {
s := cx.SurplusReadBudget
tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget = &s
}
cx.SetIOBudget(tracer.unnamedResourcePolicy.tracker.maxPossibleBoxIOBudget(cx.Proto.BytesPerBoxReference))
}
tracer.unnamedResourcePolicy.globalSharing = globalSharing
tracer.unnamedResourcePolicy.programVersion = cx.ProgramVersion()
if tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget == nil {
s := cx.SurplusReadBudget
tracer.unnamedResourcePolicy.initialBoxSurplusReadBudget = &s
}
cx.SetIOBudget(tracer.unnamedResourcePolicy.tracker.maxPossibleBoxIOBudget(cx.Proto.BytesPerBoxReference))
}
}

func (tracer *evalTracer) AfterProgram(cx *logic.EvalContext, evalError error) {
groupIndex := cx.GroupIndex()

if cx.RunMode() == logic.ModeSig {
switch cx.RunMode() {
case logic.ModeSig:
// Report cost for LogicSig program and exit
tracer.result.TxnGroups[0].Txns[groupIndex].LogicSigBudgetConsumed = uint64(cx.Cost())
if tracer.result.ReturnTrace() {
tracer.result.TxnGroups[0].Txns[groupIndex].Trace.programTraceRef = nil
}
return
}

if cx.RunMode() == logic.ModeApp && tracer.result.ReturnInitialState() {
tracer.txnInitialStateStack = tracer.txnInitialStateStack[:len(tracer.txnInitialStateStack)-1]
case logic.ModeApp:
if tracer.result.ReturnInitialState() {
tracer.txnInitialStateStack = tracer.txnInitialStateStack[:len(tracer.txnInitialStateStack)-1]
}
}

// Report cost of this program.
Expand Down

0 comments on commit 6ce75f3

Please sign in to comment.