This guide demonstrates how to create, sign, and broadcast a transaction using the Adamik API along with a common Ethereum library, ethers.js. This tutorial is perfect for developers who want to integrate Adamik’s features into their Ethereum workflows, ensuring secure and efficient transaction management.

Prerequisites

  • Node.js and npm installed
  • Basic understanding of Ethereum and transaction workflows
  • Familiarity with the ethers.js library

Step-by-Step Guide

1. Setting Up the Environment

Ensure you have the ethers library installed in your project:

npm install ethers

2. Writing the Script

Below is the script that handles the full transaction flow, from creating a wallet to broadcasting the signed transaction.

import { Wallet } from "ethers";

// Replace with your wallet's mnemonic phrase
const walletPhrase = "...";
const ADAMIK_API_KEY = "your-adamik-api-key"; // get it from https://dashboard.adamik.io
const recipientAddress = "";

async function main() {
  // Create wallet using mnemonic phrase
  const wallet = Wallet.fromPhrase(walletPhrase);

  // Prepare the transaction request
  const requestBody = {
    transaction: {
      data: {
        chainId: "sepolia", // Target Ethereum testnet chain
        mode: "transfer",
        sender: wallet.address,
        recipient: recipientAddress || wallet.address, // Self-send if no recipient
        amount: "10000", // Transaction amount
        useMaxAmount: false,
        fees: "0",
        gas: "0",
        memo: "",
        format: "hex",
        validatorAddress: "",
        params: {
          pubKey: wallet.publicKey, // Public key of the wallet
        },
      },
    },
  };

  // Encode the transaction with Adamik API
  const responseEncode = await fetch(
    "https://api.adamik.io/api/transaction/encode",
    {
      method: "POST",
      headers: {
        Authorization: ADAMIK_API_KEY,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(requestBody),
    }
  );

  const encodedData = await responseEncode.json();
  console.log(encodedData);

  // Sign the encoded transaction
  const tx = encodedData.transaction.encoded;
  const signature = await wallet.signTransaction(tx);

  // Prepare to broadcast the signed transaction
  const sendTransactionBody = {
    transaction: {
      data: encodedData.transaction.data,
      encoded: tx,
      signature: signature,
    },
  };

  // Broadcast the transaction using Adamik API
  const responseBroadcast = await fetch(
    "https://api.adamik.io/api/transaction/broadcast",
    {
      method: "POST",
      headers: {
        Authorization: ADAMIK_API_KEY,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(sendTransactionBody),
    }
  );

  const responseData = await responseBroadcast.json();
  console.log("Transaction Result:", JSON.stringify(responseData));
}

main();

3. Explanation

  • Wallet Creation: The script begins by creating a wallet using a mnemonic phrase, which is crucial for managing private keys. Please note Adamik API doesn’t have the custody of the assets.
  • Transaction Encoding: The transaction details are passed to the Adamik API, which translates them into a raw transaction to be signed.
  • Signing and Broadcasting: The transaction is then signed with the wallet’s private key and finally broadcast to the Ethereum network using the Adamik API.

4. Troubleshooting

  • Invalid API Key: Ensure your Adamik API key is correct.
  • Network Issues: Verify network availability and Adamik API status.
  • Security Note: Never hardcode sensitive information like mnemonic phrases in your production environment.

5. Get in Touch

Connect with us through our Discord Server or direclty through GitHub.