Skip to content

Commit

Permalink
Decimalize and add reward data to manifests (#406)
Browse files Browse the repository at this point in the history
* includes bones per share in reward manifest

* use strings to represent bones per share

* add per beacon and witness fields, changes fields to double types until someone yells

* include dc bones per share

* back to string format

* Decimalize

* Make things the same :-)

* Fix doc string (hopefully)

* Fix comments

* Change google package to helium

* Use different action that hopefully doesn't fail

* Test to see if this runs the action

* Revert "Test to see if this runs the action"

This reverts commit 181e062.

* Try checkout v3

* Clang 15

* Add boosted_poc_bones_per_coverage_point

* Remove unused field in mobile reward data

* Change names to reward-shares

---------

Co-authored-by: Andrew McKenzie <andrewb.mckenzie@gmail.com>
  • Loading branch information
Matthew Plant and andymck authored Jul 11, 2024
1 parent ff0d2ba commit 04ef234
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 0 deletions.
1 change: 1 addition & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const SERVICES: &[&str] = &[

const MESSAGES: &[&str] = &[
"src/blockchain_txn.proto",
"src/decimal.proto",
"src/entropy.proto",
"src/service_provider.proto",
"src/data_rate.proto",
Expand Down
97 changes: 97 additions & 0 deletions src/decimal.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package helium;

option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/type/decimal;decimal";
option java_multiple_files = true;
option java_outer_classname = "DecimalProto";
option java_package = "com.google.type";
option objc_class_prefix = "GTP";

// A representation of a decimal value, such as 2.5. Clients may convert values
// into language-native decimal formats, such as Java's [BigDecimal] or
// Python's [decimal.Decimal].
//
// [BigDecimal]:
// https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html
// [decimal.Decimal]: https://docs.python.org/3/library/decimal.html
message Decimal {
// The decimal value, as a string.
//
// The string representation consists of an optional sign, `+` (`U+002B`)
// or `-` (`U+002D`), followed by a sequence of zero or more decimal digits
// ("the integer"), optionally followed by a fraction, optionally followed
// by an exponent.
//
// The fraction consists of a decimal point followed by zero or more decimal
// digits. The string must contain at least one digit in either the integer
// or the fraction. The number formed by the sign, the integer and the
// fraction is referred to as the significand.
//
// The exponent consists of the character `e` (`U+0065`) or `E` (`U+0045`)
// followed by one or more decimal digits.
//
// Services **should** normalize decimal values before storing them by:
//
// - Removing an explicitly-provided `+` sign (`+2.5` -> `2.5`).
// - Replacing a zero-length integer value with `0` (`.5` -> `0.5`).
// - Coercing the exponent character to lower-case (`2.5E8` -> `2.5e8`).
// - Removing an explicitly-provided zero exponent (`2.5e0` -> `2.5`).
//
// Services **may** perform additional normalization based on its own needs
// and the internal decimal implementation selected, such as shifting the
// decimal point and exponent value together (example: `2.5e-1` <-> `0.25`).
// Additionally, services **may** preserve trailing zeroes in the fraction
// to indicate increased precision, but are not required to do so.
//
// Note that only the `.` character is supported to divide the integer
// and the fraction; `,` **should not** be supported regardless of locale.
// Additionally, thousand separators **should not** be supported. If a
// service does support them, values **must** be normalized.
//
// The ENBF grammar is:
//
//```text
// DecimalString =
// [Sign] Significand [Exponent];
//
// Sign = '+' | '-';
//
// Significand =
// Digits ['.'] [Digits] | [Digits] '.' Digits;
//
// Exponent = ('e' | 'E') [Sign] Digits;
//
// Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };
//```
//
// Services **should** clearly document the range of supported values, the
// maximum supported precision (total number of digits), and, if applicable,
// the scale (number of digits after the decimal point), as well as how it
// behaves when receiving out-of-bounds values.
//
// Services **may** choose to accept values passed as input even when the
// value has a higher precision or scale than the service supports, and
// **should** round the value to fit the supported scale. Alternatively, the
// service **may** error with `400 Bad Request` (`INVALID_ARGUMENT` in gRPC)
// if precision would be lost.
//
// Services **should** error with `400 Bad Request` (`INVALID_ARGUMENT` in
// gRPC) if the service receives a value outside of the supported range.
string value = 1;
}
17 changes: 17 additions & 0 deletions src/reward_manifest.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,27 @@ syntax = "proto3";

package helium;

import "decimal.proto";

message mobile_reward_data {
Decimal poc_bones_per_reward_share = 1;
Decimal boosted_poc_bones_per_reward_share = 2;
}

message iot_reward_data {
Decimal poc_bones_per_beacon_reward_share = 1;
Decimal poc_bones_per_witness_reward_share = 2;
Decimal dc_bones_per_share = 3;
}

message reward_manifest {
repeated string written_files = 1;
// Unix timestamp in seconds of the start of the inventory period
uint64 start_timestamp = 2;
// Unix timestamp in seconds of the end of the inventory period
uint64 end_timestamp = 3;
oneof reward_data {
mobile_reward_data mobile_reward_data = 4;
iot_reward_data iot_reward_data = 5;
}
}

0 comments on commit 04ef234

Please sign in to comment.