2017-09-17 1 views
0
function Exchange(exchange){ 
    // We do the actual exchange here: 
    // We first need to get both actual nodes: 
    var nodeIdFrom=exchange.nodeIdFrom; 
    var quantity =exchange.quantity; 
    var price = exchange.price; 
    var nodeIdTo =exchange.nodeIdTo; 
    return getParticipantRegistry('org.acme.mynetwork.Node') 
    .then(function(ParticipantRegistry){ 
    ParticipantRegistry.get(nodeIdFrom) 
     .then(function(Participant){ 
     Participant.Need=Participant.Need+quantity; 
     Participant.Balance_account=Participant.Balance_account+quantity*price; 
     return ParticipantRegistry.update(Participant); 
    }); 
    }); 

は、私は以下のように定義トランザクションを実行しようとしています。ノードのIDのみをパラメータとして使用します。HyperledgerのgetParticipants

今のところ、この機能は動作しません。プレイグラウンドで実行することはできますが、ノードは変更されません。 ノードをNode(ノードは参加者)として指定せずにトランザクションを適用できますか。

答えて

0

これはうまくいくはずです - 架空のサンプル 'Trader' Networkを使用して、トランザクションモデル定義自体に 'qty'を 'Double'として定義しました) (同様のことをしている - あなたはIDで参加者です)、次に、以下のPromisesチェーンを使って資産の数量を更新します。デバッグ時にも出力用にconsole.log()を使用することを推奨します。

ので - 指定したトランザクション・モデル:以下のように

asset Commodity identified by tradingSymbol { 
    o String tradingSymbol 
    o String description 
    o String mainExchange 
    o Double quantity 
    --> Trader owner 
} 

あなたは資産の数量( '量')を更新することができます:

transaction TraderById { 
    o String tradeId 
    o String tradingSymbol 
    o Double qty 
} 

と資産は、のようにモデル化

/** 
* 
* @param {org.acme.trading.TraderById} tradeById - the trade to be processed 
* @transaction 
*/ 
function TradeById(tradeById){ 
    var commodityRegistry; 
    return getAssetRegistry('org.acme.trading.Commodity') 
    .then(function(registry){ 
     commodityRegistry=registry; 
     return commodityRegistry.get(tradeById.tradingSymbol); 
    }) 
    .then(function(result){ 
     result.quantity-=tradeById.qty; 
     return commodityRegistry.update(result); 
    }); 

} 
関連する問題