CRUD interface for personal notes (user-generated off-chain transaction metadata)
npm install @exodus/personal-notesThe module allows users to create, manage, and store personal notes securely for transactions
1. Personal Notes Atom
The core functionality of the module is powered by the personalNotesAtom, which stores user-generated notes.
Each note has uniq id and bounded to txId.
Personal Notes stored using PersonalNoteSet and PersonalNote models
``js
const personalNotes = PersonalNoteSet.fromArray([
{ txId: 'bitcoin-tx-1', message: 'gift for friend' },
{ txId: 'ethereum-tx-1', message: 'gift from friend' },
])
personalNotesAtom.set(personalNotes)
const bitcoinTxPersonalNote = personalNotes.get('bitcoin-tx-1')
`
2. Module
The module does 2 things:
1. Sync personal notes to fusionupsert
2. Provides method to add personal notes
Only following props are allowed:
`js`
exodus.personalNotes.upsert({
txId, // required
message, // string
// specific fields used by platforms features
username,
address,
dapp,
providerData,
walletConnect,
xmrInputs,
})
3. Plugin
Plugin subscribes to personalNotesAtom and emit its value to port
4. Redux module
Provides selectors to get personal notes
This feature is designed to be used together with @exodus/headless. See using the sdk.
1. Open the playground https://exodus-hydra.pages.dev/
2. Run exodus.personalNotes.upsert({txId: 'e7b8f55e3173aed308b8fbff11ee1fb96183e51f111ac415da9ae057c72ac8ca', message: 'my note'}) in the Dev Tools Console.selectors.personalNotes.data(store.getState())
3. Run in the Dev Tools Console. You should see stored personal notesselectors.personalNotes.get(store.getState())('e7b8f55e3173aed308b8fbff11ee1fb96183e51f111ac415da9ae057c72ac8ca')
4. Run in the Dev Tools Console. You should see specific personal note
See using the sdk for more details on how features plug into the SDK
`ts`
exodus.personalNotes.upsert(
txId: 'bitcoin-tx-id',
message: 'tx for friend',
})
See using the sdk for more details on basic UI-side setup.
`js
import { selectors } from '~/ui/flux'
const usePersonalNote = (txId) => {
const getPersonalNote = useSelector(selectors.personalNotes.get)
const personalNote = getPersonalNote(txId)
return personalNote
}
``