Corda是Blockchain企業框架之一。
這周開始準備學習Corda, 首先先研究一下https://github.com/corda/samples 裏面的例子。
這是Git下載好的代碼列表
這個例子是支持java和kotlin
以Kotlin爲例
這裏包括Contract 智能合約和State 代碼
IOUContract.kt 主要寫智能合約,包括一些校驗
IOUState.kt 定義一個賬本一個事實,
IOUSchema.kt 是一個數據庫的一個映射
因爲公司的項目是基於Kotlin ,所以需要刪除java build
- 刪除java build 在gradle
1 cordapp-example\settings.gradle
//include 'contracts-java'
//include 'workflows-java'
include 'contracts-kotlin'
include 'workflows-kotlin'
include 'clients'
2 cordapp-example\clients\build.gradle
// cordapp project(":contracts-java")
// cordapp project(":workflows-java")
cordapp project(":contracts-kotlin")
cordapp project(":workflows-kotlin")
這樣Java 就不會在gradle編譯了 。
- 打包運行 gradlew.bat deployNodes
成功以後
- 運行節點 runnodes
會有4個java進程起來
分別是PartA PartB PartC Notary
Corda 默認的數據庫是H2 ,我們可以連接 Corda H2數據庫。
需要更改三個地方, persistence 是Corda默認的名字,需要Copy到對應目錄裏(Users下)
H2數據庫默認名字是sa 密碼爲空
其中藍色區域是corda IOUSchema.kt對應的表結構,
因爲Corda 裏面數據庫是ORM框架,可以更改其他數據庫比如SQL Server ,PostgreSQL,以後會更新博客怎麼更改數據庫在Corda上。
最後,這裏面Client文件夾是Kotlin的springboot工程, 可以用網頁形式訪問。但是用的angular 是google的域名,需要提前替換。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example CorDapp</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.1.1.min.js">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
crossorigin="anonymous"></script>
<script src="js/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.2.0/ui-bootstrap-tpls.min.js"></script>
<script src="js/angular-module.js"></script>
</head>
<body ng-app="demoAppModule" ng-controller="DemoAppController as demoApp">
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">{{demoApp.thisNode}}</a>
</div>
<button ng-click="demoApp.openModal()" type="button" class="btn btn-primary navbar-btn">Create IOU</button>
</div>
</nav>
<script type="text/ng-template" id="demoAppModal.html">
<div class="modal-header">
<h4 class="modal-title">Add new IOU</h4>
</div>
<form>
<div class="modal-body">
<div class="form-group">
<label for="counterparty" class="control-label">Counter-party:</label>
<select ng-model="modalInstance.form.counterparty" class="form-control" id="counterparty"
ng-options="peer as peer for peer in modalInstance.peers">
</select>
</div>
<div class="form-group">
<label for="value" class="control-label">Value (Int):</label>
<input type="text" ng-model="modalInstance.form.value" class="form-control" id="value">
</div>
<div ng-show="modalInstance.formError" class="form-group">
<div class="alert alert-danger" role="alert">
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<span class="sr-only">Error:</span>
Enter valid IOU parameters
</div>
</div>
</div>
<div class="modal-footer">
<button ng-click="modalInstance.cancel()" type="button" class="btn btn-default">Close</button>
<button ng-click="modalInstance.create()" type="button" class="btn btn-primary">Create IOU</button>
</div>
</form>
</script>
<script type="text/ng-template" id="messageContent.html">
<div class="modal-body" id="modal-body">
{{ modalInstanceTwo.message }}
</div>
</script>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-10">
<div class="panel-group" id="accordion">
<div class="panel">
<div class="panel-primary">
<div class="panel-heading">
<h4 class="panel-title">
Recorded IOUs:
</h4>
</div>
</div>
<div>
<div ng-show="!demoApp.ious.length" class="panel-body">Use the "Create IOU" button to send an IOU to a peer.</div>
<div ng-repeat="iou in demoApp.ious" class="panel panel-default">
<div class="panel-body">
<ul>
<li>Lender: {{iou.lender}}</li>
<li>Borrower: {{iou.borrower}}</li>
<li>Value: {{iou.value}}</li>
</ul>
</div>
</div>
</div>
</div>
<div class="panel">
<div class="panel-primary">
<div class="panel-heading">
<h4 class="panel-title">
My IOUs:
</h4>
</div>
</div>
<div>
<div ng-repeat="iou in demoApp.myious" class="panel panel-default">
<div class="panel-body">
<ul>
<li>Lender: {{iou.lender}}</li>
<li>Borrower: {{iou.borrower}}</li>
<li>Value: {{iou.value}}</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-1"></div>
</div>
</body>
</html>
angular.min.js需要自己下載放在目錄裏。