15 things every product manager should know about smart contracts

to better understand limitations and primitives and build products for the blockchain

Smart contracts are state machines

Counters, setting variables, addresses, dictionaries, etc are the major primitives for logic you want to create

Reading from the blockchain does not cost gas fees

Use this to your advantage

Writing to the blockchain costs gas

Sending out funds also mutates the state and hence costs gas

Receiving funds does not cost gas fees to the incoming smart contract

You will automatically also know which wallet address sent you the funds. You can also listen for events related to balance

You do not have access of the wallet address of a visitor

But you can detect if the user is using Phantom or Metamask. Even change of subdomain or port is akin to a new website

Once the user has connected to your app, then you can see their wallet address, balance.

You can reject incoming funds based on some logic

eg: not being an approved sender or not being larger than X

That said you can not put much logic or modifications when your smart contract receives funds

Since there is a gas limit and time restriction that ensures that it should do the absolute minimum

Fund transfers can be pull, as well as push

eg of pull is to show the balance, and allow them to pull money out eg of a push is to click a button and send out funds that reside in a smart contract

No server is required to interact with the blockchain from a website

Just regular javascript is used for rpc calls to read, write.

You can detect if a user denies connecting to your app

and either show a retry or a failure message

A connected user who is temporarily locked out of their wallet will need to log back in

if they fail to, you can again handle the error. You won't know which wallet it is.

You can listen to the firehose of events of any smart contract

eg: listening to random events getting pushed out by the smart contract eg: beginning a disbursement and waiting for it's completion to show a success UI

Checking for NFT's begins with checking against known NFT contracts with the said wallet

Which is why you instead start with a bunch of NFT contracts and check if the user has one of the said collection. Or services exist that index or routinely cache NFT's and reverse engineer to give a pretty list of NFT's held by a user

access to all wallets will be compromised when the seed phrase is compromised

tread carefully

services like infura, alchemy, morallis etc do not cover gas fees despite free api calls

They require you to wire funds to the wallet addresses running any write/mutations. reads are free.