Kutuma Miamala Kwa Kutumia Web3
Huu ni mwongozo rafiki kwa wanaoanza kuhusu kutuma miamala ya Ethereum kwa kutumia Web3. Kuna hatua tatu kuu ili kutuma muamala kwenye mnyororo wa vitalu wa Ethereum: kuunda, kusaini, na kutangaza. Tutapitia zote tatu, kwa matumaini ya kujibu maswali yoyote ambayo unaweza kuwa nayo! Katika mafunzo haya, tutatumia Alchemy (opens in a new tab) kutuma miamala yetu kwenye mnyororo wa Ethereum. Unaweza kuunda akaunti ya bure ya Alchemy hapa (opens in a new tab).
KUMBUKA: Mwongozo huu ni kwa ajili ya kusaini miamala yako kwenye sehemu ya nyuma (backend) ya programu yako. Ikiwa unataka kujumuisha kusaini miamala yako kwenye sehemu ya mbele (frontend), angalia kujumuisha Web3 na mtoa huduma wa kivinjari (opens in a new tab).
Mambo ya Msingi
Kama watengenezaji wengi wa mnyororo wa vitalu wanapoanza kwa mara ya kwanza, unaweza kuwa umefanya utafiti kuhusu jinsi ya kutuma muamala (kitu ambacho kinapaswa kuwa rahisi sana) na kukutana na miongozo mingi, kila mmoja ukisema mambo tofauti na kukuacha ukiwa umelemewa na kuchanganyikiwa kidogo. Ikiwa uko katika hali hiyo, usijali; sote tulikuwa hapo wakati fulani! Kwa hivyo, kabla hatujaanza, hebu tuweke mambo machache sawa:
1. Alchemy haihifadhi funguo zako za siri
- Hii inamaanisha kuwa Alchemy haiwezi kusaini na kutuma miamala kwa niaba yako. Sababu ya hii ni kwa madhumuni ya usalama. Alchemy haitakuuliza kamwe kushiriki ufunguo wako wa siri, na hupaswi kamwe kushiriki ufunguo wako wa siri na nodi inayopangishwa (au mtu yeyote kwa jambo hilo).
- Unaweza kusoma kutoka kwenye mnyororo wa vitalu kwa kutumia API kuu ya Alchemy, lakini ili kuandika kwake utahitaji kutumia kitu kingine kusaini miamala yako kabla ya kuituma kupitia Alchemy (hii ni sawa kwa huduma yoyote nyingine ya nodi).
2. "Signer" (msaini) ni nini?
- Wasaini (signers) watasaini miamala kwa ajili yako kwa kutumia ufunguo wako wa siri. Katika mafunzo haya tutatumia Web3 ya Alchemy (opens in a new tab) kusaini muamala wetu, lakini unaweza pia kutumia maktaba nyingine yoyote ya Web3.
- Kwenye sehemu ya mbele (frontend), mfano mzuri wa msaini ungekuwa MetaMask (opens in a new tab), ambayo itasaini na kutuma miamala kwa niaba yako.
3. Kwa nini ninahitaji kusaini miamala yangu?
- Kila mtumiaji anayetaka kutuma muamala kwenye mtandao wa Ethereum lazima asaini muamala (kwa kutumia ufunguo wao wa siri), ili kuthibitisha kuwa asili ya muamala ni yule anayedai kuwa.
- Ni muhimu sana kulinda ufunguo huu wa siri, kwani kuwa na ufikiaji wake kunatoa udhibiti kamili juu ya akaunti yako ya Ethereum, kukurusu wewe (au mtu yeyote aliye na ufikiaji) kufanya miamala kwa niaba yako.
4. Ninalindaje ufunguo wangu wa siri?
- Kuna njia nyingi za kulinda ufunguo wako wa siri na kuutumia kutuma miamala. Katika mafunzo haya tutatumia faili la
.env. Hata hivyo, unaweza pia kutumia mtoa huduma tofauti anayehifadhi funguo za siri, kutumia faili la hifadhi ya funguo, au chaguzi nyingine.
5. Kuna tofauti gani kati ya eth_sendTransaction na eth_sendRawTransaction?
eth_sendTransaction na eth_sendRawTransaction zote ni kazi za API za Ethereum ambazo hutangaza muamala kwenye mtandao wa Ethereum ili uongezwe kwenye kitalu cha baadaye. Zinatofautiana katika jinsi zinavyoshughulikia kusaini kwa miamala.
eth_sendTransaction(opens in a new tab) inatumika kutuma miamala ambayo haijasainiwa, ambayo inamaanisha nodi unayotuma kwake lazima isimamie ufunguo wako wa siri ili iweze kusaini muamala kabla ya kuutangaza kwenye mnyororo. Kwa kuwa Alchemy haishikilii funguo za siri za mtumiaji, hawaungi mkono njia hii.eth_sendRawTransaction(opens in a new tab) inatumika kutangaza miamala ambayo tayari imesainiwa. Hii inamaanisha lazima kwanza utumiesignTransaction(tx, private_key)(opens in a new tab), kisha upitishe matokeo kwenyeeth_sendRawTransaction.
Unapotumia Web3, eth_sendRawTransaction inafikiwa kwa kuita kazi ya web3.eth.sendSignedTransaction (opens in a new tab).
Hiki ndicho tutakachotumia katika mafunzo haya.
6. Maktaba ya Web3 ni nini?
- Web3.js ni maktaba ya kanga (wrapper) inayozunguka miito ya kawaida ya JSON-RPC ambayo ni ya kawaida sana kutumia katika uundaji wa Ethereum.
- Kuna maktaba nyingi za Web3 kwa lugha tofauti. Katika mafunzo haya tutatumia Web3 ya Alchemy (opens in a new tab) ambayo imeandikwa kwa JavaScript. Unaweza kuangalia chaguzi nyingine hapa kama Ethers.js (opens in a new tab).
Sawa, sasa kwa kuwa tumejibu baadhi ya maswali haya, hebu tuendelee na mafunzo. Jisikie huru kuuliza maswali wakati wowote kwenye Discord (opens in a new tab) ya Alchemy!
7. Jinsi ya kutuma miamala salama, iliyoboreshwa kwa gesi, na ya siri?
- Alchemy ina seti ya rasilimali za miamala (opens in a new tab). Unaweza kutumia hizi kutuma miamala, kuiga miamala kabla haijatokea, kutuma miamala ya siri, na kutuma miamala iliyoboreshwa kwa gesi
- Unaweza pia kutumia webhooks za Alchemy (opens in a new tab) ili kuarifiwa wakati muamala wako unapotolewa kwenye mempool na kuongezwa kwenye mnyororo
KUMBUKA: Mwongozo huu unahitaji akaunti ya Alchemy, anwani ya Ethereum au mkoba wa MetaMask, Node.js, na npm iliyosakinishwa. Ikiwa sivyo, fuata hatua hizi:
- Unda akaunti ya bure ya Alchemy (opens in a new tab)
- Unda akaunti ya MetaMask (opens in a new tab) (au pata anwani ya Ethereum)
- Sakinisha Node.js na npm (opens in a new tab)
Hatua za Kutuma Muamala Wako
1. Unda programu ya Alchemy kwenye mtandao wa majaribio wa Sepolia
Nenda kwenye Dashibodi yako ya Alchemy (opens in a new tab) na uunde programu mpya, ukichagua Sepolia (au mtandao wa majaribio mwingine wowote) kwa mtandao wako.
2. Omba ETH kutoka kwenye bomba la Sepolia
Fuata maagizo kwenye bomba la Sepolia la Alchemy (opens in a new tab) ili kupokea ETH. Hakikisha unajumuisha anwani yako ya Ethereum ya Sepolia (kutoka MetaMask) na sio mtandao mwingine. Baada ya kufuata maagizo, hakikisha mara mbili kwamba umepokea ETH kwenye mkoba wako.
3. Unda saraka mpya ya mradi na cd ndani yake
Unda saraka mpya ya mradi kutoka kwenye mstari wa amri (terminal kwa macs) na uende ndani yake:
mkdir sendtx-example
cd sendtx-example
4. Sakinisha Web3 ya Alchemy (au maktaba yoyote ya Web3)
Endesha amri ifuatayo katika saraka yako ya mradi ili kusakinisha Web3 ya Alchemy (opens in a new tab):
Kumbuka, ikiwa ungependa kutumia maktaba ya Ethers.js, fuata maagizo hapa (opens in a new tab).
npm install @alch/alchemy-web3
5. Sakinisha dotenv
Tutatumia faili la .env kuhifadhi kwa usalama ufunguo wetu wa API na ufunguo wa siri.
npm install dotenv --save
6. Unda faili la .env
Unda faili la .env katika saraka yako ya mradi na uongeze yafuatayo (ukibadilisha "your-api-url" na "your-private-key")
- Ili kupata URL yako ya API ya Alchemy, nenda kwenye ukurasa wa maelezo ya programu ya programu uliyounda hivi punde kwenye dashibodi yako, bofya "Tazama Ufunguo" kwenye kona ya juu kulia, na uchukue URL ya HTTP.
- Ili kupata ufunguo wako wa siri kwa kutumia MetaMask, angalia mwongozo (opens in a new tab) huu.
API_URL = "your-api-url"
PRIVATE_KEY = "your-private-key"
.env! Tafadhali hakikisha kamwe hushiriki au kufichua faili lako la .env kwa mtu yeyote, kwani unaweka siri zako hatarini kwa kufanya hivyo. Ikiwa unatumia udhibiti wa toleo, ongeza .env yako kwenye faili la gitignore.7. Unda faili la sendTx.js
Vizuri, sasa kwa kuwa tuna data zetu nyeti zikilindwa katika faili la .env, hebu tuanze kuandika kodi. Kwa mfano wetu wa kutuma muamala, tutakuwa tunatuma ETH kurudi kwenye bomba la Sepolia.
Unda faili la sendTx.js, ambapo tutasanidi na kutuma mfano wetu wa muamala, na uongeze mistari ifuatayo ya kodi ndani yake:
async function main() {
require('dotenv').config();
const { API_URL, PRIVATE_KEY } = process.env;
const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
const web3 = createAlchemyWeb3(API_URL);
const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: badilisha anwani hii na anwani yako ya umma
const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonsi inaanza kuhesabu kutoka 0
const transaction = {
'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // anwani ya bomba ya kurudisha eth
'value': 1000000000000000000, // 1 ETH
'gas': 30000,
'nonce': nonce,
// uwanja wa data wa hiari wa kutuma ujumbe au kutekeleza mkataba mahiri
};
const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
if (!error) {
console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
} else {
console.log("❗Something went wrong while submitting your transaction:", error)
}
});
}
main();
Hakikisha unabadilisha anwani kwenye mstari wa 6 na anwani yako ya umma.
Sasa, kabla hatujaanza kuendesha kodi hii, hebu tuzungumzie baadhi ya vipengele hapa.
nonce: Uainishaji wa nonsi unatumika kufuatilia idadi ya miamala iliyotumwa kutoka kwenye anwani yako. Tunahitaji hii kwa madhumuni ya usalama na kuzuia mashambulizi ya kurudia (replay attacks). Ili kupata idadi ya miamala iliyotumwa kutoka kwenye anwani yako tunatumia getTransactionCount (opens in a new tab).transaction: Kitu cha muamala kina vipengele vichache tunavyohitaji kubainishato: Hii ni anwani tunayotaka kutuma ETH. Katika kesi hii, tunatuma ETH kurudi kwenye bomba la Sepolia (opens in a new tab) tuliloomba hapo awali.value: Hiki ni kiasi tunachotaka kutuma, kilichobainishwa katika Wei ambapo 10^18 Wei = 1 ETHgas: Kuna njia nyingi za kuamua kiasi sahihi cha gesi cha kujumuisha kwenye muamala wako. Alchemy inasaidia webhooks (opens in a new tab) zinazoweza kukuarifu kuhusu shughuli za mnyororoni. Kwa miamala ya Mtandao Mkuu, ni mazoezi mazuri kuangalia hali ya sasa ya gesi ili kuamua kiasi sahihi cha gesi cha kujumuisha. 21000 ni kiasi cha chini cha gesi ambacho operesheni kwenye Ethereum itatumia, kwa hivyo ili kuhakikisha muamala wetu utatekelezwa tunaweka 30000 hapa.nonce: angalia ufafanuzi wa nonsi hapo juu. Nonsi inaanza kuhesabu kutoka sifuri.- [HIARI] data: Inatumika kwa kutuma maelezo ya ziada pamoja na hamisho lako, au kuita mkataba mahiri, haihitajiki kwa uhamisho wa salio, angalia dokezo hapa chini.
signedTx: Ili kusaini kitu chetu cha muamala tutatumia mbinu yasignTransactionnaPRIVATE_KEYyetusendSignedTransaction: Mara tu tunapokuwa na muamala uliosainiwa, tunaweza kuutuma ili ujumuishwe kwenye kitalu kinachofuata kwa kutumiasendSignedTransaction
Dokezo kuhusu data Kuna aina mbili kuu za miamala inayoweza kutumwa katika Ethereum.
- Hamisho la salio: Tuma ETH kutoka anwani moja hadi nyingine. Hakuna uwanja wa data unaohitajika, hata hivyo, ikiwa ungependa kutuma maelezo ya ziada pamoja na muamala wako, unaweza kujumuisha maelezo hayo katika umbizo la HEX kwenye uwanja huu.
- Kwa mfano, tuseme tulitaka kuandika heshi ya hati ya IPFS kwenye mnyororo wa Ethereum ili kuipa muhuri wa muda usiobadilika. Uwanja wetu wa data unapaswa kuonekana kama data:
web3.utils.toHex(‘IPFS hash‘). Na sasa mtu yeyote anaweza kuuliza mnyororo na kuona ni lini hati hiyo iliongezwa.
- Kwa mfano, tuseme tulitaka kuandika heshi ya hati ya IPFS kwenye mnyororo wa Ethereum ili kuipa muhuri wa muda usiobadilika. Uwanja wetu wa data unapaswa kuonekana kama data:
- Muamala wa mkataba mahiri: Tekeleza kodi fulani ya mkataba mahiri mnyororoni. Katika kesi hii, uwanja wa data unapaswa kuwa na kazi mahiri unayotaka kutekeleza, pamoja na vigezo vyovyote.
- Kwa mfano wa vitendo, angalia mafunzo ya Mkataba Mahiri wa Hello World.
8. Endesha kodi kwa kutumia node sendTx.js
Nenda nyuma kwenye terminal yako au mstari wa amri na uendeshe:
node sendTx.js
9. Angalia muamala wako kwenye Mempool
Fungua ukurasa wa Mempool (opens in a new tab) kwenye dashibodi yako ya Alchemy na uchuje kwa programu uliyounda ili kupata muamala wako. Hapa ndipo tunapoweza kutazama muamala wetu ukibadilika kutoka hali ya kusubiri hadi hali ya kuchimbwa (ikiwa umefanikiwa) au hali ya kuachwa ikiwa haujafanikiwa. Hakikisha unaiweka kwenye "Zote" (All) ili unase miamala "iliyochimbwa" (mined), "inayosubiri" (pending), na "iliyoachwa" (dropped). Unaweza pia kutafuta muamala wako kwa kuangalia miamala iliyotumwa kwenye anwani 0x31b98d14007bdee637298086988a0bbd31184523 .
Ili kutazama maelezo ya muamala wako mara tu unapoupata, chagua heshi ya muamala (tx hash), ambayo inapaswa kukupeleka kwenye mwonekano unaoonekana hivi:
Kutoka hapo unaweza kutazama muamala wako kwenye Etherscan kwa kubofya ikoni iliyozungushiwa duara jekundu!
Yippieeee! Umetuma muamala wako wa kwanza wa Ethereum kwa kutumia Alchemy 🎉
Kwa maoni na mapendekezo kuhusu mwongozo huu, tafadhali mtumie ujumbe Elan kwenye Discord (opens in a new tab) ya Alchemy!
Ilichapishwa awali na Alchemy.
