0
我試圖創建作曲家簡單hyperledger chaincode,需要一個貸款數目,如果它存在,否則更新相關的資產創建一個新的資產。更新現有資產 - Hyperledger作曲家
我的模型文件看起來像這樣:
asset Loan identified by loanNum{
o String loanNum
o Double balance
}
transaction createTransaction {
o String loanNum
o Double transAmount
}
我的劇本是這樣的:
function createTransaction(tx) {
var NS = 'org.acme.ra';
var factory = getFactory();
var loanToUpdate
//returns all assets
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry){
return assetRegistry.exists(tx.loanNum);
})
.then(function(exists){
if (exists) {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
loanToUpdate = assetRegistry2.get(tx.loanNum)
loanToUpdate.balance = tx.transAmount;
return assetRegistry2
})
.then(function(updateAssetRegistry){
return updateAssetRegistry.update(loanToUpdate)//broken right here
})
}
else {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
var newLoan =factory.newResource(NS,'Loan',tx.loanNum);
newLoan.balance = tx.transAmount;
return assetRegistry2.add(newLoan);
})
}
})
}
腳本摘要:
- 兩個值提供給腳本,貸款編號和交易0金額爲。
- 腳本然後返回資產註冊,如果貸款數量已經存在返回 適當布爾。
- 如果(在資產註冊表中存在貸款犯規)假,新的資產將利用從交易貸款和餘額創建。
- 如果爲True,則返回的資產註冊表,然後我用不用彷徨功能,並設置結果等於在腳本的開始創建的loanToUpdate變量。然後,我使用資產註冊表上的.update(loanToUpdate)函數來更新現有資產。
當布爾是假的腳本正常工作,並創建一個新的資產,但是當布爾是真實的,交易中包含已經存在我得到的錯誤貸款數量「錯誤:預期資源或概念」
編輯
現在,我得到更多的經驗,這一點,我認爲這是可以做到更容易與內置的關係,但低於生病後我更新的功能代碼。
更新的代碼與修復:
function createTransaction(tx) {
var NS = 'org.acme.ra';
var factory = getFactory();
var loanToUpdate
//returns all assets
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry){
return assetRegistry.exists(tx.loanNum);
})
.then(function(exists){
if (exists) {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
return assetRegistry2.get(tx.loanNum);
})
.then(function(updateloan){
loanToUpdate = updateloan
loanToUpdate.balance = tx.transAmount;
return getAssetRegistry(NS + '.Loan')
})
.then(function(assetRegistry3){
return assetRegistry3.update(loanToUpdate);
})
}
else {
return getAssetRegistry(NS + '.Loan')
.then(function(assetRegistry2){
var newLoan = factory.newResource(NS,'Loan',tx.loanNum);
newLoan.balance = tx.transAmount;
return assetRegistry2.add(newLoan);
})
}
})
}