github.com/ChainSafe/chainbridge-core@v1.4.2/chains/evm/cli/erc721/owner.go (about) 1 package erc721 2 3 import ( 4 "fmt" 5 "math/big" 6 7 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/contracts/erc721" 8 "github.com/ChainSafe/chainbridge-core/chains/evm/calls/evmtransaction" 9 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/initialize" 10 "github.com/ChainSafe/chainbridge-core/util" 11 12 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/flags" 13 "github.com/ChainSafe/chainbridge-core/chains/evm/cli/logger" 14 "github.com/ethereum/go-ethereum/common" 15 "github.com/rs/zerolog/log" 16 "github.com/spf13/cobra" 17 ) 18 19 var ownerCmd = &cobra.Command{ 20 Use: "owner", 21 Short: "Get an ERC721 token owner", 22 Long: "The owner subcommand gets a token owner from an ERC721 mintable contract", 23 PreRun: func(cmd *cobra.Command, args []string) { 24 logger.LoggerMetadata(cmd.Name(), cmd.Flags()) 25 }, 26 PersistentPreRunE: func(cmd *cobra.Command, args []string) error { 27 return util.CallPersistentPreRun(cmd, args) 28 }, 29 RunE: func(cmd *cobra.Command, args []string) error { 30 c, err := initialize.InitializeClient(url, senderKeyPair) 31 if err != nil { 32 return err 33 } 34 t, err := initialize.InitializeTransactor(gasPrice, evmtransaction.NewTransaction, c, prepare) 35 if err != nil { 36 return err 37 } 38 return OwnerCmd(cmd, args, erc721.NewErc721Contract(c, Erc721Addr, t)) 39 }, 40 Args: func(cmd *cobra.Command, args []string) error { 41 err := ValidateOwnerFlags(cmd, args) 42 if err != nil { 43 return err 44 } 45 46 err = ProcessOwnerFlags(cmd, args) 47 return err 48 }, 49 } 50 51 func BindOwnerFlags(cmd *cobra.Command) { 52 cmd.Flags().StringVar(&Erc721Address, "contract", "", "ERC721 contract address") 53 cmd.Flags().StringVar(&Token, "token", "", "ERC721 token ID") 54 flags.MarkFlagsAsRequired(cmd, "contract", "token") 55 } 56 57 func init() { 58 BindOwnerFlags(ownerCmd) 59 } 60 61 func ValidateOwnerFlags(cmd *cobra.Command, args []string) error { 62 if !common.IsHexAddress(Erc721Address) { 63 return fmt.Errorf("invalid ERC721 contract address %s", Erc721Address) 64 } 65 return nil 66 } 67 68 func ProcessOwnerFlags(cmd *cobra.Command, args []string) error { 69 Erc721Addr = common.HexToAddress(Erc721Address) 70 71 var ok bool 72 if TokenId, ok = big.NewInt(0).SetString(Token, 10); !ok { 73 return fmt.Errorf("invalid token id value") 74 } 75 76 return nil 77 } 78 79 func OwnerCmd(cmd *cobra.Command, args []string, erc721Contract *erc721.ERC721Contract) error { 80 owner, err := erc721Contract.Owner(TokenId) 81 if err != nil { 82 return err 83 } 84 85 log.Info().Msgf("%v token owner: %v", TokenId, owner) 86 return err 87 }