First prize for XCarbon demo

“First place went to XCarbon, a father and son team, Kaushik, and Soham Ashodiya! They delivered an outstanding presentation which can be viewed below. It was very well organized and the solution has great promise. The solution they provided, was for Carbon detection in large cities. The data would be captured by iOT devices, and stored on the Algorand Blockchain. It provides an immutable ledger so the data can not be tampered with.”

WOULD BE STORED – but how much data? I couldn’t find any trace of storing any data in GitHub.

I think that a separate file storage solution WOULD be necessary.

What do you think?

It looks like they are using Assets to represent carbon. Another option could be to upload sensor data to the note field, which can be 1kb of data per transaction.

As I saw, they distribute Carbon asset for uploading data, but the data is NOT YET uploaded.
Take a medium city like Budapest, with 100 sensors, 10 measurements/hour, 1 Kbyte data block,
that would mean a daily 24 MB of data. Not so bad. But to write the note field has additional costs.
I don’t know the exact value, lets assume: 0.01 Algo/byte, then the daily operating cost of this system would be: 240000 Algos!

That’s why I think that a saparate file storage is necessary.

If they are dealing with large amounts of data, they can always use an external source and use the note field or an asset to point to the external location. That said, currently, most transactions cost 0.001 Algos. This may go up based on congestion but as it stands now that would be 2400 transactions per day or 2.4 Algos for 1 transaction per hour. If they did 10 transactions per hour, that would be 24.

I have a JS app, to store game results on TestNet. To store just 64 bytes in the notes, I pay 0.316 Algos!!!
As an example, please see

Can you post your js snippet that sets up the transaction?


function algo_send_tx(algodclient, post_algodclient, note) {
(async() => {
	const mnemonic= mnem1;   // use KMD to make it more secure
	let recoveredAccount = algosdk.mnemonicToSecretKey(mnemonic);
	//  get params from algod
	let params = (await algodclient.getTransactionParams());
	let first_round = params.lastRound;
	let last_round = params.lastRound + parseInt(1000);
	// create transaction
	let txn = {
		"from": recoveredAccount.addr,
		"to": toAddr,
		"fee": 1000,
		"amount": 1000,
		"firstRound": first_round,
		"lastRound": last_round,
		"genesisID": params.genesisID,
		"genesisHash": params.genesishashb64,
		"note": algosdk.encodeObj(note),
	// sign transaction
	let signedTxn = algosdk.signTransaction(txn,;
	// submit transaction
	let tx = (await post_algodclient.sendRawTransaction(signedTxn.blob));
	console.log("Transaction id: " + tx.txId);
})().catch(e => {


"fee": 1000,
"flatFee": true,

Also you can get the suggested min fee and do:

let params = await algodClient.getTransactionParams();
    "fee": params.minFee,
    "flatFee": true,

Thanks. The fee paid is now 0.001.

1 Like