Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

Quorum JPMorgan کی طرف سے تیار کردہ Ethereum-based blockchain ہے اور حال ہی میں Microsoft Azure کی طرف سے پیش کیا جانے والا پہلا تقسیم شدہ لیجر پلیٹ فارم بن گیا ہے۔

کورم نجی اور عوامی لین دین کی حمایت کرتا ہے اور اس کے تجارتی استعمال کے بہت سے معاملات ہیں۔

اس مضمون میں، ہم ایسے ہی ایک منظر نامے کا جائزہ لیں گے - گودام کے درجہ حرارت کے بارے میں تازہ ترین معلومات فراہم کرنے کے لیے سپر مارکیٹ اور گودام کے مالک کے درمیان تقسیم شدہ لیجر نیٹ ورک کی تعیناتی۔

اس ٹیوٹوریل میں استعمال شدہ کوڈ میں ہے۔ GitHub پر ذخیرے.

مضمون کا احاطہ کرتا ہے:

  • ایک سمارٹ معاہدے کی تخلیق؛
  • کا استعمال کرتے ہوئے کورم نیٹ ورک کی تعیناتی زنجیر;
  • کورم عوامی لین دین؛
  • کورم نجی لین دین۔

مثال کے طور پر، ہم انٹرنیٹ آف تھنگز (IoT) کے اندر کورم نیٹ ورک کے اراکین کے گوداموں میں درجہ حرارت کی نگرانی کے لیے ایک منظر نامے کا استعمال کرتے ہیں۔

سیاق و سباق

گودام کمپنیوں کا ایک گروپ مشترکہ طور پر معلومات کو ذخیرہ کرنے اور بلاکچین پر عمل کو خودکار کرنے کے لیے کنسورشیم میں متحد ہو رہا ہے۔ اس کے لیے کمپنیوں نے کورم استعمال کرنے کا فیصلہ کیا۔ اس مضمون میں ہم دو منظرناموں کا احاطہ کریں گے: عوامی لین دین اور نجی لین دین۔

لین دین مختلف شرکاء کے ذریعہ کنسورشیم کے ساتھ تعامل کے لئے بنائے جاتے ہیں جس سے وہ تعلق رکھتے ہیں۔ ہر لین دین نیٹ ورک پر ڈیٹا اپ لوڈ کرنے کے لیے یا تو معاہدہ کرتا ہے یا معاہدے میں ایک فنکشن کو کال کرتا ہے۔ یہ اعمال نیٹ ورک کے تمام نوڈس پر نقل کیے جاتے ہیں۔

عوامی لین دین تمام کنسورشیم کے شرکاء کے دیکھنے کے لیے دستیاب ہیں۔ نجی لین دین میں رازداری کی ایک تہہ شامل ہوتی ہے اور یہ صرف ان شرکاء کے لیے دستیاب ہے جن کے پاس ایسا کرنے کے حقوق ہیں۔

دونوں منظرناموں کے لیے، ہم وضاحت کے لیے ایک ہی معاہدہ استعمال کرتے ہیں۔

سمارٹ معاہدہ

ذیل میں ہمارے منظر نامے کے لیے بنایا گیا ایک سادہ سمارٹ معاہدہ ہے۔ اس کا ایک عوامی متغیر ہے۔ temperature، جسے استعمال کرکے تبدیل کیا جاسکتا ہے۔ set اور طریقہ سے وصول کریں۔ get.

pragma solidity ^0.4.25;
contract TemperatureMonitor {
  int8 public temperature;
function set(int8 temp) public {
    temperature = temp;
  }
function get() view public returns (int8) {
    return temperature;
  }
}

معاہدے کے ساتھ کام کرنے کے لیے web3.js، اس کا ترجمہ ABI فارمیٹ اور بائیک کوڈ میں ہونا چاہیے۔ فنکشن کا استعمال کرتے ہوئے formatContractذیل میں معاہدہ کا استعمال کرتے ہوئے مرتب کرتا ہے۔ solc-js.

function formatContract() {
  const path = './contracts/temperatureMonitor.sol';
  const source = fs.readFileSync(path,'UTF8');
return solc.compile(source, 1).contracts[':TemperatureMonitor'];
}

مکمل معاہدہ اس طرح لگتا ہے:

// interface
[ 
  { 
    constant: true,
    inputs: [],
    name: ‘get’,
    outputs: [Array],
    payable: false,
    stateMutability: ‘view’,
    type: ‘function’ 
  },
  { 
    constant: true,
    inputs: [],
    name: ‘temperature’,
    outputs: [Array],
    payable: false,
    stateMutability: ‘view’,
    type: ‘function’ 
  },
  {
    constant: false,
    inputs: [Array],
    name: ‘set’,
    outputs: [],
    payable: false,
    stateMutability: ‘nonpayable’,
    type: ‘function’ 
  }
]

// bytecode
0x608060405234801561001057600080fd5b50610104806100206000396000f30060806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416636d4ce63c81146057578063adccea12146082578063faee13b9146094575b600080fd5b348015606257600080fd5b50606960ae565b60408051600092830b90920b8252519081900360200190f35b348015608d57600080fd5b50606960b7565b348015609f57600080fd5b5060ac60043560000b60c0565b005b60008054900b90565b60008054900b81565b6000805491810b60ff1660ff199092169190911790555600a165627a7a72305820af0086d55a9a4e6d52cb6b3967afd764ca89df91b2f42d7bf3b30098d222e5c50029

اب جب کہ معاہدہ تیار ہے، ہم نیٹ ورک کی تعیناتی اور معاہدہ کو تعینات کریں گے.

نوڈ کی تعیناتی

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

نوڈ کی تعیناتی کافی محنت طلب ہوسکتی ہے اور اس عمل کو سروس کا استعمال کرکے تبدیل کیا جاسکتا ہے۔ زنجیر.

ذیل میں Raft اتفاق رائے اور تین نوڈس کے ساتھ کورم نیٹ ورک کی تعیناتی کا عمل ہے۔

سب سے پہلے، آئیے ایک پروجیکٹ بنائیں اور اسے کورم پروجیکٹ کہتے ہیں:

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

آئیے گوگل کلاؤڈ پلیٹ فارم پر رافٹ اتفاق رائے کے ساتھ ایک کورم نیٹ ورک بنائیں:

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

آئیے پہلے سے طے شدہ نوڈ میں دو اور نوڈس شامل کریں:

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

تین چلنے والے نوڈس:

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

نوڈ تفصیلات کا صفحہ RPC اختتامی نقطہ، عوامی کلید، وغیرہ کو دکھاتا ہے۔

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

نیٹ ورک تعینات ہے۔ آئیے اب سمارٹ کنٹریکٹ لگاتے ہیں اور اس کا استعمال کرتے ہوئے لین دین کرتے ہیں۔ web3.js.

عوامی لین دین

سیاق و سباق

گودام کا درجہ حرارت لاگت کو کم کرنے کے لیے بہت اہمیت رکھتا ہے، خاص طور پر ان مصنوعات کے لیے جو زیرو زیرو درجہ حرارت پر ذخیرہ کرنے کا ارادہ رکھتے ہیں۔

کمپنیوں کو اپنے جغرافیائی محل وقوع کے باہر کے درجہ حرارت کو حقیقی وقت میں شیئر کرنے اور اسے ناقابل تغیر لیجر میں ریکارڈ کرنے کی اجازت دے کر، نیٹ ورک کے شرکاء لاگت اور وقت کو کم کرتے ہیں۔

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

ہم تین کام انجام دیں گے، جو خاکہ میں دکھایا گیا ہے:

  1. ہم معاہدہ کے ذریعے تعینات کریں گے۔ نوڈ 1:

    const contractAddress = await deployContract(raft1Node);
    console.log(`Contract address after deployment: ${contractAddress}`);

  2. کے ذریعے درجہ حرارت سیٹ کریں۔ نوڈ 2 3 ڈگری سے:

    const status = await setTemperature(raft2Node, contractAddress, 3);
    console.log(`Transaction status: ${status}`);

  3. نوڈ 3 سمارٹ کنٹریکٹ سے معلومات حاصل کرے گا۔ معاہدہ قدر 3 ڈگری واپس کرے گا:

    const temp = await getTemperature(raft3Node, contractAddress);
    console.log(‘Retrieved contract Temperature’, temp);

    اگلا، ہم دیکھیں گے کہ کورم نیٹ ورک کا استعمال کرتے ہوئے عوامی لین دین کو کیسے انجام دیا جائے۔ web3.js.

ہم تین نوڈس کے لیے RPC کے ذریعے ایک مثال شروع کرتے ہیں:

const raft1Node = new Web3(
 new Web3.providers.HttpProvider(process.env.RPC1), null, {
   transactionConfirmationBlocks: 1,
 },
);
const raft2Node = new Web3(
 new Web3.providers.HttpProvider(process.env.RPC2), null, {
   transactionConfirmationBlocks: 1,
 },
);
const raft3Node = new Web3(
 new Web3.providers.HttpProvider(process.env.RPC3), null, {
   transactionConfirmationBlocks: 1,
 },
);

آئیے سمارٹ کنٹریکٹ کو متعین کریں:

// returns the default account from the Web3 instance initiated previously
function getAddress(web3) {
  return web3.eth.getAccounts().then(accounts => accounts[0]);
}
// Deploys the contract using contract's interface and node's default address
async function deployContract(web3) {
  const address = await getAddress(web3);
// initiate contract with contract's interface
  const contract = new web3.eth.Contract(
    temperatureMonitor.interface
  );
return contract.deploy({
    // deploy contract with contract's bytecode
    data: temperatureMonitor.bytecode,
  })
  .send({
    from: address,
    gas: '0x2CD29C0',
  })
  .on('error', console.error)
  .then((newContractInstance) => {
    // returns deployed contract address
    return newContractInstance.options.address;
  });
}

web3.js معاہدے کے ساتھ تعامل کے دو طریقے فراہم کرتا ہے: call и send.

آئیے عملدرآمد کرکے معاہدے کے درجہ حرارت کو اپ ڈیٹ کریں۔ set web3 طریقہ استعمال کرتے ہوئے send.

// get contract deployed previously
async function getContract(web3, contractAddress) {
  const address = await getAddress(web3);
return web3.eth.Contract(
    temperatureMonitor.interface,
    contractAddress, {
      defaultAccount: address,
    }
  );
}
// calls contract set method to update contract's temperature
async function setTemperature(web3, contractAddress, temp) {
  const myContract = await getContract(web3, contractAddress);
return myContract.methods.set(temp).send({}).then((receipt) => {
    return receipt.status;
  });
}

اگلا ہم web3 طریقہ استعمال کرتے ہیں۔ call معاہدہ درجہ حرارت حاصل کرنے کے لئے. براہ مہربانی نوٹ کریں کہ طریقہ call مقامی نوڈ پر عمل میں لایا جاتا ہے اور لین دین بلاکچین پر نہیں بنایا جائے گا۔

// calls contract get method to retrieve contract's temperature
async function getTemperature(web3, contractAddress) {
  const myContract = await getContract(web3, contractAddress);
return myContract.methods.get().call().then(result => result);
}

اب آپ دوڑ سکتے ہیں۔ public.js مندرجہ ذیل نتیجہ حاصل کرنے کے لئے:

// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3

اگلا، ہم Chainstack پینل میں کورم ایکسپلورر میں اندراجات دیکھ سکتے ہیں، جیسا کہ ذیل میں دکھایا گیا ہے۔

تینوں نوڈس نے بات چیت کی اور لین دین کو اپ ڈیٹ کیا گیا:

  1. پہلے لین دین نے معاہدہ کو تعینات کیا۔
  2. دوسری ٹرانزیکشن نے معاہدہ کا درجہ حرارت 3 ڈگری پر سیٹ کیا۔
  3. درجہ حرارت مقامی نوڈ کے ذریعے موصول ہوتا ہے، لہذا کوئی لین دین نہیں ہوتا ہے۔

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

نجی لین دین

سیاق و سباق

تنظیموں کی ایک مشترکہ ضرورت ڈیٹا کی حفاظت ہے۔ مثال کے طور پر ایک ایسے منظر نامے پر غور کریں جس میں سپر مارکیٹ سمندری غذا کو الگ سے ذخیرہ کرنے کے لیے گودام کی جگہ کرایہ پر لیتی ہے۔ فروش:

  • فروش IoT سینسر کا استعمال کرتے ہوئے، ہر 30 سیکنڈ میں درجہ حرارت کی قدروں کو پڑھتا ہے اور انہیں منتقل کرتا ہے۔ سپر مارکیٹ تک;
  • یہ اقدار صرف دستیاب ہونی چاہئیں فروش کو и سپر مارکیٹ تک، ایک کنسورشیم کے ذریعہ نیٹ ورک۔

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

ہم اوپر دیے گئے خاکے میں دکھائے گئے چار کاموں کو مکمل کریں گے۔

  • ہم نجی لین دین کو ظاہر کرنے کے لیے پچھلے منظر نامے سے وہی تین نوڈس استعمال کرتے ہیں:
  • سپر مارکیٹ ایک ایسا سمارٹ کنٹریکٹ تعینات کرتا ہے جو نجی ہے۔ سپر مارکیٹ и فروش.
  • تیسری طرف سمارٹ کنٹریکٹ تک رسائی کا حق نہیں ہے۔

ہم طریقوں کو کال کریں گے۔ get и set کی جانب سے سپر مارکیٹ и فروش نجی کورم لین دین کا مظاہرہ کرنے کے لیے۔

  1. ہم شرکاء کے لیے ایک نجی معاہدہ تعینات کریں گے۔ سپر مارکیٹ и فروش ایک شریک کے ذریعے سپر مارکیٹ:

    const contractAddress = await deployContract(
    raft1Node,
    process.env.PK2,
    );
    console.log(`Contract address after deployment: ${contractAddress}`);

  2. سے درجہ حرارت سیٹ کرتے ہیں۔ تیسری پارٹی (بیرونی نوڈ) اور درجہ حرارت کی قیمت حاصل کریں:

    // Attempts to set Contract temperature to 10, this will not mutate contract's temperature
    await setTemperature(
    raft3Node,
    contractAddress,
    process.env.PK1,
    10,
    );
    // This returns null
    const temp = await getTemperature(raft3Node, contractAddress);
    console.log(`[Node3] temp retrieved after updating contract from external nodes: ${temp}`);

  3. سے درجہ حرارت سیٹ کرتے ہیں۔ فروش (اندرونی نوڈ) اور درجہ حرارت کی قیمت حاصل کریں:

    اس منظر نامے میں درجہ حرارت کو سمارٹ کنٹریکٹ سے 12 کی قدر واپس کرنی چاہیے۔ براہ کرم نوٹ کریں۔ فروش یہاں سمارٹ کنٹریکٹ تک رسائی کی اجازت ہے۔

    // Updated Contract temperature to 12 degrees
    await setTemperature(
    raft2Node,
    contractAddress,
    process.env.PK1,
    12,
    );
    // This returns 12
    const temp2 = await getTemperature(raft2Node, contractAddress);
    console.log(`[Node2] temp retrieved after updating contract from internal nodes: ${temp2}`);

  4. ہم سے درجہ حرارت حاصل کرتے ہیں۔ تیسری پارٹی (بیرونی نوڈ):

    مرحلہ 3 میں درجہ حرارت 12 پر سیٹ کیا گیا تھا، لیکن تیسری طرف سمارٹ کنٹریکٹ تک رسائی نہیں ہے۔ اس لیے واپسی کی قدر صفر ہونی چاہیے۔

    // This returns null
    const temp3 = await getTemperature(raft3Node, contractAddress);
    console.log(`[Node3] temp retrieved from external nodes after update ${temp}`);

    اگلا، ہم اس کے ساتھ کورم نیٹ ورک پر نجی لین دین کو انجام دینے پر گہری نظر ڈالیں گے۔ web3.js. چونکہ زیادہ تر کوڈ عوامی لین دین کے لیے ایک جیسا ہوتا ہے، اس لیے ہم صرف ان حصوں کو نمایاں کریں گے جو نجی لین دین کے لیے مختلف ہیں۔

نوٹ کریں کہ نیٹ ورک پر اپ لوڈ کیا گیا معاہدہ ناقابل تغیر ہے، اس لیے مناسب نوڈس تک رسائی کی اجازت عوامی معاہدے کو اس وقت فراہم کی جانی چاہیے جب کنٹریکٹ تعینات کیا گیا ہے، اس کے بعد نہیں۔

async function deployContract(web3, publicKey) {
  const address = await getAddress(web3);
  const contract = new web3.eth.Contract(
    temperatureMonitor.interface,
  );
return contract.deploy({
    data: temperatureMonitor.bytecode,
  })
  .send({
    from: address,
    gas: ‘0x2CD29C0’, 
    // Grant Permission to Contract by including nodes public keys
    privateFor: [publicKey],
  })
  .then((contract) => {
    return contract.options.address;
  });
}

پرائیویٹ ٹرانزیکشنز بھی اسی طرح کی جاتی ہیں - عمل درآمد کے وقت شرکاء کی عوامی کلید کو شامل کرکے۔

async function setTemperature(web3, contractAddress, publicKey, temp) {
  const address = await getAddress(web3);
  const myContract = await getContract(web3, contractAddress);
return myContract.methods.set(temp).send({
    from: address,
    // Grant Permission by including nodes public  keys
    privateFor: [publicKey],
  }).then((receipt) => {
    return receipt.status;
  });
}

اب ہم بھاگ سکتے ہیں۔ private.js مندرجہ ذیل نتائج کے ساتھ:

node private.js
Contract address after deployment: 0x85dBF88B4dfa47e73608b33454E4e3BA2812B21D
[Node3] temp retrieved after updating contract from external nodes: null
[Node2] temp retrieved after updating contract from internal nodes: 12
[Node3] temp retrieved from external nodes after update null

Chainstack میں کورم ایکسپلورر درج ذیل دکھائے گا:

  • شراکت دار سے معاہدے کی تعیناتی۔ سپر مارکیٹ;
  • تکمیل SetTemperature سے تیسری پارٹی;
  • تکمیل SetTemperature ایک شریک سے فروش.

Web3 کا استعمال کرتے ہوئے JPMorgan Quorum blockchain پر عوامی اور نجی لین دین کریں۔

جیسا کہ آپ دیکھ سکتے ہیں، دونوں لین دین مکمل ہو چکے ہیں، لیکن صرف شریک کی طرف سے لین دین فروش معاہدے میں درجہ حرارت کو اپ ڈیٹ کیا. اس طرح، نجی لین دین ناقابل تغیر فراہم کرتے ہیں، لیکن ایک ہی وقت میں کسی تیسرے فریق کو ڈیٹا ظاہر نہیں کرتے ہیں۔

حاصل يہ ہوا

ہم نے دو فریقوں - ایک سپر مارکیٹ اور گودام کے مالک کے درمیان نیٹ ورک لگا کر گودام میں درجہ حرارت کی تازہ ترین معلومات فراہم کرنے کے لیے کورم کے لیے تجارتی استعمال کے معاملے کو دیکھا۔

ہم نے دکھایا کہ درجہ حرارت کی تازہ ترین معلومات کو عوامی اور نجی دونوں لین دین کے ذریعے کیسے برقرار رکھا جا سکتا ہے۔

درخواست کے بہت سارے منظرنامے ہوسکتے ہیں اور جیسا کہ آپ دیکھ سکتے ہیں، یہ بالکل مشکل نہیں ہے۔

تجربہ کریں، اپنی اسکرپٹ کو وسعت دینے کی کوشش کریں۔ اس کے علاوہ، blockchain ٹیکنالوجی کی صنعت 2024 تک تقریباً دس گنا بڑھ سکتا ہے۔.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں