Web3 استعمال ڪندي JPMorgan Quorum blockchain تي عوامي ۽ نجي ٽرانزيڪشن کي انجام ڏيو

Web3 استعمال ڪندي JPMorgan Quorum blockchain تي عوامي ۽ نجي ٽرانزيڪشن کي انجام ڏيو

پراوروم 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 تي عوامي ۽ نجي ٽرانزيڪشن کي انجام ڏيو

اچو ته گوگل ڪلائوڊ پليٽ فارم تي Raft اتفاق راءِ سان هڪ ڪورم نيٽ ورڪ ٺاهيو:

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

تبصرو شامل ڪريو