Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Add proposer parameter to GET /v2/blocks
  • Loading branch information
agodnic committed Oct 17, 2024
commit 3a92111741729cc96bc8f62ded4236e7038d8b2d
21 changes: 21 additions & 0 deletions api/converter_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,15 @@ func decodeDigest(str *string, field string, errorArr []string) (string, []strin
return "", errorArr
}

// decodeSdkAddress returns the sdk.Address representation of the input string, or appends an error to errorArr
func decodeSdkAddress(str string, field string, errorArr []string) (sdk.Address, []string) {
addr, err := sdk.DecodeAddress(str)
if err != nil {
return sdk.ZeroAddress, append(errorArr, fmt.Sprintf("%s '%s': %v", errUnableToParseAddress, field, err))
}
return addr, errorArr
}

// decodeAddress returns the byte representation of the input string, or appends an error to errorArr
func decodeAddress(str *string, field string, errorArr []string) ([]byte, []string) {
if str != nil {
Expand Down Expand Up @@ -832,6 +841,18 @@ func (si *ServerImplementation) blockParamsToBlockFilter(params generated.Search
filter.BeforeTime = *params.BeforeTime
}

// Address list
{
filter.Proposers = make(map[sdk.Address]struct{}, 0)
if params.Proposer != nil {
for _, s := range *params.Proposer {
var addr sdk.Address
addr, errorArr = decodeSdkAddress(s, "proposer", errorArr)
filter.Proposers[addr] = struct{}{}
}
}
}

// If there were any errorArr while setting up the BlockFilter, return now.
if len(errorArr) > 0 {
err = errors.New("invalid input: " + strings.Join(errorArr, ", "))
Expand Down
337 changes: 169 additions & 168 deletions api/generated/common/routes.go

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions api/generated/common/types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

462 changes: 235 additions & 227 deletions api/generated/v2/routes.go

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions api/generated/v2/types.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions api/indexer.oas2.json
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,9 @@
},
{
"$ref": "#/parameters/after-time"
},
{
"$ref": "#/parameters/proposer"
}
],
"responses": {
Expand Down Expand Up @@ -2726,6 +2729,17 @@
}
},
"parameters": {
"proposer": {
"type": "array",
"items": {
"type": "string",
"x-algorand-format": "Address"
},
"description": "Block proposer. Comma separated list of addresses.",
"name": "proposer",
"in": "query",
"required": false
},
"account-id": {
"type": "string",
"description": "account string",
Expand Down
28 changes: 28 additions & 0 deletions api/indexer.oas3.yml
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,20 @@
},
"x-algorand-format": "base64"
},
"proposer": {
"description": "Block proposer. Comma separated list of addresses.",
"explode": false,
"in": "query",
"name": "proposer",
"schema": {
"items": {
"type": "string",
"x-algorand-format": "Address"
},
"type": "array"
},
"style": "form"
},
"rekey-to": {
"description": "Include results which include the rekey-to field.",
"in": "query",
Expand Down Expand Up @@ -4861,6 +4875,20 @@
"x-algorand-format": "RFC3339 String"
},
"x-algorand-format": "RFC3339 String"
},
{
"description": "Block proposer. Comma separated list of addresses.",
"explode": false,
"in": "query",
"name": "proposer",
"schema": {
"items": {
"type": "string",
"x-algorand-format": "Address"
},
"type": "array"
},
"style": "form"
}
],
"responses": {
Expand Down
1 change: 1 addition & 0 deletions idb/idb.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ type BlockFilter struct {
MinRound *uint64
AfterTime time.Time
BeforeTime time.Time
Proposers map[sdk.Address]struct{}
}

// TransactionFilter is a parameter object with all the transaction filter options.
Expand Down
3 changes: 2 additions & 1 deletion idb/postgres/internal/schema/setup_postgres.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ CREATE TABLE public.block_header (
rewardslevel INT8 NOT NULL,
header JSONB NOT NULL,
CONSTRAINT block_header_pkey PRIMARY KEY (round ASC),
INDEX block_header_time (realtime ASC)
INDEX block_header_time (realtime ASC),
INDEX block_header_idx_proposer (((header->'prp')::TEXT), round) WHERE (header->'prp') IS NOT NULL
);

CREATE TABLE public.txn (
Expand Down
3 changes: 2 additions & 1 deletion idb/postgres/internal/schema/setup_postgres_sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions idb/postgres/postgres.go
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,16 @@ func buildBlockQuery(bf idb.BlockFilter) (query string, whereArgs []interface{},
)
whereArgs = append(whereArgs, bf.BeforeTime)
}
if len(bf.Proposers) > 0 {
var proposersStr []string
for addr := range bf.Proposers {
proposersStr = append(proposersStr, `'"`+addr.String()+`"'`)
}
whereParts = append(
whereParts,
fmt.Sprintf("( (header->'prp') IS NOT NULL AND ((header->'prp')::TEXT IN (%s)) )", strings.Join(proposersStr, ",")),
)
}
}

// SELECT, FROM
Expand Down