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  }