Support onchain transaction references with your agent built with XMTP
This package provides an XMTP content type to support onchain transaction references. It is a reference to an onchain transaction sent as a message. This content type facilitates sharing transaction hashes or IDs, thereby providing a direct link to onchain activities. Transaction references serve to display transaction details, facilitating the sharing of onchain activities, such as token transfers, between users.
Install the package
npm i @xmtp/content-type-transaction-reference
Configure the content type
After importing the package, you can register the codec.
import {
ContentTypeTransactionReference,
TransactionReferenceCodec,
} from '@xmtp/content-type-transaction-reference';
// Create the XMTP agent
const agent = await Agent.create(signer, {
env: 'dev',
codecs: [new TransactionReferenceCodec()],
});
Send a 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 hexadecimal 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 ctx.conversation.send(transactionReference, {
contentType: ContentTypeTransactionReference,
});
Receive a transaction reference
To receive and process a transaction reference, you can use the following code samples.
// 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
You are welcome to provide feedback on this implementation by commenting on XIP-59: Trigger on-chain calls via wallet_sendCalls.