Skip to content

Commit

Permalink
Add proposer parameter to GET /v2/blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
agodnic committed Oct 17, 2024
1 parent ecf2f87 commit 3a92111
Show file tree
Hide file tree
Showing 11 changed files with 491 additions and 397 deletions.
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

0 comments on commit 3a92111

Please sign in to comment.