// npm i @proton/js node-fetch@cjs
const { JsonRpc, Api, JsSignatureProvider, Serialize } = require('@proton/js')
const fetch = require('node-fetch');
// For testnet use https://rpc.api.testnet.metalx.com
const ENDPOINTS = ['https://rpc.api.mainnet.metalx.com']
// for testnet use https://dex.api.testnet.metalx.com/dex
const DEX_API_URL = "https://dex.api.mainnet.metalx.com/dex"
// To export private key from your wallet, follow:
// https://help.xprnetwork.org/hc/en-us/articles/4410313687703-How-do-I-backup-my-private-key-in-the-WebAuth-Wallet-
const PRIVATE_KEY = 'PVT_K1_2fdW4UGdbgG59mUaTiMXLy1rFv3afbmSWEZGWFz6zF8dR1VZPb'
// Initialize
const rpc = new JsonRpc(ENDPOINTS)
const signatureProvider = new JsSignatureProvider([PRIVATE_KEY])
const api = new Api({ rpc, signatureProvider })
// Example username, replace with your own
const USERNAME = 'metaltest1'
const authorization = [{ actor: USERNAME, permission: 'active' }]
// Cancel transaction builder
const buildCancelTransaction = orderId => {
return {
actions: [
{
account: 'dex',
name: 'cancelorder',
data: {
account: USERNAME,
order_id: orderId
},
authorization
},
{
account: 'dex',
name: 'withdrawall',
data: {
account: USERNAME,
},
authorization
},
]
}
}
async function main() {
// Get order by ordinal ID
const EXAMPLE_ORDINAL_ORDER_ID = '7fc4fbef0abcc61bebb8fcc0327bf7bb50d9fb77eaa92b876d0985845475a1f3'
const orderHistoryResponse = await fetch(`${DEX_API_URL}/v1/orders/history?account=${USERNAME}&ordinal_order_ids=${EXAMPLE_ORDINAL_ORDER_ID}`);
const { data: orders } = await orderHistoryResponse.json()
// Build transaction (using first order ID for example)
const transaction = buildCancelTransaction(orders[0].order_id)
// Sign
const { serializedTransaction, signatures } = await api.transact(transaction, {
blocksBehind: 300,
expireSeconds: 3000,
broadcast: false
})
// Submit transaction
const submitResponse = await fetch(`${DEX_API_URL}/v1/orders/submit`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
serialized_tx_hex: Buffer.from(serializedTransaction).toString('hex'),
signatures: signatures
}),
});
const submitData = await submitResponse.json()
console.dir(submitData, { depth: null })
}
main()