Most wallets remember approvals. Said-No remembers the sends you rejected, and asks again.
Check a sendIt does not decide what is dangerous. It remembers what you decided was not worth the risk. Tatum supplies the live chain facts, Walrus Memory supplies your own reasoning, and Said-No puts them side by side before you sign.
Read how it worksStores each decision with your typed reason. Recall brings them back, and the blob id is the receipt for a send that never happened.
Supplies current chain facts over gRPC: balance, recipient history, a dry-run, and execution only after you approve.
The chain the firewall watches. Transaction history gives the recipient novelty and your usual transfer size.
Encrypts memories by default through the relayer. The relayer decrypts server-side, so we do not call this zero-trust.
“Too large for someone I have never paid. If this is real they can send a small test first.”
“Random address from Discord, felt scammy. I do not make decisions like this at 2am.”
“I was rushed into this. Nobody who means well needs an answer in five minutes.”
“I know this one. It is my own second wallet, so stop asking me about it.”
“Ten times what I normally send. Make me look at this twice.”
Before a Sui send, it reads live chain facts through Tatum and recalls your past decisions from Walrus Memory. If you rejected something similar, it raises the friction and quotes your own reason.
No. It does not claim a transaction is objectively unsafe. It asks whether you still agree with a decision you already made, and you stay in control.
No. It is explainable similarity-weighted memory: fixed, printed weights for recipient, amount, time of day and interaction pattern, compared against your stored decisions.
A database could hold the rows. Walrus Memory gives an owner-controlled space with encrypted blobs that another agent can read through a key you grant on chain. We concede delegates can also write, and the relayer decrypts server-side.
It is the source of current chain facts over gRPC: balance, recipient history, simulating the send, and executing only after you approve.
It fails closed. A missing input raises the verdict to at least Reflection, never a silent allow.
The memory itself. A denied send never touches the chain, so the receipt is the Walrus blob id, with your typed reason and the timestamp.