ProHoster > Blog > fitantanan-draharaha > Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3
Manaova fifampiraharaham-bahoaka sy tsy miankina amin'ny JPMorgan Quorum blockchain amin'ny fampiasana Web3
kôlejy dia blockchain miorina amin'ny Ethereum novolavolain'i JPMorgan ary vao haingana no lasa sehatra ledger nozaraina voalohany natolotry ny Microsoft Azure.
Ny Kôrum dia manohana ny fifampiraharahana manokana sy ampahibemaso ary manana tranga fampiasana ara-barotra maro.
Ato amin'ity lahatsoratra ity dia handinika toe-javatra iray toy izany isika - ny fametrahana tambajotram-pitantanam-bola zaraina eo amin'ny toeram-pivarotana lehibe iray sy ny tompon'ny trano fanatobiana entana mba hanomezana vaovao farany momba ny mari-pana ao amin'ny trano fanatobiana entana.
fametrahana ny tambajotra Kôlejy mampiasa Chainstack;
Fifampiraharaham-bahoaka amin'ny kôlejy;
Transakta tsy miankina amin'ny kôlejy.
Ohatra, mampiasa scenario izahay amin'ny fanaraha-maso ny mari-pana ao amin'ny trano fitehirizan'ny mpikambana ao amin'ny tambajotra Kôlejy ao anatin'ny Internet of Things (IoT).
teny manodidina
Vondrona orinasa trano fanatobiana entana no mivondrona ao amin'ny consortium mba hiara-hitahiry vaovao sy automatique ny fizotran'ny blockchain. Noho izany, nanapa-kevitra ny hampiasa ny Quorum ny orinasa. Ato amin'ity lahatsoratra ity isika dia hiresaka toe-javatra roa: ny raharaham-bahoaka sy ny tsy miankina.
Ny fifampiraharahana dia noforonin'ny mpandray anjara samihafa hifaneraserana amin'ny consortium misy azy ireo. Ny fifampiraharahana tsirairay dia na mametraka fifanarahana na miantso asa iray ao amin'ny fifanarahana mba hampakatra angona amin'ny tambajotra. Ireo hetsika ireo dia averina amin'ny nodes rehetra amin'ny tambajotra.
Ny fifampiraharahana ampahibemaso dia azo jerena amin'ny mpandray anjara rehetra amin'ny consortium. Ny fifampiraharahana manokana dia manampy sosona tsiambaratelo ary tsy misy afa-tsy ireo mpandray anjara manana zo hanao izany.
Ho an'ireo toe-javatra roa ireo, fifanarahana iray ihany no ampiasanay mba hanazavana.
Smart fifanarahana
Ity ambany ity ny fifanarahana marani-tsaina tsotra noforonina ho an'ny scenario. Manana fari-piadidiana ho an'ny daholobe izy io temperature, izay azo ovaina amin'ny fampiasana set ary mandray amin'ny fomba 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;
}
}
Mba hahafahan'ny fifanarahana miasa web3.js, tsy maintsy adika amin'ny endrika ABI sy bytecode. Mampiasa ny asa formatContracteto ambany dia manangona ny fifanarahana mampiasa solc-js.
Ny mari-pana ao amin'ny trano fanatobiana entana dia manan-danja lehibe amin'ny fampihenana ny fandaniana, indrindra ho an'ny vokatra natao hotehirizina amin'ny mari-pana ambany aotra.
Amin'ny alàlan'ny famelana ireo orinasa hizara ny mari-pana ivelan'ny toerana ara-jeografika azy amin'ny fotoana tena izy ary handrakitra izany ao amin'ny bokikely tsy azo ovaina, mampihena ny fandaniana sy ny fotoana ny mpandray anjara amin'ny tambajotra.
Hanatanteraka asa telo isika, aseho amin'ny kisary:
Hametraka ny fifanarahana amin'ny alalan'ny Nody 1:
const contractAddress = await deployContract(raft1Node);
console.log(`Contract address after deployment: ${contractAddress}`);
Mametraha ny maripana amin'ny alalan'ny Nody 2 amin'ny 3 degre:
const status = await setTemperature(raft2Node, contractAddress, 3);
console.log(`Transaction status: ${status}`);
Nody 3 hahazo vaovao avy amin'ny fifanarahana smart. Ny fifanarahana dia hamerina ny sanda 3 degre:
Manaraka izany, hojerentsika ny fomba hanatanterahana ny fifampiraharaham-bahoaka amin'ny tambajotran'ny Kôrum mampiasa web3.js.
Manomboka ohatra amin'ny alàlan'ny RPC izahay ho an'ny node telo:
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,
},
);
Andao hametraka ny fifanarahana marani-tsaina:
// 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 manome fomba roa hifaneraserana amin'ny fifanarahana: call и send.
Andao hanavao ny mari-pana amin'ny fifanarahana amin'ny fanatanterahana set mampiasa fomba 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;
});
}
Avy eo dia mampiasa ny fomba web3 izahay call mba hahazoana ny mari-pana fifanarahana. Mariho fa ny fomba call dia tanterahina amin'ny node eo an-toerana ary ny fifanakalozana dia tsy ho noforonina amin'ny 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);
}
// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3
Manaraka izany dia afaka mijery ireo lahatsoratra ao amin’ny Kôlejy mpikaroka ao amin’ny tontolon’ny Chainstack isika, araka ny aseho etsy ambany.
Nifandray daholo ny node telo ary nohavaozina ny fifanakalozana:
Ny fifanarahana voalohany dia nametraka ny fifanarahana.
Ny fifanakalozana faharoa dia nametraka ny mari-pana amin'ny fifanarahana ho 3 degre.
Ny mari-pana dia raisina amin'ny alàlan'ny node eo an-toerana, ka tsy misy fifampiraharahana noforonina.
Transakta manokana
teny manodidina
Ny fepetra iraisan'ny fikambanana dia ny fiarovana ny angona. Diniho, ohatra, ny scenario iray Sipermarse manofa trano fanatobiana entana hitehirizana hazan-dranomasina amin'ny toerana mitokana Mpivarotra:
Mpivarotra mampiasa sensor IoT, mamaky ny mari-pana isaky ny 30 segondra ary mampita azy ireo Ho any amin'ny toeram-pivarotana lehibe;
ireo soatoavina ireo ihany no tokony ho hita Ho an'ny mpivarotra и Ho any amin'ny toeram-pivarotana lehibe, tambazotran'ny consortium.
Andeha isika hametraka ny mari-pana avy Ankolafy fahatelo (node ivelany) ary alao ny sandan'ny mari-pana:
// 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}`);
Andeha isika hametraka ny mari-pana avy Mpivarotra (node anatiny) ary alao ny sandan'ny mari-pana:
Ny mari-pana amin'ity tranga ity dia tokony hamerina ny sanda 12 avy amin'ny fifanarahana marani-tsaina. Mariho fa Mpivarotra eto dia nanome alalana ny fidirana amin'ny fifanarahana marani-tsaina.
// 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}`);
Mahazo ny mari-pana avy amin'ny Ankolafy fahatelo (node ivelany):
Ao amin'ny dingana 3 ny mari-pana dia napetraka ho 12, fa Ny lafiny fahatelo tsy manana fidirana amin'ny fifanarahana marani-tsaina. Noho izany dia tsy maintsy null ny sanda miverina.
// This returns null
const temp3 = await getTemperature(raft3Node, contractAddress);
console.log(`[Node3] temp retrieved from external nodes after update ${temp}`);
Manaraka izany dia hojerentsika akaiky ny fanaovana fifampiraharahana manokana ao amin'ny tambajotra Kôlejy miaraka amin'ny web3.js. Satria ny ankamaroan'ny kaody dia mitovy amin'ny fifampiraharahana ho an'ny daholobe, ireo ampahany izay tsy mitovy amin'ny fifampiraharahana manokana ihany no hasongadinay.
Mariho fa ny fifanarahana nampidirina tao amin'ny tambajotra dia tsy azo ovaina, noho izany dia tsy maintsy omena alalana ny fidirana amin'ireo node mety amin'ny alàlan'ny fampandehanana ny fifanarahana ho an'ny daholobe amin'ny fotoana ametrahana ny fifanarahana, fa tsy aorian'izany.
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;
});
}
Ny fifampiraharahana manokana dia atao amin'ny fomba mitovy - amin'ny fampidirana ny fanalahidin'ny daholobe amin'ny mpandray anjara amin'ny fotoana famonoana.
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;
});
}
Araka ny hitanao dia vita ny fifampiraharahana roa, fa ny fifampiraharahana avy amin'ny mpandray anjara ihany Mpivarotra fanavaozana ny mari-pana ao amin'ny fifanarahana. Noho izany, ny fifampiraharahana manokana dia manome ny tsy fiovaovana, fa miaraka amin'izay koa dia tsy manambara angon-drakitra amin'ny antoko fahatelo.
famaranana
Nijery tranga fampiasàna ara-barotra ho an'ny Kôrum izahay mba hanomezana vaovao momba ny mari-pana amin'ny trano fanatobiana entana amin'ny alàlan'ny fametrahana tambajotra eo amin'ny antoko roa - toeram-pivarotana lehibe sy tompona trano fanatobiana entana.
Nasehonay ny fomba fitazomana ny vaovao momba ny mari-pana amin'ny alàlan'ny fifampiraharaham-bahoaka sy tsy miankina.
Mety misy sehatra fampiharana be dia be ary, araka ny hitanao, dia tsy sarotra mihitsy izany.