github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/smartcontract/manifest/standard/nep11.go (about)

     1  package standard
     2  
     3  import (
     4  	"github.com/nspcc-dev/neo-go/pkg/smartcontract"
     5  	"github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest"
     6  )
     7  
     8  // Nep11Base is a Standard containing common NEP-11 methods.
     9  var Nep11Base = &Standard{
    10  	Base: DecimalTokenBase,
    11  	Manifest: manifest.Manifest{
    12  		ABI: manifest.ABI{
    13  			Methods: []manifest.Method{
    14  				{
    15  					Name: "balanceOf",
    16  					Parameters: []manifest.Parameter{
    17  						{Name: "owner", Type: smartcontract.Hash160Type},
    18  					},
    19  					ReturnType: smartcontract.IntegerType,
    20  					Safe:       true,
    21  				},
    22  				{
    23  					Name: "tokensOf",
    24  					Parameters: []manifest.Parameter{
    25  						{Name: "owner", Type: smartcontract.Hash160Type},
    26  					},
    27  					ReturnType: smartcontract.InteropInterfaceType,
    28  					Safe:       true,
    29  				},
    30  				{
    31  					Name: "transfer",
    32  					Parameters: []manifest.Parameter{
    33  						{Name: "to", Type: smartcontract.Hash160Type},
    34  						{Name: "tokenId", Type: smartcontract.ByteArrayType},
    35  						{Name: "data", Type: smartcontract.AnyType},
    36  					},
    37  					ReturnType: smartcontract.BoolType,
    38  				},
    39  			},
    40  			Events: []manifest.Event{
    41  				{
    42  					Name: "Transfer",
    43  					Parameters: []manifest.Parameter{
    44  						{Name: "from", Type: smartcontract.Hash160Type},
    45  						{Name: "to", Type: smartcontract.Hash160Type},
    46  						{Name: "amount", Type: smartcontract.IntegerType},
    47  						{Name: "tokenId", Type: smartcontract.ByteArrayType},
    48  					},
    49  				},
    50  			},
    51  		},
    52  	},
    53  	Optional: []manifest.Method{
    54  		{
    55  			Name: "properties",
    56  			Parameters: []manifest.Parameter{
    57  				{Name: "tokenId", Type: smartcontract.ByteArrayType},
    58  			},
    59  			ReturnType: smartcontract.MapType,
    60  			Safe:       true,
    61  		},
    62  		{
    63  			Name:       "tokens",
    64  			ReturnType: smartcontract.InteropInterfaceType,
    65  			Safe:       true,
    66  		},
    67  	},
    68  }
    69  
    70  // Nep11NonDivisible is a NEP-11 non-divisible Standard.
    71  var Nep11NonDivisible = &Standard{
    72  	Base: Nep11Base,
    73  	Manifest: manifest.Manifest{
    74  		ABI: manifest.ABI{
    75  			Methods: []manifest.Method{
    76  				{
    77  					Name: "ownerOf",
    78  					Parameters: []manifest.Parameter{
    79  						{Name: "tokenId", Type: smartcontract.ByteArrayType},
    80  					},
    81  					ReturnType: smartcontract.Hash160Type,
    82  					Safe:       true,
    83  				},
    84  			},
    85  		},
    86  	},
    87  }
    88  
    89  // Nep11Divisible is a NEP-11 divisible Standard.
    90  var Nep11Divisible = &Standard{
    91  	Base: Nep11Base,
    92  	Manifest: manifest.Manifest{
    93  		ABI: manifest.ABI{
    94  			Methods: []manifest.Method{
    95  				{
    96  					Name: "balanceOf",
    97  					Parameters: []manifest.Parameter{
    98  						{Name: "owner", Type: smartcontract.Hash160Type},
    99  						{Name: "tokenId", Type: smartcontract.ByteArrayType},
   100  					},
   101  					ReturnType: smartcontract.IntegerType,
   102  					Safe:       true,
   103  				},
   104  				{
   105  					Name: "ownerOf",
   106  					Parameters: []manifest.Parameter{
   107  						{Name: "tokenId", Type: smartcontract.ByteArrayType},
   108  					},
   109  					ReturnType: smartcontract.InteropInterfaceType, // iterator
   110  					Safe:       true,
   111  				},
   112  				{
   113  					Name: "transfer",
   114  					Parameters: []manifest.Parameter{
   115  						{Name: "from", Type: smartcontract.Hash160Type},
   116  						{Name: "to", Type: smartcontract.Hash160Type},
   117  						{Name: "amount", Type: smartcontract.IntegerType},
   118  						{Name: "tokenId", Type: smartcontract.ByteArrayType},
   119  						{Name: "data", Type: smartcontract.AnyType},
   120  					},
   121  					ReturnType: smartcontract.BoolType,
   122  				},
   123  			},
   124  		},
   125  	},
   126  }