2017-12-27 16 views
0

대출 번호가있는 작곡가에서 간단한 초인가 연쇄 코드를 만들려고합니다. 존재하는 경우 다른 자산과 연관된 자산을 업데이트하여 새 자산을 만듭니다.기존 자산 업데이트 - 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); 
         })        
      } 
     })  

}

스크립트 요약 :

  1. 두 값에 공급된다 스크립트, 대출 번호 및 거래 금액입니다.
  2. 그러면 스크립트는 자산 등록을 반환하고 대출 번호가 이미 존재하면 적절한 bool을 반환합니다.
  3. False (자산 등록에 대출이 없다면), 대출 금액과 거래 잔액을 사용하여 새 자산이 생성됩니다.
  4. True이면 자산 레지스트리가 반환되고 .get 함수를 사용하고 결과를 스크립트 시작 부분에 생성 된 loanToUpdate 변수와 동일하게 설정합니다. 그런 다음 자산 레지스트리에서 .update (loanToUpdate) 함수를 사용하여 기존 자산을 업데이트합니다.

부울이 False 스크립트가 제대로 작동하고 새로운 자산을 생성하지만 부울이 True 때 트랜잭션이 이미 나는 오류 얻을 수있는 대출 번호가 포함되어있는 경우 "오류 :. 예상 리소스 또는 개념을"

편집 지금이 더 많은 경험을 얻고 있음을

, 내가 관계를 구축하지만, 병이 아래에있는 내 업데이트 된 기능 코드를 게시와 함께보다 쉽게 ​​할 수 있다고 생각합니다. 수정과 코드 업데이트

:

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); 
        })        
     } 
    })  

}

답변

0

은 자산 레지스트리에 도착은 약속 체인의 일부가 될 loanToUpdate = assetRegistry2.get(tx.loanNum) 필요 약속, 그래서 라인을 반환하고 그래서 당신은 .then 필요 블록을 사용하여 업데이트하기 전에 반환 된 값을 처리 할 수 ​​있습니다.