From 47509fd5751fbf87712e96d5534dcf17a02ff0d0 Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Mon, 3 Apr 2023 14:12:52 -0700 Subject: [PATCH] feat: cookbook example for working with relayer --- .../transactions/meta-transaction-relayer.js | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 packages/cookbook/transactions/meta-transaction-relayer.js diff --git a/packages/cookbook/transactions/meta-transaction-relayer.js b/packages/cookbook/transactions/meta-transaction-relayer.js new file mode 100644 index 0000000000..99c290b5e7 --- /dev/null +++ b/packages/cookbook/transactions/meta-transaction-relayer.js @@ -0,0 +1,50 @@ +const { Account } = require('@near-js/accounts'); +const { UnencryptedFileSystemKeyStore } = require('@near-js/keystores-node'); +const { JsonRpcProvider } = require('@near-js/providers'); +const { InMemorySigner } = require('@near-js/signers'); +const { actionCreators } = require('@near-js/transactions'); +const BN = require('bn.js'); +const os = require('os'); +const path = require('path'); + +const { transfer } = actionCreators; + +async function sendNearThroughRelayer({ amount, receiverId, senderAccount }) { + const response = await senderAccount.signAndSendSignedDelegate({ + actions: [transfer(amount)], + receiverId, + relayerUrl: 'https://relayer.org/relay', + }); + + console.log(response); + return response; +} + +module.exports = { + sendNearThroughRelayer, +}; + +if (require.main === module) { + (async function () { + const networkId = 'testnet'; + const provider = new JsonRpcProvider({ url: 'https://rpc.testnet.near.org' }); + + const CREDENTIALS_DIR = '.near-credentials'; + const credentialsPath = path.join(os.homedir(), CREDENTIALS_DIR); + + const RECEIVER_ACCOUNT_ID = 'receiver.testnet'; // the ultimate recipient of the meta transaction execution + const SENDER_ACCOUNT_ID = 'sender.testnet'; // the account requesting the transaction be executed + + const senderAccount = new Account({ + networkId, + provider, + signer: new InMemorySigner(new UnencryptedFileSystemKeyStore(credentialsPath)) + }, SENDER_ACCOUNT_ID); + + await sendNearThroughRelayer({ + amount: new BN('1000000000'), + receiverId: RECEIVER_ACCOUNT_ID, + senderAccount, + }); + }()); +} \ No newline at end of file