diff --git a/api/openapi.yml b/api/openapi.yml index 9cd5c99..ac91fd8 100644 --- a/api/openapi.yml +++ b/api/openapi.yml @@ -1,4 +1,4 @@ -openapi: 3.0.2 +openapi: 3.1.0 info: title: REST api to TON blockchain explorer version: 2.0.0 @@ -1822,6 +1822,7 @@ paths: required: true schema: type: string + format: address - in: query name: currency required: false @@ -1864,8 +1865,9 @@ paths: - points properties: points: - additionalProperties: true - example: { } + type: array + items: + $ref: '#/components/schemas/ChartPoints' 'default': $ref: '#/components/responses/Error' /v2/rates/markets: @@ -3499,7 +3501,7 @@ components: shard: type: string # x-js-format: bigint ??? - example: "8000000000000000" + example: "8000000000000000" seqno: type: integer example: 21734019 @@ -5413,7 +5415,7 @@ components: example: https://cache.tonapi.io/images/jetton.jpg verification: $ref: '#/components/schemas/JettonVerificationType' - custom_payload_api_uri: # todo: maybe remove + custom_payload_api_uri: # todo: maybe remove type: string JettonBalance: type: object @@ -5495,7 +5497,6 @@ components: enum: - getgems - tonkeeper - - ton.diamonds TrustType: type: string example: whitelist @@ -6759,6 +6760,15 @@ components: type: array items: $ref: '#/components/schemas/DecodedRawMessage' + wallet_v5: + type: object + required: + - raw_messages + properties: + raw_messages: + type: array + items: + $ref: '#/components/schemas/DecodedRawMessage' wallet_highload_v2: type: object required: @@ -7223,6 +7233,16 @@ components: example: "blah_blah.ton" dns_item: $ref: '#/components/schemas/NftItem' + ChartPoints: + type: array + items: + - type: integer + format: int64 + description: Unix timestamp of the data point + - type: number + description: Decimal price of the token in the requested currency + additionalItems: false + example: [ 1668436763, 97.21323234 ] AccountInfoByStateInit: type: object required: diff --git a/oas_json_gen.go b/oas_json_gen.go index f046421..868c63e 100644 --- a/oas_json_gen.go +++ b/oas_json_gen.go @@ -11022,6 +11022,74 @@ func (s *BouncePhaseType) UnmarshalJSON(data []byte) error { return s.Decode(d) } +// Encode implements json.Marshaler. +func (s *ChartPoints) Encode(e *jx.Encoder) { + e.ArrStart() + s.encodeTuple(e) + e.ArrEnd() +} + +// encodeTuple encodes fields. +func (s *ChartPoints) encodeTuple(e *jx.Encoder) { + { + elem := s.V0 + e.Int64(elem) + } + { + elem := s.V1 + e.Float64(elem) + } +} + +// Decode decodes ChartPoints from json. +func (s *ChartPoints) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode ChartPoints to nil") + } + n := 0 + if err := d.Arr(func(d *jx.Decoder) error { + switch n { + case 0: + n++ + v, err := d.Int64() + s.V0 = int64(v) + if err != nil { + return err + } + return nil + case 1: + n++ + v, err := d.Float64() + s.V1 = float64(v) + if err != nil { + return err + } + return nil + default: + return errors.Errorf("expected 2 elements, got %d", n) + } + }); err != nil { + return err + } + if n == 0 { + return errors.Errorf("expected 2 elements, got %d", n) + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *ChartPoints) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *ChartPoints) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode implements json.Marshaler. func (s *ComputePhase) Encode(e *jx.Encoder) { e.ObjStart() @@ -11977,6 +12045,12 @@ func (s *DecodedMessageExtInMsgDecoded) encodeFields(e *jx.Encoder) { s.WalletV4.Encode(e) } } + { + if s.WalletV5.Set { + e.FieldStart("wallet_v5") + s.WalletV5.Encode(e) + } + } { if s.WalletHighloadV2.Set { e.FieldStart("wallet_highload_v2") @@ -11985,10 +12059,11 @@ func (s *DecodedMessageExtInMsgDecoded) encodeFields(e *jx.Encoder) { } } -var jsonFieldsNameOfDecodedMessageExtInMsgDecoded = [3]string{ +var jsonFieldsNameOfDecodedMessageExtInMsgDecoded = [4]string{ 0: "wallet_v3", 1: "wallet_v4", - 2: "wallet_highload_v2", + 2: "wallet_v5", + 3: "wallet_highload_v2", } // Decode decodes DecodedMessageExtInMsgDecoded from json. @@ -12019,6 +12094,16 @@ func (s *DecodedMessageExtInMsgDecoded) Decode(d *jx.Decoder) error { }(); err != nil { return errors.Wrap(err, "decode field \"wallet_v4\"") } + case "wallet_v5": + if err := func() error { + s.WalletV5.Reset() + if err := s.WalletV5.Decode(d); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"wallet_v5\"") + } case "wallet_highload_v2": if err := func() error { s.WalletHighloadV2.Reset() @@ -12524,6 +12609,112 @@ func (s *DecodedMessageExtInMsgDecodedWalletV4) UnmarshalJSON(data []byte) error return s.Decode(d) } +// Encode implements json.Marshaler. +func (s *DecodedMessageExtInMsgDecodedWalletV5) Encode(e *jx.Encoder) { + e.ObjStart() + s.encodeFields(e) + e.ObjEnd() +} + +// encodeFields encodes fields. +func (s *DecodedMessageExtInMsgDecodedWalletV5) encodeFields(e *jx.Encoder) { + { + e.FieldStart("raw_messages") + e.ArrStart() + for _, elem := range s.RawMessages { + elem.Encode(e) + } + e.ArrEnd() + } +} + +var jsonFieldsNameOfDecodedMessageExtInMsgDecodedWalletV5 = [1]string{ + 0: "raw_messages", +} + +// Decode decodes DecodedMessageExtInMsgDecodedWalletV5 from json. +func (s *DecodedMessageExtInMsgDecodedWalletV5) Decode(d *jx.Decoder) error { + if s == nil { + return errors.New("invalid: unable to decode DecodedMessageExtInMsgDecodedWalletV5 to nil") + } + var requiredBitSet [1]uint8 + + if err := d.ObjBytes(func(d *jx.Decoder, k []byte) error { + switch string(k) { + case "raw_messages": + requiredBitSet[0] |= 1 << 0 + if err := func() error { + s.RawMessages = make([]DecodedRawMessage, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem DecodedRawMessage + if err := elem.Decode(d); err != nil { + return err + } + s.RawMessages = append(s.RawMessages, elem) + return nil + }); err != nil { + return err + } + return nil + }(); err != nil { + return errors.Wrap(err, "decode field \"raw_messages\"") + } + default: + return d.Skip() + } + return nil + }); err != nil { + return errors.Wrap(err, "decode DecodedMessageExtInMsgDecodedWalletV5") + } + // Validate required fields. + var failures []validate.FieldError + for i, mask := range [1]uint8{ + 0b00000001, + } { + if result := (requiredBitSet[i] & mask) ^ mask; result != 0 { + // Mask only required fields and check equality to mask using XOR. + // + // If XOR result is not zero, result is not equal to expected, so some fields are missed. + // Bits of fields which would be set are actually bits of missed fields. + missed := bits.OnesCount8(result) + for bitN := 0; bitN < missed; bitN++ { + bitIdx := bits.TrailingZeros8(result) + fieldIdx := i*8 + bitIdx + var name string + if fieldIdx < len(jsonFieldsNameOfDecodedMessageExtInMsgDecodedWalletV5) { + name = jsonFieldsNameOfDecodedMessageExtInMsgDecodedWalletV5[fieldIdx] + } else { + name = strconv.Itoa(fieldIdx) + } + failures = append(failures, validate.FieldError{ + Name: name, + Error: validate.ErrFieldRequired, + }) + // Reset bit. + result &^= 1 << bitIdx + } + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s *DecodedMessageExtInMsgDecodedWalletV5) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *DecodedMessageExtInMsgDecodedWalletV5) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode implements json.Marshaler. func (s *DecodedRawMessage) Encode(e *jx.Encoder) { e.ObjStart() @@ -16699,10 +16890,12 @@ func (s *GetChartRatesOK) Encode(e *jx.Encoder) { // encodeFields encodes fields. func (s *GetChartRatesOK) encodeFields(e *jx.Encoder) { { - if len(s.Points) != 0 { - e.FieldStart("points") - e.Raw(s.Points) + e.FieldStart("points") + e.ArrStart() + for _, elem := range s.Points { + elem.Encode(e) } + e.ArrEnd() } } @@ -16722,9 +16915,15 @@ func (s *GetChartRatesOK) Decode(d *jx.Decoder) error { case "points": requiredBitSet[0] |= 1 << 0 if err := func() error { - v, err := d.RawAppend(nil) - s.Points = jx.Raw(v) - if err != nil { + s.Points = make([]ChartPoints, 0) + if err := d.Arr(func(d *jx.Decoder) error { + var elem ChartPoints + if err := elem.Decode(d); err != nil { + return err + } + s.Points = append(s.Points, elem) + return nil + }); err != nil { return err } return nil @@ -26974,8 +27173,6 @@ func (s *NftApprovedByItem) Decode(d *jx.Decoder) error { *s = NftApprovedByItemGetgems case NftApprovedByItemTonkeeper: *s = NftApprovedByItemTonkeeper - case NftApprovedByItemTonDiamonds: - *s = NftApprovedByItemTonDiamonds default: *s = NftApprovedByItem(v) } @@ -29934,6 +30131,39 @@ func (s *OptDecodedMessageExtInMsgDecodedWalletV4) UnmarshalJSON(data []byte) er return s.Decode(d) } +// Encode encodes DecodedMessageExtInMsgDecodedWalletV5 as json. +func (o OptDecodedMessageExtInMsgDecodedWalletV5) Encode(e *jx.Encoder) { + if !o.Set { + return + } + o.Value.Encode(e) +} + +// Decode decodes DecodedMessageExtInMsgDecodedWalletV5 from json. +func (o *OptDecodedMessageExtInMsgDecodedWalletV5) Decode(d *jx.Decoder) error { + if o == nil { + return errors.New("invalid: unable to decode OptDecodedMessageExtInMsgDecodedWalletV5 to nil") + } + o.Set = true + if err := o.Value.Decode(d); err != nil { + return err + } + return nil +} + +// MarshalJSON implements stdjson.Marshaler. +func (s OptDecodedMessageExtInMsgDecodedWalletV5) MarshalJSON() ([]byte, error) { + e := jx.Encoder{} + s.Encode(&e) + return e.Bytes(), nil +} + +// UnmarshalJSON implements stdjson.Unmarshaler. +func (s *OptDecodedMessageExtInMsgDecodedWalletV5) UnmarshalJSON(data []byte) error { + d := jx.DecodeBytes(data) + return s.Decode(d) +} + // Encode encodes DepositStakeAction as json. func (o OptDepositStakeAction) Encode(e *jx.Encoder) { if !o.Set { diff --git a/oas_schemas_gen.go b/oas_schemas_gen.go index e6b8605..fe96b1b 100644 --- a/oas_schemas_gen.go +++ b/oas_schemas_gen.go @@ -4081,6 +4081,32 @@ func (s *BouncePhaseType) UnmarshalText(data []byte) error { } } +// Ref: #/components/schemas/ChartPoints +type ChartPoints struct { + V0 int64 + V1 float64 +} + +// GetV0 returns the value of V0. +func (s *ChartPoints) GetV0() int64 { + return s.V0 +} + +// GetV1 returns the value of V1. +func (s *ChartPoints) GetV1() float64 { + return s.V1 +} + +// SetV0 sets the value of V0. +func (s *ChartPoints) SetV0(val int64) { + s.V0 = val +} + +// SetV1 sets the value of V1. +func (s *ChartPoints) SetV1(val float64) { + s.V1 = val +} + // Ref: #/components/schemas/ComputePhase type ComputePhase struct { Skipped bool `json:"skipped"` @@ -4420,6 +4446,7 @@ func (s *DecodedMessage) SetExtInMsgDecoded(val OptDecodedMessageExtInMsgDecoded type DecodedMessageExtInMsgDecoded struct { WalletV3 OptDecodedMessageExtInMsgDecodedWalletV3 `json:"wallet_v3"` WalletV4 OptDecodedMessageExtInMsgDecodedWalletV4 `json:"wallet_v4"` + WalletV5 OptDecodedMessageExtInMsgDecodedWalletV5 `json:"wallet_v5"` WalletHighloadV2 OptDecodedMessageExtInMsgDecodedWalletHighloadV2 `json:"wallet_highload_v2"` } @@ -4433,6 +4460,11 @@ func (s *DecodedMessageExtInMsgDecoded) GetWalletV4() OptDecodedMessageExtInMsgD return s.WalletV4 } +// GetWalletV5 returns the value of WalletV5. +func (s *DecodedMessageExtInMsgDecoded) GetWalletV5() OptDecodedMessageExtInMsgDecodedWalletV5 { + return s.WalletV5 +} + // GetWalletHighloadV2 returns the value of WalletHighloadV2. func (s *DecodedMessageExtInMsgDecoded) GetWalletHighloadV2() OptDecodedMessageExtInMsgDecodedWalletHighloadV2 { return s.WalletHighloadV2 @@ -4448,6 +4480,11 @@ func (s *DecodedMessageExtInMsgDecoded) SetWalletV4(val OptDecodedMessageExtInMs s.WalletV4 = val } +// SetWalletV5 sets the value of WalletV5. +func (s *DecodedMessageExtInMsgDecoded) SetWalletV5(val OptDecodedMessageExtInMsgDecodedWalletV5) { + s.WalletV5 = val +} + // SetWalletHighloadV2 sets the value of WalletHighloadV2. func (s *DecodedMessageExtInMsgDecoded) SetWalletHighloadV2(val OptDecodedMessageExtInMsgDecodedWalletHighloadV2) { s.WalletHighloadV2 = val @@ -4594,6 +4631,20 @@ func (s *DecodedMessageExtInMsgDecodedWalletV4) SetRawMessages(val []DecodedRawM s.RawMessages = val } +type DecodedMessageExtInMsgDecodedWalletV5 struct { + RawMessages []DecodedRawMessage `json:"raw_messages"` +} + +// GetRawMessages returns the value of RawMessages. +func (s *DecodedMessageExtInMsgDecodedWalletV5) GetRawMessages() []DecodedRawMessage { + return s.RawMessages +} + +// SetRawMessages sets the value of RawMessages. +func (s *DecodedMessageExtInMsgDecodedWalletV5) SetRawMessages(val []DecodedRawMessage) { + s.RawMessages = val +} + // Ref: #/components/schemas/DecodedRawMessage type DecodedRawMessage struct { Message DecodedRawMessageMessage `json:"message"` @@ -5684,16 +5735,16 @@ func (s *GetBlockchainAccountTransactionsSortOrder) UnmarshalText(data []byte) e } type GetChartRatesOK struct { - Points jx.Raw `json:"points"` + Points []ChartPoints `json:"points"` } // GetPoints returns the value of Points. -func (s *GetChartRatesOK) GetPoints() jx.Raw { +func (s *GetChartRatesOK) GetPoints() []ChartPoints { return s.Points } // SetPoints sets the value of Points. -func (s *GetChartRatesOK) SetPoints(val jx.Raw) { +func (s *GetChartRatesOK) SetPoints(val []ChartPoints) { s.Points = val } @@ -9133,9 +9184,8 @@ type NftApprovedBy []NftApprovedByItem type NftApprovedByItem string const ( - NftApprovedByItemGetgems NftApprovedByItem = "getgems" - NftApprovedByItemTonkeeper NftApprovedByItem = "tonkeeper" - NftApprovedByItemTonDiamonds NftApprovedByItem = "ton.diamonds" + NftApprovedByItemGetgems NftApprovedByItem = "getgems" + NftApprovedByItemTonkeeper NftApprovedByItem = "tonkeeper" ) // AllValues returns all NftApprovedByItem values. @@ -9143,7 +9193,6 @@ func (NftApprovedByItem) AllValues() []NftApprovedByItem { return []NftApprovedByItem{ NftApprovedByItemGetgems, NftApprovedByItemTonkeeper, - NftApprovedByItemTonDiamonds, } } @@ -9154,8 +9203,6 @@ func (s NftApprovedByItem) MarshalText() ([]byte, error) { return []byte(s), nil case NftApprovedByItemTonkeeper: return []byte(s), nil - case NftApprovedByItemTonDiamonds: - return []byte(s), nil default: return nil, errors.Errorf("invalid value: %q", s) } @@ -9170,9 +9217,6 @@ func (s *NftApprovedByItem) UnmarshalText(data []byte) error { case NftApprovedByItemTonkeeper: *s = NftApprovedByItemTonkeeper return nil - case NftApprovedByItemTonDiamonds: - *s = NftApprovedByItemTonDiamonds - return nil default: return errors.Errorf("invalid value: %q", data) } @@ -11889,6 +11933,52 @@ func (o OptDecodedMessageExtInMsgDecodedWalletV4) Or(d DecodedMessageExtInMsgDec return d } +// NewOptDecodedMessageExtInMsgDecodedWalletV5 returns new OptDecodedMessageExtInMsgDecodedWalletV5 with value set to v. +func NewOptDecodedMessageExtInMsgDecodedWalletV5(v DecodedMessageExtInMsgDecodedWalletV5) OptDecodedMessageExtInMsgDecodedWalletV5 { + return OptDecodedMessageExtInMsgDecodedWalletV5{ + Value: v, + Set: true, + } +} + +// OptDecodedMessageExtInMsgDecodedWalletV5 is optional DecodedMessageExtInMsgDecodedWalletV5. +type OptDecodedMessageExtInMsgDecodedWalletV5 struct { + Value DecodedMessageExtInMsgDecodedWalletV5 + Set bool +} + +// IsSet returns true if OptDecodedMessageExtInMsgDecodedWalletV5 was set. +func (o OptDecodedMessageExtInMsgDecodedWalletV5) IsSet() bool { return o.Set } + +// Reset unsets value. +func (o *OptDecodedMessageExtInMsgDecodedWalletV5) Reset() { + var v DecodedMessageExtInMsgDecodedWalletV5 + o.Value = v + o.Set = false +} + +// SetTo sets value to v. +func (o *OptDecodedMessageExtInMsgDecodedWalletV5) SetTo(v DecodedMessageExtInMsgDecodedWalletV5) { + o.Set = true + o.Value = v +} + +// Get returns value and boolean that denotes whether value was set. +func (o OptDecodedMessageExtInMsgDecodedWalletV5) Get() (v DecodedMessageExtInMsgDecodedWalletV5, ok bool) { + if !o.Set { + return v, false + } + return o.Value, true +} + +// Or returns value if set, or given parameter if does not. +func (o OptDecodedMessageExtInMsgDecodedWalletV5) Or(d DecodedMessageExtInMsgDecodedWalletV5) DecodedMessageExtInMsgDecodedWalletV5 { + if v, ok := o.Get(); ok { + return v + } + return d +} + // NewOptDepositStakeAction returns new OptDepositStakeAction with value set to v. func NewOptDepositStakeAction(v DepositStakeAction) OptDepositStakeAction { return OptDepositStakeAction{ diff --git a/oas_validators_gen.go b/oas_validators_gen.go index c50b82f..c1b3120 100644 --- a/oas_validators_gen.go +++ b/oas_validators_gen.go @@ -1619,6 +1619,25 @@ func (s BouncePhaseType) Validate() error { } } +func (s *ChartPoints) Validate() error { + var failures []validate.FieldError + if err := func() error { + if err := (validate.Float{}).Validate(float64(s.V1)); err != nil { + return errors.Wrap(err, "float") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "V1", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + func (s *ComputePhase) Validate() error { var failures []validate.FieldError if err := func() error { @@ -1741,6 +1760,24 @@ func (s *DecodedMessageExtInMsgDecoded) Validate() error { Error: err, }) } + if err := func() error { + if value, ok := s.WalletV5.Get(); ok { + if err := func() error { + if err := value.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + return err + } + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "wallet_v5", + Error: err, + }) + } if err := func() error { if value, ok := s.WalletHighloadV2.Get(); ok { if err := func() error { @@ -1822,6 +1859,25 @@ func (s *DecodedMessageExtInMsgDecodedWalletV4) Validate() error { return nil } +func (s *DecodedMessageExtInMsgDecodedWalletV5) Validate() error { + var failures []validate.FieldError + if err := func() error { + if s.RawMessages == nil { + return errors.New("nil is invalid value") + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "raw_messages", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + func (s *DepositStakeAction) Validate() error { var failures []validate.FieldError if err := func() error { @@ -2155,6 +2211,42 @@ func (s GetBlockchainAccountTransactionsSortOrder) Validate() error { } } +func (s *GetChartRatesOK) Validate() error { + var failures []validate.FieldError + if err := func() error { + if s.Points == nil { + return errors.New("nil is invalid value") + } + var failures []validate.FieldError + for i, elem := range s.Points { + if err := func() error { + if err := elem.Validate(); err != nil { + return err + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: fmt.Sprintf("[%d]", i), + Error: err, + }) + } + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil + }(); err != nil { + failures = append(failures, validate.FieldError{ + Name: "points", + Error: err, + }) + } + if len(failures) > 0 { + return &validate.Error{Fields: failures} + } + return nil +} + func (s GetInscriptionOpTemplateOperation) Validate() error { switch s { case "transfer": @@ -3430,8 +3522,6 @@ func (s NftApprovedByItem) Validate() error { return nil case "tonkeeper": return nil - case "ton.diamonds": - return nil default: return errors.Errorf("invalid value: %v", s) }