यहां मैं शर्तों के आधार पर एक ही लेनदेन में एक ही संपत्ति के लिए एकाधिक अद्यतन आदेश करना चाहता हूं।

यह मेरा नमूना सीटीओ फ़ाइल है:

asset SampleAsset identified by id{
  o String id
  o Integer value 
  o Integer value2 
  o Integer value3 
}

transaction SampleTransaction {
  o Integer value
}

यह मेरा नमूना जे एस फ़ाइल है:

async function sampleTransaction(tx) {  
var value = tx.value;
await updateValue(value);

if(value < MAX){ //MAX=10000
    const assetRegistry1 = await getAssetRegistry('org.example.basic.SampleAsset');
    var data1 = await assetRegistry.get("1");
    data1.value2 = max;
    await assetRegistry1.update(data1); //updateNo2
}
else{
    const assetRegistry1 = await getAssetRegistry('org.example.basic.SampleAsset');
    var data1 = await assetRegistry.get("1");
    data1.value3 = value;
    await assetRegistry1.update(data1); //UpdateNo2
 }
}

async function updateValue(value){
  const assetRegistry = await getAssetRegistry('org.example.basic.SampleAsset');
  var data = await assetRegistry.get("1");
  data.value = value;
  await assetRegistry.update(data); //UpdateNo1
}

उपरोक्त कोड के साथ, केवल नवीनतम अपडेट (UpdateNo2) कमांड संपत्ति में परिवर्तन कर रहा है। पहले अपडेट के बारे में क्या?

1
Venkatesh Sorapalli 21 अगस्त 2019, 16:13

1 उत्तर

सबसे बढ़िया उत्तर

हाइपरलेगर फैब्रिक में प्रस्ताव सिमुलेशन के दौरान चाबियों के लिए किए गए किसी भी लेखन को वापस नहीं पढ़ा जा सकता है। हाइपरलेगर कंपोजर उसी सीमा के अधीन होता है, जब इसका उपयोग वास्तविक फैब्रिक कार्यान्वयन के साथ-साथ सिमुलेशन मोड में किया जाता है (उदाहरण के लिए कंपोजर-प्लेग्राउंड में वेब कनेक्शन का उपयोग करते समय)। यह वह समस्या है जिसे आप अपने टीपी फ़ंक्शन में देख रहे हैं। हर बार जब आप प्रदर्शन करते हैं

let data = await assetRegistry.get("1");

उसी लेनदेन में, आपको मूल संपत्ति मिल रही है, आपको संपत्ति का एक संस्करण नहीं मिलता है जिसे पहले लेनदेन में अपडेट किया गया है। तो जब लेन-देन किया जाता है तो अंत में विश्व स्थिति में क्या रखा जाता है, यह केवल आपके द्वारा किया गया अंतिम परिवर्तन होगा, यही कारण है कि केवल UpdateNo2 देखा जा रहा है। कुछ इस तरह का प्रयास करें (ध्यान दें कि मैंने इसका परीक्षण नहीं किया है)

async function sampleTransaction(tx) {
    const assetRegistry = await getAssetRegistry('org.example.basic.SampleAsset');
    const data = await assetRegistry1.get("1");
    const value = tx.value;
    updateValue(data, value);

    if(value < MAX){ //MAX=10000
        data.value2 = MAX;
    }
    else{
        data.value3 = value;
    }
    await assetRegistry1.update(data);
}

function updateValue(data, value){
    data.value = value;
}

(ध्यान दें कि मैंने फ़ंक्शन संरचना को केवल समतुल्य दिखाने के लिए छोड़ दिया है लेकिन अपडेटवैल्यू को आसानी से हटाया जा सकता है)

2
david_k 22 अगस्त 2019, 06:42