ProHoster > Блог > Maamulka > Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3
Ku samee macaamil ganacsi guud iyo mid gaar ah oo ku saabsan blockchain Quorum JPMorgan adoo isticmaalaya Web3
Quorum waa blockchain ku salaysan Ethereum oo ay samaysay JPMorgan oo dhawaanahan noqotay madal ledgeerkii ugu horeeyay ee la qaybiyo oo ay bixiso Microsoft Azure.
Maqaalkan, waxaan ku baari doonaa mid ka mid ah xaaladaha noocaas ah - dirida shabakad ledgeer qaybsan oo u dhaxaysa supermarket-ka iyo mulkiilaha bakhaarka si loo bixiyo macluumaad cusub oo ku saabsan heerkulka bakhaarka.
Koodhka loo isticmaalay casharkan ayaa ku jira kaydka GitHub.
Maqaalku wuxuu daboolayaa:
abuurista qandaraas caqli-gal ah;
dirida shabakada Quorum iyadoo la isticmaalayo Silsilad;
Kooramka wax kala iibsiga dadweynaha;
Koorum macaamil ganacsi oo gaar ah
Si loo qeexo, waxaan u isticmaalnaa xaalad la socodka heerkulka bakhaarrada xubnaha Shabakadda Quorum ee Internetka Waxyaabaha (IoT).
Dulucda
Koox ka mid ah shirkadaha bakhaarrada ayaa ku midoobaya isbahaysi si ay si wadajir ah u kaydiyaan macluumaadka oo ay u habeeyaan hababka blockchain. Taas awgeed, shirkaduhu waxay go'aansadeen inay isticmaalaan Koorum. Maqaalkan waxaan ku dabooli doonaa laba xaaladood: wax kala iibsiga dadweynaha iyo wax kala iibsiga gaarka ah.
Macaamilada waxaa abuura ka qaybgalayaal kala duwan si ay ula falgalaan daladda ay ka tirsan yihiin. Wax kala iibsi kastaa waxa uu geeyaa qandaraas ama waxa uu wacaa shaqada qandaraaska si loogu shubo xogta shabakada. Ficiladan waxaa lagu celceliyaa dhammaan noodyada shabakadda.
Wax kala iibsiga dadweynaha ayaa diyaar u ah daawashada dhammaan ka qaybgalayaasha isbahaysiga. Wax kala iibsiga gaarka ah wuxuu ku daraa lakabka sirta ah oo ay heli karaan kaliya ka qaybgalayaasha xaqa u leh inay sidaas sameeyaan.
Labada xaaladoodba, waxaanu isticmaalnaa qandaraas isku mid ah si aan u caddayno.
qandaraas smart
Hoos waxaa ku yaal qandaraas fudud oo caqli badan oo loo abuuray muuqaalkeenna. Waxay leedahay doorsoome dadweyne temperature, kaas oo lagu beddeli karo iyadoo la isticmaalayo set oo hab lagu helo 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;
}
}
Si uu qandaraasku ula shaqeeyo web3.js, waa in loo tarjumaa qaabka ABI iyo bytecode. Isticmaalka shaqada formatContractHoos waxa uu ururiyaa qandaraaska isagoo isticmaalaya solc-js.
Shabakadda waa la geeyey Hadda aynu geyno qandaraasyo caqli-gal ah oo aan sameyno macaamil ganacsi annagoo isticmaalna web3.js.
Wax kala iibsiga dadweynaha
Dulucda
Heerkulka bakhaarku wuxuu muhiimad weyn u leeyahay dhimista kharashaadka, gaar ahaan alaabta loogu talagalay in lagu kaydiyo heerkul-hoosaadka eber.
Adigoo u oggolaanaya shirkadaha inay wadaagaan heerkulka ka baxsan goobtooda juqraafi ahaan wakhtiga dhabta ah oo ay ku qoraan buug aan la bedeli karin, ka qaybgalayaasha shabakadu waxay yareeyaan kharashyada iyo waqtiga.
Waxaan qaban doonaa saddex hawlood, oo lagu muujiyey jaantuska:
Waxaanu ku geyn doonaa qandaraaska Node 1:
const contractAddress = await deployContract(raft1Node);
console.log(`Contract address after deployment: ${contractAddress}`);
Marka xigta, waxaan eegi doonaa sida loo fuliyo macaamil ganacsi oo dadweyne shabakada Quorum iyadoo la adeegsanayo web3.js.
Waxaan tusaale ahaan ku bilownay RPC saddex nood:
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,
},
);
Aynu geyno qandaraaska caqliga leh:
// 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 waxay bixisaa laba hab oo loola macaamilo heshiiska: call и send.
Aynu cusboonaysiino heerkulka heshiiska anagoo fulinayna set iyadoo la isticmaalayo habka 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;
});
}
Marka xigta waxaan isticmaalnaa habka web3 call si loo helo heerkulka heshiiska. Fadlan la soco in habka call waxaa lagu fuliyaa meel maxalli ah oo wax kala iibsiga laguma abuuri doono blockchain.
// 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);
}
Hadda waad carari kartaa dadweynaha.js si loo helo natiijada soo socota:
// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3
Marka xigta, waxaan arki karnaa gelida sahamiyaha Koorum ee ku jira guddiga Chainstack, sida hoos ku cad.
Dhammaan saddexda nood ayaa is-dhexgalay oo wax kala iibsiga waa la cusboonaysiiyay:
Wax kala iibsigii ugu horeeyay waxa uu geeyay heshiiska.
// 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}`);
Heerkulka muuqaalkan waa inuu ka soo celiyaa qiimihii 12 ee qandaraaska smart. Fadlan ogow taas Iibiyaha halkan ayaa oggolaaday gelitaanka qandaraaska smart.
// 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}`);
Waxaan ka helnaa heerkulka Qolada saddexaad (node dibadda):
Talaabada 3-aad heerkulka waxaa loo dejiyay 12, laakiin Dhinaca saddexaad ma heli karo qandaraaska smart. Sidaa darteed qiimuhu waa inuu noqdaa mid aan waxba ka jirin.
// This returns null
const temp3 = await getTemperature(raft3Node, contractAddress);
console.log(`[Node3] temp retrieved from external nodes after update ${temp}`);
Marka xigta, waxaanu si dhow u eegi doonaa samaynta macaamilada gaarka ah ee shabakada Koorumka web3.js. Maadaama inta badan koodka ay isku mid yihiin macaamilka dadweynaha, waxaanu muujin doonaa oo kaliya qaybaha ka duwan ganacsiga gaarka ah.
Ogsoonow in qandaraaska la soo galiyay shabakadu uu yahay mid aan isbedeli karin, sidaas darteed gelitaanka ogolaanshaha waa in la siiyaa noodhadhka ku habboon iyada oo awood u siinaysa qandaraaska dadweynaha wakhtiga qandaraaska la dirayo, maaha ka dib.
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;
});
}
Wax kala iibsiga gaarka ah waxaa loo sameeyaa si la mid ah - iyadoo lagu daro furaha dadweynaha ee ka qaybgalayaasha wakhtiga fulinta.
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;
});
}
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
Sahamiyaha Quorum ee Chainstack wuxuu tusi doonaa kuwa soo socda:
keenista qandaraaska ka qaybqaataha Suuq weyn;
Waxqabadka SetTemperature ka Qolada saddexaad;
Waxqabadka SetTemperature ka qaybgale Iibiyaha.
Sida aad arki karto, labada macaamil ganacsi waa la dhammeeyaa, laakiin kaliya macaamilka ka qaybgalaha Iibiyaha cusboonaysiiyey heerkulka heshiiska. Sidaa darteed, macaamil ganacsiyada gaarka ah waxay bixiyaan isbeddel la'aan, laakiin isla mar ahaantaana ma muujin xogta cid saddexaad.
gunaanad
Waxaan u eegnay kiis adeegsi ganacsi oo loogu talagalay Quorum si ay u bixiso macluumaadka heerkulka ugu dambeeyay ee bakhaarka anagoo geynayna shabakad u dhexeysa laba dhinac - dukaan weyn iyo mulkiilaha bakhaarka.