github.com/okex/exchain@v1.8.0/libs/tendermint/abci/types/amino.go (about) 1 package types 2 3 import ( 4 "bytes" 5 "errors" 6 "fmt" 7 "time" 8 9 "github.com/okex/exchain/libs/tendermint/libs/kv" 10 11 "github.com/tendermint/go-amino" 12 ) 13 14 func (pubkey PubKey) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 15 var buf bytes.Buffer 16 buf.Grow(pubkey.AminoSize(cdc)) 17 err := pubkey.MarshalAminoTo(cdc, &buf) 18 if err != nil { 19 return nil, err 20 } 21 return buf.Bytes(), nil 22 } 23 24 func (pubkey *PubKey) MarshalAminoTo(_ *amino.Codec, buf *bytes.Buffer) error { 25 // field 1 26 if pubkey.Type != "" { 27 const pbKey = 1<<3 | 2 28 err := amino.EncodeStringWithKeyToBuffer(buf, pubkey.Type, pbKey) 29 if err != nil { 30 return err 31 } 32 } 33 34 // field 2 35 if len(pubkey.Data) != 0 { 36 const pbKey = 2<<3 | 2 37 err := amino.EncodeByteSliceWithKeyToBuffer(buf, pubkey.Data, pbKey) 38 if err != nil { 39 return err 40 } 41 } 42 43 return nil 44 } 45 46 // UnmarshalFromAmino unmarshal data from amino bytes. 47 func (pub *PubKey) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 48 var dataLen uint64 = 0 49 var subData []byte 50 51 for { 52 data = data[dataLen:] 53 54 if len(data) == 0 { 55 break 56 } 57 58 pos, aminoType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 59 if err != nil { 60 return err 61 } 62 data = data[1:] 63 64 if aminoType == amino.Typ3_ByteLength { 65 var n int 66 dataLen, n, _ = amino.DecodeUvarint(data) 67 68 data = data[n:] 69 subData = data[:dataLen] 70 } 71 72 switch pos { 73 case 1: 74 pub.Type = string(subData) 75 76 case 2: 77 pub.Data = make([]byte, len(subData)) 78 copy(pub.Data, subData) 79 80 default: 81 return fmt.Errorf("unexpect feild num %d", pos) 82 } 83 } 84 return nil 85 } 86 87 func (valUpdate ValidatorUpdate) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 88 var buf bytes.Buffer 89 buf.Grow(valUpdate.AminoSize(cdc)) 90 err := valUpdate.MarshalAminoTo(cdc, &buf) 91 if err != nil { 92 return nil, err 93 } 94 return buf.Bytes(), nil 95 } 96 97 func (valUpdate ValidatorUpdate) MarshalAminoTo(cdc *amino.Codec, buf *bytes.Buffer) error { 98 var err error 99 // field 1 100 pubkeySize := valUpdate.PubKey.AminoSize(cdc) 101 if pubkeySize > 0 { 102 const pbKey = 1<<3 | 2 103 buf.WriteByte(pbKey) 104 err = amino.EncodeUvarintToBuffer(buf, uint64(pubkeySize)) 105 if err != nil { 106 return err 107 } 108 lenBeforeData := buf.Len() 109 err = valUpdate.PubKey.MarshalAminoTo(cdc, buf) 110 if err != nil { 111 return err 112 } 113 if buf.Len()-lenBeforeData != pubkeySize { 114 return amino.NewSizerError(valUpdate.PubKey, buf.Len()-lenBeforeData, pubkeySize) 115 } 116 } 117 118 // field 2 119 if valUpdate.Power != 0 { 120 const pbKey = 2 << 3 121 err = amino.EncodeUvarintWithKeyToBuffer(buf, uint64(valUpdate.Power), pbKey) 122 if err != nil { 123 return err 124 } 125 } 126 127 return nil 128 } 129 130 // UnmarshalFromAmino unmarshal data from amino bytes. 131 func (vu *ValidatorUpdate) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 132 var dataLen uint64 = 0 133 var subData []byte 134 135 for { 136 data = data[dataLen:] 137 if len(data) == 0 { 138 break 139 } 140 pos, pbType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 141 if err != nil { 142 return err 143 } 144 data = data[1:] 145 146 if pbType == amino.Typ3_ByteLength { 147 var n int 148 dataLen, n, _ = amino.DecodeUvarint(data) 149 150 data = data[n:] 151 if len(data) < int(dataLen) { 152 return errors.New("not enough data") 153 } 154 subData = data[:dataLen] 155 } 156 157 switch pos { 158 case 1: 159 err := vu.PubKey.UnmarshalFromAmino(cdc, subData) 160 if err != nil { 161 return err 162 } 163 164 case 2: 165 power, n, err := amino.DecodeUvarint(data) 166 if err != nil { 167 return err 168 } 169 dataLen = uint64(n) 170 vu.Power = int64(power) 171 172 default: 173 return fmt.Errorf("unexpect feild num %d", pos) 174 } 175 } 176 return nil 177 } 178 179 func (params BlockParams) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 180 var buf bytes.Buffer 181 buf.Grow(params.AminoSize(cdc)) 182 err := params.MarshalAminoTo(cdc, &buf) 183 if err != nil { 184 return nil, err 185 } 186 return buf.Bytes(), nil 187 } 188 189 func (params BlockParams) MarshalAminoTo(_ *amino.Codec, buf *bytes.Buffer) error { 190 // field 1 191 if params.MaxBytes != 0 { 192 const pbKey = 1 << 3 193 err := amino.EncodeUvarintWithKeyToBuffer(buf, uint64(params.MaxBytes), pbKey) 194 if err != nil { 195 return err 196 } 197 } 198 199 // field 2 200 if params.MaxGas != 0 { 201 const pbKey = 2 << 3 202 err := amino.EncodeUvarintWithKeyToBuffer(buf, uint64(params.MaxGas), pbKey) 203 if err != nil { 204 return err 205 } 206 } 207 return nil 208 } 209 210 // UnmarshalFromAmino unmarshal data from amino bytes. 211 func (bp *BlockParams) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 212 var dataLen uint64 = 0 213 214 for { 215 data = data[dataLen:] 216 217 if len(data) == 0 { 218 break 219 } 220 221 pos, _, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 222 if err != nil { 223 return err 224 } 225 data = data[1:] 226 227 switch pos { 228 case 1: 229 mb, n, err := amino.DecodeUvarint(data) 230 if err != nil { 231 return err 232 } 233 dataLen = uint64(n) 234 bp.MaxBytes = int64(mb) 235 case 2: 236 mg, n, err := amino.DecodeUvarint(data) 237 if err != nil { 238 return err 239 } 240 dataLen = uint64(n) 241 bp.MaxGas = int64(mg) 242 243 default: 244 return fmt.Errorf("unexpect feild num %d", pos) 245 } 246 } 247 return nil 248 } 249 250 func (params EvidenceParams) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 251 var buf bytes.Buffer 252 buf.Grow(params.AminoSize(cdc)) 253 err := params.MarshalAminoTo(cdc, &buf) 254 if err != nil { 255 return nil, err 256 } 257 return buf.Bytes(), nil 258 } 259 260 func (params EvidenceParams) MarshalAminoTo(_ *amino.Codec, buf *bytes.Buffer) error { 261 var err error 262 // field 1 263 if params.MaxAgeNumBlocks != 0 { 264 const pbKey = 1 << 3 265 err = amino.EncodeUvarintWithKeyToBuffer(buf, uint64(params.MaxAgeNumBlocks), pbKey) 266 if err != nil { 267 return err 268 } 269 } 270 // field 2 271 if params.MaxAgeDuration != 0 { 272 const pbKey = 2 << 3 273 err = amino.EncodeUvarintWithKeyToBuffer(buf, uint64(params.MaxAgeDuration), pbKey) 274 if err != nil { 275 return err 276 } 277 } 278 return nil 279 } 280 281 // UnmarshalFromAmino unmarshal data from amino bytes. 282 func (ep *EvidenceParams) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 283 var dataLen uint64 = 0 284 285 for { 286 data = data[dataLen:] 287 if len(data) == 0 { 288 break 289 } 290 pos, _, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 291 if err != nil { 292 return err 293 } 294 data = data[1:] 295 296 switch pos { 297 case 1: 298 ma, n, err := amino.DecodeUvarint(data) 299 if err != nil { 300 return err 301 } 302 dataLen = uint64(n) 303 ep.MaxAgeNumBlocks = int64(ma) 304 305 case 2: 306 md, n, err := amino.DecodeUvarint(data) 307 if err != nil { 308 return err 309 } 310 dataLen = uint64(n) 311 ep.MaxAgeDuration = time.Duration(md) 312 313 default: 314 return fmt.Errorf("unexpect feild num %d", pos) 315 } 316 } 317 return nil 318 } 319 320 func (params ValidatorParams) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 321 var buf bytes.Buffer 322 buf.Grow(params.AminoSize(cdc)) 323 err := params.MarshalAminoTo(cdc, &buf) 324 if err != nil { 325 return nil, err 326 } 327 return buf.Bytes(), nil 328 } 329 330 func (params ValidatorParams) MarshalAminoTo(_ *amino.Codec, buf *bytes.Buffer) error { 331 var err error 332 // field 1 333 const pbKey = 1<<3 | 2 334 for i := 0; i < len(params.PubKeyTypes); i++ { 335 err = buf.WriteByte(pbKey) 336 if err != nil { 337 return err 338 } 339 err = amino.EncodeStringToBuffer(buf, params.PubKeyTypes[i]) 340 if err != nil { 341 return err 342 } 343 } 344 return nil 345 } 346 347 // UnmarshalFromAmino unmarshal data from amino bytes. 348 func (vp *ValidatorParams) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 349 var dataLen uint64 = 0 350 var subData []byte 351 352 for { 353 data = data[dataLen:] 354 if len(data) == 0 { 355 break 356 } 357 358 pos, pbType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 359 if err != nil { 360 return err 361 } 362 data = data[1:] 363 364 if pbType == amino.Typ3_ByteLength { 365 var n int 366 dataLen, n, _ = amino.DecodeUvarint(data) 367 368 data = data[n:] 369 if len(data) < int(dataLen) { 370 return errors.New("not enough data") 371 } 372 subData = data[:dataLen] 373 } 374 375 switch pos { 376 case 1: 377 vp.PubKeyTypes = append(vp.PubKeyTypes, string(subData)) 378 379 default: 380 return fmt.Errorf("unexpect feild num %d", pos) 381 } 382 } 383 return nil 384 } 385 386 func (event *Event) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 387 var buf bytes.Buffer 388 buf.Grow(event.AminoSize(cdc)) 389 err := event.MarshalAminoTo(cdc, &buf) 390 if err != nil { 391 return nil, err 392 } 393 return buf.Bytes(), nil 394 } 395 396 func (event *Event) MarshalAminoTo(cdc *amino.Codec, buf *bytes.Buffer) error { 397 // field 1 398 if event.Type != "" { 399 const pbKey = 1<<3 | 2 400 err := amino.EncodeStringWithKeyToBuffer(buf, event.Type, pbKey) 401 if err != nil { 402 return err 403 } 404 } 405 406 // field 2 407 for i := 0; i < len(event.Attributes); i++ { 408 const pbKey = 2<<3 | 2 409 buf.WriteByte(pbKey) 410 attrSize := event.Attributes[i].AminoSize(cdc) 411 err := amino.EncodeUvarintToBuffer(buf, uint64(attrSize)) 412 if err != nil { 413 return err 414 } 415 lenBeforeData := buf.Len() 416 err = event.Attributes[i].MarshalAminoTo(cdc, buf) 417 if err != nil { 418 return err 419 } 420 if buf.Len()-lenBeforeData != attrSize { 421 return amino.NewSizerError(event.Attributes[i], buf.Len()-lenBeforeData, attrSize) 422 } 423 } 424 return nil 425 } 426 427 func (event *Event) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 428 var dataLen uint64 = 0 429 var subData []byte 430 431 for { 432 data = data[dataLen:] 433 434 if len(data) == 0 { 435 break 436 } 437 438 pos, aminoType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 439 if err != nil { 440 return err 441 } 442 if aminoType != amino.Typ3_ByteLength { 443 return errors.New("invalid amino type") 444 } 445 data = data[1:] 446 447 var n int 448 dataLen, n, _ = amino.DecodeUvarint(data) 449 450 data = data[n:] 451 subData = data[:dataLen] 452 453 switch pos { 454 case 1: 455 event.Type = string(subData) 456 case 2: 457 var kvpair kv.Pair 458 err = kvpair.UnmarshalFromAmino(cdc, subData) 459 if err != nil { 460 return err 461 } 462 event.Attributes = append(event.Attributes, kvpair) 463 default: 464 return fmt.Errorf("unexpect feild num %d", pos) 465 } 466 } 467 return nil 468 } 469 470 func (tx *ResponseDeliverTx) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 471 if tx == nil { 472 return nil, nil 473 } 474 var buf bytes.Buffer 475 buf.Grow(tx.AminoSize(cdc)) 476 err := tx.MarshalAminoTo(cdc, &buf) 477 if err != nil { 478 return nil, err 479 } 480 return buf.Bytes(), nil 481 } 482 483 func (tx *ResponseDeliverTx) MarshalAminoTo(cdc *amino.Codec, buf *bytes.Buffer) error { 484 if tx == nil { 485 return nil 486 } 487 var err error 488 // field 1 489 if tx.Code != 0 { 490 const pbKey = 1 << 3 491 err = amino.EncodeUvarintWithKeyToBuffer(buf, uint64(tx.Code), pbKey) 492 if err != nil { 493 return err 494 } 495 } 496 497 // field 2 498 if len(tx.Data) != 0 { 499 const pbKey = 2<<3 | 2 500 err = amino.EncodeByteSliceWithKeyToBuffer(buf, tx.Data, pbKey) 501 if err != nil { 502 return err 503 } 504 } 505 506 // field 3 507 if tx.Log != "" { 508 const pbKey = 3<<3 | 2 509 err = amino.EncodeStringWithKeyToBuffer(buf, tx.Log, pbKey) 510 if err != nil { 511 return err 512 } 513 } 514 515 // field 4 516 if tx.Info != "" { 517 const pbKey = 4<<3 | 2 518 err = amino.EncodeStringWithKeyToBuffer(buf, tx.Info, pbKey) 519 if err != nil { 520 return err 521 } 522 } 523 524 // field 5 525 if tx.GasWanted != 0 { 526 const pbKey = 5 << 3 527 err = amino.EncodeUvarintWithKeyToBuffer(buf, uint64(tx.GasWanted), pbKey) 528 if err != nil { 529 return err 530 } 531 } 532 533 // field 6 534 if tx.GasUsed != 0 { 535 const pbKey = 6 << 3 536 err = amino.EncodeUvarintWithKeyToBuffer(buf, uint64(tx.GasUsed), pbKey) 537 if err != nil { 538 return err 539 } 540 } 541 542 // field 7 543 for i := 0; i < len(tx.Events); i++ { 544 const pbKey = 7<<3 | 2 545 buf.WriteByte(pbKey) 546 eventSize := tx.Events[i].AminoSize(cdc) 547 err = amino.EncodeUvarintToBuffer(buf, uint64(eventSize)) 548 if err != nil { 549 return err 550 } 551 lenBeforeData := buf.Len() 552 err = tx.Events[i].MarshalAminoTo(cdc, buf) 553 if err != nil { 554 return err 555 } 556 if buf.Len()-lenBeforeData != eventSize { 557 return amino.NewSizerError(tx.Events[i], buf.Len()-lenBeforeData, eventSize) 558 } 559 } 560 561 // field 8 562 if tx.Codespace != "" { 563 const pbKey = 8<<3 | 2 564 err = amino.EncodeStringWithKeyToBuffer(buf, tx.Codespace, pbKey) 565 if err != nil { 566 return err 567 } 568 } 569 570 return nil 571 } 572 573 func (tx *ResponseDeliverTx) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 574 var dataLen uint64 = 0 575 var subData []byte 576 577 for { 578 data = data[dataLen:] 579 580 if len(data) == 0 { 581 break 582 } 583 584 pos, aminoType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 585 if err != nil { 586 return err 587 } 588 data = data[1:] 589 590 if aminoType == amino.Typ3_ByteLength { 591 var n int 592 dataLen, n, err = amino.DecodeUvarint(data) 593 if err != nil { 594 return err 595 } 596 597 data = data[n:] 598 if len(data) < int(dataLen) { 599 return errors.New("invalid datalen") 600 } 601 subData = data[:dataLen] 602 } 603 604 switch pos { 605 case 1: 606 var n int 607 var uvint uint64 608 uvint, n, err = amino.DecodeUvarint(data) 609 if err != nil { 610 return err 611 } 612 tx.Code = uint32(uvint) 613 dataLen = uint64(n) 614 case 2: 615 tx.Data = make([]byte, dataLen) 616 copy(tx.Data, subData) 617 case 3: 618 tx.Log = string(subData) 619 case 4: 620 tx.Info = string(subData) 621 case 5: 622 var n int 623 var uvint uint64 624 uvint, n, err = amino.DecodeUvarint(data) 625 if err != nil { 626 return err 627 } 628 tx.GasWanted = int64(uvint) 629 dataLen = uint64(n) 630 case 6: 631 var n int 632 var uvint uint64 633 uvint, n, err = amino.DecodeUvarint(data) 634 if err != nil { 635 return err 636 } 637 tx.GasUsed = int64(uvint) 638 dataLen = uint64(n) 639 case 7: 640 var event Event 641 err = event.UnmarshalFromAmino(cdc, subData) 642 if err != nil { 643 return err 644 } 645 tx.Events = append(tx.Events, event) 646 case 8: 647 tx.Codespace = string(subData) 648 default: 649 return fmt.Errorf("unexpect feild num %d", pos) 650 } 651 } 652 return nil 653 } 654 655 func (beginBlock ResponseBeginBlock) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 656 var buf bytes.Buffer 657 buf.Grow(beginBlock.AminoSize(cdc)) 658 err := beginBlock.MarshalAminoTo(cdc, &buf) 659 if err != nil { 660 return nil, err 661 } 662 return buf.Bytes(), nil 663 } 664 665 func (beginBlock ResponseBeginBlock) MarshalAminoTo(cdc *amino.Codec, buf *bytes.Buffer) error { 666 for i := 0; i < len(beginBlock.Events); i++ { 667 const pbKey = 1<<3 | 2 668 buf.WriteByte(pbKey) 669 eventSize := beginBlock.Events[i].AminoSize(cdc) 670 err := amino.EncodeUvarintToBuffer(buf, uint64(eventSize)) 671 if err != nil { 672 return err 673 } 674 lenBeforeData := buf.Len() 675 err = beginBlock.Events[i].MarshalAminoTo(cdc, buf) 676 if err != nil { 677 return err 678 } 679 if buf.Len()-lenBeforeData != eventSize { 680 return amino.NewSizerError(beginBlock.Events[i], buf.Len()-lenBeforeData, eventSize) 681 } 682 } 683 return nil 684 } 685 686 func (bb *ResponseBeginBlock) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 687 var dataLen uint64 = 0 688 var subData []byte 689 690 for { 691 data = data[dataLen:] 692 693 if len(data) == 0 { 694 break 695 } 696 697 pos, aminoType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 698 if err != nil { 699 return err 700 } 701 data = data[1:] 702 703 if aminoType == amino.Typ3_ByteLength { 704 var n int 705 dataLen, n, _ = amino.DecodeUvarint(data) 706 707 data = data[n:] 708 subData = data[:dataLen] 709 } 710 711 switch pos { 712 case 1: 713 event := Event{} 714 err = event.UnmarshalFromAmino(cdc, subData) 715 if err != nil { 716 return err 717 } 718 bb.Events = append(bb.Events, event) 719 720 default: 721 return fmt.Errorf("unexpect feild num %d", pos) 722 } 723 } 724 return nil 725 } 726 727 func (params ConsensusParams) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 728 var buf bytes.Buffer 729 buf.Grow(params.AminoSize(cdc)) 730 err := params.MarshalAminoTo(cdc, &buf) 731 if err != nil { 732 return nil, err 733 } 734 return buf.Bytes(), nil 735 } 736 737 func (params *ConsensusParams) MarshalAminoTo(cdc *amino.Codec, buf *bytes.Buffer) error { 738 var err error 739 if params == nil { 740 return nil 741 } 742 743 // field 1 744 if params.Block != nil { 745 const pbKey = 1<<3 | 2 746 buf.WriteByte(pbKey) 747 blockSize := params.Block.AminoSize(cdc) 748 err = amino.EncodeUvarintToBuffer(buf, uint64(blockSize)) 749 if err != nil { 750 return err 751 } 752 lenBeforeData := buf.Len() 753 err = params.Block.MarshalAminoTo(cdc, buf) 754 if err != nil { 755 return err 756 } 757 if buf.Len()-lenBeforeData != blockSize { 758 return amino.NewSizerError(params.Block, buf.Len()-lenBeforeData, blockSize) 759 } 760 } 761 762 // field 2 763 if params.Evidence != nil { 764 const pbKey = 2<<3 | 2 765 buf.WriteByte(pbKey) 766 evidenceSize := params.Evidence.AminoSize(cdc) 767 err = amino.EncodeUvarintToBuffer(buf, uint64(evidenceSize)) 768 if err != nil { 769 return err 770 } 771 lenBeforeData := buf.Len() 772 err = params.Evidence.MarshalAminoTo(cdc, buf) 773 if err != nil { 774 return err 775 } 776 if buf.Len()-lenBeforeData != evidenceSize { 777 return amino.NewSizerError(params.Evidence, buf.Len()-lenBeforeData, evidenceSize) 778 } 779 } 780 781 // field 3 782 if params.Validator != nil { 783 const pbKey = 3<<3 | 2 784 buf.WriteByte(pbKey) 785 validatorSize := params.Validator.AminoSize(cdc) 786 err = amino.EncodeUvarintToBuffer(buf, uint64(validatorSize)) 787 if err != nil { 788 return err 789 } 790 lenBeforeData := buf.Len() 791 err = params.Validator.MarshalAminoTo(cdc, buf) 792 if err != nil { 793 return err 794 } 795 if buf.Len()-lenBeforeData != validatorSize { 796 return amino.NewSizerError(params.Validator, buf.Len()-lenBeforeData, validatorSize) 797 } 798 } 799 return nil 800 } 801 802 func (cp *ConsensusParams) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 803 var dataLen uint64 = 0 804 var subData []byte 805 806 for { 807 data = data[dataLen:] 808 809 if len(data) == 0 { 810 break 811 } 812 813 pos, aminoType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 814 if err != nil { 815 return err 816 } 817 data = data[1:] 818 819 if aminoType == amino.Typ3_ByteLength { 820 var n int 821 dataLen, n, _ = amino.DecodeUvarint(data) 822 823 data = data[n:] 824 subData = data[:dataLen] 825 } 826 827 switch pos { 828 case 1: 829 bParams := &BlockParams{} 830 if len(subData) != 0 { 831 err := bParams.UnmarshalFromAmino(cdc, subData) 832 if err != nil { 833 return err 834 } 835 } 836 cp.Block = bParams 837 case 2: 838 eParams := &EvidenceParams{} 839 if len(subData) != 0 { 840 err := eParams.UnmarshalFromAmino(cdc, subData) 841 if err != nil { 842 return err 843 } 844 } 845 cp.Evidence = eParams 846 847 case 3: 848 vp := &ValidatorParams{} 849 if len(subData) != 0 { 850 err := vp.UnmarshalFromAmino(cdc, subData) 851 if err != nil { 852 return err 853 } 854 } 855 cp.Validator = vp 856 857 default: 858 return fmt.Errorf("unexpect feild num %d", pos) 859 } 860 } 861 return nil 862 } 863 864 func (endBlock ResponseEndBlock) MarshalToAmino(cdc *amino.Codec) ([]byte, error) { 865 var buf bytes.Buffer 866 buf.Grow(endBlock.AminoSize(cdc)) 867 err := endBlock.MarshalAminoTo(cdc, &buf) 868 if err != nil { 869 return nil, err 870 } 871 return buf.Bytes(), nil 872 } 873 874 func (endBlock *ResponseEndBlock) MarshalAminoTo(cdc *amino.Codec, buf *bytes.Buffer) error { 875 if endBlock == nil { 876 return nil 877 } 878 var err error 879 // field 1 880 for i := 0; i < len(endBlock.ValidatorUpdates); i++ { 881 const pbKey = 1<<3 | 2 882 buf.WriteByte(pbKey) 883 valUpSize := endBlock.ValidatorUpdates[i].AminoSize(cdc) 884 err = amino.EncodeUvarintToBuffer(buf, uint64(valUpSize)) 885 if err != nil { 886 return err 887 } 888 lenBeforeData := buf.Len() 889 err = endBlock.ValidatorUpdates[i].MarshalAminoTo(cdc, buf) 890 if err != nil { 891 return err 892 } 893 if buf.Len()-lenBeforeData != valUpSize { 894 return amino.NewSizerError(endBlock.ValidatorUpdates[i], buf.Len()-lenBeforeData, valUpSize) 895 } 896 } 897 // field 2 898 if endBlock.ConsensusParamUpdates != nil { 899 const pbKey = 2<<3 | 2 900 buf.WriteByte(pbKey) 901 conParamsSize := endBlock.ConsensusParamUpdates.AminoSize(cdc) 902 err = amino.EncodeUvarintToBuffer(buf, uint64(conParamsSize)) 903 if err != nil { 904 return err 905 } 906 lenBeforeData := buf.Len() 907 err = endBlock.ConsensusParamUpdates.MarshalAminoTo(cdc, buf) 908 if err != nil { 909 return err 910 } 911 if buf.Len()-lenBeforeData != conParamsSize { 912 return amino.NewSizerError(endBlock.ConsensusParamUpdates, buf.Len()-lenBeforeData, conParamsSize) 913 } 914 } 915 // field 3 916 for i := 0; i < len(endBlock.Events); i++ { 917 const pbKey = 3<<3 | 2 918 buf.WriteByte(pbKey) 919 eventSize := endBlock.Events[i].AminoSize(cdc) 920 err = amino.EncodeUvarintToBuffer(buf, uint64(eventSize)) 921 if err != nil { 922 return err 923 } 924 lenBeforeData := buf.Len() 925 err = endBlock.Events[i].MarshalAminoTo(cdc, buf) 926 if err != nil { 927 return err 928 } 929 if buf.Len()-lenBeforeData != eventSize { 930 return amino.NewSizerError(endBlock.Events[i], buf.Len()-lenBeforeData, eventSize) 931 } 932 } 933 return nil 934 } 935 936 func (m *PubKey) AminoSize(_ *amino.Codec) int { 937 if m == nil { 938 return 0 939 } 940 size := 0 941 if len(m.Type) != 0 { 942 size += 1 + amino.EncodedStringSize(m.Type) 943 } 944 if len(m.Data) != 0 { 945 size += 1 + amino.ByteSliceSize(m.Data) 946 } 947 return size 948 } 949 950 func (m *ValidatorUpdate) AminoSize(cdc *amino.Codec) int { 951 if m == nil { 952 return 0 953 } 954 size := 0 955 pubkeySize := m.PubKey.AminoSize(cdc) 956 if pubkeySize > 0 { 957 size += 1 + amino.UvarintSize(uint64(pubkeySize)) + pubkeySize 958 } 959 if m.Power != 0 { 960 size += 1 + amino.UvarintSize(uint64(m.Power)) 961 } 962 return size 963 } 964 965 func (m *BlockParams) AminoSize(_ *amino.Codec) int { 966 if m == nil { 967 return 0 968 } 969 size := 0 970 if m.MaxBytes != 0 { 971 size += 1 + amino.UvarintSize(uint64(m.MaxBytes)) 972 } 973 if m.MaxGas != 0 { 974 size += 1 + amino.UvarintSize(uint64(m.MaxGas)) 975 } 976 return size 977 } 978 979 func (m *EvidenceParams) AminoSize(_ *amino.Codec) int { 980 if m == nil { 981 return 0 982 } 983 size := 0 984 if m.MaxAgeNumBlocks != 0 { 985 size += 1 + amino.UvarintSize(uint64(m.MaxAgeNumBlocks)) 986 } 987 if m.MaxAgeDuration != 0 { 988 size += 1 + amino.UvarintSize(uint64(m.MaxAgeDuration)) 989 } 990 return size 991 } 992 993 func (m *ValidatorParams) AminoSize(_ *amino.Codec) int { 994 if m == nil { 995 return 0 996 } 997 size := 0 998 for _, pkt := range m.PubKeyTypes { 999 size += 1 + amino.EncodedStringSize(pkt) 1000 } 1001 return size 1002 } 1003 1004 func (event Event) AminoSize(cdc *amino.Codec) int { 1005 size := 0 1006 1007 if len(event.Type) != 0 { 1008 size += 1 + amino.EncodedStringSize(event.Type) 1009 } 1010 1011 for _, attr := range event.Attributes { 1012 attrSize := attr.AminoSize(cdc) 1013 size += 1 + amino.UvarintSize(uint64(attrSize)) + attrSize 1014 } 1015 1016 return size 1017 } 1018 1019 func (tx *ResponseDeliverTx) AminoSize(cdc *amino.Codec) int { 1020 if tx == nil { 1021 return 0 1022 } 1023 size := 0 1024 if tx.Code != 0 { 1025 size += 1 + amino.UvarintSize(uint64(tx.Code)) 1026 } 1027 if len(tx.Data) != 0 { 1028 size += 1 + amino.ByteSliceSize(tx.Data) 1029 } 1030 if len(tx.Log) != 0 { 1031 size += 1 + amino.EncodedStringSize(tx.Log) 1032 } 1033 if len(tx.Info) != 0 { 1034 size += 1 + amino.EncodedStringSize(tx.Info) 1035 } 1036 if tx.GasWanted != 0 { 1037 size += 1 + amino.UvarintSize(uint64(tx.GasWanted)) 1038 } 1039 if tx.GasUsed != 0 { 1040 size += 1 + amino.UvarintSize(uint64(tx.GasUsed)) 1041 } 1042 for _, e := range tx.Events { 1043 eventSize := e.AminoSize(cdc) 1044 size += 1 + amino.UvarintSize(uint64(eventSize)) + eventSize 1045 } 1046 if len(tx.Codespace) != 0 { 1047 size += 1 + amino.EncodedStringSize(tx.Codespace) 1048 } 1049 return size 1050 } 1051 1052 func (beginBlock *ResponseBeginBlock) AminoSize(cdc *amino.Codec) int { 1053 if beginBlock == nil { 1054 return 0 1055 } 1056 size := 0 1057 for _, event := range beginBlock.Events { 1058 eventSize := event.AminoSize(cdc) 1059 size += 1 + amino.UvarintSize(uint64(eventSize)) + eventSize 1060 } 1061 return size 1062 } 1063 1064 func (m *ConsensusParams) AminoSize(cdc *amino.Codec) int { 1065 if m == nil { 1066 return 0 1067 } 1068 size := 0 1069 if m.Block != nil { 1070 blockSize := m.Block.AminoSize(cdc) 1071 size += 1 + amino.UvarintSize(uint64(blockSize)) + blockSize 1072 } 1073 if m.Evidence != nil { 1074 eviSize := m.Evidence.AminoSize(cdc) 1075 size += 1 + amino.UvarintSize(uint64(eviSize)) + eviSize 1076 } 1077 if m.Validator != nil { 1078 valSize := m.Validator.AminoSize(cdc) 1079 size += 1 + amino.UvarintSize(uint64(valSize)) + valSize 1080 } 1081 return size 1082 } 1083 1084 func (m *ResponseEndBlock) AminoSize(cdc *amino.Codec) int { 1085 if m == nil { 1086 return 0 1087 } 1088 size := 0 1089 for _, valUpd := range m.ValidatorUpdates { 1090 valUpdSize := valUpd.AminoSize(cdc) 1091 size += 1 + amino.UvarintSize(uint64(valUpdSize)) + valUpdSize 1092 } 1093 if m.ConsensusParamUpdates != nil { 1094 conSize := m.ConsensusParamUpdates.AminoSize(cdc) 1095 size += 1 + amino.UvarintSize(uint64(conSize)) + conSize 1096 } 1097 for _, event := range m.Events { 1098 eventSize := event.AminoSize(cdc) 1099 size += 1 + amino.UvarintSize(uint64(eventSize)) + eventSize 1100 } 1101 return size 1102 } 1103 1104 func (eb *ResponseEndBlock) UnmarshalFromAmino(cdc *amino.Codec, data []byte) error { 1105 var dataLen uint64 = 0 1106 var subData []byte 1107 1108 for { 1109 data = data[dataLen:] 1110 1111 if len(data) == 0 { 1112 break 1113 } 1114 1115 pos, aminoType, err := amino.ParseProtoPosAndTypeMustOneByte(data[0]) 1116 if err != nil { 1117 return err 1118 } 1119 data = data[1:] 1120 1121 if aminoType == amino.Typ3_ByteLength { 1122 var n int 1123 dataLen, n, _ = amino.DecodeUvarint(data) 1124 1125 data = data[n:] 1126 subData = data[:dataLen] 1127 } 1128 1129 switch pos { 1130 case 1: 1131 vu := ValidatorUpdate{} 1132 err := vu.UnmarshalFromAmino(cdc, subData) 1133 if err != nil { 1134 return err 1135 } 1136 eb.ValidatorUpdates = append(eb.ValidatorUpdates, vu) 1137 case 2: 1138 consParam := &ConsensusParams{} 1139 if len(subData) != 0 { 1140 err := consParam.UnmarshalFromAmino(cdc, subData) 1141 if err != nil { 1142 return err 1143 } 1144 } 1145 eb.ConsensusParamUpdates = consParam 1146 case 3: 1147 var event Event 1148 err = event.UnmarshalFromAmino(cdc, subData) 1149 if err != nil { 1150 return err 1151 } 1152 eb.Events = append(eb.Events, event) 1153 1154 default: 1155 return fmt.Errorf("unexpect feild num %d", pos) 1156 } 1157 } 1158 return nil 1159 }