Skip to content

Latest commit

 

History

History
171 lines (129 loc) · 3.8 KB

README.md

File metadata and controls

171 lines (129 loc) · 3.8 KB

Aurora Engine Utilities for JavaScript

This package provides utilities for parsing Aurora transactions in JavaScript applications. It supports various Ethereum transaction types and simplifies the process of working with Aurora transactions within the NEAR ecosystem.

Table of Contents

Installation

Install the package using npm:

npm install @cawabunga/aurora-engine-utils-js

Features

  • Parse Aurora transactions from raw bytes
  • Support for Legacy, EIP-2930, and EIP-1559 transaction types
  • Optional block height parameter for context-aware parsing

Usage

Parsing Transactions

import {parseTransaction} from '@cawabunga/aurora-engine-utils-js';
import {connect} from 'near-api-js';

// Connect to NEAR network
const near = await connect(config);
const account = await near.account("example.testnet");

// Get a transaction outcome
const outcome = await account.connection.provider.txStatus(
    'HWS862NvR9MX1Rx6ht1vE9EKTbrmSwtQf4dVYf3oSsuo',
    'aurora'
);

// Extract the raw transaction bytes
const rawBytes = Buffer.from(
    outcome.transaction.actions[0].FunctionCall.args,
    'base64'
);

// Optional: Get the block height
const blockHeight = BigInt(outcome.transaction_outcome.block_height);

// Parse the transaction
const parsedTransaction = parseTransaction(rawBytes, blockHeight);

console.log(parsedTransaction);

The parsedTransaction object will be of type JsEthTransactionKind, which can be one of three transaction types: Legacy, EIP-2930, or EIP-1559.

API Reference

Functions

parseTransaction(bytes: Uint8Array, block_height?: bigint): JsEthTransactionKind

Parses an encoded Aurora transaction and returns a JsEthTransactionKind object.

  • bytes: A Uint8Array containing the raw transaction data.
  • block_height (optional): A bigint representing the block height for context-aware parsing.
  • Returns: A JsEthTransactionKind object representing the decoded transaction.

Types

JsEthTransactionKind

A union type representing different Ethereum transaction kinds:

type JsEthTransactionKind =
    { Legacy: JsLegacyEthSignedTransaction } |
    { Eip2930: JsSignedTransaction2930 } |
    { Eip1559: JsSignedTransaction1559 };

JsLegacyEthSignedTransaction

Represents a signed legacy Ethereum transaction:

interface JsLegacyEthSignedTransaction {
    transaction: JsTransactionLegacy;
    v: string;
    r: string;
    s: string;
}

interface JsTransactionLegacy {
    nonce: string;
    gasPrice: string;
    gasLimit: string;
    to: string;
    value: string;
    data: number[];
}

JsSignedTransaction2930

Represents a signed EIP-2930 transaction:

interface JsSignedTransaction2930 {
    transaction: JsTransaction2930;
    parity: number;
    r: string;
    s: string;
}

interface JsTransaction2930 {
    chainId: string;
    nonce: string;
    gasPrice: string;
    gasLimit: string;
    to: string;
    value: string;
    data: number[];
    accessList: JsAccessTuple[];
}

JsSignedTransaction1559

Represents a signed EIP-1559 transaction:

interface JsSignedTransaction1559 {
    transaction: JsTransaction1559;
    parity: number;
    r: string;
    s: string;
}

interface JsTransaction1559 {
    chainId: string;
    nonce: string;
    maxPriorityFeePerGas: string;
    maxFeePerGas: string;
    gasLimit: string;
    to: string;
    value: string;
    data: number[];
    accessList: JsAccessTuple[];
}

JsAccessTuple

Represents an access list item:

interface JsAccessTuple {
    address: string;
    storageKeys: string[];
}