Blog

Stratis Academy Update


We have now completed the development of the Stratis Academy Learning Management System( LMS). The Stratis Academy LMS will combine both lessons and a Community Management System to create an environment where developers can learn and collaborate with other developers learning blockchain development.
The next steps are to build the core technical content and walk-through materials. The course content will range from getting started with the Stratis blockchain to developing applications utilising the Stratis Development Framework.
Community features like profiles, discussion boards, and groups, will allow developers to learn faster together with one another.
We are actively working on the structure of courses and the core content. This is the key focus for Stratis Academy going into Q1 2018 and we are certain we will achieve the Stratis academy roadmap milestone ontime or earlier.

Stratis Test ICO


Today we are excited to announce the launch of the ‘Stratis Test ICO’ which utilizes the Stratis ICO platform.
The Stratis ICO Platform is a secure, customizable platform for you to host your own ICO’s on the Stratis Blockchain Network. It has been developed from the ground up in C# and .NET Framework and is easily deployed within Azure.
Security is paramount; therefore, the platform does not store any coins or private keys on the hosting infrastructure.
The Stratis Test ICO is a demonstration of the Stratis ICO Platform to showcase the technology and product we plan to deliver to market soon.
This instance of the Stratis ICO Platform will be available for two weeks and we welcome your support in testing the platform and provide any respective feedback.
Stratis Test ICO
The Stratis Test ICO Instance is now offline.
If you require some $TSTRAT to participate, it can be obtained from the Stratis Faucet.
Stratis Faucet
https://faucet.stratisplatform.com
Stratis Test ICO User Guide
https://www.stratisplatform.com/wp-content/uploads/2016/10/Stratis-Test-ICO-User-Guide.pdf
 
 

Stratis Q4 Update


With just a few weeks remaining in the fourth quarter, it is an opportune moment for us to provide a status of where we are against our ‘Stratis Q4 Roadmap’ deliverables and to outline more details regarding the remaining items.
The roadmap diagram below details the completed deliverables thus far in Q4 2017. Our aim is to finish the year strong and continue the momentum into Q1 2018.

 
Remaining Q4 Deliverables Update
Full Node Alpha Release
The Full Node alpha release will see Stratis release the first full blockchain implementation in C#, this framework provides a full node with fully modular functionality. This release will introduce the new Stratis Full Node a UI, which will allow users to Stake for the first time using our full node framework.
Release Date: 18th December 2017
Breeze Wallet MainNet with Privacy Protocol (Powered by Tumblebit)
This will be the first wallet of its kind, a fully featured multi-currency wallet focused on privacy and is powered by the innovative Tumblebit technology. The release includes the full end to end solution with MasterNodes and an enhanced UI that graphically indicates how far the privacy protocol has progressed for each coin.
Release Date: 11th December 2017
Stratis Academy Platform
The Stratis Academy Platform has been developed and tested. Course content has been designed and is currently under development.
Update: 1st December 2017
Stratis Sidechains
Sidechains development is well underway including a proof of concept. A dedicated team is working on delivering an alpha release. A further project update will be provided in mid-December 2017.
Smart Contracts
Development has started on the Stratis Virtual Machine. We are making great progress on this project and are on course to meet our Stratis Smart Contracts implementation in Q1 2018.
Blockchain Expo North America 2017 (Santa Clara)
Stratis will be attending the BlockChain Expo North America 2017. This provides us with an excellent opportunity to demonstrate our products and technology.
Event Date: 28th – 30th November 2017
 

Breeze Wallet MainNet Beta Release


The Breeze Wallet MainNet beta release is now available and represents a key step in our product development roadmap.
The Breeze Wallet release includes and highlights the following:

  • Dual Network functionality: Bitcoin and Stratis
  • Full block SPV wallet
  • HD Wallet (Hierarchical deterministic)
  • Transaction fee privacy consciousness
  • Change address privacy protocol

This is the first Breeze Wallet beta release on MainNet and it will be followed up with the Breeze Wallet with Privacy Protocol (powered by TumbleBit) release on MainNet which is scheduled for this quarter.
The release date for Breeze Wallet with Privacy Protocol (powered by TumbleBit) is on 11th December which includes interaction with the Stratis Masternodes.
The Breeze Wallet showcases our technology with a strong emphasis on privacy and security on the blockchain. These releases will highlight our focus towards providing enterprise blockchain solutions.
Download
Download the Breeze Wallet beta version on MainNet here:

Breeze Wallet Source Code on Github: https://github.com/stratisproject/Breeze

Stratis Masternode Registration Protocol


Stratis masternodes solve the problem of providing useful services to a blockchain network while keeping the list of services decentralised and tamper-proof. In the initial masternode implementation the service being provided is the Breeze Privacy Protocol, but it is anticipated that many more services can be added in future.
In order for this goal to be accomplished, each masternode must register (advertise) its existence via the Stratis blockchain. This is what is referred to as the Masternode Registration Protocol. A masternode registration simply consists of a specially formatted Stratis transaction. This transaction contains all the pertinent information needed by a client to connect to and validate the masternode.
A registration transaction, once submitted to the network, remains valid indefinitely until invalidated by one of the consensus rules governing such registrations. These are:

  • The masternode server’s funding address is not funded within the initial window period.
  • The collateral funds are insufficient at the conclusion of the window period (see section Collateral Verification for additional information regarding the collateral and the balance tracking).
  • The collateral funds get moved, wholly or in part, to another address, thereby decreasing the balance below the required threshold.
  • A subsequent registration is made at a greater block height than the original (e.g. to update the masternode’s public parameters).
  • (Currently not enforced) A registration expires every N blocks, requiring the operator to periodically refresh it.


It is the responsibility of the Breeze client software to scan the Stratis blockchain for the most current masternode registrations prior to initiating contact with any server. They do this by observing each incoming block, looking for transactions that match the bitstream format. When a registration is found, it is stored in the node’s local store.
The block height that the registration is received at determines the window period for the masternode funding transaction. The masternode operator has to move the required collateral into the funding address before this window elapses. If this is not done the registration will be regarded as expired and purged from the local storage of all nodes on the network.
Once a sufficient number of valid masternode registrations have been downloaded, the client can select one at random and try to connect to it to utilise its services (e.g. the Breeze Privacy Protocol). Optionally the masternode selection can be performed once the entire blockchain is downloaded, as this is more fair to masternodes that register later in the chain.
The process described above has already been implemented into the Stratis software offering.
Bitstream format for masternode registration transaction
The registration transaction consists of a single transaction broadcast on the Stratis network (either testnet for testing or mainnet for ‘live’ masternodes). This transaction can have any number of funding inputs, as normal.
It has precisely one nulldata (data storage) output marking the entire transaction as a masternode registration. There can be an optional change return output, which if present must be at the end of the entire output list. The remainder of the transaction outputs are of near-dust value. Each output encodes 64 bytes of data into a public key script. The contents and format of the encoded data is described below.
The presumption is that the transaction outputs are not reordered by the broadcasting masternode, as this would result in potential data corruption.

OP_RETURN transaction output
Field Size Description
1 26 bytes Literal ASCII string: BREEZE_REGISTRATION_MARKER

 

Encoded public key transaction outputs
Field Size Description
1 1 byte Protocol version byte (if >200, it is a test registration to be ignored by mainnet wallets)
2 2 bytes Length of registration header
3 34 bytes Server ID of masternode (base58 representation of the collateral address, right padded with spaces if it is less than 34 characters long)
4 4 bytes IPv4 address of masternode, one byte per octet. Use 00000000 for an empty address. This field is not used for the Breeze Privacy Protocol; it is a placeholder for future functionality
5 16 bytes IPv6 address of masternode, one byte per octet. Use 00000000 00000000 00000000 00000000 for an empty address. This field is not used for the Breeze Privacy Protocol; it is a placeholder for future functionality
6 16 bytes Masternode server URI, currently this is an ASCII onion address hostname without any prefix or suffix. An empty address is signified by 00000000 00000000 00000000 00000000, but leaving this empty is not valid for the current Breeze Privacy Protocol implementation
7 2 bytes TCP port of masternode, may be ignored by client implementation
8 2 bytes RSA signature length in bytes
9 n bytes RSA signature proving ownership of the Breeze Privacy Protocol server’s private key
10 2 bytes ECDSA signature length in bytes
11 n bytes ECDSA signature made with the private key of the address used as the server ID. This same address is where the collateral will need to be located
12 40 bytes Hash of the Breeze Privacy Protocol server’s configuration file. This may be moved into the header in the next version of the protocol
The protocol format can be extended in future to accommodate new functionality. New fields should attempt as far as possible to retain backward compatibility with the existing fields

On connection with the Breeze Privacy Protocol server by a client, the public key of the server will be verified by the client to ensure that the server is authentic and in possession of the registered keys. The Privacy Protocol is then followed as normal.
Collateral Verification
For the Breeze Privacy Protocol to function well, the creation of numerous or insufficiently powerful masternode servers must be disincentivised. Therefore, consensus rules that govern the validity of a masternode need to be established and enforced by participating client nodes.
A Stratis masternode requires 250 000 Stratis coins (STRAT) to be regarded as compliant. These coins should be kept in a single address, and should not be moved once the funding transaction is performed.
On receipt of each new block, the non-masternodes will check each transaction for those that affect a currently tracked masternode server. If funds have been moved out of the address, the calculated balance is decreased. If funds come in, the calculated balance increases. Once the balance has been computed for a masternode, its registration is automatically deleted if it falls below the 250 000 STRAT threshold. It is therefore not recommended that significant transactional activity be performed with the collateral funds, to avoid inadvertently invalidating registrations.

The above diagram illustrates 4 basic scenarios for a masternode’s registration sequence.

  • Node 1 has made a sufficient funding transaction within the window period, and as such its collateral is regarded as compliant.
  • Node 2 was initially compliant after the window period, but later removed some funds from the address, and therefore no longer has sufficient collateral.
  • Node 3 made two transfers that when aggregated form sufficient collateral in the target address. This is a valid, but non-standard method of performing the funding.
  • Node 4 took too long for the funding transaction to be performed (it was outside the window period), and is therefore regarded as non-compliant in terms of its collateral obligation.

The collateral verification functionality has also already been implemented into the Stratis software offering.
Future improvements
Inter-node discovery protocol
A drawback of the approach outlined in this paper is that every node has to download the entire blockchain from the genesis block onwards in order to accurately determine collateral balances. It is more efficient for registrations to be accumulated by full nodes, and circulated to their peers (full or light nodes) with sufficient proof of their accuracy.
The inter-node discovery protocol has already been implemented in the Stratis node software, but is not currently used in order to keep the initial version as simple as possible. It also has an indirect requirement for the peer policing described in the Peer policing model section.
Improvement proposal – peer policing model
There are some differences between existing masternode implementations and the envisioned Stratis masternode approach. Briefly:

  • Dash masternodes are remunerated ‘passively’. This requires that they be actively pinged in a verifiable way by the remainder of the network to avoid paying a masternode that performs no work.
  • Conversely, a Stratis masternode can currently only earn remuneration via active participation in the Breeze Privacy Protocol with connected clients. This removes the need to directly police the masternode in this sense.
  • Due to the high cost of a top tier Stratis masternode, it is presumed that the operator will be economically incentivised to positively participate in the network. This is similar to the core tenets of the Proof Of Stake consensus mechanism.

There are also some aspects of the Dash approach that are desirable to emulate, particularly the ability to have the collateral in ‘cold’ storage.
The requirements for the Stratis top tier masternode may be summarised as follows:

  • The node operator must be in possession of at least 250 000 Stratis (i.e. they possess the private key to move or spend them).
  • These collateral Stratis must be present in a single address.
  • Moving the Stratis collateral to a different address invalidates any proof of possession generated prior to the move.

These requirements need to be actively enforced to prevent dilution of the Privacy Protocol security model. It is proposed that the entities most suited to perform the enforcement are the masternode’s peers on the Stratis network. These peers may be one of the following:

  • Another masternode (essentially a full node with additional features).
  • A ‘full’ node with a complete copy of the Stratis blockchain.
  • A ‘light’ node that does not retain a copy of the entire chain, but does at least retain block headers.
  • Other types of nodes are outside of the scope of this document.

The onus is on a particular masternode to advertise its services to the network. This means that every node can elect whether or not to regard a masternode registration as valid, depending on the information it has available to it. From a game-theoretic perspective, it is advantageous for the operators of ‘rival’ masternodes to immediately present proofs of non-compliance of a particular masternode to the rest of the network. It is additionally presumed that there is no advantage to be gained for an honest node to propagate registrations known to be invalid.
An example of the ‘lifetime’ of a registration & implementation of the ‘proof of non-compliance’ concept is as follows:

  1. Operator configures masternode, which generates masternode registration Y on startup.
  2. Node operator moves sufficient collateral into address X (the ‘funding transaction’). This needs to be done within a finite window period after the registration transaction is made.
  3. Registration Y is broadcast as a transaction to peer nodes for inclusion into the Stratis blockchain in block Z.
  4. The registration is cached on each peer node. Nodes that join the network after block Z need not download the entire chain to receive registration Y – they can receive lists of verified historical registrations by communicating with their peers (inter-node discovery protocol). Light nodes can validate registrations for themselves by evaluating the Merkle proof of the registration against their locally downloaded block header storage.
  5. All full nodes on the network can directly evaluate the balance available in address X at any time. Therefore, if it transpires that a spurious masternode registration has been broadcast (which may happen) the full nodes will not forward that registration on to new peers. Peers that attempt to send known-invalid registrations will receive a proof of non-compliance in response.
  6. The status quo persists for a period of time without any changes that affect masternode registration validity.
  7. The masternode operator moves a portion of the funds from address X elsewhere, i.e. they are now below the collateral requirement.
  8. All nodes that download blocks will immediately be able to tell that the balance of X has changed, although a light node may not know what the actual balance is. Full nodes do know (or can calculate) what the balance is, and can construct a proof thereof showing that the masternode is no longer compliant.
  9. The non-compliance proof will be broadcast between nodes. This could be done pre-emptively (i.e. broadcast proof to all known peers immediately), or it could be done passively in response to receiving an invalid registration from a peer.

At a high level, the proof of insufficient funds will consist of the following elements:

  • A copy of the ‘funding transaction’ for the masternode. This is defined in more detail in the Funding Transaction
  • The registration record itself (in its entirety, as the peer may not have downloaded it yet).
  • At least one complete transaction with the funding transaction included as one or more of its inputs i.e. showing that collateral funds have been moved/spent.
  • The net result of the movement transactions must be that the balance of the collateral address is < 250 000 STRAT.
  • Merkle proof(s) for the movement transaction(s) showing that they are included in a block at the same or higher height than the funding transaction.

A light node should be able to interrogate a peer node about the perceived status of one or more masternodes. If the peer being interrogated is also a light node, it will only be able to pass along proofs it already received and stored from the full nodes.
Funding transaction
The funding transaction for a masternode is the transaction that assigns the 250 000 Stratis collateral to a given address. It is recommended that only a single transaction output be used for this, to keep the size of the proofs communicated between peers to a minimum.
There is also naturally a possible gap between the block height of the funding transaction and the block height of the registration transaction, during which some fund movement may have occurred. This should not be a problem, as full nodes will evaluate the solvency of the masternode and determine whether to propagate its registration to other peers via the inter-node protocol.
Some possible attack/DoS vectors
The most vulnerable portion of the network are the light nodes. The proof mechanism therefore needs to be robust enough to allow the light nodes to participate in policing the masternode registrations without having the entire blockchain available.
The masternode operators also need to be protected from rogue full nodes attempting to stifle traffic to particular masternodes by censoring their registrations. This is mitigated by the decentralised nature of the Stratis blockchain. It is only required that a sufficient number of honest nodes participate to minimise or negate the impact of rogue nodes, as the registrations will percolate through the network via the blocks & inter-node protocol. A rogue full node cannot generate a fake proof of non-compliance, as the Merkle proofs will fail to be validated.
Masternode operators may generate copious registration transactions (i.e. spam) in an attempt to sway client nodes to use their server. This is mitigated by a rule that a client node will only keep the most recent valid registration for each known masternode, so spamming the network does not result in an increased likelihood that a client will select a particular masternode server.
It is important that a masternode operator avoid moving their collateral funds in such a way that they inadvertently provide an avenue for full nodes to construct a non-compliance proof. If funds need to be moved it is recommended that an entirely new address be used & a new registration performed. This will naturally cause the previous registration to be invalidated and removed from the caches of nodes on the network. The new registration will, conversely, be cached and used going forwards.

Masternodes Advertisement and Discovery Protocol

We are excited to announce the alpha release of the Stratis Masternode technology.

The Masternodes feature a Service Advertisement Protocol where services are registered on the blockchain and subsequently made discoverable by client applications.

Masternode Service Advertisement Protocol

This part of the protocol advertises that a Masternode hosts a particular service. It works as follows:

1. The Masternode operator chooses which services they wish to host then configures and starts the Masternode.

2. The Masternode performs a small micro transaction on Stratis mainnet which is committed to the blockchain in the normal manner.

3. The transaction includes a small amount of service specific tokenized data that is used by the Client Discovery Protocol. This data could be a standard internet address Uniform Resource Locator (url) or an IP Address, for example.

4. The Masternode monitors any changes to the data represented in the tokenized data and will perform a superseding update transaction if required.

Masternode Client Discovery Protocol

A client application, such as Breeze Wallet with the Breeze Privacy Protocol, can read the tokenized data on the blockchain as follows:

1. The client application includes a Stratis Blockchain technology component that receives blockchain blocks as they are added to the Stratis Mainnet blockchain. This is similar to a wallet that receives new blocks as it processes transactions.

2. The Stratis Blockchain technology component examines the transactions in the block and picks out the data.

3. The component passes this data to the main part of the application to be used for service connection or other application specific purposes.

Advantages

The decoupling described creates a robust, trustless, decentralized advertisement and discovery mechanism that is resistant to manipulation or censorship.

Masternode Support in the Breeze Privacy Protocol (powered by TumbleBit)

The Breeze Privacy Protocol is the first Stratis Service to support Stratis Masternodes. The Masternode release includes the Breeze Privacy Protocol Service. Here the Masternode Service Discovery Protocol is used to advertise the internet address of the Breeze Privacy Protocol Service hosted inside the Masternode. When a user of the Breeze Wallet wishes to use the Breeze Privacy Protocol, the application has available a list of Masternodes hosting the service which it has discovered through the Masternode Service Advertisement and Discovery Protocol.

Testnet and Mainnet

The release of the Stratis Masternode is configured for testnet however the Advertisement and Discovery Protocol is mainnet ready.

Breeze Wallet with Breeze Privacy Protocol (powered by TumbleBit)

Download and try the beta testnet version of Breeze Wallet with Breeze Privacy Protocol here and try connecting to our Masternode:

https://github.com/BreezeHub/Breeze/releases/tag/v0.2.0-privacy-alpha

Masternode Release

If you wish you can download and configure a Masternode yourself. The instructions and source code are available here:

https://github.com/BreezeHub/BreezeProject

Feedback

Please get in touch to provide your feedback. You will find us on Slack or come see us on GitHub.

Stratis Masternodes Alpha Release

Today we have reached another significant milestone in our roadmap as we release our Stratis Masternodes product.

This major release includes the following:

  • A live running Masternode running on Microsoft Azure.
  • The Masternodes fully support our new Service Discovery Protocol and are currently configured to run our Breeze Privacy Protocol service.
  • A new version of the Breeze Wallet with Breeze Privacy Protocol (powered by TumbleBit) that features the Masternode Client Discovery Protocol.
  • The Masternode technology implements a collateral verification feature that requires the node operator provide 250,000 Strat to be held in a watched address on the blockchain. This requirement helps to incentivize the supply of appropriate resources required to operate the network.

These technologies work together to solve the problem of providing useful services on the network where Masternodes host and advertise their services on the blockchain while client applications use the blockchain to discover and connect to those services.

This delivers a robust, trustless, decentralized advertisement and discovery mechanism that is resistant to manipulation or censorship.

Our first such service, the Breeze Privacy Protocol, is available as a Masternode service today with more exciting Masternode services coming soon.

Download

Download a version of our Breeze Wallet with Breeze Privacy Protocol (powered by TumbleBit):

https://github.com/Breezehub/Breeze/releases/tag/v0.2.0-privacy-alpha

Masternode Source Code on BreezeHub:

https://github.com/BreezeHub/BreezeProject/

Look out for more information today including a detailed post and a technical paper with full details of how the technology works.

Breeze Beta Release


The beta release of the Breeze wallet is now available and represents a significant milestone in our development roadmap schedule.
There has been extensive work undertaken since the alpha release in order to move the Breeze wallet to the beta status. A key development since the alpha release is the Breeze wallet now supports two currencies running side by side: Stratis and Bitcoin respectively.
The release encompasses user interface enhancements and provides updates with regards to stability.
Existing Breeze Wallet Holders
There have been a number of updates, therefore, any users which have an existing Breeze wallet will need to perform the following steps before starting the app:

  1. Make sure you have your mnemonics and your passwords for these wallets

2. Delete all the files in the following folders:
%AppData%\StratisNode on Windows or ~/.stratisnode on MacOS and Linux

  1. Choose wallet recovery on start-up and use your mnemonic and password

Breeze Wallet Download
The Breeze wallet is available to be downloaded from the below link:
https://github.com/stratisproject/Breeze/releases/tag/v0.2.0-beta

Stratis Blockchain Upcoming Expos


Stratis is set to take the stage at a number of upcoming conferences as we showcase our blockchain offering and latest product developments.
Over the next six months, Stratis will be attending and speak at a host of bitcoin and blockchain conferences. Starting with the Blockchain Expo at Santa Clara in Silicon Valley on the 28th November to 30th November, we will be attending and be exhibiting our technology.
As strategic partners of the Expo, we will be on hand throughout the three days, offering the opportunity for investors to discuss product developments, as well as one-on-one conversations with Stratis employees.
In the new year, we will continue to showcase our blockchain offering, attending the Bitcoin Super Conference in Dallas, Texas which is from the 16th to 18th February 2018. We will be discussing our turnkey solutions and how we utilize C# and .Net development frameworks to provide quick and easy blockchain-based applications.
On the 18th April to 19th April 2018, Stratis will be in attending the Blockchain Expo in London, Olympia. More detailed information will be provided about the Expos closer to the time.
Finally, we are excited in ramping up for a very busy period with major technology releases and attendance at key Blockchain Expos.

Product Development Update


We are well into Q4 and wish to share the progress on our exciting Q4 Product Development Roadmap. There have been great strides made since our last update and below is an insight into the key milestones achieved in our development so far.
Breeze Wallet
The upcoming Breeze Alpha 1.2 release enables running both Stratis and Bitcoin networks in parallel all while operating in full block SPV mode. Breeze being able to operate on multiple blockchains was one of the last tasks we had to complete before we could release the Breeze MasterNodes. This release will contain the MasterNode registration and discovery protocol, allowing:

  • Stratis and Bitcoin running side by side in Full Block SPV mode
  • Improved transaction details including confirmations
  • Improved privacy, randomized input selection
  • Fee estimation


The Breeze Alpha 1.2 release is scheduled for 23rd October.
 
Stratis MasterNodes
The Breeze Node (MasterNode) alpha will be released on the 30th October, which utilizes Stratis Blockchain technology to host secure, resilient and distributed services.
The MasterNodes allow operators to advertise the services they offer on the blockchain – which in turn are discoverable and consumed by clients such as the Breeze Wallet.
The release will include the first such service which is the Breeze Privacy Protocol (powered by TumbleBit). In order to allow a wide audience for the release, this test version will have no collateral lock down requirement.
The Stratis Breeze nodes will be the first MasterNodes that allow operators to earn Bitcoin, we are very excited about this release.
 
Stratis Full Node GUI

We have carried major updates to the Stratis Full Node and nStratis framework. Below are a few of the key developments undertaken by our Full Node team:

  • Proof of Stake code has been extensively tested and improved ensuring it is more robust and efficient
  • Interoperability testing with the soon to be legacy QT based StratisX wallet
  • Significant performance enhancements
  • Increased stability
  • Extending the test coverage

The Alpha release is on schedule for our Q4 deliverable.
 
Stratis Academy
The Stratis academy development process is nearing a MVP.
Our selection of a hybrid ‘Learning and Community’ management system will create a nurturing environment based on the education of blockchain, introduction of real world tech solutions and development of blockchain projects.
Stratis technology will be the base for developers to get introduced to and get involved with the blockchain. Content and course work is currently being compiled, further developed and produced.
 

1 2 15 16 17 18 19 22 23
Privacy Settings
We use cookies to enhance your experience while using our website. If you are using our Services via a browser you can restrict, block or remove cookies through your web browser settings. We also use content and scripts from third parties that may use tracking technologies. You can selectively provide your consent below to allow such third party embeds. For complete information about the cookies we use, data we collect and how we process them, please check our Privacy Policy
Youtube
Consent to display content from - Youtube
Vimeo
Consent to display content from - Vimeo
Google Maps
Consent to display content from - Google
Spotify
Consent to display content from - Spotify
Sound Cloud
Consent to display content from - Sound