Submit application data to the Avail network using the dataAvailability_submitData extrinsic.
On-chain name of extrinsic: dataAvailability_submitData
Parameters
parameter
type
optional
description
data
string
false
data to be submitted
waitFor
WaitFor
false
wait for block inclusion or finalization
account
KeyringPair
false
account that will send and sign the transaction
options
SignerOptions
true
used to overwrite existing signer options
Returns
On failure, a reason of failure is returned. On Success, DataSubmitted event, transaction data, transaction hash and block hash is returned.
Submit data using a specific app_id
Note
You will need to set up the dev environment required to run this example.
For instructions, check out our docs here.
If you're sending an extrinsic (i.e conducting a transaction) you will need to replace the demo seed phrase with your own seed phrase.
The rest of the code should work as is.
Note
PLEASE NOTE
You can submit data to Avail DA using a specific app_id that you created. If you don't know how,
read more in our docs here.
You can submit data to ANYapp_id, even if you didn't create it. This however does not contitute an
attack vector since the rollups building on top of Avail DA can always filter out DA submissions.
Inside your-file-name.ts, paste the following code:
import * as dotenv from 'dotenv';import { Account, SDK, Pallets } from 'avail-js-sdk';dotenv.config();export async function submitData() { // Initialize SDK with Turing endpoint const sdk = await SDK.New('wss://turing-rpc.avail.so/ws'); // Create account from seed in .env file const seed = process.env.SEED; if (!seed) { throw new Error("SEED environment variable is not set"); } // Create account from seed const account = Account.new(seed); console.log("Account Address: ", account.address); // Replace with your own AppID const appId = 89; console.log(`Submitting data to App Id: ${appId}`); // Create data submission transaction const data = "My Data Submission"; const tx = sdk.tx.dataAvailability.submitData(data); console.log("Submitting transaction with data..."); // Execute and wait for inclusion with app_id const res = await tx.executeWaitForInclusion(account, { app_id: appId }); // Check if transaction was successful const isOk = res.isSuccessful(); if (isOk === undefined) { throw new Error("Cannot check if transaction was successful"); } else if (!isOk) { throw new Error("Transaction failed"); } // Extract event data if (res.events === undefined) throw new Error("No events found"); // Transaction Details console.log( `Block Hash: ${res.blockHash}, Block Number: ${res.blockNumber}, Tx Hash: ${res.txHash}, Tx Index: ${res.txIndex}` ); // Find DataSubmitted event const event = res.events.findFirst(Pallets.DataAvailabilityEvents.DataSubmitted); if (event === undefined) throw new Error("DataSubmitted event not found"); console.log(`Data submitted successfully:`); console.log(`Who: ${event.who}`); console.log(`DataHash: ${event.dataHash}`); console.log("Data submission completed successfully"); process.exit(0);}// Execute the functionsubmitData();
Run the code using:
ts-node your-file-name.ts
This will lead to your data being submitted through a specific app_id, which you can verify by looking
up your transaction on the Avail explorer.