ProHoster > Блог > Whakahaerenga > Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3
Mahia nga whakawhitiwhitinga a te iwi me te tangata takitahi i runga i te poraka JPMorgan Quorum ma te whakamahi i te Web3
Pŭpŭ he poraka-a-Ethereum i hangaia e JPMorgan, a, no na tata tonu nei ka tu hei papaaa pukapuka tuatahi kua tohatohahia e Microsoft Azure.
Ka tautokohia e te Koorum nga whakawhitinga takitahi me te iwi whanui me te maha o nga keehi hokohoko.
I roto i tenei tuhinga, ka tirohia e matou tetahi o nga ahuatanga penei - te horahanga o te kupenga pukapuka pukapuka kua tohatohahia i waenga i te hokomaha me tetahi rangatira whare putunga hei tuku korero hou mo te mahana o te whare putunga.
te horahanga o te kupenga Koorum ma te whakamahi Chainstack;
Nga whakawhitiwhitinga a te iwi;
Ko nga whakawhitinga takitahi a te Koorum.
Hei whakatauira, ka whakamahia e matou he ahuatanga mo te aro turuki i te pāmahana i roto i nga whare putunga o nga mema o te Koorum i roto i te Ipurangi o nga Mea (IoT).
Horopaki
Ko tetahi roopu o nga kamupene whare putunga kei te whakakotahi ki te roopu ki te penapena ngatahi korero me te whakahaere aunoa i nga mahi i runga i te poraka. Mo tenei, i whakatau nga kamupene ki te whakamahi i te Quorum. I roto i tenei tuhinga ka hipokina e matou nga ahuatanga e rua: nga whakawhitinga a te iwi me nga whakawhitinga takitahi.
Ko nga tauwhitinga he mea hanga e nga kaiuru rereke ki te mahi tahi me te roopuu no ratou. Ko ia tauwhitinga ka tukuna he kirimana, ka karanga ranei i tetahi mahi i roto i te kirimana ki te tuku raraunga ki te whatunga. Ka tukuna enei mahi ki nga pona katoa o te whatunga.
E waatea ana nga tauwhitinga a-iwi mo te maataki e nga kaiuru katoa. Ko nga tauwhitinga motuhake ka taapirihia he paparanga muna, ka waatea noa ki nga kaiuru e whai mana ana ki te pera.
Mo nga ahuatanga e rua, ka whakamahia e matou te kirimana kotahi mo te maarama.
kirimana atamai
Kei raro nei he kirimana maamaa ngawari i hangaia mo taatau ahuatanga. He taurangi tūmatanui temperature, ka taea te whakarereke ma te whakamahi set me te whiwhi ma te tikanga 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;
}
}
Kia mahi tahi ai te kirimana tukutuku3.js, me whakamaori ki te whakatakotoranga ABI me te bytecode. Te whakamahi i te mahi formatContractkei raro kohia te kirimana ma te whakamahi solc-js.
Inaianei kua rite te kirimana, ka tohatohahia e matou te whatunga me te tuku i te kirimana.
Te horahanga node
Ko te tuku i te node he tino uaua te mahi, ka taea te whakakapi i tenei mahi ma te whakamahi i tetahi ratonga Chainstack.
Kei raro nei te tukanga mo te tuku i te whatunga Koorum me te whakaaetanga Raft me nga pona e toru.
Tuatahi, me hanga he kaupapa me te karanga ko te Quorum Project:
Me hanga he whatunga Koorum me te whakaae Raft i runga i te Google Cloud Platform:
Me taapiri kia rua ano nga pona ki te pona kua oti te hanga ma te taunoa:
E toru nga pona e rere ana:
Ko te wharangi taipitopito node e whakaatu ana i te pito mutunga RPC, te taviri a te iwi, aha atu.
Ka tohatohahia te whatunga. Inaianei me tuku kirimana maatau me te mahi i nga whakawhitinga ma te whakamahi tukutuku3.js.
Nga tauhokohoko a te iwi
Horopaki
He mea nui te mahana o te whare putunga hei whakaiti i nga utu, ina koa mo nga hua e kiia ana kia rongoa ki nga pāmahana iti-kore.
Ma te tuku i nga kamupene ki te tiri i te pāmahana o waho o te waahi matawhenua i roto i te waa tuuturu me te tuhi i roto i te pukapuka pukapuka kore huri, ka whakaitihia e nga kaiuru whatunga nga utu me te wa.
Ka mahia e matou nga mahi e toru, e whakaatuhia ana i te hoahoa:
Ka tukuna e matou te kirimana ma Node 1:
const contractAddress = await deployContract(raft1Node);
console.log(`Contract address after deployment: ${contractAddress}`);
Tautuhi te pāmahana mā Node 2 mā te 3 nekehanga:
const status = await setTemperature(raft2Node, contractAddress, 3);
console.log(`Transaction status: ${status}`);
Node 3 ka whiwhi korero mai i te kirimana atamai. Ka whakahokia e te kirimana te uara 3 nga nekehanga:
I muri mai, ka titiro tatou me pehea te whakahaere i tetahi tauwhitinga a te iwi i runga i te whatunga Quorum ma te whakamahi tukutuku3.js.
Ka timatahia he tauira ma te RPC mo nga waahanga e toru:
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,
},
);
Kia horahia te kirimana atamai:
// 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;
});
}
tukutuku3.js E rua nga tikanga mo te taunekeneke me te kirimana: call и send.
Kia whakahōuhia te pāmahana kirimana mā te mahi set whakamahi tikanga 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;
});
}
I muri mai ka whakamahia e matou te tikanga web3 call ki te whiwhi i te pāmahana kirimana. Kia mahara ko te tikanga call ka mahia i runga i te node o te rohe, a, kaore e hangaia te tauwhitinga i runga i te poraka.
// 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);
}
Inaianei ka taea e koe te oma tūmatanui.js ki te whiwhi i te hua e whai ake nei:
// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3
I muri iho, e nehenehe tatou e mataitai i te mau tapura i roto i te Quorum explorer i roto i te papaa Chainstack, mai tei faaitehia i raro nei.
I taunekeneke nga pona e toru, ka whakahouhia nga whakawhitinga:
Ko te whakawhitinga tuatahi i tukuna te kirimana.
Ko te tauwhitinga tuarua ka tautuhi i te pāmahana kirimana ki te 3 nga nekehanga.
Ka whakawhiwhia te pāmahana ma roto i te node rohe, no reira karekau he tauwhitinga i hangaia.
Nga tauwhitinga motuhake
Horopaki
Ko te whakaritenga noa o nga whakahaere ko te tiaki raraunga. Hei tauira, whakaarohia tetahi ahuatanga Hokohoko ka reti he waahi putunga mo te penapena kaimoana mai i tetahi waahi motuhake Kaihoko:
Kaihoko ma te whakamahi i nga pukoro IoT, ka panui i nga uara pāmahana ia 30 hēkona ka tukuna Ki te hokomaha;
me waatea noa enei uara Ki te kaihoko и Ki te hokomaha, i whakahonohia e tetahi huinga.
Ka whakaotihia e matou nga mahi e wha e whakaatuhia ana i te hoahoa i runga ake nei.
Ka whakamahia e matou nga waahanga e toru mai i te ahuatanga o mua hei whakaatu i nga tauwhitinga motuhake:
Hokohoko ka tukuna he kirimana atamai e noho motuhake ana Hokohoko и Kaihoko.
Ko te taha tuatoru kaore e whai mana ki te uru atu ki te kirimana atamai.
Ka karangahia e matou nga tikanga get и set mo te Hokohoko и Kaihoko ki te whakaatu i tetahi tauwhitinga a te Koorama.
Ka tukuna e matou he kirimana motuhake mo nga kaiuru Hokohoko и Kaihoko mā te kaiuru Hokohoko:
Me whakarite te pāmahana mai Tuatoru (node waho) ka whiwhi i te uara pāmahana:
// 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}`);
Me whakarite te pāmahana mai Kaihoko (node roto) ka tiki i te uara pāmahana:
Ko te pāmahana i roto i tenei ahuatanga me whakahoki te uara 12 mai i te kirimana atamai. Kia mahara mai Kaihoko i konei kua whakamanahia te uru ki te kirimana atamai.
// 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}`);
Ka whiwhi tatou i te pāmahana mai Tuatoru (node waho):
I te taahiraa 3 i whakaritea te pāmahana ki te 12, engari Ko te taha tuatoru kaore e whai waahi ki te kirimana atamai. Na reira me kore te uara whakahoki.
// This returns null
const temp3 = await getTemperature(raft3Node, contractAddress);
console.log(`[Node3] temp retrieved from external nodes after update ${temp}`);
I muri mai, ka ata titiro tatou ki te mahi i nga whakawhitiwhitinga motuhake i runga i te whatunga Koorum me tukutuku3.js. I te mea he rite tonu te nuinga o te waehere mo nga tauwhitinga a te iwi, ka tohua e matou nga waahanga rerekee mo nga whakawhitinga takitahi.
Kia mahara ko te kirimana i tukuna ki te whatunga he kore e taea te whakarereke, no reira me tuku te urunga whakaaetanga ki nga pona e tika ana ma te whakamana i te kirimana a te iwi i te wa i tukuna ai te kirimana, kaua i muri.
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;
});
}
He rite tonu te mahi o nga whakawhitiwhitinga motuhake - ma te whakauru i te kii a te iwi o nga kaiuru i te wa e mahia ana.
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;
});
}
Inaianei ka taea e tatou te oma tūmataiti.js me nga hua e whai ake nei:
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
Na te Koorama kaitoro i Chainstack e whakaatu i enei e whai ake nei:
te tukunga o te kirimana mai i te kaiuru Hokohoko;
Mahi SetTemperature i Tuatoru;
Mahi SetTemperature mai i tetahi kaiuru Kaihoko.
Ka taea e koe te kite, kua oti nga whakawhitinga e rua, engari ko te whakawhitinga mai i te kaiuru anake Kaihoko whakahoutia te pāmahana i roto i te kirimana. Na, ko nga whakawhitiwhitinga takitahi e whakarato ana i te kore whakarereke, engari i te wa ano kaore e whakaatu nga raraunga ki tetahi atu tuatoru.
mutunga
I titiro matou ki tetahi take arumoni mo te Quorum ki te tuku korero hou mo te pāmahana i roto i te whare putunga ma te tuku whatunga i waenga i nga roopu e rua - he hokomaha me tetahi rangatira whare putunga.
I whakaaturia e matou me pehea e taea ai te pupuri i nga korero pāmahana hou ma roto i nga whakawhitinga a te iwi me te tangata takitahi.
He maha nga ahuatanga o te tono, a, ka kite koe, ehara i te mea uaua.