This package provides an XMTP content type to support on-chain transaction references.
Open for feedback
You are welcome to provide feedback on this implementation by commenting on the Proposal for on-chain transaction reference content type.
It is a reference to an on-chain transaction sent as a message. This content type facilitates sharing transaction hashes or IDs, thereby providing a direct link to on-chain activities.
Transaction references serve to display transaction details, facilitating the sharing of on-chain activities, such as token transfers, between users.
# npm
npm i @xmtp/content-type-transaction-reference
# yarn
yarn add @xmtp/content-type-transaction-reference
# pnpm
pnpm i @xmtp/content-type-transaction-reference
With XMTP, a transaction reference is represented as an object with the following keys:
const transactionReference: TransactionReference = {
/**
* Optional namespace for the networkId
*/
namespace: "eip155";
/**
* The networkId for the transaction, in decimal or hexidecimal format
*/
networkId: 1;
/**
* The transaction hash
*/
reference: "0x123...abc";
/**
* Optional metadata object
*/
metadata: {
transactionType: "transfer",
currency: "USDC",
amount: 100000, // In integer format, this represents 1 USDC (100000/10^6)
decimals: 6, // Specifies that the currency uses 6 decimal places
fromAddress: "0x456...def",
toAddress: "0x789...ghi"
};
};
Once you have a transaction reference, you can send it as part of your conversation:
await conversation.messages.send(transactionReference, {
contentType: ContentTypeTransactionReference,
});
To receive and process a transaction reference:
// Assume `loadLastMessage` is a thing you have
const message: DecodedMessage = await loadLastMessage();
if (!message.contentType.sameAs(ContentTypeTransactionReference)) {
// Handle non-transaction reference message
return;
}
const transactionRef: TransactionReference = message.content;
// Process the transaction reference here
Displaying a transaction reference typically involves rendering details such as the transaction hash, network ID, and any relevant metadata. The exact UI representation can vary based on your application's design, you might want to fetch on-chain data before showing them to the user.
The optional metadata within a transaction reference, such as transaction type, currency, amount, and addresses, are provided for informational purposes only. These details should not be solely relied upon for verifying transaction specifics. Developers are responsible for ensuring the accuracy of transaction data, either by directing users to the appropriate block explorer or by fetching and displaying verified transaction data from the blockchain.
Run yarn dev
to build the content type and watch for changes, which will trigger a rebuild.
Before running unit tests, start the required Docker container at the root of this repository. For more info, see Running tests.
yarn build
: Builds the content typeyarn clean
: Removesnode_modules
,dist
, and.turbo
foldersyarn dev
: Builds the content type and watches for changes, which will trigger a rebuildyarn format
: Runs Prettier format and write changesyarn format:check
: Runs Prettier format checkyarn lint
: Runs ESLintyarn test:setup
: Starts a necessary Docker container for testingyarn test:teardown
: Stops Docker container for testingyarn test
: Runs all unit testsyarn typecheck
: Runstsc