Skip to content

Commit

Permalink
Chore: Use generics to simplify some code in v2 (#5497)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahangsu committed Jun 24, 2023
1 parent e96d104 commit 68a4aba
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 46 deletions.
14 changes: 7 additions & 7 deletions daemon/algod/api/server/v2/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,9 @@ func AccountDataToAccount(
AppsLocalState: &appsLocalState,
TotalAppsOptedIn: uint64(len(appsLocalState)),
AppsTotalSchema: &totalAppSchema,
AppsTotalExtraPages: numOrNil(totalExtraPages),
TotalBoxes: numOrNil(record.TotalBoxes),
TotalBoxBytes: numOrNil(record.TotalBoxBytes),
AppsTotalExtraPages: omitEmpty(totalExtraPages),
TotalBoxes: omitEmpty(record.TotalBoxes),
TotalBoxBytes: omitEmpty(record.TotalBoxBytes),
MinBalance: minBalance.Raw,
}, nil
}
Expand Down Expand Up @@ -430,7 +430,7 @@ func AppParamsToApplication(creator string, appIdx basics.AppIndex, appParams *b
Creator: creator,
ApprovalProgram: appParams.ApprovalProgram,
ClearStateProgram: appParams.ClearStateProgram,
ExtraProgramPages: numOrNil(extraProgramPages),
ExtraProgramPages: omitEmpty(extraProgramPages),
GlobalState: globalState,
LocalStateSchema: &model.ApplicationStateSchema{
NumByteSlice: appParams.LocalStateSchema.NumByteSlice,
Expand Down Expand Up @@ -466,11 +466,11 @@ func AssetParamsToAsset(creator string, idx basics.AssetIndex, params *basics.As
Total: params.Total,
Decimals: uint64(params.Decimals),
DefaultFrozen: &frozen,
Name: strOrNil(printableUTF8OrEmpty(params.AssetName)),
Name: omitEmpty(printableUTF8OrEmpty(params.AssetName)),
NameB64: byteOrNil([]byte(params.AssetName)),
UnitName: strOrNil(printableUTF8OrEmpty(params.UnitName)),
UnitName: omitEmpty(printableUTF8OrEmpty(params.UnitName)),
UnitNameB64: byteOrNil([]byte(params.UnitName)),
Url: strOrNil(printableUTF8OrEmpty(params.URL)),
Url: omitEmpty(printableUTF8OrEmpty(params.URL)),
UrlB64: byteOrNil([]byte(params.URL)),
Clawback: addrOrNil(params.Clawback),
Freeze: addrOrNil(params.Freeze),
Expand Down
8 changes: 4 additions & 4 deletions daemon/algod/api/server/v2/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -482,9 +482,9 @@ func (v2 *Handlers) basicAccountInformation(ctx echo.Context, addr basics.Addres
NumByteSlice: record.TotalAppSchema.NumByteSlice,
NumUint: record.TotalAppSchema.NumUint,
},
AppsTotalExtraPages: numOrNil(uint64(record.TotalExtraAppPages)),
TotalBoxes: numOrNil(record.TotalBoxes),
TotalBoxBytes: numOrNil(record.TotalBoxBytes),
AppsTotalExtraPages: omitEmpty(uint64(record.TotalExtraAppPages)),
TotalBoxes: omitEmpty(record.TotalBoxes),
TotalBoxBytes: omitEmpty(record.TotalBoxBytes),
MinBalance: record.MinBalance(&consensus).Raw,
}
response := model.AccountResponse(account)
Expand Down Expand Up @@ -821,7 +821,7 @@ func (v2 *Handlers) GetStatus(ctx echo.Context) error {
response.UpgradeVotes = &votes
response.UpgradeYesVotes = &votesYes
response.UpgradeNoVotes = &votesNo
response.UpgradeNextProtocolVoteBefore = numOrNil(uint64(stat.NextProtocolVoteBefore))
response.UpgradeNextProtocolVoteBefore = omitEmpty(uint64(stat.NextProtocolVoteBefore))
response.UpgradeVoteRounds = &upgradeVoteRounds
}

Expand Down
55 changes: 20 additions & 35 deletions daemon/algod/api/server/v2/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,18 +75,13 @@ func addrOrNil(addr basics.Address) *string {
return &ret
}

func strOrNil(str string) *string {
if str == "" {
// omitEmpty defines a handy impl for all comparable types to convert from default value to nil ptr
func omitEmpty[T comparable](val T) *T {
var defaultVal T
if val == defaultVal {
return nil
}
return &str
}

func numOrNil(num uint64) *uint64 {
if num == 0 {
return nil
}
return &num
return &val
}

func byteOrNil(data []byte) *[]byte {
Expand All @@ -96,13 +91,6 @@ func byteOrNil(data []byte) *[]byte {
return &data
}

func trueOrNil(b bool) *bool {
if !b {
return nil
}
return &b
}

func nilToZero(numPtr *uint64) uint64 {
if numPtr == nil {
return 0
Expand All @@ -112,13 +100,10 @@ func nilToZero(numPtr *uint64) uint64 {

func computeCreatableIndexInPayset(tx node.TxnWithStatus, txnCounter uint64, payset []transactions.SignedTxnWithAD) (cidx *uint64) {
// Compute transaction index in block
offset := -1
for idx, stxnib := range payset {
if tx.Txn.Txn.ID() == stxnib.Txn.ID() {
offset = idx
break
}
}
txID := tx.Txn.Txn.ID()
offset := slices.IndexFunc(payset, func(ad transactions.SignedTxnWithAD) bool {
return ad.Txn.ID() == txID
})

// Sanity check that txn was in fetched block
if offset < 0 {
Expand Down Expand Up @@ -269,8 +254,8 @@ func stateDeltaToStateDelta(d basics.StateDelta) *model.StateDelta {
Key: base64.StdEncoding.EncodeToString([]byte(k)),
Value: model.EvalDelta{
Action: uint64(v.Action),
Bytes: strOrNil(base64.StdEncoding.EncodeToString([]byte(v.Bytes))),
Uint: numOrNil(v.Uint),
Bytes: omitEmpty(base64.StdEncoding.EncodeToString([]byte(v.Bytes))),
Uint: omitEmpty(v.Uint),
},
})
}
Expand Down Expand Up @@ -348,8 +333,8 @@ func ConvertInnerTxn(txn *transactions.SignedTxnWithAD) PreEncodedTxInfo {

// Since this is an inner txn, we know these indexes will be populated. No
// need to search payset for IDs
response.AssetIndex = numOrNil(uint64(txn.ApplyData.ConfigAsset))
response.ApplicationIndex = numOrNil(uint64(txn.ApplyData.ApplicationID))
response.AssetIndex = omitEmpty(uint64(txn.ApplyData.ConfigAsset))
response.ApplicationIndex = omitEmpty(uint64(txn.ApplyData.ApplicationID))

withStatus := node.TxnWithStatus{
Txn: txn.SignedTxn,
Expand Down Expand Up @@ -412,8 +397,8 @@ func convertTxnTrace(txnTrace *simulation.TransactionTrace) *model.SimulationTra
func convertTxnResult(txnResult simulation.TxnResult) PreEncodedSimulateTxnResult {
return PreEncodedSimulateTxnResult{
Txn: ConvertInnerTxn(&txnResult.Txn),
AppBudgetConsumed: numOrNil(txnResult.AppBudgetConsumed),
LogicSigBudgetConsumed: numOrNil(txnResult.LogicSigBudgetConsumed),
AppBudgetConsumed: omitEmpty(txnResult.AppBudgetConsumed),
LogicSigBudgetConsumed: omitEmpty(txnResult.LogicSigBudgetConsumed),
TransactionTrace: convertTxnTrace(txnResult.Trace),
}
}
Expand All @@ -426,9 +411,9 @@ func convertTxnGroupResult(txnGroupResult simulation.TxnGroupResult) PreEncodedS

encoded := PreEncodedSimulateTxnGroupResult{
Txns: txnResults,
FailureMessage: strOrNil(txnGroupResult.FailureMessage),
AppBudgetAdded: numOrNil(txnGroupResult.AppBudgetAdded),
AppBudgetConsumed: numOrNil(txnGroupResult.AppBudgetConsumed),
FailureMessage: omitEmpty(txnGroupResult.FailureMessage),
AppBudgetAdded: omitEmpty(txnGroupResult.AppBudgetAdded),
AppBudgetConsumed: omitEmpty(txnGroupResult.AppBudgetConsumed),
}

if len(txnGroupResult.FailedAt) > 0 {
Expand All @@ -443,10 +428,10 @@ func convertSimulationResult(result simulation.Result) PreEncodedSimulateRespons
var evalOverrides *model.SimulationEvalOverrides
if result.EvalOverrides != (simulation.ResultEvalOverrides{}) {
evalOverrides = &model.SimulationEvalOverrides{
AllowEmptySignatures: trueOrNil(result.EvalOverrides.AllowEmptySignatures),
AllowEmptySignatures: omitEmpty(result.EvalOverrides.AllowEmptySignatures),
MaxLogSize: result.EvalOverrides.MaxLogSize,
MaxLogCalls: result.EvalOverrides.MaxLogCalls,
ExtraOpcodeBudget: numOrNil(result.EvalOverrides.ExtraOpcodeBudget),
ExtraOpcodeBudget: omitEmpty(result.EvalOverrides.ExtraOpcodeBudget),
}
}

Expand Down

0 comments on commit 68a4aba

Please sign in to comment.