Blog

Understanding The Basics Of Stellar Network

Table of Contents

Read Time: 6 minutes

Stellar is a payment network focused on asset movement. Stellar has a particular use case of how money is sent and traded across international borders. Anyone can create assets and trade them.

Stellar has its decentralized exchange where anyone can exchange assets, also we don’t need to wait to enlist our asset on centralized exchanges with stellar. We can start trading assets from the beginning by stellar decentralized exchange.However, we can enlist assets created using stellar network on various exchanges.

Stellar use Stellar consensus protocol(SCP) to build consensus among nodes. Nodes are known as stellar cores on stellar network.Stellar not using the proof of work or proof of stake mechanism to validate transactions, it’s using federated Byzantine agreement (FBA).

Stellar consensus protocol uses the concept of quorum and quorum slice. A quorum is a group of quorum slices.E each node can be a part of a quorum slice and a quorum slice must contain more than two nodes. The node depends on its neighbor nodes in quorum slice for maintaining ledger consistent state. A quorum slice should contain intersecting nodes with other quorum slices.

The lifecycle of a transaction in Stellar Network:-

Creation:

The user creates a transaction, fills out all the fields, gives it the correct sequence number, adds whatever operations it wants.

Signing:

The transaction must be signed with the sender’s keys and in complex transactions, multiple parties signature can be required.

Submitting:

After signing, the transaction should be valid and can now be submitted to the Stellar network. Transactions are typically submitted using horizon, but you can also submit the transaction directly to an instance of stellar-core.

Propagating:

Once stellar-core receives a transaction, either given to it by a user or another stellar-core, it does preliminary checks to see if the transaction is valid. Among other checks, it makes sure that the transaction is correctly formed and the source account has enough to cover the transaction fee

Building transactions set:

When it’s time to close the ledger, stellar-core takes all the transactions it has heard about since last ledger close and collects them into a transaction set. If it hears about any incoming transactions now, it puts them aside for next ledger close. Stellar-core nominates the transaction set it has collected. SCP resolves the differences between the various transaction sets proposed and decides on the one transaction set that the network will apply.

Executing the transactions:

Once SCP agrees on a particular transaction set, that set is applied to the ledger. At this point, a fee is taken from the source account for every transaction in that set. Operations are attempted in the order they occur in the transaction. If any operation fails, the whole transaction fails, and the effects of previous operations in that transaction are rolled back. After all the transactions in the set are applied, a new ledger is created and the process starts over.

Now let’s move on to coding part!

A stellar application interacts with stellar network using horizon API or can be direct to stellar core instance. With horizon API we can create accounts, check the balance and subscribe to events on the stellar network. Every horizon API server is connected to the stellar core (stellar core can be compared to nodes of ethereum, any one set their instance of stellar core on the stellar network). Stellar core does the work of transaction validation on the network using stellar consensus protocol and agreeing with other stellar cores to accept the status of each transaction. The Stellar network itself is a collection of connected stellar Cores run by various individuals and entities around the world. Some instances of stellar core have a Horizon server you can communicate with, while others exist only to add reliability to the overall network and mining cannot be done with stellar.

We will create our rest API to connect with stellar core horizon API via stellar javascript SDK, below a high-level diagram of what we will be doing from now:-

Getting public key:

The public key is returned as a by using random function of key Pair class in stellar SDK. Random function returns a pair of public key and secret seed. Secret seed is used to generate both the public and private key for the account.

var pair = StellarSdk.Keypair.random();
let secret = pair.secret();
let public = pair.publicKey();

Creating an account using public key:

To create an account one must have a minimum balance of 1 lumen. In the main stellar network, we need to buy at least 1 lumen to create an account. For development purpose, we can use testnet friendbot to create an account. We just need to send public key as a query string to the stellar friendbot url. After creating an account we can load the balances of account. An account can contain multiple balances of different assets.

var options = {method: ‘GET’,
uri: ‘https://friendbot.stellar.org',
qs: { addr:req.body.publickey},
json: true
};
rp(options)
.then(function (parsedBody) {
// POST succeeded…
server.loadAccount(req.body.publickey)
.then(function(account) {
account.balances.forEach(function(balance) {
res.render(‘accountInfo’,{AssetType:balance.asset_type ,Balance: balance.balance});
});
});
})
.catch(function (err) {
// POST failed…
console.log(err);
res.send(err);
})

Sending lumens to another account:

We need to create a transaction to send lumens to another account. We should implement the first three parts of transaction lifecycle here i.e(creation, signing, submitting). Before creating transaction we must check whether the receiver account exists or not because stellar protocol doesn’t check for the existence of the account. To create a transaction transactionBuilder class of stellar-sdk is used. A transaction is a collection of operations. We can add appropriate operations, here we are adding payment operation to send lumens. After creating a transaction, it must be signed using sender keys. Sender keys are generated using sender secret and finally, we can submit the transaction after signing it.

 
var sourceKeys = StellarSdk.Keypair
.fromSecret(req.body.secret);
server.loadAccount(req.body.destinationKey)
.catch(StellarSdk.NotFoundError, function (error) {
throw new Error(‘The destination account does not exist!’);
})
.then(function() {
return server.loadAccount(sourceKeys.publicKey());
})
.then(function(sourceAccount) {
transaction = new StellarSdk.TransactionBuilder(sourceAccount)
.addOperation(StellarSdk.Operation.payment({
destination: req.body.destinationKey,
asset: StellarSdk.Asset.native(),
amount: req.body.amount
}))
.addMemo(StellarSdk.Memo.text(‘Test Transaction’))
.build();
transaction.sign(sourceKeys);
return server.submitTransaction(transaction);
})
.then(function(result) {
console.log(‘Success! Results:’, result);
server.loadAccount(sourceKeys.publicKey())
.then(function(account) {
account.balances.forEach(function(balance) {
res.render(‘accountInfo’,{AssetType:balance.asset_type ,Balance: balance.balance});
});
});
})
.catch(function(error) {
console.error(‘Something went wrong!’, error);
});

Logging received payments.

If we are receiving payments on behalf of others then we can get the received payments to know the details of received payment. Received payments are sent as events from horizon API server. We can subscribe to these events on the client side. Here we are simply logging them.

var sourceKeys = StellarSdk.Keypair
.fromSecret(req.body.secret);
server.loadAccount(req.body.destinationKey)
.catch(StellarSdk.NotFoundError, function (error) {
throw new Error(‘The destination account does not exist!’);
})
.then(function() {
return server.loadAccount(sourceKeys.publicKey());
})
.then(function(sourceAccount) {
transaction = new StellarSdk.TransactionBuilder(sourceAccount)
.addOperation(StellarSdk.Operation.payment({
destination: req.body.destinationKey,
asset: StellarSdk.Asset.native(),
amount: req.body.amount
}))
.addMemo(StellarSdk.Memo.text(‘Test Transaction’))
.build();
transaction.sign(sourceKeys);
return server.submitTransaction(transaction);
})
.then(function(result) {
console.log(‘Success! Results:’, result);
server.loadAccount(sourceKeys.publicKey())
.then(function(account) {
account.balances.forEach(function(balance) {
res.render(‘accountInfo’,{AssetType:balance.asset_type ,Balance: balance.balance});
});
});
})
.catch(function(error) {
console.error(‘Something went wrong!’, error);
});
Logging received payments.
If we are receiving payments on behalf of others then we can get the received payments to know the details of received payment.Received payments are sent as events from horizon api server.We can subscribe to these events on client side .Here we are simply logging them.

var payments = server.payments().forAccount(req.query.accountId);
payments.stream({
onmessage: function(payment) {
if (payment.to !== req.query.accountId) {
return;
}
var asset;
if (payment.asset_type === ‘native’) {
asset = ‘lumens’;
}
else {
asset = payment.asset_code + ‘:’ + payment.asset_issuer;
}
console.log(payment.amount + ‘ ‘ + asset + ‘ from ‘ + payment.from);
},
onerror: function(error) {
console.error(‘Error in payment stream’);
},
});

The full snippet of API endpoints:

You can get the complete code here.

Thanks for reading. Hopefully, this guide has been useful to you and will help you to understand the basics of Stellar Network.

Launch your blockchain project with Quillhash: https://quillhash.typeform.com/to/KQ5Hhm

Thanks for reading. Also, do check out our earlier blog posts.


At QuillHash, we understand the Potential of Blockchain and have a good team of developers who can develop any blockchain applications like Smart Contracts, dApps,Smart Coins, DeFi, DEX on the any Blockchain Platform like EthereumEOS and Hyperledger.

To be up to date with our work, Join Our Community :-

Telegram | Twitter | Facebook | LinkedIn

1,613 Views

Related Articles

View All

Trending

#Alert🚨
$NUWA failed to rug on BSC and was front-run by the MEV bot 0x286E09932B8D096cbA3423d12965042736b8F850.

The bot made ~$110,000 in profit.

Are you concerned about your enterprise's security in Web 3.0? Look no further!

Let's delve deeper into and learn effective solutions to mitigate them. Our experts have covered unconventional approaches, from Zero- Trust Security Model to Bug Bounty Programmes.

🔻🔻🔻

Hey folks👋,

Web3 security is like a game of whack-a-mole, except the moles are hackers who keep popping up no matter how hard you hit them. 🤦‍♀️

But fear not; we've got some tips to keep your crypto safe⬇️⬇️

Unlock the power of Web3 for your enterprise with enhanced security measures!

💪🌐 Our latest blog post delves into the world of Web3-powered enterprises and how to ensure maximum security in this new frontier.🔒

Read part 1 of our series now: 🚀https://blog.quillhash.com/2023/03/15/web3-security-for-enterprise-web3-powered-enterprises-part-1/

#Web3… https://twitter.com/i/web/status/1638154504154628096

Load More

Amidst FTX Saga, Hacker Swept More Than $25 Million in 2nd week of November

The contract reinvested (the earn function was not called) before the user pledged (depositAll function) without settling the reward, which means that when the user pledged, the contract did not settle the previous reward and instead conducted a new investment.

Become a Quiffiliate!
Join our mission to safeguard web3

Sounds Interesting, Right? All you have to do is:

1

Refer QuillAudits to Web3 projects for audits.

2

Earn rewards as we conclude the audits.

3

Thereby help us Secure web3 ecosystem.

Total Rewards Shared Out: $190K+