Building Smart Contracts using DAML: A comparative exploration
What are Smart Contracts?
Smart contracts are translations of an agreement, including terms and conditions, into a computational code. Blockchain follows the “No Central Authority” concept, and its primary purpose is to maintain transaction records without a central authority. To automate this process of recording transactions, Smart Contracts were constituted. Smart Contracts carry several beneficial traits, including automation, immutability, and a self-executing mode.
What is a DAML Smart Contract?
DAML is the open-source language from Digital Asset created to support DLT or distributed ledger technology. It allows multiple parties to do transactions in a secure and permissioned way. Using DAML as the coding language enables developers to focus only on building the smart contracts’ business logic rather than fretting about the nitty-gritties of underlying technology. DAML Smart Contracts run on various blockchain platforms and regular SQL database while providing the same logical privacy model and immutability guarantees.
A personal perspective
As a technology leader with years of experience, I remember the one line from my early days is the “Write Once Run Anywhere" slogan by Sun Microsystems to highlight the Java language’s cross-platform benefits.
I believe, in the coming years, DAML is the language that will enjoy similar popularity as Java due to its cross-platform benefits, ease of use, and versatility. DAML can revolutionize how business processes are managed by simplifying the contracts and making them ‘smarter.’
DAML V/S General Purpose Languages
Today, few popular general-purpose languages are in use for creating multi-party blockchain applications, i.e., Java, Go, and Kotlin.
All of these can also be used to create smart contracts. But the challenge lies in the sheer complexity of the task at hand. The code that needs to be produced to build an effective smart contract, using these languages, is daunting. DAML can achieve the same result by writing 5-7 times less code in a much simpler manner.
Smart Contract basic data types are contract-oriented (parties, observers, signatories/others), which is in direct contrast to the general-purpose languages (int/float/double). So, the very essence of smart contract languages such as DAML is one and only one - contracts, making it a superior choice for writing Smart Contracts.
Comparison with Existing Smart Contract Languages
The domain of Smart Contracts is better handled by languages that have been purpose-built for smart contracts, like Solidity, DAML, AML/others. Among these smart contract languages, DAML is the only open-source and Write Once Run Anywhere (WORA). The DAML contract type is also private in nature. At a logical level, DAML has a strict policy. However, at the persistence level, different ledgers might implement privacy in different ways.
DAML for Private and Public Ledgers
The two types of ledgers, Private and Public serve different purposes and should be used accordingly. The underlying concept is that information on the ledgers is immutable once created.
Public Ledgers: Open to all, and anybody can join the system, and each member has access/read/write transactions. Examples: Bitcoin/ Ethereum/ others
Private Ledgers: Also known as permissioned networks or permissioned blockchains, have limitations in participation. It has higher security and limited permissions. Examples: Hyperledger Fabric and Corda. Some Private ledgers offer different privacy and data sharing settings, like Hyperledger sawtooth, although permissioned, allows all nodes to receive a copy of all transactions.
DAML-Open source language allows the involved parties to do transactions in a secure and permissioned way. Thus, enabling developers to focus on the business logic rather than spending precious time in fine-tuning the underlying persistence technology.
At a logical level, DAML has a strict policy for permissioned access. However, at the persistence level, different ledgers might implement privacy in different ways.
Sample of a Smart Contract:
Reporting a trade transaction between 2 counter parties to a regulator or reviewing authority using Smart Contracts.
module Finance where
exampleParty : Party
exampleParty2 : Party
exampleParty3 : Party
regulator : Party
exampleParameter : Text
-- more parameters here
signatory exampleParty, exampleParty2
controller exampleParty can
UpdateExampleParameter : ContractId Finance
newexampleParameter : Text
create this with
exampleParameter = newexampleParameter
template name template keyword defines the parameters followed by the names of parameters and their types
template body where keyword can include:
template-local definitions let keyword
Let’s you make definitions that have access to the contract arguments and are available in the rest of the template definition.
signatories signatory keyword Required
The parties (see the Party type) must consent to create an instance of this contract. You won’t be able to create an instance of this contract until all of these parties have authorized it.
observers observer keyword Optional.
Parties that aren’t signatories but who you still want to be able to see this contract. For example, the SEC wants to know every contract created, and the SEC should be aware of this.
Optional: Text that describes the agreement that this contract represents.
Explanation of the code snippet
DAML is whitespace-aware and uses layout to structure blocks. Everything that is below the first line is indented and thus part of the template’s body.
The signatory keyword specifies the signatories of a contract instance. These are the parties whose authority is required to create the contract or archive it again – just like a real contract. Every contract must have at least one signatory.
Here the contract is created between two parties-Party1 and Party2, and the regulator is the observer. Every transaction done is visible to the observer, i.e., the regulator playing the role of Regulator (SEC) in this case and SEC can be looking at every transaction. So, smart contracts can be created in this space.
DAML disclosure policy ensures that Party3 will not be able to view the transactions as it is neither signatory, nor observer or controller, and it is just a party to the contract.
Here is a link to the repository provided by DAML which contains examples for several such use cases modeled in DAML.
- How to write smart contracts using DAML and various use-cases
- Ledger implementation enabling DAML applications to run on Hyperledger Fabric 2.x
https://github.com/digital-asset/daml-on-fabric and for learning
Compilation and Deployment of DAML
DAML has both the language as well as the run time environments (in the form of libraries known as DAML SDK). Developers need to focus on writing smart contracts (in the way of language features provided by DAML SDK) without bothering about the underlying persistence layer. It also provides support for existing data structures (List/Map/Tuple) and also provides the functionality for creating a new data structure.
Other notable features of DAML
- A .dar file is the result of compilation done through DAML Assistant, and eventually, .dar files are uploaded into the ledger so that the contracts can be created from the templates in the file. This .dar is made up of multiple .dalf files. A .dalf file is the output of a compiled DAML package or library and it’s underlying format is DAML-LF.
- Sandbox is a lightweight ledger (in-memory) implementation available only in the dev environment.
- Navigator is a tool for exploring what is there on the Ledger and it shows what contracts can be seen by different parties and submit commands on behalf of those parties.
- DAML gives you the ability to deploy your smart contracts on the local ledger(in-memory) so that various scenarios can be easily tested.
Testing DAML Smart Contracts
1) DAML has a built-in mechanism for testing templates called ‘scenarios’. Scenarios emulate the ledger. One can specify a linear sequence of actions that various parties take, and subsequently these are evaluated with the same consistency, authorization, and privacy rules as they would be on the sandbox ledger or ledger server. DAML Studio shows you the resulting transaction graph.
2) Magic FinServ launched its Test Automation suite called Intelligent Scenario Robot, or IsRobo™, an AI-driven Scenario Generator that helps developers test smart contracts written in DAML. It generates the unit test cases (negative and positive test cases) scenarios for the given smart-contract without any human intervention, purely based on AI.
Usage in Capital Markets
Smart contracts, in general, have excellent applications across the capital markets industry. I shall cover some use cases in subsequent blogs outlining how multi-party workflows within enterprises can benefit by minimizing reconciliations of data between them, and allow mutualization of the business process. Some popular applications currently being explored by Magic FinServ are:
- Onboarding KYC
- Reference data management
- Settlement and clearing for trades
- Regulatory reporting
- Option writing contracts (Derivatives industry)
Recent Noteworthy Implementations of DAML Smart Contracts are:
- International Swaps Derivatives Association (ISDA) is running a pilot for its Common Domain Model (CDM) for clearing of interest rate derivatives using a distributed ledger.
- The Australian Stock Exchange (ASX) and Swiss investment bank UBS are continually providing the inputs to validate the CDM’s additional functionality alongside ISDA and Digital Asset.
DAML Certification process
To get hands-on experience with DAML, free access to docs.daml.com is available, where developers may learn from the study material/download the run time, and build sample programs. However, to reinforce learning and add this as a valuable skill, it is better to be a DAML-Certified Engineer. It is worth pursuing as the fee is reasonable and the benefits are manifold. There are not plenty of DAML developers available in the market, so it is a rather sought-after skill as well.
DAML is ripe for revolutionizing the way business processes are managed and transactions are conducted.
The smart contracts that are developed on open-source DAML can run on multiple DLTs / blockchains and databases without requiring any changes (write once, run anywhere).
With the varied applications and relative ease of learning, DAML is surely emerging as a significant skill to add to your bouquet if you are a technologist in the capital markets domain.
To explore the DAML applications with Magic FinServ, read more here
To schedule a demo, write to us firstname.lastname@example.org
November 19, 2020
Get insights straight into your inbox!
Magic has built a strong eco-system of partners to ensure that we are able to provide high quality solutions to meet our client's every growing business needs and help them navigate complexity of environments & technology.