Skip to main content

Operation API

Introduction

When creating a HyMatrix instance, you provide accid, privateKey, signer, arJWK, and url.

accid: Account address.

privateKey: Ethereum private key, consisting of '0x' + 64 characters, total 66 characters.

arJWK: Arweave JWKInterface JSON file or use_wallet.

signer: Ethereum signer created via new Web3Provider(window.ethereum). You can also export Web3Provider from hymatrix-js.

url: Node URL to send requests to.

info
  1. In the HyMatrix network environment, each processId is assigned a fixed node to handle transactions.
  2. Before sending a transaction, use getNodesByProcess to get the nodes corresponding to the processId.
  3. When creating a HyMatrix instance, you can configure the node with the url field.
const hyMatrix = new HyMatrix({
url: 'https / http'
})

When sending a sendMessage transaction, pass processId, tags, and optional data:

export interface SendMessageParams {
processId: string
tags: Tag[]
data?: string
}

export interface Tag {
name: string
value: string
}

processId: string type, representing the ID of the process.

tags: Tag type, including fields like Action, Recipient, Quantity.

data: string type, representing the data to be signed.

// processId
const processId = ''

const recipient = ''
const amt = '100'
const tags = [
{ name: 'Action', value: 'Transfer' },
{ name: 'Recipient', value: recipient },
{ name: 'Quantity', value: amt }
]

sendMessage

Send a transaction via the Hymatrix network.

Parameter

FieldRequiredDescription
processIdYESprocessId: process address
tagsYESTag type, for example, for a transfer tags should include [{ name: 'Action', value: 'Transfer' }, { name: 'Recipient', value: 'addr' }, { name: 'Quantity', value: 'amt' }]
dataNOSigned data, optional, defaults to empty string.

Example

// Transfer example: using hmAR

// 1. Confirm the transfer processId
const processId = 'GuuH1wCOBatG-JoKu42NkJMC7Cx-rjD8F5EEICLTNP8'

// 2. Confirm recipient address and amount
const recipient = '' // ethAddress or arAddress
const amt = '100' // transfer amount
const tags = [
{ name: 'Action', value: 'Transfer' },
{ name: 'Recipient', value: recipient },
{ name: 'Quantity', value: amt }
]

// 3. Get the node URLs by processId to successfully send the transaction
// If you already know the url, you can skip this step to reduce requests and save time
const urls = await new HyMatrix().getNodesByProcess(processId)

// 4. Create a HyMatrix instance
const hyMatrix = new HyMatrix({
arJWK: 'use_wallet',
url: urls[0]?.URL // all subsequent requests will be sent to this URL
})

// 5. Build params object
const params = {
tags,
processId,
data: '' // optional, defaults to empty string
}

// 6. Send transaction
const result = await hyMatrix.sendMessage(params)
console.log(result.id) // get message ID, can be used to query transaction details

// wait a moment...

// 7. Query transaction details // tip: request sent to configured URL node
const resultTx = await hyMatrix.getResult(processId, result.id)
console.log(resultTx) // get detailed transaction info

Example return

{
"id": "vDDowE3NrNKfAyZtfEGaTLrkOhr3DDB2D_-Vs22Z8ig"
}

More messages, please visit /sendMessage

trySend

Trigger outbox sending for a given process and target (best effort).

Parameters

FieldRequiredDescription
pidYESpid: process address
targetYEStarget: accid or URL

Example

// 1. Confirm the processId to trigger
const processId = ''

// 2. Confirm the target accid or URL
const target = ''

// 3. Retrieve the node URL associated with the processId.
// This URL allows the transaction to be sent successfully.
// If the URL is already known, this step can be skipped to reduce requests and save time.
const urls = await new HyMatrix().getNodesByProcess(processId)

// 4. Create the HyMatrix instance
const hyMatrix = new HyMatrix({
arJWK: 'use_wallet',
url: urls[0]?.URL // All subsequent hyMatrix requests will use this URL
})

// 5. Construct the request parameters
const params = {
pid: processId,
target: target,
}

// 6. Send the transaction
const result = await hyMatrix.trySend(params)
console.log(result) // 'ok' // Sent successfully

Response

"ok"

More details at /trySend