github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/cli/smartcontract/testdata/rpcbindings/structs/rpcbindings.out (about) 1 // Code generated by neo-go contract generate-rpcwrapper --manifest <file.json> --out <file.go> [--hash <hash>] [--config <config>]; DO NOT EDIT. 2 3 // Package structs contains RPC wrappers for Types contract. 4 package structs 5 6 import ( 7 "crypto/elliptic" 8 "errors" 9 "fmt" 10 "github.com/nspcc-dev/neo-go/pkg/crypto/keys" 11 "github.com/nspcc-dev/neo-go/pkg/neorpc/result" 12 "github.com/nspcc-dev/neo-go/pkg/rpcclient/unwrap" 13 "github.com/nspcc-dev/neo-go/pkg/util" 14 "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" 15 "math/big" 16 "unicode/utf8" 17 ) 18 19 // Hash contains contract hash. 20 var Hash = util.Uint160{0x33, 0x22, 0x11, 0x0, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x0} 21 22 // LedgerBlock is a contract-specific ledger.Block type used by its methods. 23 type LedgerBlock struct { 24 Hash util.Uint256 25 Version *big.Int 26 PrevHash util.Uint256 27 MerkleRoot util.Uint256 28 Timestamp *big.Int 29 Nonce *big.Int 30 Index *big.Int 31 NextConsensus util.Uint160 32 TransactionsLength *big.Int 33 } 34 35 // LedgerTransaction is a contract-specific ledger.Transaction type used by its methods. 36 type LedgerTransaction struct { 37 Hash util.Uint256 38 Version *big.Int 39 Nonce *big.Int 40 Sender util.Uint160 41 SysFee *big.Int 42 NetFee *big.Int 43 ValidUntilBlock *big.Int 44 Script []byte 45 } 46 47 // ManagementABI is a contract-specific management.ABI type used by its methods. 48 type ManagementABI struct { 49 Methods []*ManagementMethod 50 Events []*ManagementEvent 51 } 52 53 // ManagementContract is a contract-specific management.Contract type used by its methods. 54 type ManagementContract struct { 55 ID *big.Int 56 UpdateCounter *big.Int 57 Hash util.Uint160 58 NEF []byte 59 Manifest *ManagementManifest 60 } 61 62 // ManagementEvent is a contract-specific management.Event type used by its methods. 63 type ManagementEvent struct { 64 Name string 65 Params []*ManagementParameter 66 } 67 68 // ManagementGroup is a contract-specific management.Group type used by its methods. 69 type ManagementGroup struct { 70 PublicKey *keys.PublicKey 71 Signature []byte 72 } 73 74 // ManagementManifest is a contract-specific management.Manifest type used by its methods. 75 type ManagementManifest struct { 76 Name string 77 Groups []*ManagementGroup 78 Features map[string]string 79 SupportedStandards []string 80 ABI *ManagementABI 81 Permissions []*ManagementPermission 82 Trusts []util.Uint160 83 Extra any 84 } 85 86 // ManagementMethod is a contract-specific management.Method type used by its methods. 87 type ManagementMethod struct { 88 Name string 89 Params []*ManagementParameter 90 ReturnType *big.Int 91 Offset *big.Int 92 Safe bool 93 } 94 95 // ManagementParameter is a contract-specific management.Parameter type used by its methods. 96 type ManagementParameter struct { 97 Name string 98 Type *big.Int 99 } 100 101 // ManagementPermission is a contract-specific management.Permission type used by its methods. 102 type ManagementPermission struct { 103 Contract util.Uint160 104 Methods []string 105 } 106 107 // StructsInternal is a contract-specific structs.Internal type used by its methods. 108 type StructsInternal struct { 109 Bool bool 110 Int *big.Int 111 Bytes []byte 112 String string 113 H160 util.Uint160 114 H256 util.Uint256 115 PK *keys.PublicKey 116 PubKey *keys.PublicKey 117 Sign []byte 118 ArrOfBytes [][]byte 119 ArrOfH160 []util.Uint160 120 Map map[*big.Int]keys.PublicKeys 121 Struct *StructsInternal 122 UnexportedField *big.Int 123 } 124 125 // Invoker is used by ContractReader to call various safe methods. 126 type Invoker interface { 127 Call(contract util.Uint160, operation string, params ...any) (*result.Invoke, error) 128 } 129 130 // ContractReader implements safe contract methods. 131 type ContractReader struct { 132 invoker Invoker 133 hash util.Uint160 134 } 135 136 // NewReader creates an instance of ContractReader using Hash and the given Invoker. 137 func NewReader(invoker Invoker) *ContractReader { 138 var hash = Hash 139 return &ContractReader{invoker, hash} 140 } 141 142 // Block invokes `block` method of contract. 143 func (c *ContractReader) Block(b *LedgerBlock) (*LedgerBlock, error) { 144 return itemToLedgerBlock(unwrap.Item(c.invoker.Call(c.hash, "block", b))) 145 } 146 147 // Contract invokes `contract` method of contract. 148 func (c *ContractReader) Contract(mc *ManagementContract) (*ManagementContract, error) { 149 return itemToManagementContract(unwrap.Item(c.invoker.Call(c.hash, "contract", mc))) 150 } 151 152 // Struct invokes `struct` method of contract. 153 func (c *ContractReader) Struct(s *StructsInternal) (*StructsInternal, error) { 154 return itemToStructsInternal(unwrap.Item(c.invoker.Call(c.hash, "struct", s))) 155 } 156 157 // Transaction invokes `transaction` method of contract. 158 func (c *ContractReader) Transaction(t *LedgerTransaction) (*LedgerTransaction, error) { 159 return itemToLedgerTransaction(unwrap.Item(c.invoker.Call(c.hash, "transaction", t))) 160 } 161 162 // itemToLedgerBlock converts stack item into *LedgerBlock. 163 func itemToLedgerBlock(item stackitem.Item, err error) (*LedgerBlock, error) { 164 if err != nil { 165 return nil, err 166 } 167 var res = new(LedgerBlock) 168 err = res.FromStackItem(item) 169 return res, err 170 } 171 172 // FromStackItem retrieves fields of LedgerBlock from the given 173 // [stackitem.Item] or returns an error if it's not possible to do to so. 174 func (res *LedgerBlock) FromStackItem(item stackitem.Item) error { 175 arr, ok := item.Value().([]stackitem.Item) 176 if !ok { 177 return errors.New("not an array") 178 } 179 if len(arr) != 9 { 180 return errors.New("wrong number of structure elements") 181 } 182 183 var ( 184 index = -1 185 err error 186 ) 187 index++ 188 res.Hash, err = func(item stackitem.Item) (util.Uint256, error) { 189 b, err := item.TryBytes() 190 if err != nil { 191 return util.Uint256{}, err 192 } 193 u, err := util.Uint256DecodeBytesBE(b) 194 if err != nil { 195 return util.Uint256{}, err 196 } 197 return u, nil 198 }(arr[index]) 199 if err != nil { 200 return fmt.Errorf("field Hash: %w", err) 201 } 202 203 index++ 204 res.Version, err = arr[index].TryInteger() 205 if err != nil { 206 return fmt.Errorf("field Version: %w", err) 207 } 208 209 index++ 210 res.PrevHash, err = func(item stackitem.Item) (util.Uint256, error) { 211 b, err := item.TryBytes() 212 if err != nil { 213 return util.Uint256{}, err 214 } 215 u, err := util.Uint256DecodeBytesBE(b) 216 if err != nil { 217 return util.Uint256{}, err 218 } 219 return u, nil 220 }(arr[index]) 221 if err != nil { 222 return fmt.Errorf("field PrevHash: %w", err) 223 } 224 225 index++ 226 res.MerkleRoot, err = func(item stackitem.Item) (util.Uint256, error) { 227 b, err := item.TryBytes() 228 if err != nil { 229 return util.Uint256{}, err 230 } 231 u, err := util.Uint256DecodeBytesBE(b) 232 if err != nil { 233 return util.Uint256{}, err 234 } 235 return u, nil 236 }(arr[index]) 237 if err != nil { 238 return fmt.Errorf("field MerkleRoot: %w", err) 239 } 240 241 index++ 242 res.Timestamp, err = arr[index].TryInteger() 243 if err != nil { 244 return fmt.Errorf("field Timestamp: %w", err) 245 } 246 247 index++ 248 res.Nonce, err = arr[index].TryInteger() 249 if err != nil { 250 return fmt.Errorf("field Nonce: %w", err) 251 } 252 253 index++ 254 res.Index, err = arr[index].TryInteger() 255 if err != nil { 256 return fmt.Errorf("field Index: %w", err) 257 } 258 259 index++ 260 res.NextConsensus, err = func(item stackitem.Item) (util.Uint160, error) { 261 b, err := item.TryBytes() 262 if err != nil { 263 return util.Uint160{}, err 264 } 265 u, err := util.Uint160DecodeBytesBE(b) 266 if err != nil { 267 return util.Uint160{}, err 268 } 269 return u, nil 270 }(arr[index]) 271 if err != nil { 272 return fmt.Errorf("field NextConsensus: %w", err) 273 } 274 275 index++ 276 res.TransactionsLength, err = arr[index].TryInteger() 277 if err != nil { 278 return fmt.Errorf("field TransactionsLength: %w", err) 279 } 280 281 return nil 282 } 283 284 // itemToLedgerTransaction converts stack item into *LedgerTransaction. 285 func itemToLedgerTransaction(item stackitem.Item, err error) (*LedgerTransaction, error) { 286 if err != nil { 287 return nil, err 288 } 289 var res = new(LedgerTransaction) 290 err = res.FromStackItem(item) 291 return res, err 292 } 293 294 // FromStackItem retrieves fields of LedgerTransaction from the given 295 // [stackitem.Item] or returns an error if it's not possible to do to so. 296 func (res *LedgerTransaction) FromStackItem(item stackitem.Item) error { 297 arr, ok := item.Value().([]stackitem.Item) 298 if !ok { 299 return errors.New("not an array") 300 } 301 if len(arr) != 8 { 302 return errors.New("wrong number of structure elements") 303 } 304 305 var ( 306 index = -1 307 err error 308 ) 309 index++ 310 res.Hash, err = func(item stackitem.Item) (util.Uint256, error) { 311 b, err := item.TryBytes() 312 if err != nil { 313 return util.Uint256{}, err 314 } 315 u, err := util.Uint256DecodeBytesBE(b) 316 if err != nil { 317 return util.Uint256{}, err 318 } 319 return u, nil 320 }(arr[index]) 321 if err != nil { 322 return fmt.Errorf("field Hash: %w", err) 323 } 324 325 index++ 326 res.Version, err = arr[index].TryInteger() 327 if err != nil { 328 return fmt.Errorf("field Version: %w", err) 329 } 330 331 index++ 332 res.Nonce, err = arr[index].TryInteger() 333 if err != nil { 334 return fmt.Errorf("field Nonce: %w", err) 335 } 336 337 index++ 338 res.Sender, err = func(item stackitem.Item) (util.Uint160, error) { 339 b, err := item.TryBytes() 340 if err != nil { 341 return util.Uint160{}, err 342 } 343 u, err := util.Uint160DecodeBytesBE(b) 344 if err != nil { 345 return util.Uint160{}, err 346 } 347 return u, nil 348 }(arr[index]) 349 if err != nil { 350 return fmt.Errorf("field Sender: %w", err) 351 } 352 353 index++ 354 res.SysFee, err = arr[index].TryInteger() 355 if err != nil { 356 return fmt.Errorf("field SysFee: %w", err) 357 } 358 359 index++ 360 res.NetFee, err = arr[index].TryInteger() 361 if err != nil { 362 return fmt.Errorf("field NetFee: %w", err) 363 } 364 365 index++ 366 res.ValidUntilBlock, err = arr[index].TryInteger() 367 if err != nil { 368 return fmt.Errorf("field ValidUntilBlock: %w", err) 369 } 370 371 index++ 372 res.Script, err = arr[index].TryBytes() 373 if err != nil { 374 return fmt.Errorf("field Script: %w", err) 375 } 376 377 return nil 378 } 379 380 // itemToManagementABI converts stack item into *ManagementABI. 381 func itemToManagementABI(item stackitem.Item, err error) (*ManagementABI, error) { 382 if err != nil { 383 return nil, err 384 } 385 var res = new(ManagementABI) 386 err = res.FromStackItem(item) 387 return res, err 388 } 389 390 // FromStackItem retrieves fields of ManagementABI from the given 391 // [stackitem.Item] or returns an error if it's not possible to do to so. 392 func (res *ManagementABI) FromStackItem(item stackitem.Item) error { 393 arr, ok := item.Value().([]stackitem.Item) 394 if !ok { 395 return errors.New("not an array") 396 } 397 if len(arr) != 2 { 398 return errors.New("wrong number of structure elements") 399 } 400 401 var ( 402 index = -1 403 err error 404 ) 405 index++ 406 res.Methods, err = func(item stackitem.Item) ([]*ManagementMethod, error) { 407 arr, ok := item.Value().([]stackitem.Item) 408 if !ok { 409 return nil, errors.New("not an array") 410 } 411 res := make([]*ManagementMethod, len(arr)) 412 for i := range res { 413 res[i], err = itemToManagementMethod(arr[i], nil) 414 if err != nil { 415 return nil, fmt.Errorf("item %d: %w", i, err) 416 } 417 } 418 return res, nil 419 }(arr[index]) 420 if err != nil { 421 return fmt.Errorf("field Methods: %w", err) 422 } 423 424 index++ 425 res.Events, err = func(item stackitem.Item) ([]*ManagementEvent, error) { 426 arr, ok := item.Value().([]stackitem.Item) 427 if !ok { 428 return nil, errors.New("not an array") 429 } 430 res := make([]*ManagementEvent, len(arr)) 431 for i := range res { 432 res[i], err = itemToManagementEvent(arr[i], nil) 433 if err != nil { 434 return nil, fmt.Errorf("item %d: %w", i, err) 435 } 436 } 437 return res, nil 438 }(arr[index]) 439 if err != nil { 440 return fmt.Errorf("field Events: %w", err) 441 } 442 443 return nil 444 } 445 446 // itemToManagementContract converts stack item into *ManagementContract. 447 func itemToManagementContract(item stackitem.Item, err error) (*ManagementContract, error) { 448 if err != nil { 449 return nil, err 450 } 451 var res = new(ManagementContract) 452 err = res.FromStackItem(item) 453 return res, err 454 } 455 456 // FromStackItem retrieves fields of ManagementContract from the given 457 // [stackitem.Item] or returns an error if it's not possible to do to so. 458 func (res *ManagementContract) FromStackItem(item stackitem.Item) error { 459 arr, ok := item.Value().([]stackitem.Item) 460 if !ok { 461 return errors.New("not an array") 462 } 463 if len(arr) != 5 { 464 return errors.New("wrong number of structure elements") 465 } 466 467 var ( 468 index = -1 469 err error 470 ) 471 index++ 472 res.ID, err = arr[index].TryInteger() 473 if err != nil { 474 return fmt.Errorf("field ID: %w", err) 475 } 476 477 index++ 478 res.UpdateCounter, err = arr[index].TryInteger() 479 if err != nil { 480 return fmt.Errorf("field UpdateCounter: %w", err) 481 } 482 483 index++ 484 res.Hash, err = func(item stackitem.Item) (util.Uint160, error) { 485 b, err := item.TryBytes() 486 if err != nil { 487 return util.Uint160{}, err 488 } 489 u, err := util.Uint160DecodeBytesBE(b) 490 if err != nil { 491 return util.Uint160{}, err 492 } 493 return u, nil 494 }(arr[index]) 495 if err != nil { 496 return fmt.Errorf("field Hash: %w", err) 497 } 498 499 index++ 500 res.NEF, err = arr[index].TryBytes() 501 if err != nil { 502 return fmt.Errorf("field NEF: %w", err) 503 } 504 505 index++ 506 res.Manifest, err = itemToManagementManifest(arr[index], nil) 507 if err != nil { 508 return fmt.Errorf("field Manifest: %w", err) 509 } 510 511 return nil 512 } 513 514 // itemToManagementEvent converts stack item into *ManagementEvent. 515 func itemToManagementEvent(item stackitem.Item, err error) (*ManagementEvent, error) { 516 if err != nil { 517 return nil, err 518 } 519 var res = new(ManagementEvent) 520 err = res.FromStackItem(item) 521 return res, err 522 } 523 524 // FromStackItem retrieves fields of ManagementEvent from the given 525 // [stackitem.Item] or returns an error if it's not possible to do to so. 526 func (res *ManagementEvent) FromStackItem(item stackitem.Item) error { 527 arr, ok := item.Value().([]stackitem.Item) 528 if !ok { 529 return errors.New("not an array") 530 } 531 if len(arr) != 2 { 532 return errors.New("wrong number of structure elements") 533 } 534 535 var ( 536 index = -1 537 err error 538 ) 539 index++ 540 res.Name, err = func(item stackitem.Item) (string, error) { 541 b, err := item.TryBytes() 542 if err != nil { 543 return "", err 544 } 545 if !utf8.Valid(b) { 546 return "", errors.New("not a UTF-8 string") 547 } 548 return string(b), nil 549 }(arr[index]) 550 if err != nil { 551 return fmt.Errorf("field Name: %w", err) 552 } 553 554 index++ 555 res.Params, err = func(item stackitem.Item) ([]*ManagementParameter, error) { 556 arr, ok := item.Value().([]stackitem.Item) 557 if !ok { 558 return nil, errors.New("not an array") 559 } 560 res := make([]*ManagementParameter, len(arr)) 561 for i := range res { 562 res[i], err = itemToManagementParameter(arr[i], nil) 563 if err != nil { 564 return nil, fmt.Errorf("item %d: %w", i, err) 565 } 566 } 567 return res, nil 568 }(arr[index]) 569 if err != nil { 570 return fmt.Errorf("field Params: %w", err) 571 } 572 573 return nil 574 } 575 576 // itemToManagementGroup converts stack item into *ManagementGroup. 577 func itemToManagementGroup(item stackitem.Item, err error) (*ManagementGroup, error) { 578 if err != nil { 579 return nil, err 580 } 581 var res = new(ManagementGroup) 582 err = res.FromStackItem(item) 583 return res, err 584 } 585 586 // FromStackItem retrieves fields of ManagementGroup from the given 587 // [stackitem.Item] or returns an error if it's not possible to do to so. 588 func (res *ManagementGroup) FromStackItem(item stackitem.Item) error { 589 arr, ok := item.Value().([]stackitem.Item) 590 if !ok { 591 return errors.New("not an array") 592 } 593 if len(arr) != 2 { 594 return errors.New("wrong number of structure elements") 595 } 596 597 var ( 598 index = -1 599 err error 600 ) 601 index++ 602 res.PublicKey, err = func(item stackitem.Item) (*keys.PublicKey, error) { 603 b, err := item.TryBytes() 604 if err != nil { 605 return nil, err 606 } 607 k, err := keys.NewPublicKeyFromBytes(b, elliptic.P256()) 608 if err != nil { 609 return nil, err 610 } 611 return k, nil 612 }(arr[index]) 613 if err != nil { 614 return fmt.Errorf("field PublicKey: %w", err) 615 } 616 617 index++ 618 res.Signature, err = arr[index].TryBytes() 619 if err != nil { 620 return fmt.Errorf("field Signature: %w", err) 621 } 622 623 return nil 624 } 625 626 // itemToManagementManifest converts stack item into *ManagementManifest. 627 func itemToManagementManifest(item stackitem.Item, err error) (*ManagementManifest, error) { 628 if err != nil { 629 return nil, err 630 } 631 var res = new(ManagementManifest) 632 err = res.FromStackItem(item) 633 return res, err 634 } 635 636 // FromStackItem retrieves fields of ManagementManifest from the given 637 // [stackitem.Item] or returns an error if it's not possible to do to so. 638 func (res *ManagementManifest) FromStackItem(item stackitem.Item) error { 639 arr, ok := item.Value().([]stackitem.Item) 640 if !ok { 641 return errors.New("not an array") 642 } 643 if len(arr) != 8 { 644 return errors.New("wrong number of structure elements") 645 } 646 647 var ( 648 index = -1 649 err error 650 ) 651 index++ 652 res.Name, err = func(item stackitem.Item) (string, error) { 653 b, err := item.TryBytes() 654 if err != nil { 655 return "", err 656 } 657 if !utf8.Valid(b) { 658 return "", errors.New("not a UTF-8 string") 659 } 660 return string(b), nil 661 }(arr[index]) 662 if err != nil { 663 return fmt.Errorf("field Name: %w", err) 664 } 665 666 index++ 667 res.Groups, err = func(item stackitem.Item) ([]*ManagementGroup, error) { 668 arr, ok := item.Value().([]stackitem.Item) 669 if !ok { 670 return nil, errors.New("not an array") 671 } 672 res := make([]*ManagementGroup, len(arr)) 673 for i := range res { 674 res[i], err = itemToManagementGroup(arr[i], nil) 675 if err != nil { 676 return nil, fmt.Errorf("item %d: %w", i, err) 677 } 678 } 679 return res, nil 680 }(arr[index]) 681 if err != nil { 682 return fmt.Errorf("field Groups: %w", err) 683 } 684 685 index++ 686 res.Features, err = func(item stackitem.Item) (map[string]string, error) { 687 m, ok := item.Value().([]stackitem.MapElement) 688 if !ok { 689 return nil, fmt.Errorf("%s is not a map", item.Type().String()) 690 } 691 res := make(map[string]string) 692 for i := range m { 693 k, err := func(item stackitem.Item) (string, error) { 694 b, err := item.TryBytes() 695 if err != nil { 696 return "", err 697 } 698 if !utf8.Valid(b) { 699 return "", errors.New("not a UTF-8 string") 700 } 701 return string(b), nil 702 }(m[i].Key) 703 if err != nil { 704 return nil, fmt.Errorf("key %d: %w", i, err) 705 } 706 v, err := func(item stackitem.Item) (string, error) { 707 b, err := item.TryBytes() 708 if err != nil { 709 return "", err 710 } 711 if !utf8.Valid(b) { 712 return "", errors.New("not a UTF-8 string") 713 } 714 return string(b), nil 715 }(m[i].Value) 716 if err != nil { 717 return nil, fmt.Errorf("value %d: %w", i, err) 718 } 719 res[k] = v 720 } 721 return res, nil 722 }(arr[index]) 723 if err != nil { 724 return fmt.Errorf("field Features: %w", err) 725 } 726 727 index++ 728 res.SupportedStandards, err = func(item stackitem.Item) ([]string, error) { 729 arr, ok := item.Value().([]stackitem.Item) 730 if !ok { 731 return nil, errors.New("not an array") 732 } 733 res := make([]string, len(arr)) 734 for i := range res { 735 res[i], err = func(item stackitem.Item) (string, error) { 736 b, err := item.TryBytes() 737 if err != nil { 738 return "", err 739 } 740 if !utf8.Valid(b) { 741 return "", errors.New("not a UTF-8 string") 742 } 743 return string(b), nil 744 }(arr[i]) 745 if err != nil { 746 return nil, fmt.Errorf("item %d: %w", i, err) 747 } 748 } 749 return res, nil 750 }(arr[index]) 751 if err != nil { 752 return fmt.Errorf("field SupportedStandards: %w", err) 753 } 754 755 index++ 756 res.ABI, err = itemToManagementABI(arr[index], nil) 757 if err != nil { 758 return fmt.Errorf("field ABI: %w", err) 759 } 760 761 index++ 762 res.Permissions, err = func(item stackitem.Item) ([]*ManagementPermission, error) { 763 arr, ok := item.Value().([]stackitem.Item) 764 if !ok { 765 return nil, errors.New("not an array") 766 } 767 res := make([]*ManagementPermission, len(arr)) 768 for i := range res { 769 res[i], err = itemToManagementPermission(arr[i], nil) 770 if err != nil { 771 return nil, fmt.Errorf("item %d: %w", i, err) 772 } 773 } 774 return res, nil 775 }(arr[index]) 776 if err != nil { 777 return fmt.Errorf("field Permissions: %w", err) 778 } 779 780 index++ 781 res.Trusts, err = func(item stackitem.Item) ([]util.Uint160, error) { 782 arr, ok := item.Value().([]stackitem.Item) 783 if !ok { 784 return nil, errors.New("not an array") 785 } 786 res := make([]util.Uint160, len(arr)) 787 for i := range res { 788 res[i], err = func(item stackitem.Item) (util.Uint160, error) { 789 b, err := item.TryBytes() 790 if err != nil { 791 return util.Uint160{}, err 792 } 793 u, err := util.Uint160DecodeBytesBE(b) 794 if err != nil { 795 return util.Uint160{}, err 796 } 797 return u, nil 798 }(arr[i]) 799 if err != nil { 800 return nil, fmt.Errorf("item %d: %w", i, err) 801 } 802 } 803 return res, nil 804 }(arr[index]) 805 if err != nil { 806 return fmt.Errorf("field Trusts: %w", err) 807 } 808 809 index++ 810 res.Extra, err = arr[index].Value(), error(nil) 811 if err != nil { 812 return fmt.Errorf("field Extra: %w", err) 813 } 814 815 return nil 816 } 817 818 // itemToManagementMethod converts stack item into *ManagementMethod. 819 func itemToManagementMethod(item stackitem.Item, err error) (*ManagementMethod, error) { 820 if err != nil { 821 return nil, err 822 } 823 var res = new(ManagementMethod) 824 err = res.FromStackItem(item) 825 return res, err 826 } 827 828 // FromStackItem retrieves fields of ManagementMethod from the given 829 // [stackitem.Item] or returns an error if it's not possible to do to so. 830 func (res *ManagementMethod) FromStackItem(item stackitem.Item) error { 831 arr, ok := item.Value().([]stackitem.Item) 832 if !ok { 833 return errors.New("not an array") 834 } 835 if len(arr) != 5 { 836 return errors.New("wrong number of structure elements") 837 } 838 839 var ( 840 index = -1 841 err error 842 ) 843 index++ 844 res.Name, err = func(item stackitem.Item) (string, error) { 845 b, err := item.TryBytes() 846 if err != nil { 847 return "", err 848 } 849 if !utf8.Valid(b) { 850 return "", errors.New("not a UTF-8 string") 851 } 852 return string(b), nil 853 }(arr[index]) 854 if err != nil { 855 return fmt.Errorf("field Name: %w", err) 856 } 857 858 index++ 859 res.Params, err = func(item stackitem.Item) ([]*ManagementParameter, error) { 860 arr, ok := item.Value().([]stackitem.Item) 861 if !ok { 862 return nil, errors.New("not an array") 863 } 864 res := make([]*ManagementParameter, len(arr)) 865 for i := range res { 866 res[i], err = itemToManagementParameter(arr[i], nil) 867 if err != nil { 868 return nil, fmt.Errorf("item %d: %w", i, err) 869 } 870 } 871 return res, nil 872 }(arr[index]) 873 if err != nil { 874 return fmt.Errorf("field Params: %w", err) 875 } 876 877 index++ 878 res.ReturnType, err = arr[index].TryInteger() 879 if err != nil { 880 return fmt.Errorf("field ReturnType: %w", err) 881 } 882 883 index++ 884 res.Offset, err = arr[index].TryInteger() 885 if err != nil { 886 return fmt.Errorf("field Offset: %w", err) 887 } 888 889 index++ 890 res.Safe, err = arr[index].TryBool() 891 if err != nil { 892 return fmt.Errorf("field Safe: %w", err) 893 } 894 895 return nil 896 } 897 898 // itemToManagementParameter converts stack item into *ManagementParameter. 899 func itemToManagementParameter(item stackitem.Item, err error) (*ManagementParameter, error) { 900 if err != nil { 901 return nil, err 902 } 903 var res = new(ManagementParameter) 904 err = res.FromStackItem(item) 905 return res, err 906 } 907 908 // FromStackItem retrieves fields of ManagementParameter from the given 909 // [stackitem.Item] or returns an error if it's not possible to do to so. 910 func (res *ManagementParameter) FromStackItem(item stackitem.Item) error { 911 arr, ok := item.Value().([]stackitem.Item) 912 if !ok { 913 return errors.New("not an array") 914 } 915 if len(arr) != 2 { 916 return errors.New("wrong number of structure elements") 917 } 918 919 var ( 920 index = -1 921 err error 922 ) 923 index++ 924 res.Name, err = func(item stackitem.Item) (string, error) { 925 b, err := item.TryBytes() 926 if err != nil { 927 return "", err 928 } 929 if !utf8.Valid(b) { 930 return "", errors.New("not a UTF-8 string") 931 } 932 return string(b), nil 933 }(arr[index]) 934 if err != nil { 935 return fmt.Errorf("field Name: %w", err) 936 } 937 938 index++ 939 res.Type, err = arr[index].TryInteger() 940 if err != nil { 941 return fmt.Errorf("field Type: %w", err) 942 } 943 944 return nil 945 } 946 947 // itemToManagementPermission converts stack item into *ManagementPermission. 948 func itemToManagementPermission(item stackitem.Item, err error) (*ManagementPermission, error) { 949 if err != nil { 950 return nil, err 951 } 952 var res = new(ManagementPermission) 953 err = res.FromStackItem(item) 954 return res, err 955 } 956 957 // FromStackItem retrieves fields of ManagementPermission from the given 958 // [stackitem.Item] or returns an error if it's not possible to do to so. 959 func (res *ManagementPermission) FromStackItem(item stackitem.Item) error { 960 arr, ok := item.Value().([]stackitem.Item) 961 if !ok { 962 return errors.New("not an array") 963 } 964 if len(arr) != 2 { 965 return errors.New("wrong number of structure elements") 966 } 967 968 var ( 969 index = -1 970 err error 971 ) 972 index++ 973 res.Contract, err = func(item stackitem.Item) (util.Uint160, error) { 974 b, err := item.TryBytes() 975 if err != nil { 976 return util.Uint160{}, err 977 } 978 u, err := util.Uint160DecodeBytesBE(b) 979 if err != nil { 980 return util.Uint160{}, err 981 } 982 return u, nil 983 }(arr[index]) 984 if err != nil { 985 return fmt.Errorf("field Contract: %w", err) 986 } 987 988 index++ 989 res.Methods, err = func(item stackitem.Item) ([]string, error) { 990 arr, ok := item.Value().([]stackitem.Item) 991 if !ok { 992 return nil, errors.New("not an array") 993 } 994 res := make([]string, len(arr)) 995 for i := range res { 996 res[i], err = func(item stackitem.Item) (string, error) { 997 b, err := item.TryBytes() 998 if err != nil { 999 return "", err 1000 } 1001 if !utf8.Valid(b) { 1002 return "", errors.New("not a UTF-8 string") 1003 } 1004 return string(b), nil 1005 }(arr[i]) 1006 if err != nil { 1007 return nil, fmt.Errorf("item %d: %w", i, err) 1008 } 1009 } 1010 return res, nil 1011 }(arr[index]) 1012 if err != nil { 1013 return fmt.Errorf("field Methods: %w", err) 1014 } 1015 1016 return nil 1017 } 1018 1019 // itemToStructsInternal converts stack item into *StructsInternal. 1020 func itemToStructsInternal(item stackitem.Item, err error) (*StructsInternal, error) { 1021 if err != nil { 1022 return nil, err 1023 } 1024 var res = new(StructsInternal) 1025 err = res.FromStackItem(item) 1026 return res, err 1027 } 1028 1029 // FromStackItem retrieves fields of StructsInternal from the given 1030 // [stackitem.Item] or returns an error if it's not possible to do to so. 1031 func (res *StructsInternal) FromStackItem(item stackitem.Item) error { 1032 arr, ok := item.Value().([]stackitem.Item) 1033 if !ok { 1034 return errors.New("not an array") 1035 } 1036 if len(arr) != 14 { 1037 return errors.New("wrong number of structure elements") 1038 } 1039 1040 var ( 1041 index = -1 1042 err error 1043 ) 1044 index++ 1045 res.Bool, err = arr[index].TryBool() 1046 if err != nil { 1047 return fmt.Errorf("field Bool: %w", err) 1048 } 1049 1050 index++ 1051 res.Int, err = arr[index].TryInteger() 1052 if err != nil { 1053 return fmt.Errorf("field Int: %w", err) 1054 } 1055 1056 index++ 1057 res.Bytes, err = arr[index].TryBytes() 1058 if err != nil { 1059 return fmt.Errorf("field Bytes: %w", err) 1060 } 1061 1062 index++ 1063 res.String, err = func(item stackitem.Item) (string, error) { 1064 b, err := item.TryBytes() 1065 if err != nil { 1066 return "", err 1067 } 1068 if !utf8.Valid(b) { 1069 return "", errors.New("not a UTF-8 string") 1070 } 1071 return string(b), nil 1072 }(arr[index]) 1073 if err != nil { 1074 return fmt.Errorf("field String: %w", err) 1075 } 1076 1077 index++ 1078 res.H160, err = func(item stackitem.Item) (util.Uint160, error) { 1079 b, err := item.TryBytes() 1080 if err != nil { 1081 return util.Uint160{}, err 1082 } 1083 u, err := util.Uint160DecodeBytesBE(b) 1084 if err != nil { 1085 return util.Uint160{}, err 1086 } 1087 return u, nil 1088 }(arr[index]) 1089 if err != nil { 1090 return fmt.Errorf("field H160: %w", err) 1091 } 1092 1093 index++ 1094 res.H256, err = func(item stackitem.Item) (util.Uint256, error) { 1095 b, err := item.TryBytes() 1096 if err != nil { 1097 return util.Uint256{}, err 1098 } 1099 u, err := util.Uint256DecodeBytesBE(b) 1100 if err != nil { 1101 return util.Uint256{}, err 1102 } 1103 return u, nil 1104 }(arr[index]) 1105 if err != nil { 1106 return fmt.Errorf("field H256: %w", err) 1107 } 1108 1109 index++ 1110 res.PK, err = func(item stackitem.Item) (*keys.PublicKey, error) { 1111 b, err := item.TryBytes() 1112 if err != nil { 1113 return nil, err 1114 } 1115 k, err := keys.NewPublicKeyFromBytes(b, elliptic.P256()) 1116 if err != nil { 1117 return nil, err 1118 } 1119 return k, nil 1120 }(arr[index]) 1121 if err != nil { 1122 return fmt.Errorf("field PK: %w", err) 1123 } 1124 1125 index++ 1126 res.PubKey, err = func(item stackitem.Item) (*keys.PublicKey, error) { 1127 b, err := item.TryBytes() 1128 if err != nil { 1129 return nil, err 1130 } 1131 k, err := keys.NewPublicKeyFromBytes(b, elliptic.P256()) 1132 if err != nil { 1133 return nil, err 1134 } 1135 return k, nil 1136 }(arr[index]) 1137 if err != nil { 1138 return fmt.Errorf("field PubKey: %w", err) 1139 } 1140 1141 index++ 1142 res.Sign, err = arr[index].TryBytes() 1143 if err != nil { 1144 return fmt.Errorf("field Sign: %w", err) 1145 } 1146 1147 index++ 1148 res.ArrOfBytes, err = func(item stackitem.Item) ([][]byte, error) { 1149 arr, ok := item.Value().([]stackitem.Item) 1150 if !ok { 1151 return nil, errors.New("not an array") 1152 } 1153 res := make([][]byte, len(arr)) 1154 for i := range res { 1155 res[i], err = arr[i].TryBytes() 1156 if err != nil { 1157 return nil, fmt.Errorf("item %d: %w", i, err) 1158 } 1159 } 1160 return res, nil 1161 }(arr[index]) 1162 if err != nil { 1163 return fmt.Errorf("field ArrOfBytes: %w", err) 1164 } 1165 1166 index++ 1167 res.ArrOfH160, err = func(item stackitem.Item) ([]util.Uint160, error) { 1168 arr, ok := item.Value().([]stackitem.Item) 1169 if !ok { 1170 return nil, errors.New("not an array") 1171 } 1172 res := make([]util.Uint160, len(arr)) 1173 for i := range res { 1174 res[i], err = func(item stackitem.Item) (util.Uint160, error) { 1175 b, err := item.TryBytes() 1176 if err != nil { 1177 return util.Uint160{}, err 1178 } 1179 u, err := util.Uint160DecodeBytesBE(b) 1180 if err != nil { 1181 return util.Uint160{}, err 1182 } 1183 return u, nil 1184 }(arr[i]) 1185 if err != nil { 1186 return nil, fmt.Errorf("item %d: %w", i, err) 1187 } 1188 } 1189 return res, nil 1190 }(arr[index]) 1191 if err != nil { 1192 return fmt.Errorf("field ArrOfH160: %w", err) 1193 } 1194 1195 index++ 1196 res.Map, err = func(item stackitem.Item) (map[*big.Int]keys.PublicKeys, error) { 1197 m, ok := item.Value().([]stackitem.MapElement) 1198 if !ok { 1199 return nil, fmt.Errorf("%s is not a map", item.Type().String()) 1200 } 1201 res := make(map[*big.Int]keys.PublicKeys) 1202 for i := range m { 1203 k, err := m[i].Key.TryInteger() 1204 if err != nil { 1205 return nil, fmt.Errorf("key %d: %w", i, err) 1206 } 1207 v, err := func(item stackitem.Item) (keys.PublicKeys, error) { 1208 arr, ok := item.Value().([]stackitem.Item) 1209 if !ok { 1210 return nil, errors.New("not an array") 1211 } 1212 res := make(keys.PublicKeys, len(arr)) 1213 for i := range res { 1214 res[i], err = func(item stackitem.Item) (*keys.PublicKey, error) { 1215 b, err := item.TryBytes() 1216 if err != nil { 1217 return nil, err 1218 } 1219 k, err := keys.NewPublicKeyFromBytes(b, elliptic.P256()) 1220 if err != nil { 1221 return nil, err 1222 } 1223 return k, nil 1224 }(arr[i]) 1225 if err != nil { 1226 return nil, fmt.Errorf("item %d: %w", i, err) 1227 } 1228 } 1229 return res, nil 1230 }(m[i].Value) 1231 if err != nil { 1232 return nil, fmt.Errorf("value %d: %w", i, err) 1233 } 1234 res[k] = v 1235 } 1236 return res, nil 1237 }(arr[index]) 1238 if err != nil { 1239 return fmt.Errorf("field Map: %w", err) 1240 } 1241 1242 index++ 1243 res.Struct, err = itemToStructsInternal(arr[index], nil) 1244 if err != nil { 1245 return fmt.Errorf("field Struct: %w", err) 1246 } 1247 1248 index++ 1249 res.UnexportedField, err = arr[index].TryInteger() 1250 if err != nil { 1251 return fmt.Errorf("field UnexportedField: %w", err) 1252 } 1253 1254 return nil 1255 }