ProHoster > Blog > Pulega > Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3
Fa'atino fefa'ataua'iga fa'alaua'itele ma tuma'oti ile poloka poloka poloka a le JPMorgan Quorum ile Web3
korama o se Ethereum-fa'avae poloka poloka na atia'e e JPMorgan ma talu ai nei na avea ma ulua'i fa'asoa fa'asoa fa'asalalauga e ofoina mai e Microsoft Azure.
E lagolagoina e le Korama fefaʻatauaiga tumaoti ma faʻasalalauga lautele ma e tele mataupu faʻaoga faʻapisinisi.
I totonu o lenei tusiga, o le a tatou iloiloina se tasi o ia faʻataʻitaʻiga - o le faʻapipiʻiina o se fesoʻotaʻiga faʻasalalau tufatufaina i le va o se supamaketi ma se fale teu oloa e tuʻuina atu faʻamatalaga lata mai e uiga i le vevela o le faleteuoloa.
fa'aogaina o feso'ota'iga a le Korama e fa'aaoga Chainstack;
Fefaatauaiga faalauaitele a le korama;
Fefaatauaiga tumaoti a le korama.
Mo se faʻataʻitaʻiga, matou te faʻaogaina se faʻataʻitaʻiga mo le mataʻituina o le vevela i fale teu oloa a sui o le Korama fesoʻotaʻiga i totonu o le Initaneti o Mea (IoT).
Anotusi
O se vaega o kamupani faleteuoloa o loʻo tuʻufaʻatasia i se consortium e faʻapipiʻi faʻatasi faʻamatalaga ma faʻautometi faiga i luga o le poloka poloka. Mo lenei mea, na filifili kamupani e faʻaaoga le Korama. I totonu o lenei tusiga o le a tatou aofia ai ni faʻaaliga se lua: fefaʻatauaiga lautele ma fefaʻatauaiga tumaoti.
O fefa'atauaiga e faia e sui auai eseese e fegalegaleai ma le consortium o lo'o latou auai. O fefaʻatauaʻiga taʻitasi pe faʻapipiʻi se konekarate pe valaʻau se galuega i totonu o le konekarate e faʻapipiʻi ai faʻamaumauga i luga ole fesoʻotaʻiga. O nei gaioiga o loʻo faʻatusalia i nodes uma i luga o le upega tafailagi.
O fefa'ataua'iga fa'alaua'itele e avanoa mo le maimoaina e tagata uma o lo'o auai. O fefa'ataua'iga fa'apitoa e fa'aopoopoina ai se vaega o le agatapuia ma e avanoa mo na'o i latou o lo'o auai e iai aia tatau e faia ai.
Mo fa'aaliga uma e lua, matou te fa'aogaina le konekarate tutusa mo le manino.
Konekarate atamai
O lo'o i lalo se konekarate atamai faigofie na faia mo la tatou fa'aaliga. E i ai se fesuiaiga lautele temperature, lea e mafai ona suia i le faʻaaogaina set ma maua i le auala 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;
}
}
Ina ia mafai ona galulue faatasi le konekarate web3.js, e tatau ona faaliliuina i le ABI format ma bytecode. Fa'aaogaina o le galuega formatContracto loʻo i lalo o loʻo tuʻufaʻatasia le konekarate faʻaaogaina solc-js.
O lea la ua sauni le konekarate, o le a matou faʻapipiʻiina le fesoʻotaʻiga ma faʻapipiʻi le konekarate.
Node fa'apipi'iina
O le tu'uina atu o se node e mafai ona fai si faigata tele ma e mafai ona suia lenei faiga i le fa'aogaina o se auaunaga Chainstack.
O loʻo i lalo le faʻagasologa mo le faʻaogaina o fesoʻotaʻiga a le Korama ma le Raft consensus ma tolu nodes.
Muamua, sei o tatou faia se galuega faatino ma faaigoa o le Korama Project:
Se'i o tatou faia se feso'ota'iga a le Korama fa'atasi ai ma Raft consensus ile Google Cloud Platform:
Se'i o tatou fa'aopoopo nisi node se lua i le node ua uma ona fai e ala i le faaletonu:
E tolu nodes tamo'e:
O le itulau faʻamatalaga o le node o loʻo faʻaalia ai le RPC endpoint, lautele lautele, ma isi.
Ua fa'apipi'i le feso'ota'iga. Se'i o tatou fa'apipi'i konekarate atamai ma fa'atino fefa'ataua'iga fa'aaoga web3.js.
Fefaatauaiga lautele
Anotusi
O le vevela o fale teu oloa e taua tele i le faʻaitiitia o tau, aemaise lava mo oloa e faʻamoemoe e teu i lalo ole vevela vevela.
E ala i le fa'atagaina o kamupani e fa'asoa le vevela i fafo o lo latou nofoaga fa'afanua i le taimi moni ma fa'amaumau i totonu o se tusi e le mafai ona suia, e fa'aitiitia ai le tau ma le taimi e sui auai i feso'otaiga.
O le a matou faia ni galuega se tolu, o loʻo faʻaalia i le ata:
O le a matou faʻapipiʻi le konekarate e ala i Node 1:
const contractAddress = await deployContract(raft1Node);
console.log(`Contract address after deployment: ${contractAddress}`);
Seti le vevela e ala i Node 2 e 3 tikeri:
const status = await setTemperature(raft2Node, contractAddress, 3);
console.log(`Transaction status: ${status}`);
Node 3 o le a maua faʻamatalaga mai le konekarate atamai. O le konekarate o le a toe faafoi le tau 3 tikeri:
O le isi, o le a tatou vaʻavaʻai pe faʻapefea ona faʻatino se fefaʻatauaiga lautele i luga o le fesoʻotaʻiga a le Korama e faʻaaoga ai web3.js.
Matou te amataina se faʻataʻitaʻiga e ala i le RPC mo nodes e tolu:
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,
},
);
Sei o tatou fa'aogaina le konekarate 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;
});
}
web3.js e maua ai auala e lua mo le fegalegaleai ma le konekarate: call и send.
Tatou fa'afouina le vevela fa'akonekarate e ala i le fa'atinoina set fa'aaoga auala 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;
});
}
Le isi matou te faʻaogaina le web3 metotia call ia maua le vevela konekarate. Faamolemole ia matau le auala call o loʻo faʻatinoina i luga o se node i le lotoifale ma o le a le faia le fefaʻatauaiga i luga o le poloka poloka.
// 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);
}
O lea ua mafai ona e tamoe public.js ina ia maua le taunuuga lea:
// Execute public script
node public.js
Contract address after deployment: 0xf46141Ac7D6D6E986eFb2321756b5d1e8a25008F
Transaction status: true
Retrieved contract Temperature 3
O le isi, e mafai ona tatou matamata i faamaumauga i le Korama explorer i le Chainstack panel, e pei ona faaalia i lalo.
Na fegalegaleai uma nodes e tolu ma toe faʻafouina fefaʻatauaiga:
O le fefaʻatauaiga muamua na faʻapipiʻiina le konekarate.
O le fefaʻatauaʻiga lona lua na faʻatulaga ai le vevela konekarate i le 3 tikeri.
E maua le vevela e ala i se node i le lotoifale, o lea e leai se fefaʻatauaiga e faia.
Fefaatauaiga tumaoti
Anotusi
Ole mana'oga masani a fa'alapotopotoga ole puipuiga o fa'amaumauga. Mo se faʻataʻitaʻiga, mafaufau i se faʻataʻitaʻiga lea Supermarket mautotogi se fale teu oloa mo le teuina o i'a mai se isi Fa'atau:
Fa'atau faʻaogaina le IoT sensors, faitau tau vevela i 30 sekone ma faʻasalalau atu I le supamaketi;
o nei tau e tatau ona na'o avanoa I le tagata fa'atau и I le supamaketi, feso'ota'i e se consortium.
O le a matou fa'amae'aina galuega e fa o lo'o fa'aalia i le ata i luga.
Matou te faʻaogaina le tolu pona mai le faʻataʻitaʻiga muamua e faʻaalia ai fefaʻatauaiga tumaoti:
Supamaketi fa'apipi'i se konekarate atamai e fa'apitoa i Supermarket и Fa'atau.
O le itu lona tolu e leai se aia e maua ai le konekarate atamai.
O le a matou taʻua metotia get и set e fai ma sui Supermarket и Fa'atau e fa'aalia ai se fefa'atauaiga patino a le Korama.
O le a matou faʻapipiʻiina se konekarate tumaoti mo tagata auai Supamaketi и Fa'atau e ala i se tagata auai Supamaketi:
Tatou seti le vevela mai Vaega lona tolu (node fafo) ma maua le tau o le vevela:
// 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}`);
Tatou seti le vevela mai Fa'atau (node totonu) ma maua le tau o le vevela:
O le vevela i lenei fa'aaliga e tatau ona toe fa'afo'i le tau 12 mai le konekarate atamai. Fa'amolemole ia matau lena mea Fa'atau iinei ua faatagaina avanoa i le konekarate 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}`);
Matou te maua le vevela mai Vaega lona tolu (node fafo):
I le Laasaga 3 na setiina le vevela i le 12, ae O le itu lona tolu e le maua le avanoa i le konekarate atamai. O le mea lea e tatau ona null le tau toe faafoi.
// This returns null
const temp3 = await getTemperature(raft3Node, contractAddress);
console.log(`[Node3] temp retrieved from external nodes after update ${temp}`);
Le isi, o le a tatou vaʻavaʻai totoʻa i le faʻatinoina o fefaʻatauaiga tumaoti i luga o fesoʻotaʻiga a le Korama ma web3.js. Talu ai o le tele o le code e tutusa mo fefaʻatauaiga lautele, o le a matou faʻamaonia naʻo vaega na e ese mo fefaʻatauaiga tumaoti.
Manatua o le konekarate na lafoina i luga o fesoʻotaʻiga e le mafai ona suia, o lea e tatau ona tuʻuina atu avanoa faʻatagaina i nodes talafeagai e ala i le faʻatagaina o le konekarate lautele i le taimi e faʻapipiʻi ai le konekarate, ae le o le maeʻa.
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;
});
}
O fefaʻatauaʻiga faʻapitoa e faʻatinoina i se auala talitutusa - e ala i le faʻaofiina o le ki faʻasalalau a tagata auai i le taimi o le faʻatinoga.
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;
});
}
O lea ua mafai ona tatou taufetuli private.js fa'atasi ai ma fa'ai'uga 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
O le tagata suʻesuʻe o le Korama i Chainstack o le a faʻaalia mea nei:
fa'apipi'iina o le konekarate mai le sui auai Supamaketi;
Faatinoga SetTemperature от Vaega lona tolu;
Faatinoga SetTemperature mai se tagata auai Fa'atau.
E pei ona e vaʻaia, ua maeʻa uma fefaʻatauaiga, ae naʻo le fefaʻatauaiga mai le tagata auai Fa'atau faafou le vevela i totonu o le konekarate. O le mea lea, o fefaʻatauaiga tumaoti e maua ai le le mafai ona suia, ae i le taimi lava e tasi e le faʻaalia ai faʻamatalaga i se isi vaega.
iʻuga
Sa matou va'ava'ai i se fa'aoga fa'apisinisi mo le Korama e tu'uina atu ai fa'amatalaga fou o le vevela i totonu o se faleteuoloa e ala i le fa'aogaina o se feso'ota'iga i le va o itu e lua - o se supamaketi ma se fale teu oloa.
Na matou fa'aalia pe fa'afefea ona fa'atumauina fa'amatalaga fou o le vevela e ala i fefa'ataua'iga fa'alaua'itele ma tagata tumaoti.
E mafai ona i ai le tele o faʻataʻitaʻiga faʻataʻitaʻiga ma, e pei ona e vaʻaia, e le faigata lava.